Loco Translate - Version 2.5.1

Version Description

  • Support for new Yandex translate API
  • Support for DeepL formality parameter
  • Removed literal "1" and "one" instances from singular strings
  • Buffering compiled JSON to support strings from multiple sources
  • Added loco_compile_single_json filter for specifying custom JSON
  • Added loco_extracted_template hook for adding custom strings
  • Sync no longer removes the editor's current text filter
  • Bumped WordPress version to 5.6.2
Download this release

Release Info

Developer timwhitlock
Plugin Icon 128x128 Loco Translate
Version 2.5.1
Comparing to
See all releases

Code changes from version 2.5.0 to 2.5.1

Files changed (50) hide show
  1. languages/loco-translate.pot +131 -129
  2. lib/compiled/gettext.php +5 -5
  3. lib/data/gp.php +5 -0
  4. lib/data/languages.php +1 -1
  5. lib/data/locales.php +1 -1
  6. loco.php +2 -2
  7. pub/css/admin.css +1 -1
  8. pub/css/editor.css +1 -1
  9. pub/css/podiff.css +1 -1
  10. pub/css/poview.css +1 -1
  11. pub/css/skins/blue.css +1 -1
  12. pub/css/skins/coffee.css +1 -1
  13. pub/css/skins/ectoplasm.css +1 -1
  14. pub/css/skins/light.css +1 -1
  15. pub/css/skins/midnight.css +1 -1
  16. pub/css/skins/modern.css +1 -1
  17. pub/css/skins/ocean.css +1 -1
  18. pub/css/skins/sunrise.css +1 -1
  19. pub/js/min/admin.js +133 -133
  20. pub/js/min/editor.js +1 -1
  21. readme.txt +13 -3
  22. src/Locale.php +3 -3
  23. src/admin/bundle/SetupController.php +1 -1
  24. src/admin/file/DeleteController.php +1 -1
  25. src/admin/file/MoveController.php +2 -2
  26. src/admin/init/InitPoController.php +11 -10
  27. src/ajax/ApisController.php +18 -3
  28. src/ajax/MsginitController.php +22 -5
  29. src/ajax/SyncController.php +10 -47
  30. src/api/WordPressTranslations.php +6 -4
  31. src/api/YandexClient.php +96 -0
  32. src/cli/Commands.php +1 -2
  33. src/cli/SyncCommand.php +33 -72
  34. src/data/CompiledData.php +2 -0
  35. src/data/Permissions.php +0 -2
  36. src/fs/File.php +25 -2
  37. src/fs/LocaleFile.php +25 -8
  38. src/fs/Siblings.php +8 -1
  39. src/gettext/Compiler.php +128 -42
  40. src/gettext/Extraction.php +21 -0
  41. src/gettext/Matcher.php +95 -0
  42. src/gettext/Metadata.php +9 -5
  43. src/gettext/String.php +110 -0
  44. src/gettext/WordCount.php +1 -4
  45. src/js/Strings.php +6 -6
  46. src/package/Debugger.php +1 -1
  47. tpl/admin/config/apis.php +1 -1
  48. tpl/admin/file/info-pot.php +4 -2
  49. tpl/admin/init/init-pot.php +2 -2
  50. tpl/admin/list/locales.php +0 -11
languages/loco-translate.pot CHANGED
@@ -1,9 +1,9 @@
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,7 +13,7 @@ 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.5.0; wp-5.6\n"
17
  "X-Domain: loco-translate"
18
 
19
  #: src/fs/FileWriter.php:214
@@ -25,6 +25,42 @@ msgstr ""
25
  msgid "\"Hello Dolly\" is part of the WordPress core"
26
  msgstr ""
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  #: src/api/WordPressFileSystem.php:87
29
  #, php-format
30
  msgid "%s already exists in this folder"
@@ -36,66 +72,56 @@ msgstr ""
36
  msgid "%s characters will be sent for translation."
37
  msgstr ""
38
 
39
- #. Where %s is the type of file, e.g. "po"
40
- #: tpl/admin/file/info.php:24
41
- #, 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
54
- msgid "%s fuzzy"
55
- msgstr ""
56
 
57
- #. Where %s is the size of a file
58
- #: tpl/admin/init/init-pot.php:16
59
  #, php-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"
67
- msgid_plural "%s strings translated via %s"
68
  msgstr[0] ""
69
  msgstr[1] ""
70
 
71
- #: src/js/Strings.php:61
72
- #, javascript-format
73
- msgid "%s string updated"
74
- msgid_plural "%s strings updated"
75
  msgstr[0] ""
76
  msgstr[1] ""
77
 
78
- #: src/js/Strings.php:43
79
- #, javascript-format
80
- msgid "%s unique source strings."
 
81
  msgstr ""
82
 
83
- #. Shows number of untranslated strings at top of editor
84
- #: src/js/Strings.php:95 src/gettext/Metadata.php:208
85
- #, javascript-format
86
- msgid "%s untranslated"
 
 
 
 
 
 
 
87
  msgstr ""
88
 
89
- #. Shows percentage translated at top of editor
90
- #: src/js/Strings.php:87 src/gettext/Metadata.php:203
91
  #, javascript-format
92
- msgid "%s%% translated"
93
  msgstr ""
94
 
95
  #. Summary of new strings after running in-editor Sync
96
  #: src/js/Strings.php:25
97
  #, javascript-format
98
- msgid "1 new string added"
99
  msgid_plural "%s new strings added"
100
  msgstr[0] ""
101
  msgstr[1] ""
@@ -103,22 +129,30 @@ msgstr[1] ""
103
  #. Summary of existing strings that no longer exist after running in-editor Sync
104
  #: src/js/Strings.php:29
105
  #, javascript-format
106
- msgid "1 obsolete string removed"
107
  msgid_plural "%s obsolete strings removed"
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"
115
  msgstr[0] ""
116
  msgstr[1] ""
117
 
118
  #. Shows total string count at top of editor
119
- #: src/js/Strings.php:83 src/gettext/Metadata.php:193
 
120
  #, javascript-format
121
- msgid "1 string"
122
  msgid_plural "%s strings"
123
  msgstr[0] ""
124
  msgstr[1] ""
@@ -126,18 +160,42 @@ msgstr[1] ""
126
  #. Summary of existing translations where the source text has changed slightly
127
  #: src/js/Strings.php:33
128
  #, javascript-format
129
- msgid "1 string marked Fuzzy"
130
  msgid_plural "%s strings marked Fuzzy"
131
  msgstr[0] ""
132
  msgstr[1] ""
133
 
134
- #: tpl/admin/file/info-pot.php:29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  #, php-format
136
- msgid "1 word"
137
  msgid_plural "%s words"
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 ""
@@ -231,7 +289,7 @@ msgid ""
231
  "file?"
232
  msgstr ""
233
 
234
- #: src/admin/init/InitPoController.php:241
235
  msgid "Assign template"
236
  msgstr ""
237
 
@@ -388,7 +446,7 @@ msgstr ""
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 ""
@@ -568,7 +626,7 @@ msgstr ""
568
 
569
  #. Label for the window pane holding the original English text
570
  #. List heading showing preview of English text for each item
571
- #: src/js/Strings.php:123 tpl/admin/file/info-pot.php:28
572
  msgctxt "Editor"
573
  msgid "Source text"
574
  msgstr ""
@@ -651,11 +709,11 @@ msgstr ""
651
  msgid "Exclude"
652
  msgstr ""
653
 
654
- #. Where %2$s is the size of a file
655
  #: tpl/admin/init/init-pot.php:24
656
  #, php-format
657
- msgid "Excludes one file over %2$s"
658
- msgid_plural "Excludes %s files over %2$s"
659
  msgstr[0] ""
660
  msgstr[1] ""
661
 
@@ -775,18 +833,11 @@ msgstr ""
775
  msgid "File modification is disallowed by your WordPress config"
776
  msgstr ""
777
 
778
- #: tpl/admin/file/info-mo.php:21 tpl/admin/file/info-pot.php:22
779
  #: tpl/admin/file/info-po.php:26
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"
787
- msgstr[0] ""
788
- msgstr[1] ""
789
-
790
  #: tpl/admin/errors/file-missing.php:11
791
  msgid "File not found"
792
  msgstr ""
@@ -799,7 +850,7 @@ msgstr ""
799
  msgid "File restored"
800
  msgstr ""
801
 
802
- #: tpl/admin/file/info-mo.php:18 tpl/admin/file/info-pot.php:19
803
  #: tpl/admin/file/info-po.php:23
804
  msgid "File size"
805
  msgstr ""
@@ -939,12 +990,12 @@ msgstr ""
939
  msgid "Info and tutorials"
940
  msgstr ""
941
 
942
- #: src/admin/init/InitPoController.php:107
943
  #, php-format
944
  msgid "Initializing new translations in \"%s\""
945
  msgstr ""
946
 
947
- #: src/admin/init/InitPoController.php:111
948
  msgid "Initializing new translations in unknown set"
949
  msgstr ""
950
 
@@ -961,7 +1012,7 @@ msgstr ""
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 ""
@@ -1003,7 +1054,7 @@ msgstr ""
1003
  msgid "largest is %s"
1004
  msgstr ""
1005
 
1006
- #: tpl/admin/file/info-pot.php:25
1007
  msgid "Last extracted"
1008
  msgstr ""
1009
 
@@ -1144,7 +1195,7 @@ msgid "Need a human?"
1144
  msgstr ""
1145
 
1146
  #: src/admin/init/InitPoController.php:16
1147
- #: src/admin/init/InitPoController.php:114
1148
  #: src/admin/file/BaseController.php:127 src/admin/bundle/ViewController.php:98
1149
  msgid "New language"
1150
  msgstr ""
@@ -1236,55 +1287,6 @@ msgstr ""
1236
  msgid "OK, Load this config"
1237
  msgstr ""
1238
 
1239
- #: src/admin/file/DeleteController.php:99
1240
- #, php-format
1241
- msgid "One dependent file will also be deleted"
1242
- msgid_plural "%u dependent files will also be deleted"
1243
- msgstr[0] ""
1244
- msgstr[1] ""
1245
-
1246
- #: src/admin/bundle/SetupController.php:114
1247
- #, php-format
1248
- msgid "One file can't be matched to a known set of strings"
1249
- msgid_plural "%s files can't be matched to a known set of strings"
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"
1257
- msgstr[0] ""
1258
- msgstr[1] ""
1259
-
1260
- #. Where %2$s is the maximum size of a file that will be included and %3$s is the largest encountered
1261
- #: src/ajax/SyncController.php:86
1262
- #, php-format
1263
- msgid ""
1264
- "One file has been skipped because it's %3$s. (Max is %2$s). Check all "
1265
- "strings are present before saving."
1266
- msgid_plural ""
1267
- "%s files over %2$s have been skipped. (Largest is %3$s). Check all strings "
1268
- "are present before saving."
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"
1285
- msgstr[0] ""
1286
- msgstr[1] ""
1287
-
1288
  #: tpl/admin/file/info-po.php:70
1289
  msgid "Out of sync with template"
1290
  msgstr ""
@@ -1413,15 +1415,15 @@ 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
 
@@ -1591,7 +1593,7 @@ msgstr ""
1591
  msgid "Skip PHP files larger than:"
1592
  msgstr ""
1593
 
1594
- #: src/admin/init/InitPoController.php:231
1595
  msgid "Skip template"
1596
  msgstr ""
1597
 
@@ -1652,7 +1654,7 @@ msgid "System diagnostics"
1652
  msgstr ""
1653
 
1654
  #: tpl/admin/file/view-pot.php:9 tpl/admin/file/edit-pot.php:10
1655
- #: tpl/admin/file/info-pot.php:16 tpl/admin/bundle/inc-po-table.php:42
1656
  #: tpl/admin/bundle/conf.php:65
1657
  msgid "Template file"
1658
  msgstr ""
@@ -1881,7 +1883,7 @@ msgstr ""
1881
 
1882
  #: src/js/Strings.php:54
1883
  #, javascript-format
1884
- msgid "Translation job aborted with one string remaining"
1885
  msgid_plural "Translation job aborted with %s strings remaining"
1886
  msgstr[0] ""
1887
  msgstr[1] ""
@@ -1974,7 +1976,7 @@ msgstr ""
1974
  msgid "User options apply to your WordPress login, across all sites"
1975
  msgstr ""
1976
 
1977
- #: src/data/Permissions.php:157
1978
  msgctxt "User role"
1979
  msgid "Translator"
1980
  msgstr ""
@@ -2030,7 +2032,7 @@ msgstr ""
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
 
1
  #, fuzzy
2
  msgid ""
3
  msgstr ""
4
+ "Project-Id-Version: Loco Translate 2.5.1\n"
5
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/loco-translate/\n"
6
+ "POT-Creation-Date: 2021-03-01 11:19+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.1; wp-5.6.2\n"
17
  "X-Domain: loco-translate"
18
 
19
  #: src/fs/FileWriter.php:214
25
  msgid "\"Hello Dolly\" is part of the WordPress core"
26
  msgstr ""
27
 
28
+ #. (1) Number of files (2) Maximum size of file that will be included (3) Size of the largest encountered
29
+ #: src/ajax/SyncController.php:86
30
+ #, php-format
31
+ msgid ""
32
+ "%1$s file has been skipped because it's %3$s. (Max is %2$s). Check all "
33
+ "strings are present before saving."
34
+ msgid_plural ""
35
+ "%1$s files over %2$s have been skipped. (Largest is %3$s). Check all strings "
36
+ "are present before saving."
37
+ msgstr[0] ""
38
+ msgstr[1] ""
39
+
40
+ #. 1: Number of strings; 2: Text Domain; e.g. 100 strings extracted from source code for "loco-translate"
41
+ #: src/package/Debugger.php:187
42
+ #, php-format
43
+ msgid "%1$s string extracted from source code for \"%2$s\""
44
+ msgid_plural "%1$s strings extracted from source code for \"%2$s\""
45
+ msgstr[0] ""
46
+ msgstr[1] ""
47
+
48
+ #. 1: Number of strings; 2: Name of POT file; e.g. "100 strings found in file.pot"
49
+ #: src/admin/init/InitPoController.php:198
50
+ #, php-format
51
+ msgid "%1$s string found in %2$s"
52
+ msgid_plural "%1$s strings found in %2$s"
53
+ msgstr[0] ""
54
+ msgstr[1] ""
55
+
56
+ #. 1: Number of strings; 2: Service provider; e.g. "50 strings translated via Google Translate"
57
+ #: src/js/Strings.php:58
58
+ #, javascript-format
59
+ msgid "%1$s string translated via %2$s"
60
+ msgid_plural "%1$s strings translated via %2$s"
61
+ msgstr[0] ""
62
+ msgstr[1] ""
63
+
64
  #: src/api/WordPressFileSystem.php:87
65
  #, php-format
66
  msgid "%s already exists in this folder"
72
  msgid "%s characters will be sent for translation."
73
  msgstr ""
74
 
75
+ #: src/admin/file/DeleteController.php:99
 
 
 
 
 
 
 
76
  #, php-format
77
+ msgid "%s dependent file will also be deleted"
78
+ msgid_plural "%s dependent files will also be deleted"
79
+ msgstr[0] ""
80
+ msgstr[1] ""
 
 
 
 
81
 
82
+ #: src/admin/bundle/SetupController.php:114
 
83
  #, php-format
84
+ msgid "%s file can't be matched to a known set of strings"
85
+ msgid_plural "%s files can't be matched to a known set of strings"
 
 
 
 
 
 
86
  msgstr[0] ""
87
  msgstr[1] ""
88
 
89
+ #: src/admin/file/MoveController.php:89
90
+ #, php-format
91
+ msgid "%s file could not be moved"
92
+ msgid_plural "%s files could not be moved"
93
  msgstr[0] ""
94
  msgstr[1] ""
95
 
96
+ #. Where %s is the type of file, e.g. "po"
97
+ #: tpl/admin/file/info.php:24
98
+ #, php-format
99
+ msgid "%s file is writeable"
100
  msgstr ""
101
 
102
+ #: src/admin/file/MoveController.php:85
103
+ #, php-format
104
+ msgid "%s file moved"
105
+ msgid_plural "%s files moved"
106
+ msgstr[0] ""
107
+ msgstr[1] ""
108
+
109
+ #. Where %s is either PO or POT
110
+ #: src/gettext/Compiler.php:251
111
+ #, php-format
112
+ msgid "%s file saved"
113
  msgstr ""
114
 
115
+ #. Shows number of fuzzy strings at top of editor
116
+ #: src/js/Strings.php:91 src/gettext/Metadata.php:206
117
  #, javascript-format
118
+ msgid "%s fuzzy"
119
  msgstr ""
120
 
121
  #. Summary of new strings after running in-editor Sync
122
  #: src/js/Strings.php:25
123
  #, javascript-format
124
+ msgid "%s new string added"
125
  msgid_plural "%s new strings added"
126
  msgstr[0] ""
127
  msgstr[1] ""
129
  #. Summary of existing strings that no longer exist after running in-editor Sync
130
  #: src/js/Strings.php:29
131
  #, javascript-format
132
+ msgid "%s obsolete string removed"
133
  msgid_plural "%s obsolete strings removed"
134
  msgstr[0] ""
135
  msgstr[1] ""
136
 
137
+ #. Where %s is the size of a file
138
+ #: tpl/admin/init/init-pot.php:16
139
  #, php-format
140
+ msgid "%s on disk"
141
+ msgstr ""
142
+
143
+ #. Were %s is number of source files that will be scanned
144
+ #: src/admin/init/InitPoController.php:227
145
+ #, php-format
146
+ msgid "%s source file will be scanned for translatable strings"
147
  msgid_plural "%s source files will be scanned for translatable strings"
148
  msgstr[0] ""
149
  msgstr[1] ""
150
 
151
  #. Shows total string count at top of editor
152
+ #. Where %s is any number of strings
153
+ #: src/js/Strings.php:83 src/gettext/Metadata.php:194
154
  #, javascript-format
155
+ msgid "%s string"
156
  msgid_plural "%s strings"
157
  msgstr[0] ""
158
  msgstr[1] ""
160
  #. Summary of existing translations where the source text has changed slightly
161
  #: src/js/Strings.php:33
162
  #, javascript-format
163
+ msgid "%s string marked Fuzzy"
164
  msgid_plural "%s strings marked Fuzzy"
165
  msgstr[0] ""
166
  msgstr[1] ""
167
 
168
+ #: src/js/Strings.php:61
169
+ #, javascript-format
170
+ msgid "%s string updated"
171
+ msgid_plural "%s strings updated"
172
+ msgstr[0] ""
173
+ msgstr[1] ""
174
+
175
+ #: src/js/Strings.php:43
176
+ #, javascript-format
177
+ msgid "%s unique source strings."
178
+ msgstr ""
179
+
180
+ #. Shows number of untranslated strings at top of editor
181
+ #: src/js/Strings.php:95 src/gettext/Metadata.php:209
182
+ #, javascript-format
183
+ msgid "%s untranslated"
184
+ msgstr ""
185
+
186
+ #: tpl/admin/file/info-pot.php:31
187
  #, php-format
188
+ msgid "%s word"
189
  msgid_plural "%s words"
190
  msgstr[0] ""
191
  msgstr[1] ""
192
 
193
+ #. Shows percentage translated at top of editor
194
+ #: src/js/Strings.php:87 src/gettext/Metadata.php:204
195
+ #, javascript-format
196
+ msgid "%s%% translated"
197
+ msgstr ""
198
+
199
  #: tpl/admin/init/init-prompt.php:33 tpl/admin/init/init-pot.php:42
200
  msgid "About templates"
201
  msgstr ""
289
  "file?"
290
  msgstr ""
291
 
292
+ #: src/admin/init/InitPoController.php:243
293
  msgid "Assign template"
294
  msgstr ""
295
 
446
  msgid "Core translations &lsaquo; Loco"
447
  msgstr ""
448
 
449
+ #: src/admin/init/InitPoController.php:217
450
  #: src/admin/bundle/ViewController.php:132 tpl/admin/init/init-pot.php:40
451
  msgid "Create template"
452
  msgstr ""
626
 
627
  #. Label for the window pane holding the original English text
628
  #. List heading showing preview of English text for each item
629
+ #: src/js/Strings.php:123 tpl/admin/file/info-pot.php:30
630
  msgctxt "Editor"
631
  msgid "Source text"
632
  msgstr ""
709
  msgid "Exclude"
710
  msgstr ""
711
 
712
+ #. (1) Number of files excluded (2) the maximum size of file that was included
713
  #: tpl/admin/init/init-pot.php:24
714
  #, php-format
715
+ msgid "Excludes %1$s file over %2$s"
716
+ msgid_plural "Excludes %1$s files over %2$s"
717
  msgstr[0] ""
718
  msgstr[1] ""
719
 
833
  msgid "File modification is disallowed by your WordPress config"
834
  msgstr ""
835
 
836
+ #: tpl/admin/file/info-mo.php:21 tpl/admin/file/info-pot.php:24
837
  #: tpl/admin/file/info-po.php:26
838
  msgid "File modified"
839
  msgstr ""
840
 
 
 
 
 
 
 
 
841
  #: tpl/admin/errors/file-missing.php:11
842
  msgid "File not found"
843
  msgstr ""
850
  msgid "File restored"
851
  msgstr ""
852
 
853
+ #: tpl/admin/file/info-mo.php:18 tpl/admin/file/info-pot.php:21
854
  #: tpl/admin/file/info-po.php:23
855
  msgid "File size"
856
  msgstr ""
990
  msgid "Info and tutorials"
991
  msgstr ""
992
 
993
+ #: src/admin/init/InitPoController.php:108
994
  #, php-format
995
  msgid "Initializing new translations in \"%s\""
996
  msgstr ""
997
 
998
+ #: src/admin/init/InitPoController.php:112
999
  msgid "Initializing new translations in unknown set"
1000
  msgstr ""
1001
 
1012
  msgid "It needs configuring before you can do any translations"
1013
  msgstr ""
1014
 
1015
+ #: src/gettext/Compiler.php:148 src/gettext/Compiler.php:206
1016
  #, php-format
1017
  msgid "JSON compilation failed for %s"
1018
  msgstr ""
1054
  msgid "largest is %s"
1055
  msgstr ""
1056
 
1057
+ #: tpl/admin/file/info-pot.php:27
1058
  msgid "Last extracted"
1059
  msgstr ""
1060
 
1195
  msgstr ""
1196
 
1197
  #: src/admin/init/InitPoController.php:16
1198
+ #: src/admin/init/InitPoController.php:115
1199
  #: src/admin/file/BaseController.php:127 src/admin/bundle/ViewController.php:98
1200
  msgid "New language"
1201
  msgstr ""
1287
  msgid "OK, Load this config"
1288
  msgstr ""
1289
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1290
  #: tpl/admin/file/info-po.php:70
1291
  msgid "Out of sync with template"
1292
  msgstr ""
1415
  msgid "PO file missing"
1416
  msgstr ""
1417
 
1418
+ #: src/gettext/Compiler.php:247
1419
  msgid "PO file saved and MO file compiled"
1420
  msgstr ""
1421
 
1422
+ #: src/gettext/Compiler.php:244
1423
  msgid "PO file saved and MO/JSON files compiled"
1424
  msgstr ""
1425
 
1426
+ #: src/gettext/Compiler.php:107
1427
  msgid "PO file saved, but MO file compilation failed"
1428
  msgstr ""
1429
 
1593
  msgid "Skip PHP files larger than:"
1594
  msgstr ""
1595
 
1596
+ #: src/admin/init/InitPoController.php:233
1597
  msgid "Skip template"
1598
  msgstr ""
1599
 
1654
  msgstr ""
1655
 
1656
  #: tpl/admin/file/view-pot.php:9 tpl/admin/file/edit-pot.php:10
1657
+ #: tpl/admin/file/info-pot.php:18 tpl/admin/bundle/inc-po-table.php:42
1658
  #: tpl/admin/bundle/conf.php:65
1659
  msgid "Template file"
1660
  msgstr ""
1883
 
1884
  #: src/js/Strings.php:54
1885
  #, javascript-format
1886
+ msgid "Translation job aborted with %s string remaining"
1887
  msgid_plural "Translation job aborted with %s strings remaining"
1888
  msgstr[0] ""
1889
  msgstr[1] ""
1976
  msgid "User options apply to your WordPress login, across all sites"
1977
  msgstr ""
1978
 
1979
+ #: src/data/Permissions.php:155
1980
  msgctxt "User role"
1981
  msgid "Translator"
1982
  msgstr ""
2032
  msgid "Welcome to Loco Translate"
2033
  msgstr ""
2034
 
2035
+ #: src/admin/init/InitPoController.php:321 tpl/admin/file/info.php:113
2036
  msgid "What's this?"
2037
  msgstr ""
2038
 
lib/compiled/gettext.php CHANGED
@@ -16,7 +16,7 @@ class LocoMoParser extends LocoGettextParser { private $bin; private $be; privat
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 ); }
@@ -26,8 +26,8 @@ function loco_resolve_surrogates( $s ){ return preg_replace_callback('/\\xED([\
26
  function _loco_resolve_surrogates( array $r ){ return loco_utf8_chr ( ( ( ( ( 832 | ( ord($r[1]) & 0x3F ) ) << 6 ) | ( ord($r[2]) & 0x3F ) ) - 0xD800 ) * 0x400 + ( ( ( ( 832 | ( ord($r[3]) & 0x3F ) ) << 6 ) | ( ord($r[4]) & 0x3F ) ) - 0xDC00 ) + 0x10000 ); }
27
  class LocoEscapeParser { private $map; private $grep; public function __construct( array $map = array() ){ $this->map = $map; $rules = array('\\\\'); if( $map ){ $rules[] = '['.implode(array_keys($map)).']'; } if( ! isset($map['U']) ) { $rules[] = 'U[0-9A-Fa-f]{5,8}'; } if( ! isset($map['u']) ) { $rules[] = 'u(?:\\{[0-9A-Fa-f]+\\}|[0-9A-Fa-f]{1,4})(?:\\\\u(?:\\{[0-9A-Fa-f]+\\}|[0-9A-Fa-f]{1,4}))*'; } $this->grep = '/\\\\('.implode('|',$rules).')/'; } public function unescape( $s ){ if( '' !== $s ) { return $this->stripSlashes( preg_replace_callback($this->grep, array($this, 'unescapeMatch'), $s) ); } return ''; } public function unescapeMatch( array $r ){ $s = $r[0]; $c = $s[1]; if( isset($this->map[$c]) ){ return $this->map[$c]; } if( 'u' === $c ){ $str = ''; $surrogates = false; foreach( explode('\\u',$s) as $i => $h ){ if( '' !== $h ){ $h = ltrim( trim($h,'{}'),'0'); $u = intval($h,16); $str.= loco_utf8_chr($u); if( ! $surrogates ){ $surrogates = $u >= 0xD800 && $u <= 0xDBFF; } } } if( $surrogates ){ $str = loco_resolve_surrogates($str); } return $str; } if( 'U' === $c ){ return loco_utf8_chr( intval(substr($s,2),16) ); } if( 'x' === $c ){ return chr( intval(substr($s,2),16) ); } if( ctype_digit($c) ){ return chr( intval(substr($s,1),8) ); } return $s; } protected function stripSlashes( $s ){ return stripcslashes($s); } }
28
  class LocoJsTokens extends LocoTokenizer { const T_KWORD = 1; const T_REGEX = 2; private static $lex; protected static $words = array( 'true' => 1, 'false' => 1, 'null' => 1, 'break' => T_BREAK, 'else' => T_ELSE, 'new' => T_NEW, 'var' => 1, 'case' => T_CASE, 'finally' => T_FINALLY, 'return' => T_RETURN, 'void' => 1, 'catch' => T_CATCH, 'for' => T_FOR, 'switch' => T_SWITCH, 'while' => T_WHILE, 'continue' => T_CONTINUE, 'function' => T_FUNCTION, 'this' => T_STRING, 'with' => 1, 'default' => T_DEFAULT, 'if' => T_IF, 'throw' => T_THROW, 'delete' => 1, 'in' => 1, 'try' => T_TRY, 'do' => T_DO, 'instanceof' => 1, 'typeof' => 1, ); public static function decapse( $encapsed ){ $s = substr($encapsed,1,-1); $l = self::$lex; if( is_null($l) ){ $l = new LocoEscapeParser( array( 'U' => 'U', 'a' => 'a', ) ); self::$lex = $l; } return $l->unescape($s); } public function __construct( $src = '' ){ $this->define('/^(?:\\\\u[0-9A-F]{4,4}|[$_\\pL\\p{Nl}])(?:\\\\u[0-9A-F]{4}|[$_\\pL\\pN\\p{Mn}\\p{Mc}\\p{Pc}])*/ui', array($this,'matchWord') ); $this->define('/^\\s+/u', T_WHITESPACE ); $this->define('!^//.*!', T_COMMENT ); $this->define('!^/\\*.*\\*/!Us', array($this,'matchComment') ); $this->define('/^"(?:\\\\.|[^\\r\\n\\p{Zl}\\p{Zp}"\\\\])*"/u', T_CONSTANT_ENCAPSED_STRING ); $this->define('/^\'(?:\\\\.|[^\\r\\n\\p{Zl}\\p{Zp}\'\\\\])*\'/u', T_CONSTANT_ENCAPSED_STRING ); $this->define('/^[-+;,<>.=:|&^!?*%~(){}[\\]]/'); parent::__construct($src); } public function matchWord( $s ){ if( array_key_exists($s,self::$words) ){ return self::$words[$s]; } return T_STRING; } public function matchComment( $s ){ if( '/**' === substr($s,0,3) ){ return T_DOC_COMMENT; } return T_COMMENT; } }
29
- class LocoExtracted implements Countable { private $exp = array(); private $reg = array(); private $dom = array(); private $dflt = ''; public function extractSource( LocoExtractor $ext, $src, $fileref = '' ){ $ext->extract( $this, $ext->tokenize($src), $fileref ); return $this; } public function export(){ return $this->exp; } public function count(){ return count( $this->exp ); } public function getDomainCounts(){ return $this->dom; } public function setDomain( $default ){ $this->dflt = (string) $default; return $this; } public function getDomain(){ return $this->dflt; } public function pushMeta( $source, $notes, $domain = null ){ if( ! $domain || '*' === $domain ){ $domain = $this->dflt; } $entry = array( 'id' => '', 'source' => $source, 'target' => '', 'notes' => $notes, ); if( $domain ){ $entry['domain'] = $domain; $key = $source."\1".$domain; } else { $key = $source; } return $this->pushMsgid( $key, $entry, $domain ); } public function pushMsgid( $key, array $entry, $domain ){ if( isset($this->reg[$key]) ){ $index = $this->reg[$key]; $clash = $this->exp[$index]; if( $value = $this->mergeField( $clash, $entry, 'refs', ' ') ){ $this->exp[$index]['refs'] = $value; } if( $value = $this->mergeField( $clash, $entry, 'notes', "\n") ){ $this->exp[$index]['notes'] = $value; } } else { $index = count($this->exp); $this->reg[$key] = $index; $this->exp[$index] = $entry; if( isset($this->dom[$domain]) ){ $this->dom[$domain]++; } else { $this->dom[$domain] = 1; } } return $index; } public function pushMsgidPlural( $skey, array $entry ){ $sindex = $entry['parent']; $pkey = $skey."\2"; if( ! array_key_exists($pkey,$this->reg) ){ $pindex = count($this->exp); $this->reg[$pkey] = $pindex; $this->exp[$pindex] = $entry; if( isset($entry['format']) && ! isset( $this->exp[$sindex]['format']) ) { $this->exp[$sindex]['format'] = $entry['format']; } if( $pindex !== $sindex + $entry['plural']) { $this->exp[$sindex]['child'] = $pindex; } } } public function mergeField( array $old, array $new, $field, $glue ){ $prev = isset($old[$field]) ? $old[$field] : ''; if( isset($new[$field]) ){ $text = $new[$field]; if( '' !== $prev && $prev !== $text ){ if( 'notes' === $field && preg_match( '/^'.preg_quote( rtrim($text,'. '),'/').'[. ]*$/mu', $prev ) ) { $text = $prev; } else { $text = $prev.$glue.$text; } } return $text; } return $prev; } public function filter( $domain ){ $map = array(); $newOffset = 1; $matchAll = '*' === $domain; $raw = array( array( 'id' => '', 'source' => '', 'target' => '', 'domain' => $matchAll ? '' : $domain, ) ); foreach( $this->exp as $oldOffset => $r ){ if( isset($r['parent']) ){ if( isset($map[$r['parent']]) ){ $r['parent'] = $map[ $r['parent'] ]; $raw[ $newOffset++ ] = $r; } } else { if( $matchAll ){ $match = true; } else if( isset($r['domain']) ){ $match = $domain === $r['domain']; } else { $match = $domain === ''; } if( $match ){ $map[ $oldOffset ] = $newOffset; $raw[ $newOffset++ ] = $r; } } } return $raw; } }
30
- abstract class LocoExtractor { private $rules; private $wp = array(); private $domain = ''; abstract public function tokenize( $src ); abstract public function extract( LocoExtracted $strings, LocoTokensInterface $tokens, $fileref = '' ); abstract protected function fsniff( $str ); abstract protected function decapse( $raw ); abstract protected function comment( $comment ); public function __construct( array $rules ){ $this->rules = $rules; } public function setDomain( $default ){ $this->domain = $default; return $this; } public function headerize( array $tags, $domain = '' ){ if( isset($this->wp[$domain]) ){ $this->wp[$domain] += $tags; } else { $this->wp[$domain] = $tags; } return $this; } protected function getHeaders(){ return $this->wp; } final public function extractSource( $src, $fileref ){ $strings = new LocoExtracted; $this->extract( $strings, $this->tokenize($src), $fileref ); return $strings; } public function rule( $s ){ return isset($this->rules[$s]) ? $this->rules[$s] : ''; } protected function push( LocoExtracted $strings, $rule, array $args, $comment = '', $ref = '' ){ $s = strpos( $rule, 's'); $p = strpos( $rule, 'p'); $c = strpos( $rule, 'c'); $d = strpos( $rule, 'd'); if( false === $s || ! isset($args[$s]) ){ return null; } $key = $args[$s]; if( ! is_string($key) ){ return null; } $msgid = $key; $entry = array( 'id' => '', 'source' => $msgid, 'target' => '', ); if( is_int($c) && isset($args[$c]) ){ $entry['context'] = $context = $args[$c]; $key .= "\0". $context; } else if( '' === $msgid ){ return null; } else { $context = null; } if( $ref ){ $entry['refs'] = $ref; } if( is_int($d) && array_key_exists($d,$args) ){ $domain = $args[$d]; if( is_null($domain) ){ $domain = ''; } } else if( '' === $this->domain ) { $domain = $strings->getDomain(); } else { $domain = $this->domain; } if( is_string($domain) && '' !== $domain ){ $entry['domain'] = $domain; $key .= "\1".$domain; } $parse_printf = true; if( $comment = $this->comment($comment) ){ if( preg_match('/^xgettext:\\s*([-a-z]+)-format\\s*/mi', $comment, $r, PREG_OFFSET_CAPTURE ) ){ $entry['format'] = $r[1][0]; $comment = trim( substr_replace( $comment,'', $r[0][1], strlen($r[0][0]) ) ); $parse_printf = ( 'no-' === substr($entry['format'],0,3) ) ? false : null; } if( preg_match('/^references?:( *.+:\\d+)*\\s*/mi', $comment, $r, PREG_OFFSET_CAPTURE ) ){ $entry['refs'] = trim($r[1][0],' '); $comment = trim( substr_replace( $comment, '', $r[0][1], strlen($r[0][0]) ) ); } $entry['notes'] = $comment; } if( $parse_printf && ( $format = $this->fsniff($msgid) ) ){ $entry['format'] = $format; } $index = $strings->pushMsgid( $key, $entry, $domain ); if( is_int($p) && isset($args[$p]) ){ $msgid_plural = $args[$p]; $entry = array( 'id' => '', 'source' => $msgid_plural, 'target' => '', 'plural' => 1, 'parent' => $index, ); if( false !== $parse_printf && ( $format = $this->fsniff($msgid_plural) ) ){ $entry['format'] = $format; } $strings->pushMsgidPlural( $key, $entry ); } return $index; } protected function utf8( $str ){ if( false === preg_match('//u',$str) ){ $str = mb_convert_encoding( $str, 'UTF-8', 'cp1252' ); } return $str; } }
31
  class LocoPHPTokens implements LocoTokensInterface, Countable { private $i; private $tokens; private $skip_tokens = array(); private $literal_tokens = array(); public function __construct( array $tokens ){ $this->tokens = $tokens; $this->rewind(); } public function literal( array $a ){ foreach( $a as $t ){ $this->literal_tokens[ $t ] = 1; } return $this; } public function ignore( array $a ){ foreach( $a as $t ){ $this->skip_tokens[$t] = true; } return $this; } public function export(){ $arr = array(); $this->rewind(); while( $tok = $this->advance() ){ $arr[] = $tok; } return $arr; } public function advance(){ $tok = $this->current(); $this->next(); return $tok; } public function rewind(){ $this->i = ( false === reset($this->tokens) ? null : key($this->tokens) ); } public function valid(){ while( isset($this->i) ){ $tok = $this->tokens[$this->i]; if( array_key_exists( is_array($tok) ? $tok[0] : $tok, $this->skip_tokens ) ){ $this->next(); } else { return true; } } return false; } public function key(){ return $this->i; } public function next(){ $this->i = ( false === next($this->tokens) ? null : key($this->tokens) ); } public function current(){ if( ! $this->valid() ){ return false; } $tok = $this->tokens[$this->i]; if( is_array($tok) && isset($this->literal_tokens[$tok[0]]) ){ return $tok[1]; } return $tok; } public function __toString(){ $s = array(); foreach( $this as $token ){ $s[] = is_array($token) ? $token[1] : $token; } return implode('',$s); } public function count(){ return count($this->tokens); } }
32
  class LocoPHPEscapeParser extends LocoEscapeParser { public function __construct(){ parent::__construct( array( 'n' => "\n", 'r' => "\r", 't' => "\t", 'v' => "\x0B", 'f' => "\x0C", 'e' => "\x1B", '$' => '$', '\\' => '\\', '"' => '"', ) ); } protected function stripSlashes( $s ){ return preg_replace_callback('/\\\\(x[0-9A-Fa-f]{1,2}|[0-3]?[0-7]{1,2})/', array($this,'unescapeMatch'), $s, -1, $n ); } }
33
  function loco_unescape_php_string( $s ){ static $l; if( is_null($l) ) { $l = new LocoPHPEscapeParser; } return $l->unescape($s); }
@@ -36,11 +36,11 @@ function loco_parse_php_comment($comment){ $comment = trim( $comment,"/ \n\r\t"
36
  function loco_parse_wp_comment( $block ){ $header = array(); if( '*' === $block[1] ){ $junk = "\r\t/ *"; foreach( explode("\n", $block) as $line ){ if( false !== ( $i = strpos($line,':') ) ){ $key = substr($line,0,$i); $val = substr($line,++$i); $header[ trim($key,$junk) ] = trim($val,$junk); } } } return $header; }
37
  function loco_sniff_printf( $s, $p, $limit = 0, $offset = 0 ){ $n = 0; while( is_string($s) && '' !== $s && false !== ( $i = strpos($s,'%',$offset) ) ){ if( 0 !== $i ){ $s = substr( $s, $i ); } if( preg_match( $p, $s, $r ) ){ $match = $r[0]; if( 0 < $n && isset($r[1]) && '' === $r[1] && '%' !== substr($match,-1) ){ return 0; } if( ++$n === $limit ){ break; } $offset = strlen($match); } else { return 0; } } return $n; }
38
  function loco_sniff_php_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:[1-9]\\d*\\$)?(?:\'.|[-+0 ])*\\d*(?:\\.\\d+)?[suxXbcdeEfFgGo%]/', $limit ); }
39
- class LocoPHPExtractor extends LocoExtractor { private $defs = array(); public function tokenize( $src ){ return new LocoPHPTokens( token_get_all($src) ); } public function decapse( $raw ){ return loco_decapse_php_string( $raw ); } public function fsniff( $str ){ return loco_sniff_php_printf($str) ? 'php' : ''; } protected function comment( $comment ){ $comment = loco_parse_php_comment($comment); $comment = preg_replace('/^translators:\\s+/mi', '', $comment ); return $comment; } public function define( $name, $value ){ if( is_string($value) ){ $this->defs[$name] = $value; } return $this; } public function extract( LocoExtracted $strings, LocoTokensInterface $tokens, $fileref = '' ){ $tokens->ignore( array(T_WHITESPACE) ); $n = 0; $depth = 0; $comment = ''; $narg = 0; $args = array(); $ref = ''; $rule = ''; $wp = $this->getHeaders(); $tokens->rewind(); while( $tok = $tokens->advance() ){ if( is_string($tok) ){ $s = $tok; $t = null; } else { $t = $tok[0]; $s = $tok[1]; } if( $depth ){ if( ')' === $s || ']' === $s ){ if( 0 === --$depth ){ if( $this->push( $strings, $rule, $args, $comment, $ref ) ){ $n++; } $comment = ''; } } else if( '(' === $s || '[' === $s ){ $depth++; $args[$narg] = null; } else if( 1 === $depth ){ if( ',' === $s ){ $narg++; } else if( T_CONSTANT_ENCAPSED_STRING === $t ){ $s = self::utf8($s); $args[$narg] = $this->decapse($s); } else if( T_STRING === $t && array_key_exists($s,$this->defs) ){ $args[$narg] = $this->defs[$s]; } else { $args[$narg] = null; } } } else if( T_COMMENT === $t || T_DOC_COMMENT === $t ){ $was_header = false; $s = self::utf8($s); if( 0 === $n ){ if( false !== strpos($s,'* @package') ){ $was_header = true; } if( $wp && ( $header = loco_parse_wp_comment($s) ) ){ foreach( $wp as $domain => $tags ){ foreach( array_intersect_key($header,$tags) as $tag => $source ){ $strings->pushMeta( $source, $tags[$tag], $domain ); $was_header = true; } } } } if( ! $was_header ) { $comment = $s; } } else if( T_STRING === $t && '(' === $tokens->advance() && ( $rule = $this->rule($s) ) ){ $ref = $fileref ? $fileref.':'.$tok[2]: ''; $depth = 1; $args = array(); $narg = 0; } else if( $comment ){ if( false === stripos($comment, 'translators:') && false === strpos($comment, 'xgettext:') ){ $comment = ''; } } } return $this; } }
40
  function loco_sniff_js_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:[1-9]\\d*\\$)?\\+?(?:0|\'[^$])?-?\\d*(?:\\.\\d+)?[b-gijostTuvxX%]/', $limit ); }
41
  class LocoJsExtractor extends LocoPHPExtractor { public function tokenize( $src ){ return new LocoJsTokens($src); } public function fsniff( $str ){ return loco_sniff_js_printf($str) ? 'javascript' : ''; } public function decapse( $encapsed ){ return LocoJsTokens::decapse($encapsed); } }
42
  class LocoTwigExtractor extends LocoPHPExtractor { public function tokenize( $src ){ $src = '<?php '.preg_replace('/{#([^#]+)#}/su','/*\\1*/',$src); return parent::tokenize($src); } }
43
- function loco_wp_extractor( $type = 'php' ){ static $rules = array( '__' => 'sd', '_e' => 'sd', '_c' => 'sd', '_n' => 'sp_d', '_n_noop' => 'spd', '_nc' => 'sp_d', '__ngettext' => 'spd', '__ngettext_noop' => 'spd', '_x' => 'scd', '_ex' => 'scd', '_nx' => 'sp_cd', '_nx_noop' => 'spcd', 'esc_attr__' => 'sd', 'esc_html__' => 'sd', 'esc_attr_e' => 'sd', 'esc_html_e' => 'sd', 'esc_attr_x' => 'scd', 'esc_html_x' => 'scd', ); if( 'php' === $type ){ $extr = new LocoPHPExtractor($rules); } else if( 'twig' === $type ){ $extr = new LocoTwigExtractor($rules); } else if( 'js' === $type ){ $extr = new LocoJsExtractor($rules); } else { throw new InvalidArgumentException('No string extractor for '.$type); } return $extr; }
44
  function loco_print_percent( $n, $t ){ $s = loco_string_percent( (int) $n, (int) $t ); echo $s,'%'; return ''; }
45
  function loco_print_progress( $translated, $untranslated, $flagged ){ $total = $translated + $untranslated; $complete = loco_string_percent( $translated - $flagged, $total ); $class = 'progress'; if( ! $translated && ! $flagged ){ $class .= ' empty'; } else if( '100' === $complete ){ $class .= ' done'; } echo '<div class="',$class,'"><div class="t">'; if( $flagged ){ $s = loco_string_percent( $flagged, $total ); echo '<div class="bar f" style="width:',$s,'%">&nbsp;</div>'; } if( '0' === $complete ){ echo '&nbsp;'; } else { $class = 'bar p'; $p = (int) $complete; $class .= sprintf(' p-%u', 10*floor($p/10) ); $style = 'width:'.$complete.'%'; if( $flagged ){ $remain = 100.0 - (float) $s; $style .= '; max-width: '.sprintf('%s',$remain).'%'; } echo '<div class="',$class,'" style="'.$style.'">&nbsp;</div>'; } echo '</div><div class="l">',$complete,'%</div></div>'; return ''; }
46
  function loco_string_percent( $n, $t ){ if( ! $t || ! $n ){ $s = '0'; } else if( $t === $n ){ $s = '100'; } else { $dp = 0; $n = 100 * $n / $t; if( $n > 99 ){ $s = number_format( min( $n, 99.9 ), ++$dp ); } else if( $n < 0.5 ){ $n = max( $n, 0.0001 ); do { $s = number_format( $n, ++$dp ); } while( preg_match('/^0\\.0+$/',$s) && $dp < 4 ); $s = substr($s,1); } else { $s = number_format( $n, $dp ); } } return $s; }
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 concat( LocoPoIterator $more ){ foreach( $more as $message ){ $this->push($message); } return $this; } 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(); $self = get_class($this); $base = array( $this->exportHeader() ); if( is_array($map) ){ $grep = implode('|',array_keys($map)); } else { $grep = '[a-z]+'; } foreach( $this as $message ){ $refs = ltrim( (string) $message->refs ); if( '' !== $refs ){ if( preg_match_all('/\\S+\\.('.$grep.'):\\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) ){ $ext = $map[$ext]; } if( array_key_exists($ext,$a) ){ $po = $a[$ext]; } else { $po = new $self($base); $a[$ext] = $po; } $message = clone $message; $message['refs'] = implode(' ',array_keys($refs) ); $po->push($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 ); }
26
  function _loco_resolve_surrogates( array $r ){ return loco_utf8_chr ( ( ( ( ( 832 | ( ord($r[1]) & 0x3F ) ) << 6 ) | ( ord($r[2]) & 0x3F ) ) - 0xD800 ) * 0x400 + ( ( ( ( 832 | ( ord($r[3]) & 0x3F ) ) << 6 ) | ( ord($r[4]) & 0x3F ) ) - 0xDC00 ) + 0x10000 ); }
27
  class LocoEscapeParser { private $map; private $grep; public function __construct( array $map = array() ){ $this->map = $map; $rules = array('\\\\'); if( $map ){ $rules[] = '['.implode(array_keys($map)).']'; } if( ! isset($map['U']) ) { $rules[] = 'U[0-9A-Fa-f]{5,8}'; } if( ! isset($map['u']) ) { $rules[] = 'u(?:\\{[0-9A-Fa-f]+\\}|[0-9A-Fa-f]{1,4})(?:\\\\u(?:\\{[0-9A-Fa-f]+\\}|[0-9A-Fa-f]{1,4}))*'; } $this->grep = '/\\\\('.implode('|',$rules).')/'; } public function unescape( $s ){ if( '' !== $s ) { return $this->stripSlashes( preg_replace_callback($this->grep, array($this, 'unescapeMatch'), $s) ); } return ''; } public function unescapeMatch( array $r ){ $s = $r[0]; $c = $s[1]; if( isset($this->map[$c]) ){ return $this->map[$c]; } if( 'u' === $c ){ $str = ''; $surrogates = false; foreach( explode('\\u',$s) as $i => $h ){ if( '' !== $h ){ $h = ltrim( trim($h,'{}'),'0'); $u = intval($h,16); $str.= loco_utf8_chr($u); if( ! $surrogates ){ $surrogates = $u >= 0xD800 && $u <= 0xDBFF; } } } if( $surrogates ){ $str = loco_resolve_surrogates($str); } return $str; } if( 'U' === $c ){ return loco_utf8_chr( intval(substr($s,2),16) ); } if( 'x' === $c ){ return chr( intval(substr($s,2),16) ); } if( ctype_digit($c) ){ return chr( intval(substr($s,1),8) ); } return $s; } protected function stripSlashes( $s ){ return stripcslashes($s); } }
28
  class LocoJsTokens extends LocoTokenizer { const T_KWORD = 1; const T_REGEX = 2; private static $lex; protected static $words = array( 'true' => 1, 'false' => 1, 'null' => 1, 'break' => T_BREAK, 'else' => T_ELSE, 'new' => T_NEW, 'var' => 1, 'case' => T_CASE, 'finally' => T_FINALLY, 'return' => T_RETURN, 'void' => 1, 'catch' => T_CATCH, 'for' => T_FOR, 'switch' => T_SWITCH, 'while' => T_WHILE, 'continue' => T_CONTINUE, 'function' => T_FUNCTION, 'this' => T_STRING, 'with' => 1, 'default' => T_DEFAULT, 'if' => T_IF, 'throw' => T_THROW, 'delete' => 1, 'in' => 1, 'try' => T_TRY, 'do' => T_DO, 'instanceof' => 1, 'typeof' => 1, ); public static function decapse( $encapsed ){ $s = substr($encapsed,1,-1); $l = self::$lex; if( is_null($l) ){ $l = new LocoEscapeParser( array( 'U' => 'U', 'a' => 'a', ) ); self::$lex = $l; } return $l->unescape($s); } public function __construct( $src = '' ){ $this->define('/^(?:\\\\u[0-9A-F]{4,4}|[$_\\pL\\p{Nl}])(?:\\\\u[0-9A-F]{4}|[$_\\pL\\pN\\p{Mn}\\p{Mc}\\p{Pc}])*/ui', array($this,'matchWord') ); $this->define('/^\\s+/u', T_WHITESPACE ); $this->define('!^//.*!', T_COMMENT ); $this->define('!^/\\*.*\\*/!Us', array($this,'matchComment') ); $this->define('/^"(?:\\\\.|[^\\r\\n\\p{Zl}\\p{Zp}"\\\\])*"/u', T_CONSTANT_ENCAPSED_STRING ); $this->define('/^\'(?:\\\\.|[^\\r\\n\\p{Zl}\\p{Zp}\'\\\\])*\'/u', T_CONSTANT_ENCAPSED_STRING ); $this->define('/^[-+;,<>.=:|&^!?*%~(){}[\\]]/'); parent::__construct($src); } public function matchWord( $s ){ if( array_key_exists($s,self::$words) ){ return self::$words[$s]; } return T_STRING; } public function matchComment( $s ){ if( '/**' === substr($s,0,3) ){ return T_DOC_COMMENT; } return T_COMMENT; } }
29
+ class LocoExtracted implements Countable { private $exp = array(); private $reg = array(); private $dom = array(); private $dflt = ''; public function extractSource( LocoExtractor $ext, $src, $fileref = '' ){ $ext->extract( $this, $ext->tokenize($src), $fileref ); return $this; } public function export(){ return $this->exp; } public function count(){ return count( $this->exp ); } public function getDomainCounts(){ return $this->dom; } public function setDomain( $default ){ $this->dflt = (string) $default; return $this; } public function getDomain(){ return $this->dflt; } private function key( array $entry ){ $key = (string) $entry['source']; foreach( array('context','domain') as $i => $prop ){ if( array_key_exists($prop,$entry) ) { $add = (string) $entry[$prop]; if( '' !== $add ){ $key .= ord($i).$add; } } } return $key; } public function pushMeta( $source, $notes, $domain = '' ){ if( '' === $domain || '*' === $domain ){ $domain = $this->dflt; } return $this->pushEntry( array( 'source' => $source, 'notes' => $notes, ), $domain ); } public function pushEntry( array $entry, $domain = '' ){ $entry['id'] = ''; $entry['target'] = ''; $entry['domain'] = $domain; $key = $this->key($entry); if( isset($this->reg[$key]) ){ $index = $this->reg[$key]; $clash = $this->exp[$index]; if( $value = $this->mergeField( $clash, $entry, 'refs', ' ') ){ $this->exp[$index]['refs'] = $value; } if( $value = $this->mergeField( $clash, $entry, 'notes', "\n") ){ $this->exp[$index]['notes'] = $value; } } else { $index = count($this->exp); $this->reg[$key] = $index; $this->exp[$index] = $entry; if( isset($this->dom[$domain]) ){ $this->dom[$domain]++; } else { $this->dom[$domain] = 1; } } return $index; } public function pushPlural( array $entry, $sindex ){ $parent = $this->exp[$sindex]; $domain = $parent['domain']; $pkey = $this->key($parent)."\2"; if( ! array_key_exists($pkey,$this->reg) ){ $pindex = count($this->exp); $this->reg[$pkey] = $pindex; $entry += array( 'id' => '', 'target' => '', 'plural' => 1, 'parent' => $sindex, 'domain' => $domain, ); $this->exp[$pindex] = $entry; if( isset($entry['format']) && ! isset( $parent['format']) ) { $this->exp[$sindex]['format'] = $entry['format']; } if( $pindex !== $sindex + $entry['plural']) { $this->exp[$sindex]['child'] = $pindex; } } } public function mergeField( array $old, array $new, $field, $glue ){ $prev = isset($old[$field]) ? $old[$field] : ''; if( isset($new[$field]) ){ $text = $new[$field]; if( '' !== $prev && $prev !== $text ){ if( 'notes' === $field && preg_match( '/^'.preg_quote( rtrim($text,'. '),'/').'[. ]*$/mu', $prev ) ) { $text = $prev; } else { $text = $prev.$glue.$text; } } return $text; } return $prev; } public function filter( $domain ){ $map = array(); $newOffset = 1; $matchAll = '*' === $domain; $raw = array( array( 'id' => '', 'source' => '', 'target' => '', 'domain' => $matchAll ? '' : $domain, ) ); foreach( $this->exp as $oldOffset => $r ){ if( isset($r['parent']) ){ if( isset($map[$r['parent']]) ){ $r['parent'] = $map[ $r['parent'] ]; $raw[ $newOffset++ ] = $r; } } else { if( $matchAll ){ $match = true; } else if( isset($r['domain']) ){ $match = $domain === $r['domain']; } else { $match = $domain === ''; } if( $match ){ $map[ $oldOffset ] = $newOffset; $raw[ $newOffset++ ] = $r; } } } return $raw; } }
30
+ abstract class LocoExtractor { private $rules; private $wp = array(); private $domain = ''; abstract public function tokenize( $src ); abstract public function extract( LocoExtracted $strings, LocoTokensInterface $tokens, $fileref = '' ); abstract protected function fsniff( $str ); abstract protected function decapse( $raw ); abstract protected function comment( $comment ); public function __construct( array $rules ){ $this->rules = $rules; } public function setDomain( $default ){ $this->domain = $default; return $this; } public function headerize( array $tags, $domain = '' ){ if( isset($this->wp[$domain]) ){ $this->wp[$domain] += $tags; } else { $this->wp[$domain] = $tags; } return $this; } protected function getHeaders(){ return $this->wp; } final public function extractSource( $src, $fileref ){ $strings = new LocoExtracted; $this->extract( $strings, $this->tokenize($src), $fileref ); return $strings; } public function rule( $s ){ return isset($this->rules[$s]) ? $this->rules[$s] : ''; } protected function push( LocoExtracted $strings, $rule, array $args, $comment = '', $ref = '' ){ $s = strpos( $rule, 's'); $p = strpos( $rule, 'p'); $c = strpos( $rule, 'c'); $d = strpos( $rule, 'd'); if( false === $s || ! isset($args[$s]) ){ return null; } $msgid = $args[$s]; if( ! is_string($msgid) ){ return null; } $entry = array( 'source' => $msgid, ); if( is_int($c) && isset($args[$c]) ){ $entry['context'] = $args[$c]; } else if( '' === $msgid ){ return null; } if( $ref ){ $entry['refs'] = $ref; } if( is_int($d) && array_key_exists($d,$args) ){ $domain = $args[$d]; if( is_null($domain) ){ $domain = ''; } } else if( '' === $this->domain ) { $domain = $strings->getDomain(); } else { $domain = $this->domain; } $parse_printf = true; if( $comment = $this->comment($comment) ){ if( preg_match('/^xgettext:\\s*([-a-z]+)-format\\s*/mi', $comment, $r, PREG_OFFSET_CAPTURE ) ){ $entry['format'] = $r[1][0]; $comment = trim( substr_replace( $comment,'', $r[0][1], strlen($r[0][0]) ) ); $parse_printf = ( 'no-' === substr($entry['format'],0,3) ) ? false : null; } if( preg_match('/^references?:( *.+:\\d+)*\\s*/mi', $comment, $r, PREG_OFFSET_CAPTURE ) ){ $entry['refs'] = trim($r[1][0],' '); $comment = trim( substr_replace( $comment, '', $r[0][1], strlen($r[0][0]) ) ); } $entry['notes'] = $comment; } if( $parse_printf && ( $format = $this->fsniff($msgid) ) ){ $entry['format'] = $format; } $index = $strings->pushEntry($entry,$domain); if( is_int($p) && isset($args[$p]) ){ $msgid_plural = $args[$p]; $entry = array( 'source' => $msgid_plural, ); if( false !== $parse_printf && ( $format = $this->fsniff($msgid_plural) ) ){ $entry['format'] = $format; } $strings->pushPlural($entry,$index); } return $index; } protected function utf8( $str ){ if( false === preg_match('//u',$str) ){ $str = mb_convert_encoding( $str, 'UTF-8', 'cp1252' ); } return $str; } }
31
  class LocoPHPTokens implements LocoTokensInterface, Countable { private $i; private $tokens; private $skip_tokens = array(); private $literal_tokens = array(); public function __construct( array $tokens ){ $this->tokens = $tokens; $this->rewind(); } public function literal( array $a ){ foreach( $a as $t ){ $this->literal_tokens[ $t ] = 1; } return $this; } public function ignore( array $a ){ foreach( $a as $t ){ $this->skip_tokens[$t] = true; } return $this; } public function export(){ $arr = array(); $this->rewind(); while( $tok = $this->advance() ){ $arr[] = $tok; } return $arr; } public function advance(){ $tok = $this->current(); $this->next(); return $tok; } public function rewind(){ $this->i = ( false === reset($this->tokens) ? null : key($this->tokens) ); } public function valid(){ while( isset($this->i) ){ $tok = $this->tokens[$this->i]; if( array_key_exists( is_array($tok) ? $tok[0] : $tok, $this->skip_tokens ) ){ $this->next(); } else { return true; } } return false; } public function key(){ return $this->i; } public function next(){ $this->i = ( false === next($this->tokens) ? null : key($this->tokens) ); } public function current(){ if( ! $this->valid() ){ return false; } $tok = $this->tokens[$this->i]; if( is_array($tok) && isset($this->literal_tokens[$tok[0]]) ){ return $tok[1]; } return $tok; } public function __toString(){ $s = array(); foreach( $this as $token ){ $s[] = is_array($token) ? $token[1] : $token; } return implode('',$s); } public function count(){ return count($this->tokens); } }
32
  class LocoPHPEscapeParser extends LocoEscapeParser { public function __construct(){ parent::__construct( array( 'n' => "\n", 'r' => "\r", 't' => "\t", 'v' => "\x0B", 'f' => "\x0C", 'e' => "\x1B", '$' => '$', '\\' => '\\', '"' => '"', ) ); } protected function stripSlashes( $s ){ return preg_replace_callback('/\\\\(x[0-9A-Fa-f]{1,2}|[0-3]?[0-7]{1,2})/', array($this,'unescapeMatch'), $s, -1, $n ); } }
33
  function loco_unescape_php_string( $s ){ static $l; if( is_null($l) ) { $l = new LocoPHPEscapeParser; } return $l->unescape($s); }
36
  function loco_parse_wp_comment( $block ){ $header = array(); if( '*' === $block[1] ){ $junk = "\r\t/ *"; foreach( explode("\n", $block) as $line ){ if( false !== ( $i = strpos($line,':') ) ){ $key = substr($line,0,$i); $val = substr($line,++$i); $header[ trim($key,$junk) ] = trim($val,$junk); } } } return $header; }
37
  function loco_sniff_printf( $s, $p, $limit = 0, $offset = 0 ){ $n = 0; while( is_string($s) && '' !== $s && false !== ( $i = strpos($s,'%',$offset) ) ){ if( 0 !== $i ){ $s = substr( $s, $i ); } if( preg_match( $p, $s, $r ) ){ $match = $r[0]; if( 0 < $n && isset($r[1]) && '' === $r[1] && '%' !== substr($match,-1) ){ return 0; } if( ++$n === $limit ){ break; } $offset = strlen($match); } else { return 0; } } return $n; }
38
  function loco_sniff_php_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:[1-9]\\d*\\$)?(?:\'.|[-+0 ])*\\d*(?:\\.\\d+)?[suxXbcdeEfFgGo%]/', $limit ); }
39
+ class LocoPHPExtractor extends LocoExtractor { private $defs = array(); public function tokenize( $src ){ return new LocoPHPTokens( token_get_all($src) ); } public function decapse( $raw ){ return loco_decapse_php_string( $raw ); } public function fsniff( $str ){ return loco_sniff_php_printf($str) ? 'php' : ''; } protected function comment( $comment ){ $comment = loco_parse_php_comment($comment); $comment = preg_replace('/^translators:\\s+/mi', '', $comment ); return $comment; } public function define( $name, $value ){ if( is_string($value) ){ $this->defs[$name] = $value; } return $this; } public function extract( LocoExtracted $strings, LocoTokensInterface $tokens, $fileref = '' ){ $tokens->ignore( array(T_WHITESPACE) ); $n = 0; $depth = 0; $comment = ''; $narg = 0; $args = array(); $ref = ''; $rule = ''; $wp = $this->getHeaders(); $tokens->rewind(); while( $tok = $tokens->advance() ){ if( is_string($tok) ){ $s = $tok; $t = null; } else { $t = $tok[0]; $s = $tok[1]; } if( $depth ){ if( ')' === $s || ']' === $s ){ if( 0 === --$depth ){ if( $this->push( $strings, $rule, $args, $comment, $ref ) ){ $n++; } $comment = ''; } } else if( '(' === $s || '[' === $s ){ $depth++; $args[$narg] = null; } else if( 1 === $depth ){ if( ',' === $s ){ $narg++; } else if( T_CONSTANT_ENCAPSED_STRING === $t ){ $s = self::utf8($s); $args[$narg] = $this->decapse($s); } else if( T_STRING === $t && array_key_exists($s,$this->defs) ){ $args[$narg] = $this->defs[$s]; } else { $args[$narg] = null; } } } else if( T_COMMENT === $t || T_DOC_COMMENT === $t ){ $was_header = false; $s = self::utf8($s); if( 0 === $n ){ if( false !== strpos($s,'* @package') ){ $was_header = true; } if( $wp && ( $header = loco_parse_wp_comment($s) ) ){ foreach( $wp as $domain => $tags ){ foreach( array_intersect_key($header,$tags) as $tag => $source ){ $strings->pushMeta( $source, $tags[$tag], (string) $domain ); $was_header = true; } } } } if( ! $was_header ) { $comment = $s; } } else if( T_STRING === $t && '(' === $tokens->advance() && ( $rule = $this->rule($s) ) ){ $ref = $fileref ? $fileref.':'.$tok[2]: ''; $depth = 1; $args = array(); $narg = 0; } else if( $comment ){ if( false === stripos($comment, 'translators:') && false === strpos($comment, 'xgettext:') ){ $comment = ''; } } } return $this; } }
40
  function loco_sniff_js_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:[1-9]\\d*\\$)?\\+?(?:0|\'[^$])?-?\\d*(?:\\.\\d+)?[b-gijostTuvxX%]/', $limit ); }
41
  class LocoJsExtractor extends LocoPHPExtractor { public function tokenize( $src ){ return new LocoJsTokens($src); } public function fsniff( $str ){ return loco_sniff_js_printf($str) ? 'javascript' : ''; } public function decapse( $encapsed ){ return LocoJsTokens::decapse($encapsed); } }
42
  class LocoTwigExtractor extends LocoPHPExtractor { public function tokenize( $src ){ $src = '<?php '.preg_replace('/{#([^#]+)#}/su','/*\\1*/',$src); return parent::tokenize($src); } }
43
+ function loco_wp_extractor( $type = 'php' ){ static $rules = array( '__' => 'sd', '_e' => 'sd', '_c' => 'sd', '_n' => 'sp_d', '_n_noop' => 'spd', '_nc' => 'sp_d', '__ngettext' => 'spd', '__ngettext_noop' => 'spd', '_x' => 'scd', '_ex' => 'scd', '_nx' => 'sp_cd', '_nx_noop' => 'spcd', 'esc_attr__' => 'sd', 'esc_html__' => 'sd', 'esc_attr_e' => 'sd', 'esc_html_e' => 'sd', 'esc_attr_x' => 'scd', 'esc_html_x' => 'scd', ); if( 'php' === $type ){ $extr = new LocoPHPExtractor($rules); } else if( 'twig' === $type ){ $extr = new LocoTwigExtractor($rules); } else if( 'js' === $type ){ $extr = new LocoJsExtractor($rules); } else { throw new InvalidArgumentException('No string extractor for '.$type); } return $extr; }
44
  function loco_print_percent( $n, $t ){ $s = loco_string_percent( (int) $n, (int) $t ); echo $s,'%'; return ''; }
45
  function loco_print_progress( $translated, $untranslated, $flagged ){ $total = $translated + $untranslated; $complete = loco_string_percent( $translated - $flagged, $total ); $class = 'progress'; if( ! $translated && ! $flagged ){ $class .= ' empty'; } else if( '100' === $complete ){ $class .= ' done'; } echo '<div class="',$class,'"><div class="t">'; if( $flagged ){ $s = loco_string_percent( $flagged, $total ); echo '<div class="bar f" style="width:',$s,'%">&nbsp;</div>'; } if( '0' === $complete ){ echo '&nbsp;'; } else { $class = 'bar p'; $p = (int) $complete; $class .= sprintf(' p-%u', 10*floor($p/10) ); $style = 'width:'.$complete.'%'; if( $flagged ){ $remain = 100.0 - (float) $s; $style .= '; max-width: '.sprintf('%s',$remain).'%'; } echo '<div class="',$class,'" style="'.$style.'">&nbsp;</div>'; } echo '</div><div class="l">',$complete,'%</div></div>'; return ''; }
46
  function loco_string_percent( $n, $t ){ if( ! $t || ! $n ){ $s = '0'; } else if( $t === $n ){ $s = '100'; } else { $dp = 0; $n = 100 * $n / $t; if( $n > 99 ){ $s = number_format( min( $n, 99.9 ), ++$dp ); } else if( $n < 0.5 ){ $n = max( $n, 0.0001 ); do { $s = number_format( $n, ++$dp ); } while( preg_match('/^0\\.0+$/',$s) && $dp < 4 ); $s = substr($s,1); } else { $s = number_format( $n, $dp ); } } return $s; }
lib/data/gp.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Compiled data. Do not edit.
4
+ */
5
+ return array('version'=>'3.0.0-alpha.2','aliases'=>array('arg'=>'an','bg-bg'=>'bg','bn-bd'=>'bn','bre'=>'br','bs-ba'=>'bs','cs-cz'=>'cs','da-dk'=>'da','de-de'=>'de','ewe'=>'ee','en-us'=>'en','es-es'=>'es','fa-ir'=>'fa','fr-fr'=>'fr','gl-es'=>'gl','haw-us'=>'haw','he-il'=>'he','hi-in'=>'hi','hu-hu'=>'hu','id-id'=>'id','is-is'=>'is','it-it'=>'it','jv-id'=>'jv','ka-ge'=>'ka','ko-kr'=>'ko','lb-lu'=>'lb','lt-lt'=>'lt','me-me'=>'me','mg-mg'=>'mg','mk-mk'=>'mk','ml-in'=>'ml','ms-my'=>'ms','my-mm'=>'mya','ne-np'=>'ne','nb-no'=>'nb','nl-nl'=>'nl','nn-no'=>'nn','pa-in'=>'pa','art-xpirate'=>'pirate','pl-pl'=>'pl','pt-pt'=>'pt','pt-pt-ao90'=>'pt-ao90','ro-ro'=>'ro','ru-ru'=>'ru','si-lk'=>'si','sk-sk'=>'sk','sl-si'=>'sl','so-so'=>'so','sr-rs'=>'sr','su-id'=>'su','sv-se'=>'sv','ta-in'=>'ta','tr-tr'=>'tr','tt-ru'=>'tt','ug-cn'=>'ug','uz-uz'=>'uz'));
lib/data/languages.php CHANGED
@@ -2,4 +2,4 @@
2
  /**
3
  * Compiled data. Do not edit.
4
  */
5
- return array('aa'=>'Afar','ab'=>'Abkhazian','ae'=>'Avestan','af'=>'Afrikaans','ak'=>'Akan','am'=>'Amharic','an'=>'Aragonese','ar'=>'Arabic','arq'=>'Algerian Arabic','ary'=>'Moroccan Arabic','as'=>'Assamese','ast'=>'Asturian','av'=>'Avaric','ay'=>'Aymara','az'=>'Azerbaijani','azb'=>'South Azerbaijani','ba'=>'Bashkir','bal'=>'Baluchi','bcc'=>'Southern Balochi','be'=>'Belarusian','bg'=>'Bulgarian','bi'=>'Bislama','bm'=>'Bambara','bn'=>'Bengali','bo'=>'Tibetan','br'=>'Breton','bs'=>'Bosnian','ca'=>'Catalan','ce'=>'Chechen','ceb'=>'Cebuano','ch'=>'Chamorro','ckb'=>'Central Kurdish','co'=>'Corsican','cr'=>'Cree','cs'=>'Czech','cu'=>'Church Slavic','cv'=>'Chuvash','cy'=>'Welsh','da'=>'Danish','de'=>'German','dv'=>'Dhivehi','dz'=>'Dzongkha','ee'=>'Ewe','el'=>'Greek','en'=>'English','eo'=>'Esperanto','es'=>'Spanish','et'=>'Estonian','eu'=>'Basque','fa'=>'Persian','ff'=>'Fulah','fi'=>'Finnish','fj'=>'Fijian','fo'=>'Faroese','fr'=>'French','frp'=>'Arpitan','fuc'=>'Pulaar','fur'=>'Friulian','fy'=>'Western Frisian','ga'=>'Irish','gd'=>'Scottish Gaelic','gl'=>'Galician','gn'=>'Guarani','gsw'=>'Swiss German','gu'=>'Gujarati','gv'=>'Manx','ha'=>'Hausa','haw'=>'Hawaiian','haz'=>'Hazaragi','he'=>'Hebrew','hi'=>'Hindi','ho'=>'Hiri Motu','hr'=>'Croatian','ht'=>'Haitian','hu'=>'Hungarian','hy'=>'Armenian','hz'=>'Herero','ia'=>'Interlingua','id'=>'Indonesian','ie'=>'Interlingue','ig'=>'Igbo','ii'=>'Sichuan Yi','ik'=>'Inupiaq','io'=>'Ido','is'=>'Icelandic','it'=>'Italian','iu'=>'Inuktitut','ja'=>'Japanese','jv'=>'Javanese','ka'=>'Georgian','kab'=>'Kabyle','kg'=>'Kongo','ki'=>'Kikuyu','kj'=>'Kuanyama','kk'=>'Kazakh','kl'=>'Kalaallisut','km'=>'Central Khmer','kn'=>'Kannada','ko'=>'Korean','kr'=>'Kanuri','ks'=>'Kashmiri','ku'=>'Kurdish','kv'=>'Komi','kw'=>'Cornish','ky'=>'Kirghiz','la'=>'Latin','lb'=>'Luxembourgish','lg'=>'Ganda','li'=>'Limburgan','ln'=>'Lingala','lo'=>'Lao','lt'=>'Lithuanian','lu'=>'Luba-Katanga','lv'=>'Latvian','mg'=>'Malagasy','mh'=>'Marshallese','mi'=>'Maori','mk'=>'Macedonian','ml'=>'Malayalam','mn'=>'Mongolian','mr'=>'Marathi','ms'=>'Malay','mt'=>'Maltese','my'=>'Burmese','na'=>'Nauru','nb'=>'Norwegian Bokmål','nd'=>'North Ndebele','ne'=>'Nepali','ng'=>'Ndonga','nl'=>'Dutch','nn'=>'Norwegian Nynorsk','no'=>'Norwegian','nr'=>'South Ndebele','nv'=>'Navajo','ny'=>'Nyanja','oc'=>'Occitan (post 1500)','oj'=>'Ojibwa','om'=>'Oromo','or'=>'Oriya','ory'=>'Oriya (individual language)','os'=>'Ossetian','pa'=>'Panjabi','pi'=>'Pali','pl'=>'Polish','ps'=>'Pushto','pt'=>'Portuguese','qu'=>'Quechua','rhg'=>'Rohingya','rm'=>'Romansh','rn'=>'Rundi','ro'=>'Romanian','ru'=>'Russian','rue'=>'Rusyn','rup'=>'Macedo-Romanian','rw'=>'Kinyarwanda','sa'=>'Sanskrit','sah'=>'Yakut','sc'=>'Sardinian','sd'=>'Sindhi','se'=>'Northern Sami','sg'=>'Sango','sh'=>'Serbo-Croatian','si'=>'Sinhala','sk'=>'Slovak','sl'=>'Slovenian','sm'=>'Samoan','sn'=>'Shona','so'=>'Somali','sq'=>'Albanian','sr'=>'Serbian','ss'=>'Swati','st'=>'Southern Sotho','su'=>'Sundanese','sv'=>'Swedish','sw'=>'Swahili','szl'=>'Silesian','ta'=>'Tamil','te'=>'Telugu','tg'=>'Tajik','th'=>'Thai','ti'=>'Tigrinya','tk'=>'Turkmen','tl'=>'Tagalog','tn'=>'Tswana','to'=>'Tonga (Tonga Islands)','tr'=>'Turkish','ts'=>'Tsonga','tt'=>'Tatar','tw'=>'Twi','twd'=>'Twents','ty'=>'Tahitian','tzm'=>'Central Atlas Tamazight','ug'=>'Uighur','uk'=>'Ukrainian','ur'=>'Urdu','uz'=>'Uzbek','ve'=>'Venda','vi'=>'Vietnamese','vo'=>'Volapük','wa'=>'Walloon','wo'=>'Wolof','xh'=>'Xhosa','xmf'=>'Mingrelian','yi'=>'Yiddish','yo'=>'Yoruba','za'=>'Zhuang','zh'=>'Chinese','zu'=>'Zulu','tlh'=>'Klingon');
2
  /**
3
  * Compiled data. Do not edit.
4
  */
5
+ return array('aa'=>'Afar','ab'=>'Abkhazian','ae'=>'Avestan','af'=>'Afrikaans','ak'=>'Akan','am'=>'Amharic','an'=>'Aragonese','ar'=>'Arabic','arq'=>'Algerian Arabic','ary'=>'Moroccan Arabic','as'=>'Assamese','ast'=>'Asturian','av'=>'Avaric','ay'=>'Aymara','az'=>'Azerbaijani','azb'=>'South Azerbaijani','ba'=>'Bashkir','bal'=>'Baluchi','bcc'=>'Southern Balochi','be'=>'Belarusian','bg'=>'Bulgarian','bho'=>'Bhojpuri','bi'=>'Bislama','bm'=>'Bambara','bn'=>'Bengali','bo'=>'Tibetan','br'=>'Breton','brx'=>'Bodo (India)','bs'=>'Bosnian','ca'=>'Catalan','ce'=>'Chechen','ceb'=>'Cebuano','ch'=>'Chamorro','ckb'=>'Central Kurdish','co'=>'Corsican','cr'=>'Cree','cs'=>'Czech','cu'=>'Church Slavic','cv'=>'Chuvash','cy'=>'Welsh','da'=>'Danish','de'=>'German','dsb'=>'Lower Sorbian','dv'=>'Dhivehi','dz'=>'Dzongkha','ee'=>'Ewe','el'=>'Greek','en'=>'English','eo'=>'Esperanto','es'=>'Spanish','et'=>'Estonian','eu'=>'Basque','fa'=>'Persian','ff'=>'Fulah','fi'=>'Finnish','fj'=>'Fijian','fo'=>'Faroese','fon'=>'Fon','fr'=>'French','frp'=>'Arpitan','fuc'=>'Pulaar','fur'=>'Friulian','fy'=>'Western Frisian','ga'=>'Irish','gax'=>'Borana-Arsi-Guji Oromo','gd'=>'Scottish Gaelic','gl'=>'Galician','gn'=>'Guarani','gu'=>'Gujarati','gv'=>'Manx','ha'=>'Hausa','haw'=>'Hawaiian','haz'=>'Hazaragi','he'=>'Hebrew','hi'=>'Hindi','ho'=>'Hiri Motu','hr'=>'Croatian','hsb'=>'Upper Sorbian','ht'=>'Haitian','hu'=>'Hungarian','hy'=>'Armenian','hz'=>'Herero','ia'=>'Interlingua','id'=>'Indonesian','ie'=>'Interlingue','ig'=>'Igbo','ii'=>'Sichuan Yi','ik'=>'Inupiaq','io'=>'Ido','is'=>'Icelandic','it'=>'Italian','iu'=>'Inuktitut','ja'=>'Japanese','jv'=>'Javanese','ka'=>'Georgian','kaa'=>'Kara-Kalpak','kab'=>'Kabyle','kg'=>'Kongo','ki'=>'Kikuyu','kj'=>'Kuanyama','kk'=>'Kazakh','kl'=>'Kalaallisut','km'=>'Central Khmer','kmr'=>'Northern Kurdish','kn'=>'Kannada','ko'=>'Korean','kr'=>'Kanuri','ks'=>'Kashmiri','ku'=>'Kurdish','kv'=>'Komi','kw'=>'Cornish','ky'=>'Kirghiz','la'=>'Latin','lb'=>'Luxembourgish','lg'=>'Ganda','li'=>'Limburgan','lij'=>'Ligurian','lmo'=>'Lombard','ln'=>'Lingala','lo'=>'Lao','lt'=>'Lithuanian','lu'=>'Luba-Katanga','lv'=>'Latvian','mai'=>'Maithili','mfe'=>'Morisyen','mg'=>'Malagasy','mh'=>'Marshallese','mi'=>'Maori','mk'=>'Macedonian','ml'=>'Malayalam','mn'=>'Mongolian','mr'=>'Marathi','ms'=>'Malay','mt'=>'Maltese','my'=>'Burmese','na'=>'Nauru','nb'=>'Norwegian Bokmål','nd'=>'North Ndebele','ne'=>'Nepali','ng'=>'Ndonga','nl'=>'Dutch','nn'=>'Norwegian Nynorsk','no'=>'Norwegian','nqo'=>'N\'Ko','nr'=>'South Ndebele','nv'=>'Navajo','ny'=>'Nyanja','oc'=>'Occitan (post 1500)','oj'=>'Ojibwa','om'=>'Oromo','or'=>'Oriya','ory'=>'Oriya (individual language)','os'=>'Ossetian','pa'=>'Panjabi','pap'=>'Papiamento','pcd'=>'Picard','pcm'=>'Nigerian Pidgin','pi'=>'Pali','pl'=>'Polish','ps'=>'Pushto','pt'=>'Portuguese','qu'=>'Quechua','rhg'=>'Rohingya','rm'=>'Romansh','rn'=>'Rundi','ro'=>'Romanian','ru'=>'Russian','rw'=>'Kinyarwanda','sa'=>'Sanskrit','sah'=>'Yakut','sc'=>'Sardinian','scn'=>'Sicilian','sd'=>'Sindhi','se'=>'Northern Sami','sg'=>'Sango','sh'=>'Serbo-Croatian','si'=>'Sinhala','sk'=>'Slovak','skr'=>'Saraiki','sl'=>'Slovenian','sm'=>'Samoan','sn'=>'Shona','so'=>'Somali','sq'=>'Albanian','sr'=>'Serbian','ss'=>'Swati','st'=>'Southern Sotho','su'=>'Sundanese','sv'=>'Swedish','sw'=>'Swahili','syr'=>'Syriac','szl'=>'Silesian','ta'=>'Tamil','te'=>'Telugu','tg'=>'Tajik','th'=>'Thai','ti'=>'Tigrinya','tk'=>'Turkmen','tl'=>'Tagalog','tn'=>'Tswana','to'=>'Tonga (Tonga Islands)','tr'=>'Turkish','ts'=>'Tsonga','tt'=>'Tatar','tw'=>'Twi','twd'=>'Twents','ty'=>'Tahitian','tzm'=>'Central Atlas Tamazight','ug'=>'Uighur','uk'=>'Ukrainian','ur'=>'Urdu','uz'=>'Uzbek','ve'=>'Venda','vec'=>'Venetian','vi'=>'Vietnamese','vo'=>'Volapük','wa'=>'Walloon','wo'=>'Wolof','xh'=>'Xhosa','yi'=>'Yiddish','yo'=>'Yoruba','za'=>'Zhuang','zgh'=>'Standard Moroccan Tamazight','zh'=>'Chinese','zu'=>'Zulu','tlh'=>'Klingon');
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=>'অসমীয়া'),'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=>'简体中文'));
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_AT'=>array(0=>'German (Austria)',1=>'Deutsch (Österreich)'),'de_CH'=>array(0=>'German (Switzerland)',1=>'Deutsch (Schweiz)'),'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)'),'dsb'=>array(0=>'Lower Sorbian',1=>'Dolnoserbšćina'),'dzo'=>array(0=>'Dzongkha',1=>'རྫོང་ཁ'),'el'=>array(0=>'Greek',1=>'Ελληνικά'),'en_ZA'=>array(0=>'English (South Africa)',1=>'English (South Africa)'),'en_NZ'=>array(0=>'English (New Zealand)',1=>'English (New Zealand)'),'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_CR'=>array(0=>'Spanish (Costa Rica)',1=>'Español de Costa Rica'),'es_CL'=>array(0=>'Spanish (Chile)',1=>'Español de Chile'),'es_ES'=>array(0=>'Spanish (Spain)',1=>'Español'),'es_VE'=>array(0=>'Spanish (Venezuela)',1=>'Español de Venezuela'),'es_AR'=>array(0=>'Spanish (Argentina)',1=>'Español de Argentina'),'es_MX'=>array(0=>'Spanish (Mexico)',1=>'Español de México'),'es_PE'=>array(0=>'Spanish (Peru)',1=>'Español de Perú'),'es_PR'=>array(0=>'Spanish (Puerto Rico)',1=>'Español de Puerto Rico'),'es_UY'=>array(0=>'Spanish (Uruguay)',1=>'Español de Uruguay'),'es_GT'=>array(0=>'Spanish (Guatemala)',1=>'Español de Guatemala'),'es_EC'=>array(0=>'Spanish (Ecuador)',1=>'Español de Ecuador'),'es_CO'=>array(0=>'Spanish (Colombia)',1=>'Español de Colombia'),'et'=>array(0=>'Estonian',1=>'Eesti'),'eu'=>array(0=>'Basque',1=>'Euskara'),'fa_AF'=>array(0=>'Persian (Afghanistan)',1=>'(فارسی (افغانستان'),'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'),'hsb'=>array(0=>'Upper Sorbian',1=>'Hornjoserbšćina'),'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=>'ភាសាខ្មែរ'),'kn'=>array(0=>'Kannada',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_AO'=>array(0=>'Portuguese (Angola)',1=>'Português de Angola'),'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=>'Сахалыы'),'snd'=>array(0=>'Sindhi',1=>'سنڌي'),'si_LK'=>array(0=>'Sinhala',1=>'සිංහල'),'sk_SK'=>array(0=>'Slovak',1=>'Slovenčina'),'skr'=>array(0=>'Saraiki',1=>'سرائیکی'),'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'),'sw'=>array(0=>'Swahili',1=>'Kiswahili'),'szl'=>array(0=>'Silesian',1=>'Ślōnskŏ gŏdka'),'ta_IN'=>array(0=>'Tamil',1=>'தமிழ்'),'ta_LK'=>array(0=>'Tamil (Sri Lanka)',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_HK'=>array(0=>'Chinese (Hong Kong)',1=>'香港中文版 '),'zh_CN'=>array(0=>'Chinese (China)',1=>'简体中文'),'zh_TW'=>array(0=>'Chinese (Taiwan)',1=>'繁體中文'));
loco.php CHANGED
@@ -4,7 +4,7 @@ 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.5.0
8
  Requires at least: 4.1
9
  Requires PHP: 5.2.4
10
  Author URI: https://localise.biz/wordpress/plugin
@@ -32,7 +32,7 @@ function loco_plugin_file(){
32
  * @return string
33
  */
34
  function loco_plugin_version(){
35
- return '2.5.0';
36
  }
37
 
38
 
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.1
8
  Requires at least: 4.1
9
  Requires PHP: 5.2.4
10
  Author URI: https://localise.biz/wordpress/plugin
32
  * @return string
33
  */
34
  function loco_plugin_version(){
35
+ return '2.5.1';
36
  }
37
 
38
 
pub/css/admin.css CHANGED
@@ -1 +1 @@
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}
1
+ ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.5.1);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.5.1) 0 0 no-repeat;min-height:75px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.1);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.1);background-size:16px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.1);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.1");src:url("../font/loco.eot?v=2.5.1?#iefix") format("embedded-opentype"),url("../font/loco.woff?v=2.5.1") format("woff"),url("../font/loco.ttf?v=2.5.1") format("truetype"),url("../font/loco.svg?v=2.5.1#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.1) 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.1);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.1) 0 0 no-repeat;min-height:75px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.1);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.1);background-size:16px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.1);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.1);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.1) 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.1) 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.1) 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.1) 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.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}
1
+ #loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.5.1);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.5.1) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.1);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.1);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.1);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.1) 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.1);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.5.1) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.5.1);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.1);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.5.1);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.1) 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.1) 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.1) 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.1) 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.1) 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.1) 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.1) 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.1) 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.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}
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.1) 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.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}
1
+ .js #loco-admin.wrap .loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif?v=2.5.1) 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.5.0) 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.1) 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.5.0) 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.1) 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.5.0) 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.1) 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.5.0) 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.1) 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.5.0) 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.1) 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.5.0) 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.1) 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.5.0) 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.1) 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.5.0) 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.1) 0 0 no-repeat !important}
pub/js/min/admin.js CHANGED
@@ -1,22 +1,22 @@
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,11 +28,11 @@ 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(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"))&&
@@ -40,157 +40,157 @@ b.attr("original-title",a).removeAttr("title")},getTitle:function(){var b,a=this
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);
1
+ (function(v,y,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
+ b,e){return(a=p[a])&&a[e]?a[e]:b||""}function b(a){return c(a,a,0)}function a(a,b){return c(b+"\u0004"+a,a,0)}function e(a,b,e){e=Number(g(e));isNaN(e)&&(e=0);return c(a,e?b:a,e)}g=l(g);var p={};return{__:b,_x:a,_n:e,_:b,x:a,n:e,load:function(a){p=a||{};return this},pluraleq:function(a){g=l(a);return this}}};return f}({},v,y));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,y));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,y));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,y));m.register("$5",function(f,d,m){d.JSON||(d.JSON={parse:h.parseJSON,stringify:null});return f=d.JSON}({},v,y));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=[].slice.call(arguments,1);return d.replace(/%(?:([1-9][0-9]*)\$)?([sud%])/g,
6
+ function(b,a,e){return"%"===e?"%":(a?c[Number(a)-1]:c[g++])||""})};return f}({},v,y));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,y));m.register("$7",function(f,d,E){function l(a,b,e){function r(){c();x=setTimeout(b,
7
+ e)}function c(){x&&clearTimeout(x);x=null}var x;r();h(a).on("mouseenter",c).on("mouseleave",r);return{die:function(){c();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 e(b){n[x]=null;g(h(a),250);c&&c.die();var r;if(r=b)b.stopPropagation(),b.preventDefault(),r=!1;return r}function r(b){c&&c.die();return c=l(a,e,b)}var c,x,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",e);h(d).triggerHandler("resize");z();x=n.length;n.push(e);b&&(c=r(b));return{link:function(b,x){var e=x||b,r=h(a).find("nav"),e=h("<nav></nav>").append(h("<a></a>").attr("href",b).text(e));p?(p.push(e.html()),r.html(p.join("<span> | </span>"))):(p=[e.html()],h(a).addClass("has-nav").append(e));return this},stick:function(){c&&c.die();c=null;n[x]=null;return this},slow:function(a){r(a||1E4);return this}}}
9
+ function b(a,b,e){var r=m.require("$21","dom.js").el;a=h('<div class="notice notice-'+a+' loco-notice inline"></div>').prependTo(h("#loco-notices"));var c=h(r("p"));e=h(r("span")).text(e);b=h(r("strong","has-icon")).text(b+": ");c.append(b).append(e).appendTo(a);return a}function a(a,e,r,p){a=b(r,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,r,D;f.error=function(b){return a(b,A,"error")};f.warn=e;f.info=function(b){return a(b,r,"info")};f.success=function(b){return a(b,D,"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,r=e.length;++a<r;)(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");r=a._("Notice");D=a._("OK");setTimeout(p,1E3);return f};return f}({},v,y));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,x){if("abort"!==c){var r=k||{_:function(a){return a}},w=b.status||0,d=b.responseText,s=l(d),f=b.getResponseHeader("Content-Type")||"Unknown type",A=b.getResponseHeader("Content-Length")||d.length;
13
+ "success"===c&&x?n.error(x):(n.error(g(s)+".\n"+r._("Check console output for debugging information")),n.log("Ajax failure for "+a,{status:w,error:c,message:x,output:d}),"parsererror"===c&&(x="Response not JSON"),n.log([r._("Provide the following text when reporting a problem")+":","----","Status "+w+' "'+(x||r._("Unknown error"))+'" ('+f+" "+A+" bytes)",s,"===="].join("\n")));e&&e.call&&e(b,c,x);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,x){var c=a&&a.data,k=a&&a.notices,z=k&&k.length,g=-1;for(!c||a.error?p(x,e,a&&a.error&&a.error.message):b&&b(c,e,x);++g<z;)n.raise(k[g])})}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 w(a,b){b.getAttribute("data-was-disabled")||(b.disabled=!1)}function n(a){a.find(".button-primary").removeClass("loading");
15
+ a.find("button").each(w);a.find("input").each(w);a.find("select").each(w);a.find("textarea").each(w);a.removeClass("disabled loading")}var k=h(a),z=k.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")})(k);return p(a.route.value,function(a,e,c){n(k);b&&b(a,e,c)},function(a,b,c){n(k);e&&e(a,b,c)},{type:a.method,data:z})};f.post=function(k,r,z,g){var w=
16
+ !0,G=r||{},B=n[k]||c(k);d.FormData&&G instanceof FormData?(w=!1,r=e):r=Array.isArray(G)?a:b;r(G,"action","loco_json");r(G,"route",k);r(G,"loco-nonce",B);return p(k,z,g,{type:"post",data:G,processData:w,contentType:w?"application/x-www-form-urlencoded; charset=UTF-8":!1})};f.get=function(a,b,e,k){b=b||{};var w=n[a]||c(a);b.action="loco_json";b.route=a;b["loco-nonce"]=w;return p(a,e,k,{type:"get",data:b})};f.setNonce=function(a,b){n[a]=b;return f};return f}({},v,y));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,y));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=[],r={},k,
32
+ s=b.length,w=n;0!==s--;)(k=b[s])&&g(String(k||"").toLowerCase().replace(p,d),w,c,r);e[a]=c}function a(a,b){var c=[],r=-1,p=e,k=p.length,n,g,d,u,x,F,f=a.length,l=b?!0:!1;a:for(;++r<k;)if(d=p[r],null!=d&&(u=d.length)){x=0;b:for(;x<f;x++){F=a[x];for(n=0;n<u;n++)if(g=d[n],0===g.indexOf(F))continue b;continue a}c.push(l?b[r]:r)}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,y));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,y));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"))&&
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,y));m.register("$35",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,y));m.register("$36",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,n=["variant","region","script","lang"],k=[];0!==a--;)if(b=n[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,y));m.register("$37",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,y));m.register("$48",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 p=a();timeToCall=Math.max(0,16-(p-c));nextTime=p+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,y));m.register("$45",function(f,d,h){function l(a,c,e,r){if(b){var k=e;e=function(a){if((a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType)return k(a)}}a.addEventListener(c,e,r);return{unbind:function(){a.removeEventListener(c,e,r)}}}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 r(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){r(e);r(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(){r(a);
52
+ r(e);r(p);b=f=c=null}};return f};f.swiper=function(c,d,f){function r(a){c.addEventListener(a,u[a],!1)}function D(a){c.removeEventListener(a,u[a],!1)}function s(){w&&w.stop();w=null}var w,G,B,u={},x=[],F=[],h=[];u[a]=function(a){G=!1;s();var b=k();n(a,function(a,c){x[a]=b;F[a]=c.clientX;h[a]=c.clientY});B=c.scrollLeft;return!0};u[p]=function(a){n(a,function(a,b){var c=k()-x[a],e=F[a]-b.clientX,c=Math.abs(e)/c;d(c,e?0>e?-1:1:0)});B=null;return!0};u[e]=function(a){var b,e;null==B||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,B+b));return g(a)};if(!b||f)r(a),r(e),r(p),b&&(c.className+=" mstouch");return{kill:function(){D(a);D(e);D(p);s()},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){s();var x=c.scrollLeft,k=a>x?
54
+ 1:-1,r=Math[1===k?"min":"max"],d=Math.round(16*b*k);return w=m.require("$48","fps.js").loop(function(b){b&&(x=Math.max(0,r(a,x+d)),c.scrollLeft=x,a===x&&(s(),e&&e(x)))},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,y));m.register("$49",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,y));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 d=A&&A.readyState;if(k||!d||"loaded"===d||"complete"===d)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,d,g=h.getElementsByTagName("script"),k=-1,f=g.length;++k<f;)if(a=g[k].getAttribute("src"))if(e=a.indexOf("/lib/vendor"),-1!==e){d=a.substr(0,e);break}a=c=d||"/static"}return a+b};return f}({},v,y));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=d}var d=a(c),r=b.require,g=r("ace/lib/oop");g.inherits(d,r("ace/mode/text_highlight_rules").TextHighlightRules);g.inherits(e,r("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,r=!1,D=p||n,s=a.parentNode,w=s.appendChild(E.createElement("div"));h(s).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(w){if(!d)throw Error("Failed to load code editor");f=d.edit(w);var g=f.session,p=f.renderer;f.$blockScrolling=Infinity;f.setShowInvisibles(r);f.setWrapBehavioursEnabled(!1);f.setBehavioursEnabled(!1);f.setHighlightActiveLine(!1);g.setUseSoftTabs(!1);p.setShowGutter(!0);p.setPadding(10);p.setScrollMargin(8);g.setMode(b(d,D));f.setValue(a.value,-1);g.setUseWrapMode(!0);e?l(f,e):c(f)}},"ace");return{kill:function(){f&&(g(f),f.destroy(),f=null);w&&(s.removeChild(w),h(s).removeClass("has-proxy has-ace"),
65
+ w=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;r!==a&&(r=a,f&&f.setShowInvisibles(a));return this},strf:function(a){a=a||n;a!==D&&(D=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,y));m.register("$50",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(s).removeClass("loading")}var k,z=!1,A="",q=!1,
68
+ r=a.parentNode,D=r.parentNode,s=r.appendChild(E.createElement("div")),w=D.insertBefore(E.createElement("nav"),r);w.id="_tb"+String(++b);h(r).addClass("has-proxy has-mce");h(s).addClass("mce-content-body loading").html(d(a.value));f.load(function(a){if(!a)throw Error("Failed to load HTML editor");s&&a.init({inline:!0,target:s,hidden_input:!1,theme:"modern",skin:!1,plugins:"link lists",browser_spellcheck:!0,menubar:!1,fixed_toolbar_container:"#"+w.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(s).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);s&&(r.removeChild(s),h(r).removeClass("has-proxy has-mce"),s=null);w&&(D.removeChild(w),w=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(r)[a?"addClass":"removeClass"]("show-invs"));return this}}};return f}({},v,y));m.register("$46",function(f,d,E){function l(b){function a(){f&&(A.off("input",e),f=!1)}function e(){var a=b.value;a!==r&&(A.trigger("changing",[a,r]),r=a)}function d(){e();f&&D!==r&&A.trigger("changed",[r])}function g(){c=b;D=r;f||(A.on("input",e),f=!0);A.trigger("editFocus");q.addClass("has-focus");return!0}function k(){c===b&&(c=null);
72
+ A.trigger("editBlur");q.removeClass("has-focus");f&&(d(),a());return!0}var f=!1,A=h(b),q=h(b.parentNode),r=b.value,D;A.on("blur",k).on("focus",g);return{val:function(a){r!==a&&(b.value=a,A.triggerHandler("input"),r=a);return!0},kill:function(){a();A.off("blur",k).off("focus",g)},fire:function(){r=null;e()},ping:d,blur:k,focus:g,reset:function(){D=r=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,d=this.p;d&&d.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("$49","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("$50","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,y));m.register("$47",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(d){var g=b||0,k=c?-1:1,x=a.rows||[];d.sort(function(a,b){return k*(x[a]||e(a)).cellVal(g).localeCompare((x[b]||e(b)).cellVal(g))})}}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],B=[],u=[],x=[],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){x[a]=p+"-col-"+b;F[a]=c||b});for(var N=g(),q=-1,A=x.length,l=g("wg-cols"),m=
81
+ f.splitx.apply(f,x);++q<A;)m[q].header(F[q]),l.appendChild(N.cloneNode(!1)).setAttribute("for",x[q]);d.eachRow(function(a,b,c){B[a]=new z(a,b,c);u[a]=a});this.rows=B;this.cols=l;this.ww=null;this.root=N=n.body;this.head=f;f.redraw=c(this);f=n.fixed=m[0].bodyY()||20;k.lock().resize(f,n);k.css.push("is-table");k.restyle();this.sc?this._re_sort(A):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,k,g=this.idxs,x=g.length,p=this.idxr={},n=this.r,f=this._r,h=this.root,z=this.cols;++d<x;){0===d%100&&(a=z.cloneNode(!0),b=new A(a),b.h=2200,b.insert(h),c.push(b));k=g[d];p[k]=d;a=e[k];if(null==a)throw Error("Render error, no data at ["+k+"]");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,k=d.length,g=this.pages||[],x=g.length;for(c.redraw.call(e);++a<k;)b[a]=d[a].style.width;if(x){c=this.mx;for(a=this.mn;a<=c;a++)g[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,k=this.sy,g=this.vh,x=this.mn,n=this.mx,p=Math.max(0,k-100),k=g+k+100,f=this.pages||[],h=f.length;++b<h&&!(a>k);)g=f[b],a+=g.height(),a<p||(null===c&&(c=b),e=b,g.rendered||g.render(d));if(x!==c){if(null!==x&&c>x)for(b=x;b<c;b++){g=f[b];if(!g)throw Error("Shit!");g.rendered&&g.sleep()}this.mn=c}if(n!==e){if(null!==
85
+ n&&e<n)for(b=n;b>e;b--)g=f[b],g.rendered&&g.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,d=e.length,g=(this.idxr||{})[c];for(c=g;c!==(g+=a)&&!(0<=g&&d>g);)if(b&&d)g=1===a?-1:d,b=!1;else return null;c=e[g];return null==
86
+ c||null==this.rows[c]?(l("Bad next: ["+g+"] 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,x=k.childNodes;++c<d;)b=e[c],
93
+ b.rendered||b.render(x);d=a.length;for(c=0;c<d;c++)x[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,y));m.register("$38",function(f,d,E){function l(a,b){var c=a.id,e=c&&r[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,n=g(d.el),c=b["offset"+c],p=d.el,f=p.className;null==c&&(c=b[k]-g(a));c&&(n+=c);p.className=f+" is-resizing";return{done:function(){p.className=
95
+ f},move:function(a){d.resize(a[k]-n,e);return!0}}}function g(a,c){function e(){h(E).off("mousemove",d);s&&(s.done(),s=null);return!0}function d(a){s?s.move(a):e();return!0}if(s)return!0;s=l(a.target,a);if(!s)return!0;h(E).one("mouseup",e).on("mousemove",d);return b(a)}function c(a,b){var c=b.type;"touchmove"===c?s&&s.move(b):"touchstart"===c?s=l(a.target,b):"touchend"===c&&s&&(s.done(),s=null)}function b(a){a.stopPropagation();a.preventDefault();return!1}function a(a){var b=D;b&&b.redraw();a&&a.redraw();
96
+ return D=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;r[b]=this;this.clear()}var n=m.include("$44","html.js")||m.include("$2","html.js",!0),k=m.require("$21","dom.js"),z=k.top,A=k.left,q=1,r={},D,s=!1;f.init=function(a){var b=new p(a);b.redraw();m.require("$45","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=r[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&&r[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;r[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 r[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===r[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 r[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,n=c.offsetTop||0,k=n>k?0:k-n;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(n=2===this.dir?"height":
103
+ "width";0!==c--;)e=this.cells[c],k?d=1:(e.fixed&&(e.pos=e.fixed/h(b)[n]()),d=g-e.pos,g=e.pos),e.el.style[n]=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("$46","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("$36","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("$47","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");p=a;z.data("idx",a);b.fire("wgTabSelect",[a]);return d}var d=this,g=d.cells,n=d.nav,p,f=[];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");
109
+ if(null==c)return!0;if(null!=p){var k=f[p];h(g[p].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,y));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("$36","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,r=5,D,s,w=m.require("$35","string.js").html,v=m.require("$6","string.js").sprintf;f.extend=function(a){return a.prototype=new b};f.localise=function(a){s=a;return f};var B=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("$37","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=s||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[r]=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("$38","wingrid.js").init(a);h(d).on("resize",b);this.redraw=b;h(a).on("wgFocus wgBlur",function(a,b){a.stopPropagation();D=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,n=this.po;null!=(d=e.next(a,c,d));){if(g===d){d=null;break}if(b&&(k=n.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(),n=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=n,a.fire("poFilter",["",n]));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 p,c=a.getListColumns();for(p in c)e.sortable(c[p]);b&&e.thead().distribute(b);e.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())}),
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,n=this.labels,
122
+ p=[],f=a.tags(),z=f&&f.length;if(d=a.context())p.push("<span>"+w(n[q])+"</span>"),p.push("<mark>"+w(d)+"</mark>");if(z&&this.getTag)for(p.push("<span>Tagged:</span>");0<=--z;)(d=this.getTag(f[z]))&&p.push('<mark class="tag">'+w(d.mod_name)+"</mark>");p.length&&e.push(p.join(" "));if(this.getMono()&&(d=a.refs())&&(f=d.split(/\s/),z=f.length)){for(p=[];0<=--z;)d=f[z],p.push("<code>"+w(d)+"</code>");e.push('<p class="has-icon icon-file">'+p.join(" ")+"</p>")}(d=a.notes())&&e.push('<p class="has-icon icon-info">'+
123
+ w(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">'+w(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;s.setSrcMeta(b,a)&&(h=!0);if(b.plural()){var h=-1,q=[],r=[],l=a.id+"-",A=b.sourceForms()||e&&e.plurals||
125
+ ["One","Other"],m=A.length;if(2!==m||"="===A[0].charAt(0)&&"=1"!==A[0])for(;++h<m;)q[h]=l+String(h),r[h]=c(A[h])+":";else q=[l+"-0",l+"-1"],r=[L[k],L[z]];a.splity.apply(a,q);a.each(function(a,c){a.header(r[c]).textarea(b.source(null,c),p).setStrf(C).setMode(w).setInvs(B)});a.lock();p&&a.each(function(a,b){f(a,b)})}else h&&a.redraw(),a.textarea(b.source(),p).setStrf(C).setMode(w).setInvs(B),p&&f(a,0)}function f(c,d){c.on(e,function(a,c){b.source(c,d);0===d&&s.updateListCell(b,"source");s.unsave(b,
126
+ d)}).on(p,function(){0===d&&s.po.reIndex(b);s.dict&&s.rebuildSearch();s.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&&s.setSrcMeta(b,a)&&(k=!0);s.setTrgMeta(b,d,a)&&(k=!0);s.setStatus(b,d);if(b.pluralized()){var n=[],p=[],f=a.id+"-",z=b.targetForms()||e.plurals||["One","Other"],k=z.length,q=function(a){var b=z[a];p.push(b?c(b,!0):"Form "+a);n.push(f+String(a))};for(b.each(q);(e=
127
+ n.length)<k;)q(e);a.splitx.apply(a,n);a.each(function(a,c){var e=M&&!b.disabled(c);a.textarea(b.translation(c),e).setStrf(C).setMode(w).setInvs(B);M&&l(a,c)});a.navigize(p,d||null).on("wgTabSelect",function(c,e){var d=M&&c.cell.editable();d&&d.focus();s.setTrgMeta(b,e,a);s.setStatus(b,e);s.fire("poTab",[e])})}else k&&a.redraw(),a.textarea(b.translation(),M&&!b.disabled(0)).setStrf(C).setMode(w).setInvs(B),M&&l(a,0)}function l(c,d){c.on(e,function(a,c,e){b.translate(c,d);0===d&&s.updateListCell(b,
128
+ "target");b.fuzzy(d)?s.fuzzy(!1,b,d):s.unsave(b,d);""===c?(s.fire("poEmpty",[!0,b,d]),s.setStatus(b,d)):""===e&&(s.fire("poEmpty",[!1,b,d]),s.setStatus(b,d))}).on(p,function(){s.dict&&s.rebuildSearch();s.fire(a,[b])})}function m(c){c.off();var d=L[q];c.titled()!==d&&(g(c,d),s.setStatus(null));c.textarea(b.context(),!0).setMode(w).setInvs(B);X&&c.on(e,function(a,c){b.context(c);s.updateListCell(b,"source");s.unsave(b,O)}).on(p,function(){s.po.reIndex(b);s.dict&&s.rebuildSearch();s.fire(a,[b])})}function u(a){var c=
129
+ L[r];a.titled()!==c&&g(a,c);a.off().on(e,function(a,c){b.comment(c);s.fire("poComment",[b,c]);s.unsave(b,O)}).textarea(b.comment(),!0)}var s=this,w=s.mode,E=b.isHTML(),B=s.inv||!1,y=this.fmt||null,C=b.format()||null,I=b.is(s.active),O=0,T=s.sourceCell,S=s.targetCell,U=s.contextCell,V=s.commentCell,M=s.editable.target,J=s.editable.source,X=s.editable.context,P=D,Y=s.sourceLocale,W=s.targetLocale,L=s.labels;s.html!==E&&(s.html=E,"code"!==s.mode&&(w=E?"html":"",s.setMode(w)));s.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());y!==C&&(this.fmt=C);I||s.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("&")?B(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,y));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,y));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,y));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,y));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,y));m.register("$39",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,y));m.register("$27",function(f,d,h){function l(){}f.extend=function(d){return d.prototype=new l};d=l.prototype=m.require("$37","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("$36",
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("$39","list.js").init();++d<b;)a.push(c[d]);return a};d=null;return f}({},v,y));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||[],f=d.length;0!==f--;)c=d[f],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,f=Math.max(a.length,d.length);++b<f;)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,y));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(),f=b.getUTCHours(),b=b.getUTCMinutes();return a(c,4)+"-"+a(d,2)+"-"+a(e,2)+" "+a(f,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,f,g,h,l,m,s=(g=this.locale())&&g.nplurals||2,w=[];++b<a.length;)d=a[b],null==d.parent?
162
+ (f=d.source||d.id,g=d.target||"",h=d.context,f||h?(l=new e(f,g),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 g&&(this.head=g,this.headcmt=d.comment)):w.push(d);for(b=-1;++b<w.length;)try{d=w[b];f=d.source||d.id;l=a[d.parent]&&a[d.parent].message;
163
+ if(!l)throw Error("parent missing for plural "+f);m=d.plural;1===m&&l.plural(f);m>=s||(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=[],f=[],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)f.push(a+": "+g[a]);f=new e("",f.join("\n"));f.comment(this.headcmt||
164
+ "");h&&f.fuzzy(0,!0);d.push(f.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=[],f;(f=this.cmt)&&e.push(a.prefix(f,"# "));(f=this.xcmt)&&e.push(a.prefix(f,"#. "));d=this.rf;if(f=this._id)d+=(d?" ":"")+"loco:"+f;
165
+ d&&/\S/.test(d)&&e.push(a.refs(d));!b&&this.fuzzy()&&e.push("#, fuzzy");(f=this.fmt)&&e.push("#, "+f+"-format");(f=this._ctx)&&e.push(a.prefix(a.pair("msgctxt",f),"#| "));if(f=this._src)f[0]&&e.push(a.prefix(a.pair("msgid",f[0]),"#| ")),f[1]&&e.push(a.prefix(a.pair("msgid_plural",f[1]),"#| "));(f=this.ctx)&&e.push(a.pair("msgctxt",f));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])),f=this.msg||
166
+ ["",""],c=c||f.length;++d<c;)e.push(a.pair("msgstr["+d+"]",b?"":f[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,y));m.register("$17",function(f,d,m){f.init=function(d,f){function c(){return p||
167
+ (p=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,f=h("<ol></ol>").attr("class",a.type);++d<e;)h("<li></li>").html(b[d]).appendTo(f);f.find("li").eq(a.line-1).attr("class","highlighted");c().dialog("close").html("").dialog("option",
168
+ "title",a.path+":"+a.line).append(f).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 p;return{load:function(n){c().html('<div class="loco-loading"></div>').dialog("option","title","Loading..").off("dialogopen").dialog("open").on("dialogopen",e);n=h.extend({ref:n,path:f.popath},f.project||{});d.ajax.post("fsReference",n,a,b)}}};return f}({},v,y));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 r[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,B=e.isHtml(g),B=r[B?1:0],u=B.sources;if(B.length+q>l||u.length===k)B=b(B),u=B.sources;u.push(g);m[g]=[a];B.length+=q;f+=q;h+=1}}}var e=this.api,f=0,h=0,k=50,l=5E3,m={},q=[],r=[];b({html:!1});b({html:!0});d.each(function(b,
170
+ c){a(c,0);a(c,1)});r=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,g){b!==g&&(a===d||1<c&&f.source(null,1)===a)&&(f.translate(b,c),l++,w++);return l}if(!c())return!1;if(!b)return!0;var f,g=m[a]||[],k=g.length,p=-1,l;for(v++;++p<k;)if(f=g[p])l=0,f.each(e),l&&h("each",[f]);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,r,b.html,d).fail(a).always(e):e():f()}function a(){k.abort();f()}function e(){s++;h("prog",[s,B]);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||[],r=k.locale,v=0,s=0,w=0,y=k.length,B=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(y-v,0)},did:function(){return v}}}}};return f}({},v,y));m.register("$40",{nn:["no"]});m.register("$31",function(f,d,h){function l(){}function g(c){c.parseError=function(b){return b&&b.code&&200!==b.code&&b.message?"Error "+b.code+": "+b.message:""};c.batch=function(b,a,d,f){function g(c){for(var d=b.length,e=-1;++e<d&&!1!==f(b[e],c[e]||"",a););}d=d?"html":"plain";var k=this.toLang(a);return c._call({url:"https://translate.yandex.net/api/v1.5/tr.json/translate?format="+
173
+ d+"&lang=en-"+k,method:"POST",traditional:!0,data:{key:c.key(),text:b}}).done(function(a,b,d){a&&200===a.code?g(a.text||[]):(c.stderr(c.parseError(a)||c.httpError(d)),g([]))}).fail(function(){g([])})}}f.create=function(c){var b=l.prototype=new c;b.toString=function(){return"Yandex.Translate"};b.getId=function(){return"yandex"};b.getUrl=function(){return"https://translate.yandex.com/"};b.init=function(a){c.prototype.init.call(this,a);/^trnsl\./.test(this.key())&&g(this)};b.toLang=function(a){return this.mapLang(a,
174
+ m.require("$40","yandex.json"))};return new l};return f}({},v,y));m.register("$41",{zh:["zh","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,f=-1;++f<d;)b.push(a[f].message||"");return"Error "+c.error.code+
175
+ ": "+b.join(";")}return""};d.batch=function(c,b,a,d){function f(a){for(var g=c.length,k=-1,h;++k<g&&(h=a[k]||{},!1!==d(c[k],h.translatedText||"",b)););}var g=this;a=a?"html":"text";var k=g.mapLang(b,m.require("$41","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?f(a.data.translations||[]):(g.stderr(g.parseError(a)||g.httpError(c)),f([]))}).fail(function(){f([])})};
176
+ return new l};return f}({},v,y));m.register("$42",{nn:["no"],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"};
177
+ d.parseError=function(c){return c&&c.error?c.error.message:""};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("$42","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",
178
+ "Ocp-Apim-Subscription-Key":this.key(),"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,y));m.register("$43",{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"};
179
+ d.parseError=function(c){return c.message};d.batch=function(c,b,a,d){function f(a){for(var g=c.length,k=-1,h;++k<g&&(h=a[k]||{},!1!==d(c[k],h.text||"",b)););}var g=this;a=g.mapLang(b,m.require("$43","deepl.json"));var k=String(b.variant).toLowerCase(),h="default";"formal"===k?h="more":"informal"===k&&(h="less");return g._call({url:"https://api.deepl.com/v2/translate",method:"POST",traditional:!0,data:{source_lang:"EN",target_lang:a.toUpperCase(),formality:h,preserve_formatting:"1",auth_key:g.key(),
180
+ 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};return f}({},v,y));m.register("$18",function(f,d,v){function l(){this.inf={}}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=
181
+ 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=(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=
182
+ function(a,b){var c=String(a).replace("-","_"),d=a.lang,f=b[c]||b[d]||[],g=f.length;if(0===g)return d;if(1<g)for(var c=c.toLowerCase(),d=-1,h;++d<g;)if(h=f[d],h.toLowerCase().replace("-","_")===c)return h;return f[0]};c.toLang=function(a){return String(a)};c.translate=function(a,b,c){return this.batch([a],b,this.isHtml(a),c)};c._call=function(a){var b=this;b.state=null;a.cache=!0;a.dataType="json";a.error=function(a,c,d){try{var f=a.responseText,g=f&&m.require("$5","json.js").parse(f);d=g&&b.parseError(g)||
183
+ 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=g())).sniff(a)};c.createJob=function(){return m.require("$30","job.js").create(this)};c.batch=function(a,b,c,f){function g(c){for(var d=a.length,k=-1;++k<d&&!1!==f(a[k],c[k],b););}var l=d.loco.ajax;c={hook:this.getId(),type:c?"html":"text",locale:this.toLang(b),
184
+ sources:a};var m=h.Deferred();this.abortable(l.post("apis",c,function(a){g(a&&a.targets||[]);m.resolve()},function(){g([]);m.reject()}));return m.promise()};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):new l;b.init(a);return b};f.suggest=function(a,b,c,d){var f,g,h=a.length;for(f=0;f<h;f++)g=a[f],g.translate(b,
185
+ c,d)};var b;return f}({},v,y));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(s)),R=!1);if(B&&J){var a=J,c=h(Q);c.find("span.loco-msg").text(a);
186
+ K||(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(B)return H&&H.dialog("close"),c(),h(f).find('button[type="submit"]').attr("disabled",!1),h(d).triggerHandler("resize"),y&&y(!0),!0;x&&H?(R||(h(s).removeClass("jshide").hide().fadeIn(500),R=!0),K&&(b(h(Q)),K=!1)):c();h(f).find('input[type="submit"]').attr("disabled",!0);y&&y(!1);return!1}function e(a){var b,c,d=r||{};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);C=!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 z(b){B=b.authed;w=b.method;h(s).find("span.loco-msg").text(b.message||"Something went wrong.");J=b.warning||"";b.notice&&u.notices.info(b.notice);if(B)"direct"!==
188
+ w&&(r=b.creds,e(f),C&&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 v(){a()}function q(a){C=!1;u.ajax.setNonce("fsConnect",
189
+ N).post("fsConnect",a,z,v);return a}var r,y,s=f,w=null,C=!1,B=!1,u=d.loco,x=f.path.value,F=f.auth.value,N=f["loco-nonce"].value,I=h(s).find("button.button-primary"),Q=m.getElementById(s.id+"-warn"),R=!1,K=!1,J="",H;u.notices.convert(Q).stick();f.connection_type?(r={},r.connection_type=f.connection_type.value,B=!0):x&&F&&q({path:x,auth:F});a();return{applyCreds:function(a){if(a.nodeType)e(a);else{var b,c=r||{};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(){x=f.path.value;F=f.auth.value;q(h(f).serializeArray());return this},listen:function(a){y=a;B&&a(!0);return this},authed:function(){return B}}};return f}({},v,y));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",s).remove();++c<d;)s.appendChild(a[c].$)}function c(a){q=a?y.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,r,v,s=a.getElementsByTagName("tbody")[0],w=a.getElementsByTagName("thead")[0],y=m.require("$10","fulltext.js").init();w&&s&&(h("th",w).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);r&&r.removeClass("loco-desc loco-asc");r=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",s).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;y.index(a,h)}),a=h('form.loco-filter input[type="text"]',a.parentNode),a.length&&(a=a[0],w=h(a.form),1<d.length?m.require("$11","LocoTextListener.js").listen(a,c):w.hide(),w.on("submit",function(a){a.preventDefault();return!1})))};return f}({},v,y));var C=v.loco||{},I=C.conf||{$v:[0,0]};v=m.require("$1","t.js").init();y=I.wplang;C.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");C.l10n=v;v.load(I.wpl10n);y&&v.pluraleq(y.pluraleq);C.string=m.require("$6","string.js");C.notices=m.require("$7","notices.js").init(v);C.ajax=m.require("$8","ajax.js").init(I).localise(v);C.locale=m.require("$9","wplocale.js");C.fulltext=m.require("$10","fulltext.js");C.watchtext=m.require("$11","LocoTextListener.js").listen;C.tooltip=m.require("$12","tooltip.js");C.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")};C.apis=m.require("$18","apis.js");C.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)});C.validate=function(f){return"2.5.1"!==(/^\d+\.\d+\.\d+/.exec(f&&f[0]||"")&&RegExp.lastMatch)?(C.notices.warn("admin.js is the wrong version (2.5.1). Please empty all relevant caches and reload this page."),!1):!0}})(window,
196
  document,window.jQuery);
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,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);
1
+ !function(S,k){var C=S.loco,i=C&&C.conf,c=document.getElementById("loco-editor-inner");if(C&&i&&c){var D,r,n,z,m,a,u=!!i.WP_DEBUG,l=C.po.ref&&C.po.ref.init(C,i),d=null,s=null,o=i.multipart,t=C.l10n,h=C.string.sprintf,T=i.locale,b=C.po.init(T).wrap(i.powrap),p=!T,e=document.getElementById("loco-actions"),f=i.popath,g=i.potpath,v=String(i.syncmode).toLowerCase(),y=document.getElementById("loco-fs"),w=y&&C.fs.init(y),x=i.readonly,I=!x,j={},M=0,L={my:"top",at:"top",of:"#loco-content"};!o||S.FormData&&S.Blob||(o=!1,C.notices.warn("Your browser doesn't support Ajax file uploads. Falling back to standard postdata")),l||C.notices.warn("admin.js is out of date. Please empty your browser cache and reload the page.");var E,U,P=(U=parseInt(k(c).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}(c,document.body),t=S.innerHeight,o=Math.max(U,t-n-20);E!==o&&(c.style.height=String(o)+"px",E=o)});P(),k(S).resize(P),c.innerHTML="",D=C.po.ed.init(c).localise(t),C.po.kbd.init(D).add("save",I?function(){D.dirty&&W()}:J).add("hint",T&&I&&R||J).enable("copy","clear","enter","next","prev","fuzzy","save","invis","hint");var q={save:I&&function(t){function o(){t.disabled=!0}function n(){t.disabled=!1}function e(){n(),k(t).removeClass("loco-loading")}return t,D.on("poUnsaved",function(){n(),k(t).addClass("button-primary")}).on("poSave",function(){o(),k(t).removeClass("button-primary")}),s=k.extend({path:f},i.project||{}),k(t).on("click",function(n){return n.preventDefault(),o(),k(t).addClass("loco-loading"),W(e),!1}),!0},sync:I&&function(t){var n=i.project;if(n){function o(){t.disabled=!0}function e(){t.disabled=!1}function a(){e(),k(t).removeClass("loco-loading")}D.on("poUnsaved",function(){o()}).on("poSave",function(){e()}),d={bundle:n.bundle,domain:n.domain,type:p?"pot":"po",path:f||"",sync:g||"",strip:"pot"===v?"1":""},k(t).on("click",function(n){return n.preventDefault(),o(),k(t).addClass("loco-loading"),O(a),!1}),e()}return!0},revert:function(n){return D.on("poUnsaved",function(){n.disabled=!1}).on("poSave",function(){n.disabled=!0}),k(n).on("click",function(n){return n.preventDefault(),location.reload(),!1}),!0},invs:function(n){var o=k(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}),C.tooltip.init(o),!0},code:function(n){var o=k(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}),C.tooltip.init(o),!0},source:G,binary:p?null:G};p?(q.add=I&&function(n){return n.disabled=!1,k(n).on("click",function(n){n.preventDefault();var t,o=1,e=/(\d+)$/;for(t="New message";b.get(t);)o=e.exec(t)?Math.max(o,Number(RegExp.$1)):o,t="New message "+ ++o;return D.add(t),!1}),!0},q.del=I&&function(n){return n.disabled=!1,k(n).on("click",function(n){return n.preventDefault(),D.del(),!1}),!0}):q.auto=function(n){function t(){n.disabled=!1}return D.on("poUnsaved",function(){n.disabled=!0}).on("poSave poAuto",function(){t()}),k(n).on("click",H),t(),!0},k("#loco-editor > nav .button").each(function(n,t){var o=t.getAttribute("data-loco"),e=q[o];e&&e(t,o)||k(t).addClass("loco-noop")}),k(e).on("submit",J),function(t){function e(n){k(t.parentNode)[n||null==n?"removeClass":"addClass"]("invalid")}D.searchable(C.fulltext.init()),t.disabled=!1;var a=t.value="",i=C.watchtext(t,function(n){e(D.filter(n,!0))});D.on("poFilter",function(n,t,o){a=i.val(),i.val(t||""),e(o)}).on("poMerge",function(){a&&D.filter(a)})}(document.getElementById("loco-search")),D.on("poUnsaved",function(){S.onbeforeunload=Y}).on("poSave",function(){K(),S.onbeforeunload=null}).on("poHint",R).on("poUpdate",K).on("poMeta",function(n,t){var o,e,a=(e="CODE",(o=t).tagName===e?o:o.getElementsByTagName(e)[0]);return!a||!l||(l.load(a.textContent),n.preventDefault(),!1)}),b.load(i.podata),D.load(b),(T=D.targetLocale)?T.isRTL()&&k(c).addClass("trg-rtl"):D.unlock(),K(),delete C.conf,i=q=null}function B(n){return C.l10n._(n)}function N(n,t,o){return C.l10n.n(n,t,o)}function O(s){C.ajax.post("sync",d,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;b.clear().load(e),D.load(b),i||r||l?(o?t.push(h(B("Merged from %s"),o)):t.push(B("Merged from source code")),i&&t.push(h(N("%s new string added","%s new strings added",i),i.format(0))),r&&t.push(h(N("%s obsolete string removed","%s obsolete strings removed",r),r.format(0))),l&&t.push(h(N("%s string marked Fuzzy","%s strings marked Fuzzy",l),l.format(0))),k(c).trigger("poUnsaved",[]),K(),u&&S.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(h(B("Strings up to date with %s"),o)):t.push(B("Strings up to date with source code")),C.notices.success(t.join(". ")),k(c).trigger("poMerge",[n]),s&&s()},s)}function A(){return n=n||function(){for(var n,t=-1,o=[],e=r,a=e.length;++t<a;)try{n=e[t],o.push(C.apis.create(n))}catch(n){C.notices.error(String(n))}return o}()}function F(t){var o;function e(){return(new Date).getTime()}p||x?C.notices.error("Logic error. APIs not available in current mode"):null==r||0===r.length||10<Math.round((e()-M)/1e3)?(a&&a.remove(),a=null,m&&m.remove(),m=null,z&&z.remove(),r=z=null,o=k('<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:L,height:200}),C.ajax.get("apis",{locale:String(T)},function(n){M=e(),0===(r=n&&n.apis||[]).length?a=$("loco-apis-empty",n.html):m=$("loco-apis-batch",n.html),o.remove(),t(r)})):(M=e(),t(r))}function $(n,t){var o=k(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:L}),o}function R(){F(function(n){n.length?function(){var n=D.current(),t=D.getTargetOffset(),o=n&&n.source(null,t),p='lang="'+String(T)+'" dir="'+(T.isRTL()?"RTL":"LTR")+'"',f=99;if(!o)return;function e(n){return!n.isDefaultPrevented()&&(!(0<=(t=n.which-49)&&t<10&&(o=v&&v.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=w[a],r=String(i+1),l=e.getUrl(),s=B("Use this translation"),c=String(e),u=b&&b[a],d=k('<button class="button button-primary"></button>').attr("tabindex",String(1+f+i)).on("click",function(e,a){return function(n){n.preventDefault(),n.stopPropagation(),g();var t=D.current(),o=D.getTargetOffset();t&&t.source(null,o)===e?(t.translate(a,o),D.focus().reloadMessage(t)):C.notices.warn("Source changed since suggestion")}}(n,t));d.attr("accesskey",r),1<m.length&&(s+=" ("+r+")"),d.text(s),u&&u.replaceWith(k('<div class="loco-api loco-api-'+a+'"></div>').append(k('<a class="loco-api-credit" target="_blank" tabindex="-1"></a>').attr("href",l).text(c)).append(k("<blockquote "+p+"></blockquote>").text(t||"FAILED")).append(d)),++y===h&&(v&&v.dialog("option","title",B("Suggested translations")+" — "+o.label),f+=y),0===i&&d.focus()}function g(n){v&&null==n&&v.dialog("close"),b=v=null,k(S).off("keydown",e)}function i(e){return function(n,t,o){a(n,u[e.getId()]=t,o,e)}}var v=(z=z||$("loco-apis-hint","<div></div>")).html("").append(k('<div class="loco-api"><p>Source text:</p></div>').append(k('<blockquote lang="en"></blockquote>').text(o))).dialog("option","title",B("Loading suggestions")+"...").off("dialogclose").on("dialogclose",g).dialog("open"),r=n.translation(t);r&&k('<div class="loco-api"><p>Current translation:</p></div>').append(k("<blockquote "+p+"></blockquote>").text(r)).append(k('<button class="button"></button>').attr("tabindex",String(++f)).text(B("Keep this translation")).on("click",function(n){n.preventDefault(),g()})).appendTo(v);var l,s,m=A(),h=m.length,c=-1,u=j[o]||(j[o]={}),b={},y=0,w={};for(;++c<h;)l=m[c],v.append((d=l,void 0,x=k('<div class="loco-api loco-api-loading"></div>').text("Calling "+d+" ..."),b[d.getId()]=x)),s=l.getId(),w[s]=c,u[s]?a(o,u[s],T,l):l.translate(o,T,i(l));var d,x;k(S).on("keydown",e)}():_()})}function H(n){return n.preventDefault(),F(function(n){n.length?function(){var e,a,i,r=0,t=!1,l=m.dialog("open"),n=l.find("form"),s=n.find("button.button-primary"),o=k("#loco-job-progress");function c(){s[0].disabled=!0}function u(){s.removeClass("loco-loading")}function d(n){o.text(n)}function p(n){var t=function(n){for(var t,o=A(),e=o.length,a=-1;++a<e;)if((t=o[a]).getId()===n)return t;C.notices.error("No "+n+" client")}(k(n.api).val()),o=n.existing.checked;d("Calculating...."),(e=t.createJob()).init(b,o),a=t.toString(),d(h(B("%s unique source strings."),e.length.format(0))+" "+h(B("%s characters will be sent for translation."),e.chars.format(0))),e.length?s[0].disabled=!1:c(),i=null}function f(n){e&&(t&&n.fuzzy(0,!0),D.pasteMessage(n),n===D.active&&D.setStatus(n),D.unsave(n,0),r++)}function g(n,t){var o=t?100*n/t:0;d(h(B("Translation progress %s%%"),o.format(0)))}function v(){if(u(),e&&i){var n=i.todo();n&&C.notices.warn(h(N("Translation job aborted with %s string remaining","Translation job aborted with %s strings remaining",n),n.format(0))).slow();var t=[],o=i.did();o&&t.push(h(N("%1$s string translated via %2$s","%1$s strings translated via %2$s",o),o.format(0),a)),r?t.push(h(N("%s string updated","%s strings updated",r),r.format(0))):t.push(B("Nothing needed updating")),C.notices.success(t.join(". ")).slow(),i=e=null}r&&(K(),D.rebuildSearch()),l&&(l.off("dialogclose").dialog("close"),l=null),D.fire("poAuto")}u(),c(),C.notices.clear(),n.off("submit change"),p(n[0]),n.on("change",function(n){var t=n.target,o=t.name;return"api"!==o&&"existing"!==o||p(t.form),!0}).on("submit",function(n){n.preventDefault(),s.addClass("loco-loading"),c(),g(r=0),t=n.target.fuzzy.checked,i=e.dispatch().done(v).each(f).prog(g).stat()}),l.off("dialogclose").on("dialogclose",function(){e.abort(),l=null,v()})}():_()}),!1}function _(){a?a.dialog("open"):C.notices.error("Logic error. Unconfigured API modal missing")}function W(t){var n=k.extend({locale:String(b.locale()||"")},s||{});w&&w.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(b)],{type:"application/x-gettext"}),String(n.path).split("/").pop()||"untitled.po"):n.data=String(b),C.ajax.post("save",n,function(n){t&&t(),D.save(!0),k("#loco-po-modified").text(n.datetime||"[datetime error]")},t)}function Y(){return B("Your changes will be lost if you continue without saving")}function G(o,e){return o.disabled=!1,k(o).on("click",function(){var n=o.form,t=f;return"binary"===e&&(t=t.replace(/\.po$/,".mo")),n.path.value=t,n.source.value=b.toString(),!0}),!0}function J(n){return n.preventDefault(),!1}function K(){var n=D.stats(),t=n.t,o=n.f,e=n.u,a=h(N("%s string","%s strings",t),t.format(0)),i=[];T&&(a=h(B("%s%% translated"),n.p.replace("%",""))+", "+a,o&&i.push(h(B("%s fuzzy"),o.format(0))),e&&i.push(h(B("%s untranslated"),e.format(0))),i.length&&(a+=" ("+i.join(", ")+")")),k("#loco-po-status").text(a)}}(window,window.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.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,6 +100,16 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
100
 
101
  == Changelog ==
102
 
 
 
 
 
 
 
 
 
 
 
103
  = 2.5.0 =
104
  * PHP 8.0.0 compatibility
105
  * Bumped WordPress version to 5.6.0
@@ -397,7 +407,7 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
397
 
398
  == Upgrade Notice ==
399
 
400
- = 2.5.0 =
401
  * Various improvements and bugfixes
402
 
403
 
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.1
7
+ Stable tag: 2.5.1
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.1 =
104
+ * Support for new Yandex translate API
105
+ * Support for DeepL formality parameter
106
+ * Removed literal "1" and "one" instances from singular strings
107
+ * Buffering compiled JSON to support strings from multiple sources
108
+ * Added `loco_compile_single_json` filter for specifying custom JSON
109
+ * Added `loco_extracted_template` hook for adding custom strings
110
+ * Sync no longer removes the editor's current text filter
111
+ * Bumped WordPress version to 5.6.2
112
+
113
  = 2.5.0 =
114
  * PHP 8.0.0 compatibility
115
  * Bumped WordPress version to 5.6.0
407
 
408
  == Upgrade Notice ==
409
 
410
+ = 2.5.1 =
411
  * Various improvements and bugfixes
412
 
413
 
src/Locale.php CHANGED
@@ -127,10 +127,10 @@ class Loco_Locale implements JsonSerializable {
127
  throw new Loco_error_LocaleException('Locale must have a language');
128
  }
129
  // no UN codes in Wordpress
130
- if( is_numeric($tag['region']) ){
131
  throw new Loco_error_LocaleException('Numeric regions not supported');
132
  }
133
- // single, scalar variant. Only using for Formal german currently.
134
  if( is_array($tag['variant']) ){
135
  $tag['variant'] = implode('_',$tag['variant']);
136
  }
@@ -490,6 +490,6 @@ class Loco_Locale implements JsonSerializable {
490
 
491
  // Depends on compiled library
492
  if( ! function_exists('loco_parse_wp_locale') ){
493
- loco_include('lib/compiled/locales.php');
494
  }
495
 
127
  throw new Loco_error_LocaleException('Locale must have a language');
128
  }
129
  // no UN codes in Wordpress
130
+ if( preg_match('/^\\d+$/',$tag['region']) ){
131
  throw new Loco_error_LocaleException('Numeric regions not supported');
132
  }
133
+ // non-standard variant code. e.g. formal/informal
134
  if( is_array($tag['variant']) ){
135
  $tag['variant'] = implode('_',$tag['variant']);
136
  }
490
 
491
  // Depends on compiled library
492
  if( ! function_exists('loco_parse_wp_locale') ){
493
+ loco_require_lib('compiled/locales.php');
494
  }
495
 
src/admin/bundle/SetupController.php CHANGED
@@ -111,7 +111,7 @@ class Loco_admin_bundle_SetupController extends Loco_admin_bundle_BaseController
111
  $n += count($files);
112
  }
113
  if( $n ){
114
- $notices[] = sprintf( _n("One file can't be matched to a known set of strings","%s files can't be matched to a known set of strings",$n,'loco-translate'), number_format($n) );
115
  }
116
  }
117
 
111
  $n += count($files);
112
  }
113
  if( $n ){
114
+ $notices[] = sprintf( _n("%s file can't be matched to a known set of strings","%s files can't be matched to a known set of strings",$n,'loco-translate'), number_format_i18n($n) );
115
  }
116
  }
117
 
src/admin/file/DeleteController.php CHANGED
@@ -96,7 +96,7 @@ class Loco_admin_file_DeleteController extends Loco_admin_file_BaseController {
96
  // warn about additional files that will be deleted along with this
97
  if( $deps = array_slice($files,1) ){
98
  $count = count($deps);
99
- $this->set('warn', sprintf( _n( 'One dependent file will also be deleted', '%u dependent files will also be deleted', $count, 'loco-translate' ), $count ) );
100
  $infos = array();
101
  foreach( $deps as $depfile ){
102
  $infos[] = Loco_mvc_FileParams::create( $depfile );
96
  // warn about additional files that will be deleted along with this
97
  if( $deps = array_slice($files,1) ){
98
  $count = count($deps);
99
+ $this->set('warn', sprintf( _n( '%s dependent file will also be deleted', '%s dependent files will also be deleted', $count, 'loco-translate' ), $count ) );
100
  $infos = array();
101
  foreach( $deps as $depfile ){
102
  $infos[] = Loco_mvc_FileParams::create( $depfile );
src/admin/file/MoveController.php CHANGED
@@ -82,11 +82,11 @@ class Loco_admin_file_MoveController extends Loco_admin_file_BaseController {
82
  // flash messages for display after redirect
83
  try {
84
  if( $count ) {
85
- Loco_data_Session::get()->flash( 'success', sprintf( _n( 'File moved', '%u files moved', $total, 'loco-translate' ), $total ) );
86
  }
87
  if( $total > $count ){
88
  $diff = $total - $count;
89
- Loco_data_Session::get()->flash( 'error', sprintf( _n( 'One file could not be moved', '%u files could not be moved', $diff, 'loco-translate' ), $diff ) );
90
  }
91
  Loco_data_Session::close();
92
  }
82
  // flash messages for display after redirect
83
  try {
84
  if( $count ) {
85
+ Loco_data_Session::get()->flash( 'success', sprintf( _n( '%s file moved', '%s files moved', $total, 'loco-translate' ), $total ) );
86
  }
87
  if( $total > $count ){
88
  $diff = $total - $count;
89
+ Loco_data_Session::get()->flash( 'error', sprintf( _n( '%s file could not be moved', '%s files could not be moved', $diff, 'loco-translate' ), $diff ) );
90
  }
91
  Loco_data_Session::close();
92
  }
src/admin/init/InitPoController.php CHANGED
@@ -17,7 +17,6 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
17
  }
18
 
19
 
20
-
21
  /**
22
  * {@inheritdoc}
23
  */
@@ -28,10 +27,10 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
28
  }
29
 
30
 
31
-
32
  /**
33
  * Sort to the left the best option for saving new translation files
34
- * @return Loco_mvc_ViewParams
 
35
  */
36
  private function sortPreferred( array $choices ){
37
  usort( $choices, array(__CLASS__,'_onSortPreferred') );
@@ -39,12 +38,15 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
39
  if( $best && ! $best['disabled'] ){
40
  return $best;
41
  }
 
42
  }
43
 
44
-
45
 
46
  /**
47
  * @internal
 
 
 
48
  */
49
  public static function _onSortPreferred( Loco_mvc_ViewParams $a, Loco_mvc_ViewParams $b ){
50
  $x = self::scoreFileChoice($a);
@@ -55,6 +57,7 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
55
 
56
  /**
57
  * Score an individual file choice for sorting preferred
 
58
  * @return int
59
  */
60
  private static function scoreFileChoice( Loco_mvc_ViewParams $p ){
@@ -72,7 +75,6 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
72
  }
73
 
74
 
75
-
76
  /**
77
  * @internal
78
  * @param int
@@ -87,7 +89,6 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
87
  }
88
 
89
 
90
-
91
  /**
92
  * {@inheritdoc}
93
  */
@@ -194,7 +195,7 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
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(),
200
  'path' => $meta->getPath(false),
@@ -222,7 +223,8 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
222
  return $this->view('admin/errors/no-tokenizer');
223
  }
224
  $nfiles = count( $project->findSourceFiles() );
225
- $summary = sprintf( _n('1 source file will be scanned for translatable strings','%s source files will be scanned for translatable strings',$nfiles,'loco-translate'), number_format_i18n($nfiles) );
 
226
  }
227
  // else prompt for template creation before continuing
228
  else {
@@ -326,5 +328,4 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
326
  return $this->view( 'admin/init/init-po', array() );
327
  }
328
 
329
-
330
- }
17
  }
18
 
19
 
 
20
  /**
21
  * {@inheritdoc}
22
  */
27
  }
28
 
29
 
 
30
  /**
31
  * Sort to the left the best option for saving new translation files
32
+ * @param Loco_mvc_ViewParams[]
33
+ * @return Loco_mvc_ViewParams|null
34
  */
35
  private function sortPreferred( array $choices ){
36
  usort( $choices, array(__CLASS__,'_onSortPreferred') );
38
  if( $best && ! $best['disabled'] ){
39
  return $best;
40
  }
41
+ return null;
42
  }
43
 
 
44
 
45
  /**
46
  * @internal
47
+ * @param Loco_mvc_ViewParams
48
+ * @param Loco_mvc_ViewParams
49
+ * @return int
50
  */
51
  public static function _onSortPreferred( Loco_mvc_ViewParams $a, Loco_mvc_ViewParams $b ){
52
  $x = self::scoreFileChoice($a);
57
 
58
  /**
59
  * Score an individual file choice for sorting preferred
60
+ * @param Loco_mvc_ViewParams
61
  * @return int
62
  */
63
  private static function scoreFileChoice( Loco_mvc_ViewParams $p ){
75
  }
76
 
77
 
 
78
  /**
79
  * @internal
80
  * @param int
89
  }
90
 
91
 
 
92
  /**
93
  * {@inheritdoc}
94
  */
195
  $meta = Loco_gettext_Metadata::load($potfile);
196
  $total = $meta->getTotal();
197
  // translators: 1: Number of strings; 2: Name of POT file; e.g. "100 strings found in file.pot"
198
+ $summary = sprintf( _n('%1$s string found in %2$s','%1$s strings found in %2$s',$total,'loco-translate'), number_format($total), $potfile->basename() );
199
  $this->set( 'pot', new Loco_mvc_ViewParams( array(
200
  'name' => $potfile->basename(),
201
  'path' => $meta->getPath(false),
223
  return $this->view('admin/errors/no-tokenizer');
224
  }
225
  $nfiles = count( $project->findSourceFiles() );
226
+ // translators: Were %s is number of source files that will be scanned
227
+ $summary = sprintf( _n('%s source file will be scanned for translatable strings','%s source files will be scanned for translatable strings',$nfiles,'loco-translate'), number_format_i18n($nfiles) );
228
  }
229
  // else prompt for template creation before continuing
230
  else {
328
  return $this->view( 'admin/init/init-po', array() );
329
  }
330
 
331
+ }
 
src/ajax/ApisController.php CHANGED
@@ -47,7 +47,7 @@ class Loco_ajax_ApisController extends Loco_mvc_AjaxController {
47
  // API client must be hooked in using loco_api_providers filter
48
  // this normally filters on Loco_api_Providers::export() but should do the same with an empty array.
49
  $config = null;
50
- foreach( apply_filters('loco_api_providers', array() ) as $candidate ){
51
  if( is_array($candidate) && array_key_exists('id',$candidate) && $candidate['id'] === $hook ){
52
  $config = $candidate;
53
  break;
@@ -64,7 +64,7 @@ class Loco_ajax_ApisController extends Loco_mvc_AjaxController {
64
  }
65
 
66
  // The front end sends translations detected as HTML separately. This is to support common external apis.
67
- // $isHtml = 'html' === $post->type;
68
 
69
  // We need a locale too, which should be valid as it's the same one loaded into the front end.
70
  $locale = Loco_Locale::parse( (string) $post->locale );
@@ -92,4 +92,19 @@ class Loco_ajax_ApisController extends Loco_mvc_AjaxController {
92
  }
93
 
94
 
95
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  // API client must be hooked in using loco_api_providers filter
48
  // this normally filters on Loco_api_Providers::export() but should do the same with an empty array.
49
  $config = null;
50
+ foreach( apply_filters('loco_api_providers', Loco_api_Providers::builtin() ) as $candidate ){
51
  if( is_array($candidate) && array_key_exists('id',$candidate) && $candidate['id'] === $hook ){
52
  $config = $candidate;
53
  break;
64
  }
65
 
66
  // The front end sends translations detected as HTML separately. This is to support common external apis.
67
+ $config['type'] = $post->type;
68
 
69
  // We need a locale too, which should be valid as it's the same one loaded into the front end.
70
  $locale = Loco_Locale::parse( (string) $post->locale );
92
  }
93
 
94
 
95
+ /**
96
+ * Built-in Yandex API v2 support.
97
+ * https://cloud.yandex.com/docs/translate/api-ref/
98
+ *
99
+ * @param string[] input strings
100
+ * @param Loco_Locale target locale for translations
101
+ * @param array our own api configuration
102
+ * @return string[] output strings
103
+ * @throws Loco_error_Exception
104
+ */
105
+ public function filter_loco_api_translate_yandex( array $sources, Loco_Locale $locale, array $config ){
106
+ $client = new Loco_api_YandexClient($config);
107
+ return $client->translate($sources,$locale);
108
+ }
109
+
110
+ }
src/ajax/MsginitController.php CHANGED
@@ -67,7 +67,9 @@ class Loco_ajax_MsginitController extends Loco_ajax_common_BundleController {
67
  }*/
68
 
69
  // Permit forcing of any parsable file as strings template
70
- if( $source = $post->source ){
 
 
71
  $potfile = new Loco_fs_LocaleFile( $source );
72
  $potfile->normalize( $base );
73
  $data = Loco_gettext_Data::load($potfile);
@@ -75,6 +77,10 @@ class Loco_ajax_MsginitController extends Loco_ajax_common_BundleController {
75
  if( $post->strip ){
76
  $data->strip();
77
  }
 
 
 
 
78
  }
79
  // else parse POT file if project defines one that exists
80
  else {
@@ -110,13 +116,24 @@ class Loco_ajax_MsginitController extends Loco_ajax_common_BundleController {
110
  $headers['X-Loco-Template-Mode'] = 'PO';
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() : '',
67
  }*/
68
 
69
  // Permit forcing of any parsable file as strings template
70
+ $source = (string) $post->source;
71
+ $compile = false;
72
+ if( '' !== $source ){
73
  $potfile = new Loco_fs_LocaleFile( $source );
74
  $potfile->normalize( $base );
75
  $data = Loco_gettext_Data::load($potfile);
77
  if( $post->strip ){
78
  $data->strip();
79
  }
80
+ // else we're copying target translations from given file
81
+ else {
82
+ $compile = true;
83
+ }
84
  }
85
  // else parse POT file if project defines one that exists
86
  else {
116
  $headers['X-Loco-Template-Mode'] = 'PO';
117
  }
118
  }
119
+
120
+ // finalize PO data ready to write to new file
121
  $locale->ensureName( new Loco_api_WordPressTranslations );
122
  $data->localize( $locale, $headers );
 
 
 
123
 
124
+ // compile all files in this set when copying target translation
125
+ $compiler = new Loco_gettext_Compiler($pofile);
126
+ if( $compile ){
127
+ $compiler->writeAll($data,$project);
128
+ }
129
+ // empty translations don't require compiled files, but adding MO for completeness.
130
+ else {
131
+ $compiler->writePo($data);
132
+ $data->clear();
133
+ $compiler->writeMo($data);
134
+ }
135
+
136
+ // return debugging information, used in tests.
137
  $this->set('debug',new Loco_mvc_ViewParams( array(
138
  'poname' => $pofile->basename(),
139
  'source' => $potfile ? $potfile->basename() : '',
src/ajax/SyncController.php CHANGED
@@ -82,8 +82,8 @@ class Loco_ajax_SyncController extends Loco_mvc_AjaxController {
82
  $n = count($list);
83
  $maximum = Loco_mvc_FileParams::renderBytes( wp_convert_hr_to_bytes( Loco_data_Settings::get()->max_php_size ) );
84
  $largest = Loco_mvc_FileParams::renderBytes( $extr->getMaxPhpSize() );
85
- // Translators: Where %2$s is the maximum size of a file that will be included and %3$s is the largest encountered
86
- $text = _n('One file has been skipped because it\'s %3$s. (Max is %2$s). Check all strings are present before saving.','%s files over %2$s have been skipped. (Largest is %3$s). Check all strings are present before saving.',$n,'loco-translate');
87
  $text = sprintf( $text, number_format($n), $maximum, $largest );
88
  // not failing, just warning. Nothing will be saved until user saves editor state
89
  Loco_error_AdminNotices::warn( $text );
@@ -91,22 +91,11 @@ class Loco_ajax_SyncController extends Loco_mvc_AjaxController {
91
  // Have source strings. These cannot contain any translations.
92
  $source = $extr->includeMeta()->getTemplate($domain);
93
  $translate = false;
94
- $strip = false;
95
  }
96
 
97
  // establish on back end what strings will be added, removed, and which could be fuzzy-matches
98
- $ntotal = 0;
99
- $nmatched = 0;
100
- $added = array();
101
- $dropped = array();
102
- $fuzzy = array();
103
- // add latest valid sources to matching instance
104
- $matcher = new LocoFuzzyMatcher;
105
- /* @var LocoPoMessage $new */
106
- foreach( $source as $new ){
107
- $matcher->add($new);
108
- $ntotal++;
109
- }
110
  // Fuzzy matching only applies to syncing PO files. POT files will always do hard sync (add/remove)
111
  if( 'po' === $type ){
112
  $fuzziness = Loco_data_Settings::get()->fuzziness;
@@ -118,39 +107,13 @@ class Loco_ajax_SyncController extends Loco_mvc_AjaxController {
118
  // update matches sources, deferring unmatched for deferred fuzzy match
119
  $merged = clone $target;
120
  $merged->clear();
 
 
 
121
  /* @var LocoPoMessage $old */
122
- foreach( $target as $old ){
123
- $new = $matcher->match($old);
124
- // if existing source is still valid, merge any changes
125
- if( $new instanceof LocoPoMessage ){
126
- $p = clone $old;
127
- $p->merge($new,$translate);
128
- $merged->push($p);
129
- $nmatched++;
130
- }
131
- }
132
- // Attempt fuzzy matching after all exact matches have been processed
133
- if( $nmatched !== $ntotal ){
134
- foreach( $matcher->getFuzzyMatches() as $pair ){
135
- list($old,$new) = $pair;
136
- $p = clone $old;
137
- $p->merge($new);
138
- $merged->push($p);
139
- $fuzzy[] = $p->getKey();
140
- }
141
- // Any unmatched strings remaining are NEW
142
- /* @var LocoPoMessage $new */
143
- foreach( $matcher->unmatched() as $new ){
144
- $p = clone $new;
145
- $strip and $p->strip();
146
- $merged->push($p);
147
- $added[] = $p->getKey();
148
- }
149
- // any deferred matches not resolved are dropped
150
- /* @var LocoPoMessage $old */
151
- foreach( $matcher->redundant() as $old ){
152
- $dropped[] = $old->getKey();
153
- }
154
  }
155
  // return to JavaScript with stats in the same form as old front end merge
156
  $this->set( 'done', array (
82
  $n = count($list);
83
  $maximum = Loco_mvc_FileParams::renderBytes( wp_convert_hr_to_bytes( Loco_data_Settings::get()->max_php_size ) );
84
  $largest = Loco_mvc_FileParams::renderBytes( $extr->getMaxPhpSize() );
85
+ // Translators: (1) Number of files (2) Maximum size of file that will be included (3) Size of the largest encountered
86
+ $text = _n('%1$s file has been skipped because it\'s %3$s. (Max is %2$s). Check all strings are present before saving.','%1$s files over %2$s have been skipped. (Largest is %3$s). Check all strings are present before saving.',$n,'loco-translate');
87
  $text = sprintf( $text, number_format($n), $maximum, $largest );
88
  // not failing, just warning. Nothing will be saved until user saves editor state
89
  Loco_error_AdminNotices::warn( $text );
91
  // Have source strings. These cannot contain any translations.
92
  $source = $extr->includeMeta()->getTemplate($domain);
93
  $translate = false;
 
94
  }
95
 
96
  // establish on back end what strings will be added, removed, and which could be fuzzy-matches
97
+ $matcher = new Loco_gettext_Matcher;
98
+ $matcher->loadRefs($source,$translate);
 
 
 
 
 
 
 
 
 
 
99
  // Fuzzy matching only applies to syncing PO files. POT files will always do hard sync (add/remove)
100
  if( 'po' === $type ){
101
  $fuzziness = Loco_data_Settings::get()->fuzziness;
107
  // update matches sources, deferring unmatched for deferred fuzzy match
108
  $merged = clone $target;
109
  $merged->clear();
110
+ $matcher->mergeValid($target,$merged);
111
+ $fuzzy = $matcher->mergeFuzzy($merged);
112
+ $added = $matcher->mergeAdded($merged);
113
  /* @var LocoPoMessage $old */
114
+ $dropped = array();
115
+ foreach( $matcher->redundant() as $old ){
116
+ $dropped[] = $old->getKey();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  }
118
  // return to JavaScript with stats in the same form as old front end merge
119
  $this->set( 'done', array (
src/api/WordPressTranslations.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- *
4
  */
5
  class Loco_api_WordPressTranslations {
6
 
@@ -31,7 +31,7 @@ class Loco_api_WordPressTranslations {
31
 
32
  /**
33
  * Wrap wp_get_available_translations
34
- * @return array
35
  */
36
  private function wp_get_available_translations(){
37
  if( ! function_exists('wp_get_available_translations') ){
@@ -51,7 +51,8 @@ class Loco_api_WordPressTranslations {
51
  if( is_null($locales) ){
52
  $locales = array();
53
  // get official locales from API if we have network
54
- if( $cached = $this->wp_get_available_translations() ){
 
55
  $english_name = 'english_name';
56
  $native_name = 'native_name';
57
  }
@@ -81,7 +82,6 @@ class Loco_api_WordPressTranslations {
81
  }
82
 
83
 
84
-
85
  /**
86
  * Wrap get_available_languages
87
  * @return string[]
@@ -112,6 +112,7 @@ class Loco_api_WordPressTranslations {
112
 
113
  /**
114
  * Check if a given locale is installed
 
115
  * @return bool
116
  */
117
  public function isInstalled( $locale ){
@@ -121,6 +122,7 @@ class Loco_api_WordPressTranslations {
121
 
122
  /**
123
  * Get WordPress locale data by strictly well-formed language tag
 
124
  * @return Loco_Locale
125
  */
126
  public function getLocale( $tag ){
1
  <?php
2
  /**
3
+ * Wrapper for WordPress language availability
4
  */
5
  class Loco_api_WordPressTranslations {
6
 
31
 
32
  /**
33
  * Wrap wp_get_available_translations
34
+ * @return array[]
35
  */
36
  private function wp_get_available_translations(){
37
  if( ! function_exists('wp_get_available_translations') ){
51
  if( is_null($locales) ){
52
  $locales = array();
53
  // get official locales from API if we have network
54
+ $cached = $this->wp_get_available_translations();
55
+ if( is_array($cached) && $cached ){
56
  $english_name = 'english_name';
57
  $native_name = 'native_name';
58
  }
82
  }
83
 
84
 
 
85
  /**
86
  * Wrap get_available_languages
87
  * @return string[]
112
 
113
  /**
114
  * Check if a given locale is installed
115
+ * @param string|Loco_Locale
116
  * @return bool
117
  */
118
  public function isInstalled( $locale ){
122
 
123
  /**
124
  * Get WordPress locale data by strictly well-formed language tag
125
+ * @param string
126
  * @return Loco_Locale
127
  */
128
  public function getLocale( $tag ){
src/api/YandexClient.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Yandex Translation API v2
4
+ */
5
+ class Loco_api_YandexClient {
6
+
7
+ /**
8
+ * @var string
9
+ */
10
+ private $auth;
11
+
12
+ /**
13
+ * @var string
14
+ */
15
+ private $format;
16
+
17
+
18
+ public function __construct( array $config ){
19
+ if( 'html'=== $config['type'] ){
20
+ $this->format = 'HTML';
21
+ }
22
+ else {
23
+ $this->format = 'PLAIN_TEXT';
24
+ }
25
+ $this->auth = 'Api-Key '.$config['key'];
26
+ }
27
+
28
+
29
+ /**
30
+ * https://cloud.yandex.com/docs/translate/api-ref/Translation/translate
31
+ * @param string[]
32
+ * @param Loco_Locale already verified/mapped in front end
33
+ * @return string[]
34
+ */
35
+ public function translate( array $sources, Loco_Locale $locale ){
36
+ $json = json_encode( array (
37
+ 'sourceLanguageCode' => 'en',
38
+ 'targetLanguageCode' => (string) $locale,
39
+ 'format' => $this->format,
40
+ 'texts' => $sources,
41
+ ) );
42
+ $response = wp_remote_post('https://translate.api.cloud.yandex.net/translate/v2/translate',array(
43
+ 'body' => $json,
44
+ 'headers' => array (
45
+ 'user-agent' => 'Loco Translate/'.loco_plugin_version().'; WordPress/'.$GLOBALS['wp_version'],
46
+ 'content-type' => 'application/json',
47
+ 'content-length' => strlen($json),
48
+ 'authorization' => $this->auth,
49
+ ),
50
+ ));
51
+ if( $response instanceof WP_Error ){
52
+ $message = 'Unknown error';
53
+ foreach( $response->get_error_messages() as $message ){
54
+ Loco_error_AdminNotices::debug('Yandex error: '.$message);
55
+ }
56
+ throw new Loco_error_Exception( $message );
57
+ }
58
+ if( ! is_array($response) ){
59
+ throw new Loco_error_Exception('Expected array response from WordPress HTTP API');
60
+ }
61
+ // parse response and error accordingly
62
+ $json = $response['body'];
63
+ $data = json_decode($json,true);
64
+ if( 200 !== $response['response']['code'] ){
65
+ Loco_error_AdminNotices::debug( 'Yandex error response: '.$json );
66
+ if( is_array($data) && array_key_exists('message',$data) ){
67
+ $message = $data['message'];
68
+ }
69
+ else {
70
+ $message = $response['response']['message'];
71
+ }
72
+ throw new Loco_error_Exception('Yandex.Translate: Error '.$response['response']['code'].': '.$message);
73
+ }
74
+ // should have json response like {translations:[ {text:''},...]}
75
+ $targets = array();
76
+ foreach( $sources as $i => $text ){
77
+ if( isset($data['translations'][$i]) ){
78
+ $text = $data['translations'][$i]['text'];
79
+ }
80
+ $targets[$i] = $text;
81
+ }
82
+ return $targets;
83
+ }
84
+
85
+
86
+ /**
87
+ *
88
+ */
89
+ private function parseError(){
90
+
91
+ }
92
+
93
+
94
+
95
+
96
+ }
src/cli/Commands.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /**
3
  * Loco Translate commands
 
4
  */
5
  class Loco_cli_Commands {
6
 
@@ -32,7 +33,6 @@ class Loco_cli_Commands {
32
  *
33
  * @param string[]
34
  * @param string[]
35
- * @codeCoverageIgnore
36
  */
37
  public function sync( $args, $opts ){
38
  if( array_key_exists('fuzziness',$opts) ){
@@ -75,7 +75,6 @@ class Loco_cli_Commands {
75
  *
76
  * @param string[]
77
  * @param string[]
78
- * @codeCoverageIgnore
79
  */
80
  public function extract( $args, $opts ){
81
  try {
1
  <?php
2
  /**
3
  * Loco Translate commands
4
+ * @codeCoverageIgnore
5
  */
6
  class Loco_cli_Commands {
7
 
33
  *
34
  * @param string[]
35
  * @param string[]
 
36
  */
37
  public function sync( $args, $opts ){
38
  if( array_key_exists('fuzziness',$opts) ){
75
  *
76
  * @param string[]
77
  * @param string[]
 
78
  */
79
  public function extract( $args, $opts ){
80
  try {
src/cli/SyncCommand.php CHANGED
@@ -54,7 +54,7 @@ abstract class Loco_cli_SyncCommand {
54
  // Preempt write errors and print useful file mode info
55
  $mofile = $pofile->cloneExtension('mo');
56
  if( ! $pofile->writable() || $mofile->locked() ){
57
- WP_CLI::warning('Skipping unwritable: '.$pofile->filename() );
58
  Loco_cli_Utils::tabulateFiles( $pofile->getParent(), $pofile, $mofile );
59
  continue;
60
  }
@@ -92,23 +92,39 @@ abstract class Loco_cli_SyncCommand {
92
  Loco_cli_Utils::debug('Template not found (%s)', $potfile->basename() );
93
  }
94
  }
 
 
 
 
95
  // Perform merge if we have a reference file
96
- if( $ref ){
97
- Loco_cli_Utils::debug('Merging %s <- %s', $pofile->basename(), $potfile->basename() );
98
- $po = self::msgmerge( $def, $ref, $translate );
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
100
  else {
101
- WP_CLI::warning( sprintf('Skipping %s; no valid translation template',$pofile->getRelativePath($content_dir) ) );
102
- continue;
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
  }
110
  if( $noop ){
111
- WP_CLI::success( sprintf('**DRY RUN** would update %s', $pofile->filename() ) );
112
  continue;
113
  }
114
  try {
@@ -133,7 +149,7 @@ abstract class Loco_cli_SyncCommand {
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 ){
139
  WP_CLI::error( $e->getMessage(), false );
@@ -148,71 +164,16 @@ abstract class Loco_cli_SyncCommand {
148
  WP_CLI::success( sprintf('%u PO files synced, %u files compiled',$updated,$compiled) );
149
  }
150
  }
151
-
152
-
153
  /**
154
- * @param Loco_gettext_Data Existing PO file to MODIFY (definitions)
155
- * @param Loco_gettext_Data Latest POT file, being synced in (reference)
156
- * @param bool whether to merge translations in addition to sources
157
- * @return Loco_gettext_Data Merged file replacing $po
158
  */
159
- private static function msgmerge( Loco_gettext_Data $po, Loco_gettext_Data $pot, $translate = false ){
160
- $ntotal = 0;
161
- $nmatched = 0;
162
- $nfuzzy = 0;
163
- $nadded = 0;
164
- // add latest valid sources to matching instance
165
- $matcher = new LocoFuzzyMatcher;
166
- /* @var LocoPoMessage $new */
167
- foreach( $pot as $new ){
168
- $ntotal++;
169
- $matcher->add($new);
170
- }
171
- // Get fuzzy matching tolerance from plugin settings, can be set temporarily in command line
172
- $fuzziness = Loco_data_Settings::get()->fuzziness;
173
- $matcher->setFuzziness( (string) $fuzziness );
174
- // update matches sources, deferring unmatched for deferred fuzzy match
175
- $merged = clone $po;
176
- $merged->clear();
177
- /* @var LocoPoMessage $old */
178
- foreach( $po as $old ){
179
- $new = $matcher->match($old);
180
- // if existing source is still valid, merge any changes
181
- if( $new instanceof LocoPoMessage ){
182
- $p = clone $old;
183
- $p->merge($new,$translate);
184
- $merged->push($p);
185
- $nmatched += $p->countForms();
186
- }
187
- }
188
- // We can quit early if all strings were matched
189
- if( $nmatched === $ntotal ){
190
- Loco_cli_Utils::debug('> %u identical sources',$ntotal);
191
- return $merged;
192
- }
193
- // Attempt fuzzy matching after all exact matches have been processed
194
- foreach( $matcher->getFuzzyMatches() as $pair ){
195
- list($old,$new) = $pair;
196
- $p = clone $old;
197
- $p->merge($new);
198
- $merged->push($p);
199
- $nfuzzy += $p->countForms();
200
- Loco_cli_Utils::debug('~ %s', $p['source'] );
201
- }
202
- // Any unmatched strings remaining are NEW
203
- /* @var LocoPoMessage $new */
204
- foreach( $matcher->unmatched() as $new ){
205
- $p = clone $new;
206
- $translate or $p->strip();
207
- $merged->push($p);
208
- $nadded += $p->countForms();
209
- Loco_cli_Utils::debug('+ %s', $p['source'] );
210
- }
211
- // TODO Support --previous to keep old strings, or at least comment them out as #| msgid.....
212
- // number of strings dropped is previous total minus those matched
213
- $ndropped = $po->count() - ( $nmatched + $nfuzzy );
214
- Loco_cli_Utils::debug('> unchanged:%u added:%u fuzzy:%u dropped:%u', $nmatched, $nadded, $nfuzzy, $ndropped );
215
- return $merged;
216
  }
217
 
218
  }
54
  // Preempt write errors and print useful file mode info
55
  $mofile = $pofile->cloneExtension('mo');
56
  if( ! $pofile->writable() || $mofile->locked() ){
57
+ WP_CLI::warning('Skipping unwritable: '.self::fname($pofile) );
58
  Loco_cli_Utils::tabulateFiles( $pofile->getParent(), $pofile, $mofile );
59
  continue;
60
  }
92
  Loco_cli_Utils::debug('Template not found (%s)', $potfile->basename() );
93
  }
94
  }
95
+ if( ! $ref ){
96
+ WP_CLI::warning( sprintf('Skipping %s; no valid translation template',$pofile->getRelativePath($content_dir) ) );
97
+ continue;
98
+ }
99
  // Perform merge if we have a reference file
100
+ Loco_cli_Utils::debug('Merging %s <- %s', $pofile->basename(), $potfile->basename() );
101
+ $matcher = new Loco_gettext_Matcher;
102
+ $matcher->loadRefs($ref,$translate );
103
+ // Get fuzzy matching tolerance from plugin settings, can be set temporarily in command line
104
+ $fuzziness = Loco_data_Settings::get()->fuzziness;
105
+ $matcher->setFuzziness( (string) $fuzziness );
106
+ // update matches sources, deferring unmatched for deferred fuzzy match
107
+ $po = clone $def;
108
+ $po->clear();
109
+ $nvalid = count( $matcher->mergeValid($def,$po) );
110
+ $nfuzzy = count( $matcher->mergeFuzzy($po) );
111
+ $nadded = count( $matcher->mergeAdded($po) );
112
+ $ndropped = count( $matcher->redundant() );
113
+ // TODO Support --previous to keep old strings, or at least comment them out as #| msgid.....
114
+ if( $nfuzzy || $nadded || $ndropped ){
115
+ Loco_cli_Utils::debug('> unchanged:%u added:%u fuzzy:%u dropped:%u', $nvalid, $nadded, $nfuzzy, $ndropped );
116
  }
117
  else {
118
+ Loco_cli_Utils::debug('> %u identical sources',$nvalid);
 
119
  }
120
  // File is synced, but may be identical
121
  $po->sort();
122
  if( ! $force && $po->equal($def) ){
123
+ WP_CLI::log( sprintf('No update required for %s', self::fname($pofile) ) );
124
  continue;
125
  }
126
  if( $noop ){
127
+ WP_CLI::success( sprintf('**DRY RUN** would update %s', self::fname($pofile) ) );
128
  continue;
129
  }
130
  try {
149
  }
150
  // Done compile of this set
151
  Loco_error_AdminNotices::get()->flush();
152
+ WP_CLI::success( sprintf('Updated %s', self::fname($pofile) ) );
153
  }
154
  catch( Loco_error_WriteException $e ){
155
  WP_CLI::error( $e->getMessage(), false );
164
  WP_CLI::success( sprintf('%u PO files synced, %u files compiled',$updated,$compiled) );
165
  }
166
  }
167
+
168
+
169
  /**
170
+ * Debug file name showing directory location
171
+ * @param Loco_fs_File
172
+ * @return string
 
173
  */
174
+ private static function fname( Loco_fs_File $file ){
175
+ $dir = new Loco_fs_LocaleDirectory( $file->dirname() );
176
+ return $file->filename().' ('.$dir->getTypeLabel( $dir->getTypeId() ).')';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  }
178
 
179
  }
src/data/CompiledData.php CHANGED
@@ -22,6 +22,7 @@ class Loco_data_CompiledData implements ArrayAccess, Countable, IteratorAggregat
22
 
23
 
24
  /**
 
25
  * @return Loco_data_CompiledData
26
  */
27
  public static function get( $name ){
@@ -74,4 +75,5 @@ class Loco_data_CompiledData implements ArrayAccess, Countable, IteratorAggregat
74
  public function getIterator(){
75
  return new ArrayIterator( $this->data );
76
  }
 
77
  }
22
 
23
 
24
  /**
25
+ * @param string
26
  * @return Loco_data_CompiledData
27
  */
28
  public static function get( $name ){
75
  public function getIterator(){
76
  return new ArrayIterator( $this->data );
77
  }
78
+
79
  }
src/data/Permissions.php CHANGED
@@ -44,7 +44,6 @@ class Loco_data_Permissions {
44
  // by default we'll initially allow full access to anyone that can manage_options
45
  else {
46
  $apply['translator'] = $roles->add_role( 'translator', 'Translator', array('read'=>true) );
47
- /* @var $role WP_Role */
48
  foreach( $roles->role_objects as $id => $role ){
49
  if( $role->has_cap('manage_options') ){
50
  $apply[$id] = $role;
@@ -56,7 +55,6 @@ class Loco_data_Permissions {
56
  if( ! isset($apply['administrator']) && ! is_multisite() ){
57
  $apply['administrator'] = $roles->get_role('administrator');
58
  }
59
- /* @var $role WP_Role */
60
  foreach( $apply as $role ){
61
  if( $role instanceof WP_Role ){
62
  foreach( self::$caps as $cap ){
44
  // by default we'll initially allow full access to anyone that can manage_options
45
  else {
46
  $apply['translator'] = $roles->add_role( 'translator', 'Translator', array('read'=>true) );
 
47
  foreach( $roles->role_objects as $id => $role ){
48
  if( $role->has_cap('manage_options') ){
49
  $apply[$id] = $role;
55
  if( ! isset($apply['administrator']) && ! is_multisite() ){
56
  $apply['administrator'] = $roles->get_role('administrator');
57
  }
 
58
  foreach( $apply as $role ){
59
  if( $role instanceof WP_Role ){
60
  foreach( self::$caps as $cap ){
src/fs/File.php CHANGED
@@ -572,7 +572,7 @@ class Loco_fs_File {
572
  /**
573
  * Copy this object with an alternative file extension
574
  * @param string new extension
575
- * @return Loco_fs_File
576
  */
577
  public function cloneExtension( $ext ){
578
  $name = $this->filename().'.'.$ext;
@@ -583,7 +583,7 @@ class Loco_fs_File {
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;
@@ -593,6 +593,29 @@ class Loco_fs_File {
593
  }
594
 
595
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
596
  /**
597
  * Ensure full parent directory tree exists
598
  * @return Loco_fs_Directory
572
  /**
573
  * Copy this object with an alternative file extension
574
  * @param string new extension
575
+ * @return self
576
  */
577
  public function cloneExtension( $ext ){
578
  $name = $this->filename().'.'.$ext;
583
  /**
584
  * Copy this object with an alternative name under the same directory
585
  * @param string new name
586
+ * @return self
587
  */
588
  public function cloneBasename( $name ){
589
  $file = clone $this;
593
  }
594
 
595
 
596
+ /**
597
+ * Copy this object as a WordPress script translation file
598
+ * @param string relative path to .js file
599
+ * @param string optional base URL if you want to run relative path filters
600
+ * @return self
601
+ */
602
+ public function cloneJson( $ref, $url = '' ){
603
+ $name = $this->filename();
604
+ // Hook into load_script_textdomain_relative_path if script URL provided
605
+ if( is_string($url) && '' !== $url ){
606
+ $ref = apply_filters( 'load_script_textdomain_relative_path', $ref, trailingslashit($url).ltrim($ref,'/') );
607
+ }
608
+ if( is_string($ref) && '' !== $ref ){
609
+ // Hashable reference is always finally unminified, as per load_script_textdomain()
610
+ if( substr($ref,-7) === '.min.js' ) {
611
+ $ref = substr($ref,0,-7).'.js';
612
+ }
613
+ $name .= '-'.md5($ref);
614
+ }
615
+ return $this->cloneBasename( $name.'.json' );
616
+ }
617
+
618
+
619
  /**
620
  * Ensure full parent directory tree exists
621
  * @return Loco_fs_Directory
src/fs/LocaleFile.php CHANGED
@@ -5,7 +5,7 @@
5
  class Loco_fs_LocaleFile extends Loco_fs_File {
6
 
7
  /**
8
- * @var Loco_Locale
9
  */
10
  private $locale;
11
 
@@ -19,16 +19,26 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
19
  */
20
  private $prefix;
21
 
 
 
 
 
 
22
 
23
  /**
24
  * Lazy handling of localized path info
25
- * @return array [ prefix, suffix ]
26
  */
27
  public function split(){
28
  if( is_null($this->suffix) ){
29
- $parts = explode( '-', $this->filename() );
30
- $this->suffix = array_pop( $parts );
31
- $this->prefix = implode( '-', $parts );
 
 
 
 
 
32
  // handle situations where suffixless name is wrongly taken as the prefix
33
  // e.g. "de.po" is valid but "hello.po" is not.
34
  // There are still some ambiguous situations, e.g. "foo-bar.po" is valid, but nonsense
@@ -38,7 +48,7 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
38
  $this->locale = null;
39
  }
40
  }
41
- return array( $this->prefix, $this->suffix );
42
  }
43
 
44
 
@@ -77,7 +87,6 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
77
  return new Loco_fs_LocaleFile($path);
78
  }
79
 
80
-
81
 
82
  /**
83
  * Get prefix (or stem) from name that comes before locale suffix.
@@ -98,6 +107,13 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
98
  return $info[1];
99
  }
100
 
 
 
 
 
 
 
 
101
 
102
  /**
103
  * Test if file is suffix only, e.g. "en_US.po"
@@ -117,5 +133,6 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
117
  $info = $this->split();
118
  return $info[0] && ! $info[1];
119
  }
120
-
 
121
  }
5
  class Loco_fs_LocaleFile extends Loco_fs_File {
6
 
7
  /**
8
+ * @var Loco_Locale|null
9
  */
10
  private $locale;
11
 
19
  */
20
  private $prefix;
21
 
22
+ /**
23
+ * @var string
24
+ */
25
+ private $hash = '';
26
+
27
 
28
  /**
29
  * Lazy handling of localized path info
30
+ * @return array [ prefix, suffix, hash ]
31
  */
32
  public function split(){
33
  if( is_null($this->suffix) ){
34
+ $parts = explode('-',$this->filename() );
35
+ $this->suffix = array_pop($parts);
36
+ // handle script hashes for JSONs only
37
+ if( 'json' === $this->extension() && preg_match('/^[0-9a-f]{32}$/',$this->suffix) ){
38
+ $this->hash = $this->suffix;
39
+ $this->suffix = array_pop($parts);
40
+ }
41
+ $this->prefix = implode('-',$parts);
42
  // handle situations where suffixless name is wrongly taken as the prefix
43
  // e.g. "de.po" is valid but "hello.po" is not.
44
  // There are still some ambiguous situations, e.g. "foo-bar.po" is valid, but nonsense
48
  $this->locale = null;
49
  }
50
  }
51
+ return array( $this->prefix, $this->suffix, $this->hash );
52
  }
53
 
54
 
87
  return new Loco_fs_LocaleFile($path);
88
  }
89
 
 
90
 
91
  /**
92
  * Get prefix (or stem) from name that comes before locale suffix.
107
  return $info[1];
108
  }
109
 
110
+ /**
111
+ * @return string
112
+ */
113
+ public function getHash(){
114
+ $info = $this->split();
115
+ return $info[2];
116
+ }
117
 
118
  /**
119
  * Test if file is suffix only, e.g. "en_US.po"
133
  $info = $this->split();
134
  return $info[0] && ! $info[1];
135
  }
136
+
137
+
138
  }
src/fs/Siblings.php CHANGED
@@ -83,8 +83,9 @@ class Loco_fs_Siblings {
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();
@@ -93,6 +94,12 @@ class Loco_fs_Siblings {
93
  }
94
  }
95
  }
 
 
 
 
 
 
96
  return $jsons;
97
  }
98
 
83
  $jsons = array();
84
  $name = $this->po->filename();
85
  $finder = new Loco_fs_FileFinder( $this->po->dirname() );
86
+ // match .json files with same name as .po, plus hashed names
87
  $regex = '/^'.preg_quote($name,'/').'-[0-9a-f]{32}$/';
88
+ /* @var Loco_fs_File $file */
89
  foreach( $finder->group('json')->exportGroups() as $files ) {
90
  foreach( $files as $file ){
91
  $match = $file->filename();
94
  }
95
  }
96
  }
97
+ // append single json using our filter
98
+ $path = apply_filters('loco_compile_single_json', '', $this->po->getPath() );
99
+ if( is_string($path) && '' !== $path && file_exists($path) && ! in_array($path,$jsons) ){
100
+ $jsons[] = $path;
101
+ }
102
+
103
  return $jsons;
104
  }
105
 
src/gettext/Compiler.php CHANGED
@@ -10,6 +10,7 @@ class Loco_gettext_Compiler {
10
  private $fs;
11
 
12
  /**
 
13
  * @var Loco_fs_Siblings
14
  */
15
  private $files;
@@ -19,6 +20,13 @@ class Loco_gettext_Compiler {
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
@@ -34,6 +42,17 @@ class Loco_gettext_Compiler {
34
  }
35
 
36
 
 
 
 
 
 
 
 
 
 
 
 
37
  /**
38
  * @param Loco_gettext_Data
39
  * @param Loco_package_Project|null
@@ -92,64 +111,102 @@ class Loco_gettext_Compiler {
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 ){
@@ -196,4 +253,33 @@ class Loco_gettext_Compiler {
196
  return $this->progress;
197
  }
198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  }
10
  private $fs;
11
 
12
  /**
13
+ * Target file group, where we're compiling to
14
  * @var Loco_fs_Siblings
15
  */
16
  private $files;
20
  */
21
  private $progress;
22
 
23
+ /**
24
+ * Whether to protect existing files during compilation (i.e. not overwrite them)
25
+ * @var bool
26
+ */
27
+ private $keep = false;
28
+
29
+
30
  /**
31
  * Construct with primary file (PO) being saved
32
  * @param Loco_fs_LocaleFile Localised PO file which may or may not exist yet
42
  }
43
 
44
 
45
+ /**
46
+ * Set overwrite mode
47
+ * @param bool whether to overwrite existing files during compilation
48
+ * @return self
49
+ */
50
+ public function overwrite( $overwrite ){
51
+ $this->keep = ! $overwrite;
52
+ return $this;
53
+ }
54
+
55
+
56
  /**
57
  * @param Loco_gettext_Data
58
  * @param Loco_package_Project|null
111
  }
112
 
113
 
114
+ /**
115
+ * @param Loco_fs_File Source MO file
116
+ * @return int
117
+ *
118
+ public function copyMo( Loco_fs_File $source ){
119
+ $target = $this->files->getBinary();
120
+ $bytes = $this->writeCopy($source,$target);
121
+ $this->progress['mobytes'] = $bytes;
122
+ return $bytes;
123
+ }*/
124
+
125
+
126
  /**
127
  * @param Loco_package_Project Translation set, required to resolve script paths
128
  * @param Loco_gettext_Data PO data to export
129
  * @return Loco_fs_FileList All json files created
130
  */
131
  public function writeJson( Loco_package_Project $project, Loco_gettext_Data $po ){
 
 
 
132
  $domain = $project->getDomain()->getName();
133
+ $pofile = $this->files->getSource();
134
+ $jsons = new Loco_fs_FileList;
135
+ // Allow plugins to dictate a single JSON file to hold all script translations for a text domain
136
+ // authors will additionally have to filter at runtime on load_script_translation_file
137
+ $path = apply_filters('loco_compile_single_json', '', $pofile->getPath(), $domain );
138
+ if( is_string($path) && '' !== $path ){
139
+ $refs = $po->splitRefs( $this->getJsExtMap() );
140
+ if( array_key_exists('js',$refs) && $refs['js'] instanceof Loco_gettext_Data ){
141
+ $jsonfile = new Loco_fs_File($path);
142
+ try {
143
+ $this->writeFile( $jsonfile, $refs['js']->msgjed($domain,'*.js') );
144
+ $jsons->add($jsonfile);
145
+ }
146
+ catch( Loco_error_WriteException $e ){
147
+ Loco_error_AdminNotices::debug( $e->getMessage() );
148
+ Loco_error_AdminNotices::warn( sprintf(__('JSON compilation failed for %s','loco-translate'),$jsonfile->basename()) );
149
+ }
150
  }
151
+ }
152
+ // continue as per default, generating multiple per-script JSON
153
+ else {
154
+ $base_dir = $project->getBundle()->getDirectoryPath();
155
+ $buffer = array();
156
+ /* @var Loco_gettext_Data $fragment */
157
+ foreach( $po->exportRefs('\\.js') as $ref => $fragment ){
158
+ // Reference could be source js, or minified version.
159
+ // Some build systems may differ, but WordPress only supports this. See WP-CLI MakeJsonCommand.
160
+ if( substr($ref,-7) === '.min.js' ) {
161
+ $min = $ref;
162
+ $src = substr($ref,-7).'.js';
163
+ }
164
+ else {
165
+ $src = $ref;
166
+ $min = substr($ref,0,-3).'.min.js';
167
+ }
168
+ // Try both script paths to check whether deployed script actually exists
169
+ $found = false;
170
+ foreach( array($min,$src) as $ref ){
171
  // Hook into load_script_textdomain_relative_path like load_script_textdomain() does.
172
+ $url = $project->getBundle()->getDirectoryUrl().$ref;
173
+ $ref = apply_filters( 'load_script_textdomain_relative_path', $ref, $url );
174
+ if( ! is_string($ref) || '' === $ref ){
175
+ continue;
176
+ }
177
+ $file = new Loco_fs_File($ref);
178
+ $file->normalize($base_dir);
179
+ if( ! $file->exists() ){
180
  continue;
181
  }
182
+ // add .js strings to buffer for this json and merge if already present
183
+ if( array_key_exists($ref,$buffer) ){
184
+ $buffer[$ref]->concat($fragment);
185
+ }
186
+ else {
187
+ $buffer[$ref] = $fragment;
188
  }
189
+ $found = true;
 
 
190
  break;
191
  }
192
+ // if neither exists in the bundle, this is a source path that will never be resolved at runtime
193
+ if( ! $found ){
194
+ Loco_error_AdminNotices::debug( sprintf('Skipping JSON for %s; script not found in bundle',$ref) );
195
+ }
196
  }
197
+ // write all buffered fragments to their calculated JSON paths
198
+ foreach( $buffer as $ref => $fragment ) {
199
+ $jsonfile = $pofile->cloneJson($ref);
200
+ try {
201
+ $this->writeFile( $jsonfile, $fragment->msgjed($domain,$ref) );
202
+ $jsons->add($jsonfile);
203
+ }
204
+ catch( Loco_error_WriteException $e ){
205
+ Loco_error_AdminNotices::debug( $e->getMessage() );
206
+ Loco_error_AdminNotices::warn( sprintf(__('JSON compilation failed for %s','loco-translate'),$ref));
207
+ }
 
 
208
  }
209
+ $buffer = null;
210
  }
211
  // clean up redundant JSONs including if no JSONs were compiled
212
  if( Loco_data_Settings::get()->jed_clean ){
253
  return $this->progress;
254
  }
255
 
256
+
257
+ /**
258
+ * @return string[]
259
+ */
260
+ private function getJsExtMap(){
261
+ $map = array('js'=>'js', 'jsx'=>'js');
262
+ $exts = Loco_data_Settings::get()->jsx_alias;
263
+ if( is_array($exts) && $exts ){
264
+ foreach( $exts as $ext ){
265
+ $map[$ext] = 'js';
266
+ }
267
+ }
268
+ return $map;
269
+ }
270
+
271
+
272
+ /**
273
+ * @param Loco_fs_File $file
274
+ * @param string Serialized JSON to write to given file
275
+ * @return int bytes written
276
+ */
277
+ private function writeFile( Loco_fs_File $file, $data ){
278
+ if( $this->keep && $file->exists() ){
279
+ return 0;
280
+ }
281
+ $this->fs->authorizeSave($file);
282
+ return $file->putContents($data);
283
+ }
284
+
285
  }
src/gettext/Extraction.php CHANGED
@@ -131,6 +131,26 @@ class Loco_gettext_Extraction {
131
  }
132
 
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  /**
135
  * Get number of unique strings across all domains extracted (excluding additional metadata)
136
  * @return array { default: x, myDomain: y }
@@ -146,6 +166,7 @@ class Loco_gettext_Extraction {
146
  * @return Loco_gettext_Data
147
  */
148
  public function getTemplate( $domain ){
 
149
  $data = new Loco_gettext_Data( $this->extracted->filter($domain) );
150
  return $data->templatize( $domain );
151
  }
131
  }
132
 
133
 
134
+ /**
135
+ * Add a custom source string constructed from `new Loco_gettext_String(msgid,[msgctxt])`
136
+ * @param Loco_gettext_String
137
+ * @param string optional domain, if not current bundle's default
138
+ * @return Loco_gettext_Extraction
139
+ */
140
+ public function addString( Loco_gettext_String $string, $domain = '' ){
141
+ if( ! $domain ) {
142
+ $default = $this->bundle->getDefaultProject();
143
+ $domain = (string) ( $default ? $default->getDomain() : $this->extracted->getDomain() );
144
+ }
145
+ $index = $this->extracted->pushEntry( $string->exportSingular(), $domain );
146
+ if( $string->hasPlural() ){
147
+ $this->extracted->pushPlural( $string->exportPlural(), $index );
148
+ }
149
+
150
+ return $this;
151
+ }
152
+
153
+
154
  /**
155
  * Get number of unique strings across all domains extracted (excluding additional metadata)
156
  * @return array { default: x, myDomain: y }
166
  * @return Loco_gettext_Data
167
  */
168
  public function getTemplate( $domain ){
169
+ do_action('loco_extracted_template', $this, $domain );
170
  $data = new Loco_gettext_Data( $this->extracted->filter($domain) );
171
  return $data->templatize( $domain );
172
  }
src/gettext/Matcher.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sync/Merge utility akin to msgmerge
4
+ */
5
+ class Loco_gettext_Matcher extends LocoFuzzyMatcher {
6
+
7
+ /**
8
+ * Whether copying translation from source references (normally for a POT we won't)
9
+ * @var bool
10
+ */
11
+ private $translate = false;
12
+
13
+
14
+ /**
15
+ * Initialize matcher with current valid source strings (ref.pot)
16
+ * @param Loco_gettext_Data POT reference
17
+ * @param bool whether copying translations from reference data
18
+ * @return int
19
+ */
20
+ public function loadRefs( Loco_gettext_Data $pot, $translate = false ){
21
+ $ntotal = 0;
22
+ $this->translate = (bool) $translate;
23
+ /* @var LocoPoMessage $new */
24
+ foreach( $pot as $new ){
25
+ $ntotal++;
26
+ $this->add($new);
27
+ }
28
+ return $ntotal;
29
+ }
30
+
31
+
32
+ /**
33
+ * Update still-valid sources, deferring unmatched (new strings) for deferred fuzzy match
34
+ * @param LocoPoIterator Existing definitions
35
+ * @param LocoPoIterator Resultant definitions
36
+ * @return string[] keys matched exactly
37
+ */
38
+ public function mergeValid( LocoPoIterator $original, LocoPoIterator $merged ){
39
+ $valid = array();
40
+ $translate = $this->translate;
41
+ /* @var LocoPoMessage $old */
42
+ foreach( $original as $old ){
43
+ $new = $this->match($old);
44
+ // if existing source is still valid, merge any changes
45
+ if( $new instanceof LocoPoMessage ){
46
+ $p = clone $old;
47
+ $p->merge($new,$translate);
48
+ $merged->push($p);
49
+ $valid[] = $p->getKey();
50
+ }
51
+ }
52
+ return $valid;
53
+ }
54
+
55
+
56
+ /**
57
+ * Perform fuzzy matching after all exact matches have been attempted
58
+ * @param LocoPoIterator Resultant definitions
59
+ * @return string[] strings fuzzy-matched
60
+ */
61
+ public function mergeFuzzy( LocoPoIterator $merged ){
62
+ $fuzzy = array();
63
+ foreach( $this->getFuzzyMatches() as $pair ){
64
+ list($old,$new) = $pair;
65
+ $p = clone $old;
66
+ $p->merge($new);
67
+ $merged->push($p);
68
+ $fuzzy[] = $p->getKey();
69
+ }
70
+ return $fuzzy;
71
+ }
72
+
73
+
74
+ /**
75
+ * Add unmatched strings remaining as NEW source strings
76
+ * @param LocoPoIterator Resultant definitions to accept new strings
77
+ * @return string[] strings added
78
+ */
79
+ public function mergeAdded( LocoPoIterator $merged ){
80
+ $added = array();
81
+ $translate = $this->translate;
82
+ /* @var LocoPoMessage $new */
83
+ foreach( $this->unmatched() as $new ){
84
+ $p = clone $new;
85
+ // remove translations unless configured to keep
86
+ if( $p->translated() && ! $translate ){
87
+ $p->strip();
88
+ }
89
+ $merged->push($p);
90
+ $added[] = $p->getKey();
91
+ }
92
+ return $added;
93
+ }
94
+
95
+ }
src/gettext/Metadata.php CHANGED
@@ -56,7 +56,7 @@ class Loco_gettext_Metadata extends Loco_data_Transient {
56
  public static function load( Loco_fs_File $po, $nocache = false ){
57
  $bytes = $po->size();
58
  $mtime = $po->modified();
59
- // quick construct of new meta object. enough to query and validate cache 
60
  $meta = new Loco_gettext_Metadata( array(
61
  'rpath' => $po->getRelativePath( loco_constant('WP_CONTENT_DIR') ),
62
  ) );
@@ -184,19 +184,20 @@ class Loco_gettext_Metadata extends Loco_data_Transient {
184
  }
185
 
186
 
187
-
188
  /**
189
  * Get wordy summary of total strings
 
190
  */
191
  public function getTotalSummary(){
192
  $total = $this->getTotal();
193
- return sprintf( _n('1 string','%s strings',$total,'loco-translate'), number_format($total) );
 
194
  }
195
 
196
 
197
-
198
  /**
199
  * Get wordy summary including translation stats
 
200
  */
201
  public function getProgressSummary(){
202
  $extra = array();
@@ -214,7 +215,10 @@ class Loco_gettext_Metadata extends Loco_data_Transient {
214
  }
215
 
216
 
217
-
 
 
 
218
  public function getPath( $absolute ){
219
  $path = $this['rpath'];
220
  if( $absolute && ! Loco_fs_File::abs($path) ){
56
  public static function load( Loco_fs_File $po, $nocache = false ){
57
  $bytes = $po->size();
58
  $mtime = $po->modified();
59
+ // quick construct of new meta object. enough to query and validate cache
60
  $meta = new Loco_gettext_Metadata( array(
61
  'rpath' => $po->getRelativePath( loco_constant('WP_CONTENT_DIR') ),
62
  ) );
184
  }
185
 
186
 
 
187
  /**
188
  * Get wordy summary of total strings
189
+ * @return string
190
  */
191
  public function getTotalSummary(){
192
  $total = $this->getTotal();
193
+ // translators: Where %s is any number of strings
194
+ return sprintf( _n('%s string','%s strings',$total,'loco-translate'), number_format_i18n($total) );
195
  }
196
 
197
 
 
198
  /**
199
  * Get wordy summary including translation stats
200
+ * @return string
201
  */
202
  public function getProgressSummary(){
203
  $extra = array();
215
  }
216
 
217
 
218
+ /**
219
+ * @param bool
220
+ * @return string
221
+ */
222
  public function getPath( $absolute ){
223
  $path = $this['rpath'];
224
  if( $absolute && ! Loco_fs_File::abs($path) ){
src/gettext/String.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Gettext source string. Does not contain translations.
4
+ */
5
+ class Loco_gettext_String {
6
+
7
+ /**
8
+ * @var array
9
+ */
10
+ private $raw;
11
+
12
+ /**
13
+ * @var string
14
+ */
15
+ private $plural;
16
+
17
+
18
+ /**
19
+ * Loco_gettext_String constructor.
20
+ *
21
+ * @param string Mandatory source
22
+ * @param string Optional context
23
+ */
24
+ public function __construct( $msgid, $msgctxt = '' ){
25
+ $this->raw = array (
26
+ 'source' => (string) $msgid,
27
+ 'context' => (string) $msgctxt,
28
+ );
29
+ }
30
+
31
+
32
+ /**
33
+ * Get singular form as raw array data
34
+ * @internal
35
+ * @return string[]
36
+ */
37
+ public function exportSingular(){
38
+ return $this->raw;
39
+ }
40
+
41
+
42
+ /**
43
+ * Get plural form as raw array data
44
+ * @internal
45
+ * @return string[]
46
+ */
47
+ public function exportPlural(){
48
+ return array (
49
+ 'source' => $this->plural,
50
+ );
51
+ }
52
+
53
+
54
+ /**
55
+ * @param string
56
+ * @param string|array
57
+ * @param string
58
+ * @return void
59
+ */
60
+ private function merge( $prop, $value, $glue ){
61
+ if( is_string($value) ){
62
+ $value = array($value);
63
+ }
64
+ else if( ! is_array($value) ){
65
+ throw new InvalidArgumentException('Expected Array or String');
66
+ }
67
+ if( array_key_exists($prop,$this->raw) ){
68
+ $value = array_merge( explode($glue,$this->raw[$prop]), $value );
69
+ }
70
+ $this->raw[$prop] = implode($glue,$value);
71
+ }
72
+
73
+
74
+ /**
75
+ * @param array|string
76
+ * @return self
77
+ */
78
+ public function addFileReferences( $refs ){
79
+ $this->merge('refs',$refs,' ');
80
+ return $this;
81
+ }
82
+
83
+
84
+ /**
85
+ * @param array|string
86
+ * @return self
87
+ */
88
+ public function addExtractedComment( $notes ){
89
+ $this->merge('notes',$notes,' ');
90
+ return $this;
91
+ }
92
+
93
+ /**
94
+ * @param string
95
+ * @return self
96
+ */
97
+ public function pluralize( $msgid_plural ){
98
+ $this->plural = (string) $msgid_plural;
99
+ return $this;
100
+ }
101
+
102
+
103
+ /**
104
+ * @return bool
105
+ */
106
+ public function hasPlural(){
107
+ return is_string($this->plural) && '' !== $this->plural;
108
+ }
109
+
110
+ }
src/gettext/WordCount.php CHANGED
@@ -18,16 +18,15 @@ class Loco_gettext_WordCount implements Countable {
18
  private $sw;
19
 
20
 
21
-
22
  /**
23
  * Create counter for a pre-parsed PO/POT file.
 
24
  */
25
  public function __construct( Loco_gettext_Data $po ){
26
  $this->po = $po;
27
  }
28
 
29
 
30
-
31
  /**
32
  * @internal
33
  */
@@ -40,7 +39,6 @@ class Loco_gettext_WordCount implements Countable {
40
  }
41
 
42
 
43
-
44
  /**
45
  * Default count function returns source words (msgid) in current file.
46
  * @return int
@@ -55,7 +53,6 @@ class Loco_gettext_WordCount implements Countable {
55
  }
56
 
57
 
58
-
59
  /**
60
  * Very simple word count, only suitable for latin characters, and biased toward English.
61
  * @param string
18
  private $sw;
19
 
20
 
 
21
  /**
22
  * Create counter for a pre-parsed PO/POT file.
23
+ * @param Loco_gettext_Data
24
  */
25
  public function __construct( Loco_gettext_Data $po ){
26
  $this->po = $po;
27
  }
28
 
29
 
 
30
  /**
31
  * @internal
32
  */
39
  }
40
 
41
 
 
42
  /**
43
  * Default count function returns source words (msgid) in current file.
44
  * @return int
53
  }
54
 
55
 
 
56
  /**
57
  * Very simple word count, only suitable for latin characters, and biased toward English.
58
  * @param string
src/js/Strings.php CHANGED
@@ -22,15 +22,15 @@ class Loco_js_Strings extends Loco_hooks_TranslateBuffer {
22
 
23
  /* Summary of new strings after running in-editor Sync
24
  * xgettext: javascript-format */
25
- _n("1 new string added","%s new strings added",0,'loco-translate');
26
 
27
  /* Summary of existing strings that no longer exist after running in-editor Sync
28
  * xgettext: javascript-format */
29
- _n("1 obsolete string removed","%s obsolete strings removed",0,'loco-translate');
30
 
31
  /* Summary of existing translations where the source text has changed slightly
32
  * xgettext: javascript-format */
33
- _n("1 string marked Fuzzy","%s strings marked Fuzzy",0,'loco-translate');
34
 
35
  /* Message appears after sync operation, where %s refers to a POT file.
36
  * xgettext: javascript-format */
@@ -51,11 +51,11 @@ class Loco_js_Strings extends Loco_hooks_TranslateBuffer {
51
  __("Translation progress %s%%",'loco-translate');
52
 
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
 
60
  // xgettext: javascript-format
61
  _n("%s string updated","%s strings updated",0,'loco-translate');
@@ -80,7 +80,7 @@ class Loco_js_Strings extends Loco_hooks_TranslateBuffer {
80
 
81
  /* Shows total string count at top of editor
82
  * xgettext: javascript-format */
83
- _n("1 string","%s strings",0,'loco-translate');
84
 
85
  /* Shows percentage translated at top of editor
86
  * xgettext: javascript-format */
22
 
23
  /* Summary of new strings after running in-editor Sync
24
  * xgettext: javascript-format */
25
+ _n("%s new string added","%s new strings added",0,'loco-translate');
26
 
27
  /* Summary of existing strings that no longer exist after running in-editor Sync
28
  * xgettext: javascript-format */
29
+ _n("%s obsolete string removed","%s obsolete strings removed",0,'loco-translate');
30
 
31
  /* Summary of existing translations where the source text has changed slightly
32
  * xgettext: javascript-format */
33
+ _n("%s string marked Fuzzy","%s strings marked Fuzzy",0,'loco-translate');
34
 
35
  /* Message appears after sync operation, where %s refers to a POT file.
36
  * xgettext: javascript-format */
51
  __("Translation progress %s%%",'loco-translate');
52
 
53
  // xgettext: javascript-format
54
+ _n("Translation job aborted with %s 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("%1\$s string translated via %2\$s","%1\$s strings translated via %2\$s",0,'loco-translate');
59
 
60
  // xgettext: javascript-format
61
  _n("%s string updated","%s strings updated",0,'loco-translate');
80
 
81
  /* Shows total string count at top of editor
82
  * xgettext: javascript-format */
83
+ _n("%s string","%s strings",0,'loco-translate');
84
 
85
  /* Shows percentage translated at top of editor
86
  * xgettext: javascript-format */
src/package/Debugger.php CHANGED
@@ -184,7 +184,7 @@ class Loco_package_Debugger implements IteratorAggregate {
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
  }
190
  else {
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( '%1$s string extracted from source code for "%2$s"', '%1$s strings extracted from source code for "%2$s"', $realCount, 'loco-translate' );
188
  $this->good( $str.' (%s including metadata)', number_format($realCount), $domain?$domain:'*', number_format($count) );
189
  }
190
  else {
tpl/admin/config/apis.php CHANGED
@@ -99,7 +99,7 @@ $help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/man
99
  <input type="text" size="90" name="api[yandex][key]" id="loco--yandex_api_key" value="<?php $api->e('key')?>" spellcheck="false" />
100
  </p>
101
  <p>
102
- <span class="description"><a href="https://tech.yandex.com/translate/" target="_blank" tabindex="-1">https://tech.yandex.com/translate/</a></span>
103
  </p>
104
  </fieldset>
105
  </td>
99
  <input type="text" size="90" name="api[yandex][key]" id="loco--yandex_api_key" value="<?php $api->e('key')?>" spellcheck="false" />
100
  </p>
101
  <p>
102
+ <span class="description"><a href="https://cloud.yandex.com/services/translate" target="_blank" tabindex="-1">https://cloud.yandex.com/services/translate</a></span>
103
  </p>
104
  </fieldset>
105
  </td>
tpl/admin/file/info-pot.php CHANGED
@@ -5,7 +5,9 @@
5
  $this->extend('info');
6
  $this->start('header');
7
  /* @var Loco_mvc_FileParams $file */
 
8
  /* @var Loco_gettext_Metadata $meta */
 
9
  ?>
10
 
11
  <div class="notice inline notice-info">
@@ -26,7 +28,7 @@ $this->start('header');
26
  <dd><time><?php $params->date('potime')?></time></dd>
27
 
28
  <dt><?php echo esc_html_x('Source text','Editor','loco-translate')?>:</dt>
29
- <dd><?php echo esc_html( $meta->getTotalSummary() )?> <span>(<?php echo sprintf( _n('1 word','%s words', $words, 'loco-translate'), number_format_i18n($words) )?>)</span></dd>
30
  </dl>
31
  </div>
32
 
@@ -41,4 +43,4 @@ $this->start('header');
41
  If this is intended to be a translation file it should end with a language code.
42
  </p>
43
  </div><?php
44
- endif;
5
  $this->extend('info');
6
  $this->start('header');
7
  /* @var Loco_mvc_FileParams $file */
8
+ /* @var Loco_mvc_ViewParams $params */
9
  /* @var Loco_gettext_Metadata $meta */
10
+ /* @var int $words */
11
  ?>
12
 
13
  <div class="notice inline notice-info">
28
  <dd><time><?php $params->date('potime')?></time></dd>
29
 
30
  <dt><?php echo esc_html_x('Source text','Editor','loco-translate')?>:</dt>
31
+ <dd><?php echo esc_html( $meta->getTotalSummary() )?> <span>(<?php echo sprintf( _n('%s word','%s words', $words, 'loco-translate'), number_format_i18n($words) )?>)</span></dd>
32
  </dl>
33
  </div>
34
 
43
  If this is intended to be a translation file it should end with a language code.
44
  </p>
45
  </div><?php
46
+ endif;
tpl/admin/init/init-pot.php CHANGED
@@ -20,8 +20,8 @@ $help = apply_filters('loco_external','https://localise.biz/wordpress/plugin/man
20
  if( $n = $scan->skip ):?>
21
  <p>
22
  <em><?php
23
- // Translators: Where %2$s is the size of a file
24
- self::e( _n('Excludes one file over %2$s','Excludes %s files over %2$s',$n,'loco-translate'), $n, $scan->large )?>.
25
  <a class="icon icon-help" href="<?php echo esc_url(apply_filters('loco_external','https://localise.biz/wordpress/plugin/faqs/skipped-files'))?>" target="_blank"><span class="screen-reader-text">Help</span></a>
26
  </em>
27
  </p><?php
20
  if( $n = $scan->skip ):?>
21
  <p>
22
  <em><?php
23
+ // Translators: (1) Number of files excluded (2) the maximum size of file that was included
24
+ self::e( _n('Excludes %1$s file over %2$s','Excludes %1$s files over %2$s',$n,'loco-translate'), $n, $scan->large )?>.
25
  <a class="icon icon-help" href="<?php echo esc_url(apply_filters('loco_external','https://localise.biz/wordpress/plugin/faqs/skipped-files'))?>" target="_blank"><span class="screen-reader-text">Help</span></a>
26
  </em>
27
  </p><?php
tpl/admin/list/locales.php CHANGED
@@ -52,14 +52,3 @@ echo $this->render('../common/inc-table-filter');
52
  endforeach?>
53
  </tbody>
54
  </table>
55
-
56
- <?php
57
- /* Unsure if we should observe locale whitelist on this screen.
58
- if( $skipped ): $n = count($skipped);?>
59
- <div class="notice inline">
60
- <p>
61
- <span><?php self::e( _n('One more locale is hidden by your preferences','%d more locales are hidden by your preferences',$n,'loco-translate'), $n )?>.</span>
62
- <span>(<?php echo implode(', ',$skipped)?>)</span>
63
- </p>
64
- </div><?php
65
- endif;*/
52
  endforeach?>
53
  </tbody>
54
  </table>