Version Description
- Added experimental support for multipart uploads
- Added relocation tab for moving translation sets
- Creation of missing directories when writing new files
- Fixed duplicate file addition when iterating over symlink
- Bumped WP compatibility to 5.2.1
Download this release
Release Info
Developer | timwhitlock |
Plugin | Loco Translate |
Version | 2.3.0 |
Comparing to | |
See all releases |
Code changes from version 2.2.2 to 2.3.0
- languages/loco-translate.pot +136 -99
- lib/data/locales.php +1 -1
- loco.php +2 -2
- pub/css/admin.css +1 -1
- pub/css/editor.css +1 -1
- pub/css/podiff.css +1 -1
- pub/css/poview.css +1 -1
- pub/css/skins/blue.css +1 -1
- pub/css/skins/coffee.css +1 -1
- pub/css/skins/ectoplasm.css +1 -1
- pub/css/skins/light.css +1 -1
- pub/css/skins/midnight.css +1 -1
- pub/css/skins/ocean.css +1 -1
- pub/css/skins/sunrise.css +1 -1
- pub/font/loco.eot +0 -0
- pub/font/loco.svg +1 -0
- pub/font/loco.ttf +0 -0
- pub/font/loco.woff +0 -0
- pub/js/debug.js +1 -1
- pub/js/delete.js +3 -5
- pub/js/editor.js +35 -5
- pub/js/min/admin.js +221 -217
- pub/js/move.js +52 -0
- readme.txt +10 -3
- src/admin/bundle/BaseController.php +6 -28
- src/admin/bundle/LocaleController.php +1 -0
- src/admin/bundle/ViewController.php +5 -2
- src/admin/config/SettingsController.php +1 -1
- src/admin/file/BaseController.php +9 -3
- src/admin/file/DeleteController.php +4 -3
- src/admin/file/EditController.php +1 -1
- src/admin/file/MoveController.php +185 -0
- src/admin/init/InitPoController.php +1 -10
- src/ajax/DownloadController.php +1 -1
- src/ajax/FsConnectController.php +58 -12
- src/ajax/SaveController.php +8 -2
- src/ajax/XgettextController.php +0 -1
- src/api/WordPressFileSystem.php +41 -19
- src/data/Settings.php +2 -0
- src/data/Upload.php +71 -0
- src/error/AdminNotices.php +12 -19
- src/error/Debug.php +15 -0
- src/error/Exception.php +21 -0
- src/error/UploadException.php +8 -0
- src/fs/Directory.php +2 -6
- src/fs/File.php +24 -9
- src/fs/FileFinder.php +21 -16
- src/fs/FileList.php +14 -9
- src/fs/FileListInterface.php +6 -1
- src/fs/FileWriter.php +61 -17
- src/fs/LocaleDirectory.php +1 -0
- src/fs/LocaleFile.php +1 -1
- src/fs/Locations.php +37 -17
- src/fs/Revisions.php +4 -0
- src/fs/Siblings.php +1 -3
- src/mvc/AdminRouter.php +16 -8
- src/mvc/Controller.php +2 -1
- src/mvc/FileParams.php +22 -10
- src/mvc/HiddenFields.php +2 -0
- src/mvc/PostParams.php +1 -2
- tpl/admin/bundle/inc-po-table.php +4 -3
- tpl/admin/bundle/locale.php +3 -3
- tpl/admin/common/inc-fsconn.php +8 -15
- tpl/admin/config/settings.php +7 -1
- tpl/admin/file/delete.php +1 -1
- tpl/admin/file/move-po.php +43 -0
- tpl/admin/file/move-pot.php +19 -0
- tpl/admin/file/move.php +31 -0
- tpl/admin/init/init-po.php +3 -8
languages/loco-translate.pot
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
-
"Project-Id-Version: Loco Translate 2.
|
5 |
"Report-Msgid-Bugs-To: \n"
|
6 |
-
"POT-Creation-Date: 2019-
|
7 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
8 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
"Language-Team: \n"
|
@@ -13,9 +13,9 @@ msgstr ""
|
|
13 |
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
"Content-Transfer-Encoding: 8bit\n"
|
15 |
"X-Generator: Loco https://localise.biz/\n"
|
16 |
-
"X-Loco-Version: 2.
|
17 |
|
18 |
-
#: src/fs/FileWriter.php:
|
19 |
#, php-format
|
20 |
msgid "\"%s\" is a directory, not a file"
|
21 |
msgstr ""
|
@@ -24,7 +24,7 @@ msgstr ""
|
|
24 |
msgid "\"Hello Dolly\" is part of the WordPress core"
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: src/api/WordPressFileSystem.php:
|
28 |
#, php-format
|
29 |
msgid "%s already exists in this folder"
|
30 |
msgstr ""
|
@@ -97,7 +97,7 @@ msgid_plural "%s words"
|
|
97 |
msgstr[0] ""
|
98 |
msgstr[1] ""
|
99 |
|
100 |
-
#: tpl/admin/config/settings.php:
|
101 |
msgid "About file system access"
|
102 |
msgstr ""
|
103 |
|
@@ -158,15 +158,15 @@ msgstr ""
|
|
158 |
msgid "Ajax route not found: \"%s\""
|
159 |
msgstr ""
|
160 |
|
161 |
-
#: tpl/admin/config/settings.php:
|
162 |
msgid "Allow"
|
163 |
msgstr ""
|
164 |
|
165 |
-
#: tpl/admin/config/settings.php:
|
166 |
msgid "Allow (with warning)"
|
167 |
msgstr ""
|
168 |
|
169 |
-
#: tpl/admin/config/settings.php:
|
170 |
msgid "Allow full access to these roles"
|
171 |
msgstr ""
|
172 |
|
@@ -195,7 +195,7 @@ msgstr ""
|
|
195 |
msgid "Author details"
|
196 |
msgstr ""
|
197 |
|
198 |
-
#: tpl/admin/init/init-po.php:
|
199 |
msgid "Available languages"
|
200 |
msgstr ""
|
201 |
|
@@ -233,7 +233,7 @@ msgstr ""
|
|
233 |
msgid "Bundle setup"
|
234 |
msgstr ""
|
235 |
|
236 |
-
#: src/
|
237 |
msgid ""
|
238 |
"Changes to this file may be overwritten or deleted when you update WordPress"
|
239 |
msgstr ""
|
@@ -250,15 +250,15 @@ msgstr ""
|
|
250 |
msgid "Child theme declares the same Text Domain as the parent theme"
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: tpl/admin/init/init-po.php:
|
254 |
msgid "Choose a language"
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: tpl/admin/init/init-po.php:
|
258 |
msgid "Choose a location"
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: tpl/admin/common/inc-fsconn.php:
|
262 |
msgid "Click \"Connect\" to authenticate with the server"
|
263 |
msgstr ""
|
264 |
|
@@ -305,19 +305,19 @@ msgstr[1] ""
|
|
305 |
msgid "Confirm delete"
|
306 |
msgstr ""
|
307 |
|
308 |
-
#: tpl/admin/common/inc-fsconn.php:
|
309 |
msgid "Connect"
|
310 |
msgstr ""
|
311 |
|
312 |
-
#: src/ajax/FsConnectController.php:
|
313 |
msgid "Connected to remote file system"
|
314 |
msgstr ""
|
315 |
|
316 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
317 |
msgid "Copy"
|
318 |
msgstr ""
|
319 |
|
320 |
-
#: tpl/admin/init/init-po.php:
|
321 |
#, php-format
|
322 |
msgid "Copy target translations from \"%s\""
|
323 |
msgstr ""
|
@@ -336,11 +336,11 @@ msgstr ""
|
|
336 |
msgid "Create template instead"
|
337 |
msgstr ""
|
338 |
|
339 |
-
#: src/
|
340 |
msgid "Creating this file requires permission"
|
341 |
msgstr ""
|
342 |
|
343 |
-
#: tpl/admin/init/init-po.php:
|
344 |
msgid "Custom language"
|
345 |
msgstr ""
|
346 |
|
@@ -350,18 +350,18 @@ msgstr ""
|
|
350 |
msgid "Debug"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: src/admin/file/BaseController.php:
|
354 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
355 |
msgid "Delete"
|
356 |
msgstr ""
|
357 |
|
358 |
-
#: src/admin/file/DeleteController.php:
|
359 |
-
#: src/admin/file/DeleteController.php:
|
360 |
#, php-format
|
361 |
msgid "Delete %s"
|
362 |
msgstr ""
|
363 |
|
364 |
-
#: src/
|
365 |
msgid "Deleting this file requires permission"
|
366 |
msgstr ""
|
367 |
|
@@ -378,12 +378,12 @@ msgstr ""
|
|
378 |
msgid "Directory is writeable"
|
379 |
msgstr ""
|
380 |
|
381 |
-
#: tpl/admin/config/settings.php:
|
382 |
msgid "Disallow"
|
383 |
msgstr ""
|
384 |
|
385 |
-
#: src/admin/bundle/LocaleController.php:
|
386 |
-
#: tpl/admin/common/inc-fsconn.php:
|
387 |
msgid "Documentation"
|
388 |
msgstr ""
|
389 |
|
@@ -399,7 +399,7 @@ msgstr ""
|
|
399 |
msgid "Download controller returned empty output"
|
400 |
msgstr ""
|
401 |
|
402 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
403 |
msgid "Edit"
|
404 |
msgstr ""
|
405 |
|
@@ -417,7 +417,7 @@ msgstr ""
|
|
417 |
msgid "Editing %1$s in %2$s"
|
418 |
msgstr ""
|
419 |
|
420 |
-
#: src/admin/file/BaseController.php:
|
421 |
msgid "Editor"
|
422 |
msgstr ""
|
423 |
|
@@ -553,7 +553,7 @@ msgid ""
|
|
553 |
"it"
|
554 |
msgstr ""
|
555 |
|
556 |
-
#: src/js/Strings.php:67 src/error/Exception.php:
|
557 |
msgid "Error"
|
558 |
msgstr ""
|
559 |
|
@@ -573,7 +573,7 @@ msgstr[1] ""
|
|
573 |
msgid "Extracting strings"
|
574 |
msgstr ""
|
575 |
|
576 |
-
#: src/fs/FileWriter.php:
|
577 |
msgid "Failed to build directory path"
|
578 |
msgstr ""
|
579 |
|
@@ -586,28 +586,28 @@ msgstr ""
|
|
586 |
msgid "Failed to connect to remote server"
|
587 |
msgstr ""
|
588 |
|
589 |
-
#: src/fs/FileWriter.php:
|
590 |
#, php-format
|
591 |
msgid "Failed to copy %s to %s"
|
592 |
msgstr ""
|
593 |
|
594 |
-
#: src/ajax/SaveController.php:
|
595 |
#, php-format
|
596 |
msgid ""
|
597 |
"Failed to create backup file in \"%s\". Check file permissions or disable "
|
598 |
"backups"
|
599 |
msgstr ""
|
600 |
|
601 |
-
#: src/fs/FileWriter.php:
|
602 |
msgid "Failed to create directory"
|
603 |
msgstr ""
|
604 |
|
605 |
-
#: src/fs/FileWriter.php:
|
606 |
#, php-format
|
607 |
msgid "Failed to delete %s"
|
608 |
msgstr ""
|
609 |
|
610 |
-
#: src/fs/FileWriter.php:
|
611 |
msgid "Failed to save file"
|
612 |
msgstr ""
|
613 |
|
@@ -619,7 +619,7 @@ msgstr ""
|
|
619 |
msgid "File backups are disabled in your plugin settings"
|
620 |
msgstr ""
|
621 |
|
622 |
-
#: src/admin/file/DeleteController.php:
|
623 |
#, php-format
|
624 |
msgid "File deleted"
|
625 |
msgid_plural "%u files deleted"
|
@@ -634,8 +634,8 @@ msgstr ""
|
|
634 |
msgid "File doesn't exist"
|
635 |
msgstr ""
|
636 |
|
637 |
-
#: src/admin/file/BaseController.php:
|
638 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
639 |
msgid "File info"
|
640 |
msgstr ""
|
641 |
|
@@ -652,30 +652,30 @@ msgid "File is protected by the bundle configuration"
|
|
652 |
msgstr ""
|
653 |
|
654 |
#. Refers to bundled plugin or theme translation files - i.e. those supplied by the author
|
655 |
-
#: src/fs/LocaleDirectory.php:
|
656 |
msgctxt "File location"
|
657 |
msgid "Author"
|
658 |
msgstr ""
|
659 |
|
660 |
#. Refers to translation files in Loco's custom/protected directory
|
661 |
-
#: src/fs/LocaleDirectory.php:
|
662 |
msgctxt "File location"
|
663 |
msgid "Custom"
|
664 |
msgstr ""
|
665 |
|
666 |
#. Refers to translation files in an alternative location that isn't Author, System or Custom.
|
667 |
-
#: src/fs/LocaleDirectory.php:
|
668 |
msgctxt "File location"
|
669 |
msgid "Other"
|
670 |
msgstr ""
|
671 |
|
672 |
#. Refers to system-installed translation files - i.e. those under WP_LANG_DIR
|
673 |
-
#: src/fs/LocaleDirectory.php:
|
674 |
msgctxt "File location"
|
675 |
msgid "System"
|
676 |
msgstr ""
|
677 |
|
678 |
-
#: src/fs/FileWriter.php:
|
679 |
msgid "File modification is disallowed by your WordPress config"
|
680 |
msgstr ""
|
681 |
|
@@ -684,6 +684,13 @@ msgstr ""
|
|
684 |
msgid "File modified"
|
685 |
msgstr ""
|
686 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
687 |
#: tpl/admin/errors/file-missing.php:11
|
688 |
msgid "File not found"
|
689 |
msgstr ""
|
@@ -701,7 +708,7 @@ msgstr ""
|
|
701 |
msgid "File size"
|
702 |
msgstr ""
|
703 |
|
704 |
-
#: tpl/admin/config/settings.php:
|
705 |
msgid "File system access"
|
706 |
msgstr ""
|
707 |
|
@@ -734,7 +741,7 @@ msgstr ""
|
|
734 |
msgid "Find config"
|
735 |
msgstr ""
|
736 |
|
737 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
738 |
msgid "Folder"
|
739 |
msgstr ""
|
740 |
|
@@ -768,7 +775,7 @@ msgstr ""
|
|
768 |
msgid "Go to WordPress Core"
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: tpl/admin/config/settings.php:
|
772 |
msgid "Grant access to roles"
|
773 |
msgstr ""
|
774 |
|
@@ -824,7 +831,7 @@ msgstr ""
|
|
824 |
msgid "Include Fuzzy strings"
|
825 |
msgstr ""
|
826 |
|
827 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
828 |
msgid "Info"
|
829 |
msgstr ""
|
830 |
|
@@ -837,8 +844,8 @@ msgstr ""
|
|
837 |
msgid "Initializing new translations in unknown set"
|
838 |
msgstr ""
|
839 |
|
840 |
-
#: src/admin/bundle/LocaleController.php:
|
841 |
-
#: src/admin/list/LocalesController.php:35 tpl/admin/init/init-po.php:
|
842 |
msgid "Installed languages"
|
843 |
msgstr ""
|
844 |
|
@@ -850,16 +857,16 @@ msgstr ""
|
|
850 |
msgid "It needs configuring before you can do any translations"
|
851 |
msgstr ""
|
852 |
|
853 |
-
#: tpl/admin/init/init-po.php:
|
854 |
msgid "Just copy English source strings"
|
855 |
msgstr ""
|
856 |
|
857 |
#. relative time when something happened in the last 30 seconds
|
858 |
-
#: src/mvc/FileParams.php:
|
859 |
msgid "Just now"
|
860 |
msgstr ""
|
861 |
|
862 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
863 |
msgid "Language"
|
864 |
msgstr ""
|
865 |
|
@@ -887,7 +894,7 @@ msgstr ""
|
|
887 |
msgid "Last extracted"
|
888 |
msgstr ""
|
889 |
|
890 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
891 |
#: tpl/admin/list/locales.php:19 tpl/admin/list/inc-table.php:17
|
892 |
msgid "Last modified"
|
893 |
msgstr ""
|
@@ -958,7 +965,7 @@ msgstr ""
|
|
958 |
msgid "Loco, Translation Management"
|
959 |
msgstr ""
|
960 |
|
961 |
-
#: tpl/admin/config/settings.php:
|
962 |
msgid "Look for non-standard names:"
|
963 |
msgstr ""
|
964 |
|
@@ -985,11 +992,11 @@ msgstr ""
|
|
985 |
msgid "MO file exists for this language already. Delete it first"
|
986 |
msgstr ""
|
987 |
|
988 |
-
#: tpl/admin/config/settings.php:
|
989 |
msgid "Modification of installed files"
|
990 |
msgstr ""
|
991 |
|
992 |
-
#: src/fs/FileWriter.php:
|
993 |
msgid "Modification of installed files is disallowed by the plugin settings"
|
994 |
msgstr ""
|
995 |
|
@@ -999,9 +1006,18 @@ msgctxt "Modified time"
|
|
999 |
msgid "Updated"
|
1000 |
msgstr ""
|
1001 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1002 |
#: src/admin/init/InitPoController.php:16
|
1003 |
#: src/admin/init/InitPoController.php:111
|
1004 |
-
#: src/admin/file/BaseController.php:
|
1005 |
msgid "New language"
|
1006 |
msgstr ""
|
1007 |
|
@@ -1018,7 +1034,7 @@ msgstr ""
|
|
1018 |
msgid "New translations template for \"%s\""
|
1019 |
msgstr ""
|
1020 |
|
1021 |
-
#: src/admin/bundle/LocaleController.php:
|
1022 |
msgid "No core translation files are installed for this language"
|
1023 |
msgstr ""
|
1024 |
|
@@ -1026,7 +1042,7 @@ msgstr ""
|
|
1026 |
msgid "No files found for this language"
|
1027 |
msgstr ""
|
1028 |
|
1029 |
-
#: tpl/admin/init/init-po.php:
|
1030 |
msgid "No language selected"
|
1031 |
msgstr ""
|
1032 |
|
@@ -1034,7 +1050,7 @@ msgstr ""
|
|
1034 |
msgid "No previous file revisions"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
1038 |
#, php-format
|
1039 |
msgid "No translations found for \"%s\""
|
1040 |
msgstr ""
|
@@ -1044,7 +1060,7 @@ msgstr ""
|
|
1044 |
msgid "no wildcards"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
-
#: tpl/admin/config/settings.php:86 tpl/admin/config/settings.php:
|
1048 |
msgid "Not recommended"
|
1049 |
msgstr ""
|
1050 |
|
@@ -1060,7 +1076,7 @@ msgid "Nothing matches the text filter"
|
|
1060 |
msgstr ""
|
1061 |
|
1062 |
#: src/js/Strings.php:73 src/error/Notice.php:20
|
1063 |
-
#: tpl/admin/common/inc-fsconn.php:
|
1064 |
msgid "Notice"
|
1065 |
msgstr ""
|
1066 |
|
@@ -1084,7 +1100,7 @@ msgstr ""
|
|
1084 |
msgid "OK, Load this config"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: src/admin/file/DeleteController.php:
|
1088 |
#, php-format
|
1089 |
msgid "One dependent file will also be deleted"
|
1090 |
msgid_plural "%u dependent files will also be deleted"
|
@@ -1098,6 +1114,13 @@ msgid_plural "%s files can't be matched to a known set of strings"
|
|
1098 |
msgstr[0] ""
|
1099 |
msgstr[1] ""
|
1100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1101 |
#. Where %2$s is the maximum size of a file that will be included and %3$s is the largest encountered
|
1102 |
#: src/ajax/SyncController.php:63
|
1103 |
#, php-format
|
@@ -1132,12 +1155,12 @@ msgstr ""
|
|
1132 |
msgid "Overview"
|
1133 |
msgstr ""
|
1134 |
|
1135 |
-
#: src/mvc/AdminRouter.php:
|
1136 |
msgid "Page not found"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
-
#: src/fs/FileWriter.php:
|
1140 |
-
msgid "Parent directory
|
1141 |
msgstr ""
|
1142 |
|
1143 |
#: tpl/admin/bundle/conf.php:144
|
@@ -1148,7 +1171,7 @@ msgstr ""
|
|
1148 |
msgid "Partially configured bundle"
|
1149 |
msgstr ""
|
1150 |
|
1151 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
1152 |
msgid "Pending"
|
1153 |
msgstr ""
|
1154 |
|
@@ -1156,7 +1179,7 @@ msgstr ""
|
|
1156 |
msgid "Permission denied"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: src/fs/FileWriter.php:
|
1160 |
msgid "Permission denied to update file"
|
1161 |
msgstr ""
|
1162 |
|
@@ -1177,7 +1200,7 @@ msgid "Plugin translations ‹ Loco"
|
|
1177 |
msgstr ""
|
1178 |
|
1179 |
#: src/mvc/AdminRouter.php:49 src/admin/Navigation.php:44
|
1180 |
-
#: src/admin/bundle/LocaleController.php:
|
1181 |
msgid "Plugins"
|
1182 |
msgstr ""
|
1183 |
|
@@ -1241,19 +1264,19 @@ msgstr ""
|
|
1241 |
msgid "PO file missing"
|
1242 |
msgstr ""
|
1243 |
|
1244 |
-
#: src/ajax/SaveController.php:
|
1245 |
msgid "PO file saved and MO file compiled"
|
1246 |
msgstr ""
|
1247 |
|
1248 |
-
#: src/ajax/SaveController.php:
|
1249 |
msgid "PO file saved, but MO file compilation failed"
|
1250 |
msgstr ""
|
1251 |
|
1252 |
-
#: src/ajax/SaveController.php:
|
1253 |
msgid "POT file saved"
|
1254 |
msgstr ""
|
1255 |
|
1256 |
-
#: tpl/admin/config/settings.php:
|
1257 |
msgid "POT template files"
|
1258 |
msgstr ""
|
1259 |
|
@@ -1273,7 +1296,7 @@ msgstr ""
|
|
1273 |
msgid "Recently updated:"
|
1274 |
msgstr ""
|
1275 |
|
1276 |
-
#: src/fs/FileWriter.php:
|
1277 |
msgid "Refusing to copy over an existing file"
|
1278 |
msgstr ""
|
1279 |
|
@@ -1282,11 +1305,15 @@ msgstr ""
|
|
1282 |
msgid "Relative path from bundle root to the official POT file"
|
1283 |
msgstr ""
|
1284 |
|
|
|
|
|
|
|
|
|
1285 |
#: tpl/admin/bundle/conf.php:159 tpl/admin/bundle/setup/saved.php:18
|
1286 |
msgid "Reset config"
|
1287 |
msgstr ""
|
1288 |
|
1289 |
-
#: src/admin/file/BaseController.php:
|
1290 |
msgid "Restore"
|
1291 |
msgstr ""
|
1292 |
|
@@ -1313,11 +1340,11 @@ msgstr ""
|
|
1313 |
msgid "Save config"
|
1314 |
msgstr ""
|
1315 |
|
1316 |
-
#: tpl/admin/config/settings.php:
|
1317 |
msgid "Save credentials in session"
|
1318 |
msgstr ""
|
1319 |
|
1320 |
-
#: tpl/admin/config/settings.php:
|
1321 |
msgid "Save settings"
|
1322 |
msgstr ""
|
1323 |
|
@@ -1325,7 +1352,7 @@ msgstr ""
|
|
1325 |
msgid "Saving PO/POT files"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
-
#: src/
|
1329 |
msgid "Saving this file requires permission"
|
1330 |
msgstr ""
|
1331 |
|
@@ -1337,15 +1364,15 @@ msgstr ""
|
|
1337 |
msgid "Scan PHP files with extensions:"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
-
#: src/admin/bundle/LocaleController.php:
|
1341 |
msgid "See all core translations"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
-
#: tpl/admin/root.php:54 src/admin/bundle/LocaleController.php:
|
1345 |
msgid "See all plugins"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
-
#: tpl/admin/root.php:39 src/admin/bundle/LocaleController.php:
|
1349 |
msgid "See all themes"
|
1350 |
msgstr ""
|
1351 |
|
@@ -1365,7 +1392,7 @@ msgid "Sets"
|
|
1365 |
msgstr ""
|
1366 |
|
1367 |
#: src/mvc/AdminRouter.php:67 src/mvc/AdminRouter.php:72
|
1368 |
-
#: tpl/admin/common/inc-fsconn.php:18 tpl/admin/common/inc-fsconn.php:
|
1369 |
#: tpl/admin/errors/no-backups.php:24
|
1370 |
msgid "Settings"
|
1371 |
msgstr ""
|
@@ -1404,7 +1431,7 @@ msgstr ""
|
|
1404 |
msgid "Skip template"
|
1405 |
msgstr ""
|
1406 |
|
1407 |
-
#: src/admin/file/BaseController.php:
|
1408 |
msgid "Source"
|
1409 |
msgstr ""
|
1410 |
|
@@ -1420,7 +1447,7 @@ msgstr ""
|
|
1420 |
msgid "Source text"
|
1421 |
msgstr ""
|
1422 |
|
1423 |
-
#: tpl/admin/init/init-po.php:
|
1424 |
msgid "Start translating"
|
1425 |
msgstr ""
|
1426 |
|
@@ -1433,7 +1460,7 @@ msgid "System diagnostics"
|
|
1433 |
msgstr ""
|
1434 |
|
1435 |
#: tpl/admin/file/view-pot.php:9 tpl/admin/file/edit-pot.php:10
|
1436 |
-
#: tpl/admin/file/info-pot.php:10 tpl/admin/bundle/inc-po-table.php:
|
1437 |
#: tpl/admin/bundle/conf.php:65
|
1438 |
msgid "Template file"
|
1439 |
msgstr ""
|
@@ -1442,7 +1469,7 @@ msgstr ""
|
|
1442 |
msgid "Template file already exists"
|
1443 |
msgstr ""
|
1444 |
|
1445 |
-
#: src/ajax/XgettextController.php:
|
1446 |
msgid "Template file created"
|
1447 |
msgstr ""
|
1448 |
|
@@ -1450,7 +1477,7 @@ msgstr ""
|
|
1450 |
msgid "Template missing"
|
1451 |
msgstr ""
|
1452 |
|
1453 |
-
#: tpl/admin/init/init-po.php:
|
1454 |
msgid "Template options"
|
1455 |
msgstr ""
|
1456 |
|
@@ -1496,7 +1523,7 @@ msgid "Theme translations ‹ Loco"
|
|
1496 |
msgstr ""
|
1497 |
|
1498 |
#: src/mvc/AdminRouter.php:44 src/admin/Navigation.php:41
|
1499 |
-
#: src/admin/bundle/LocaleController.php:
|
1500 |
msgid "Themes"
|
1501 |
msgstr ""
|
1502 |
|
@@ -1565,15 +1592,21 @@ msgstr ""
|
|
1565 |
msgid "This directory can't be written to directly by the web server"
|
1566 |
msgstr ""
|
1567 |
|
1568 |
-
#: src/
|
1569 |
msgid "This directory is managed by WordPress, be careful what you delete"
|
1570 |
msgstr ""
|
1571 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1572 |
#: tpl/admin/file/info.php:39
|
1573 |
msgid "This file can't be updated directly by the web server"
|
1574 |
msgstr ""
|
1575 |
|
1576 |
-
#: src/
|
1577 |
msgid "This file may be overwritten or deleted when you update WordPress"
|
1578 |
msgstr ""
|
1579 |
|
@@ -1581,6 +1614,10 @@ msgstr ""
|
|
1581 |
msgid "This information is for developers to find problems in the bundle setup"
|
1582 |
msgstr ""
|
1583 |
|
|
|
|
|
|
|
|
|
1584 |
#: tpl/admin/errors/file-isdir.php:14
|
1585 |
msgid "This page was expecting a file, but the path is actually a directory"
|
1586 |
msgstr ""
|
@@ -1631,7 +1668,7 @@ msgstr ""
|
|
1631 |
msgid "Translate themes and plugins directly in WordPress"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
-
#: tpl/admin/file/info-po.php:26 tpl/admin/bundle/inc-po-table.php:
|
1635 |
#: tpl/admin/bundle/locale.php:36
|
1636 |
msgid "Translation progress"
|
1637 |
msgstr ""
|
@@ -1680,7 +1717,7 @@ msgstr ""
|
|
1680 |
msgid "Upgrade to %s"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
-
#: tpl/admin/init/init-po.php:
|
1684 |
#, php-format
|
1685 |
msgid "Use \"%s\" as template when running Sync"
|
1686 |
msgstr ""
|
@@ -1716,7 +1753,7 @@ msgstr ""
|
|
1716 |
msgid "Version %s"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
-
#: tpl/admin/bundle/inc-po-table.php:
|
1720 |
msgid "View"
|
1721 |
msgstr ""
|
1722 |
|
@@ -1750,7 +1787,7 @@ msgstr ""
|
|
1750 |
msgid "Welcome to Loco Translate"
|
1751 |
msgstr ""
|
1752 |
|
1753 |
-
#: src/admin/init/InitPoController.php:
|
1754 |
msgid "What's this?"
|
1755 |
msgstr ""
|
1756 |
|
@@ -1758,7 +1795,7 @@ msgstr ""
|
|
1758 |
msgid "WordPress"
|
1759 |
msgstr ""
|
1760 |
|
1761 |
-
#: src/package/Core.php:79 src/admin/bundle/LocaleController.php:
|
1762 |
msgid "WordPress Core"
|
1763 |
msgstr ""
|
1764 |
|
@@ -1766,7 +1803,7 @@ msgstr ""
|
|
1766 |
msgid "WordPress core"
|
1767 |
msgstr ""
|
1768 |
|
1769 |
-
#: tpl/admin/init/init-po.php:
|
1770 |
msgid "WordPress language"
|
1771 |
msgstr ""
|
1772 |
|
@@ -1776,7 +1813,7 @@ msgstr ""
|
|
1776 |
|
1777 |
#. When a file or folder cannot be modified due to filesystem permissions
|
1778 |
#: tpl/admin/file/info.php:36 tpl/admin/file/info.php:89
|
1779 |
-
#: tpl/admin/common/inc-fsconn.php:
|
1780 |
msgid "Write protected"
|
1781 |
msgstr ""
|
1782 |
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
+
"Project-Id-Version: Loco Translate 2.3.0\n"
|
5 |
"Report-Msgid-Bugs-To: \n"
|
6 |
+
"POT-Creation-Date: 2019-05-31 14:05+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.3.0; wp-5.2.1"
|
17 |
|
18 |
+
#: src/fs/FileWriter.php:214
|
19 |
#, php-format
|
20 |
msgid "\"%s\" is a directory, not a file"
|
21 |
msgstr ""
|
24 |
msgid "\"Hello Dolly\" is part of the WordPress core"
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: src/api/WordPressFileSystem.php:87
|
28 |
#, php-format
|
29 |
msgid "%s already exists in this folder"
|
30 |
msgstr ""
|
97 |
msgstr[0] ""
|
98 |
msgstr[1] ""
|
99 |
|
100 |
+
#: tpl/admin/config/settings.php:142
|
101 |
msgid "About file system access"
|
102 |
msgstr ""
|
103 |
|
158 |
msgid "Ajax route not found: \"%s\""
|
159 |
msgstr ""
|
160 |
|
161 |
+
#: tpl/admin/config/settings.php:129
|
162 |
msgid "Allow"
|
163 |
msgstr ""
|
164 |
|
165 |
+
#: tpl/admin/config/settings.php:132
|
166 |
msgid "Allow (with warning)"
|
167 |
msgstr ""
|
168 |
|
169 |
+
#: tpl/admin/config/settings.php:153
|
170 |
msgid "Allow full access to these roles"
|
171 |
msgstr ""
|
172 |
|
195 |
msgid "Author details"
|
196 |
msgstr ""
|
197 |
|
198 |
+
#: tpl/admin/init/init-po.php:67
|
199 |
msgid "Available languages"
|
200 |
msgstr ""
|
201 |
|
233 |
msgid "Bundle setup"
|
234 |
msgstr ""
|
235 |
|
236 |
+
#: src/ajax/FsConnectController.php:114
|
237 |
msgid ""
|
238 |
"Changes to this file may be overwritten or deleted when you update WordPress"
|
239 |
msgstr ""
|
250 |
msgid "Child theme declares the same Text Domain as the parent theme"
|
251 |
msgstr ""
|
252 |
|
253 |
+
#: tpl/admin/init/init-po.php:48
|
254 |
msgid "Choose a language"
|
255 |
msgstr ""
|
256 |
|
257 |
+
#: tpl/admin/init/init-po.php:93
|
258 |
msgid "Choose a location"
|
259 |
msgstr ""
|
260 |
|
261 |
+
#: tpl/admin/common/inc-fsconn.php:56
|
262 |
msgid "Click \"Connect\" to authenticate with the server"
|
263 |
msgstr ""
|
264 |
|
305 |
msgid "Confirm delete"
|
306 |
msgstr ""
|
307 |
|
308 |
+
#: tpl/admin/common/inc-fsconn.php:60
|
309 |
msgid "Connect"
|
310 |
msgstr ""
|
311 |
|
312 |
+
#: src/ajax/FsConnectController.php:101
|
313 |
msgid "Connected to remote file system"
|
314 |
msgstr ""
|
315 |
|
316 |
+
#: tpl/admin/bundle/inc-po-table.php:57 tpl/admin/bundle/locale.php:72
|
317 |
msgid "Copy"
|
318 |
msgstr ""
|
319 |
|
320 |
+
#: tpl/admin/init/init-po.php:147
|
321 |
#, php-format
|
322 |
msgid "Copy target translations from \"%s\""
|
323 |
msgstr ""
|
336 |
msgid "Create template instead"
|
337 |
msgstr ""
|
338 |
|
339 |
+
#: src/ajax/FsConnectController.php:124
|
340 |
msgid "Creating this file requires permission"
|
341 |
msgstr ""
|
342 |
|
343 |
+
#: tpl/admin/init/init-po.php:79
|
344 |
msgid "Custom language"
|
345 |
msgstr ""
|
346 |
|
350 |
msgid "Debug"
|
351 |
msgstr ""
|
352 |
|
353 |
+
#: src/admin/file/BaseController.php:110 tpl/admin/file/diff.php:31
|
354 |
+
#: tpl/admin/bundle/inc-po-table.php:60 tpl/admin/bundle/locale.php:75
|
355 |
msgid "Delete"
|
356 |
msgstr ""
|
357 |
|
358 |
+
#: src/admin/file/DeleteController.php:76
|
359 |
+
#: src/admin/file/DeleteController.php:94
|
360 |
#, php-format
|
361 |
msgid "Delete %s"
|
362 |
msgstr ""
|
363 |
|
364 |
+
#: src/ajax/FsConnectController.php:127
|
365 |
msgid "Deleting this file requires permission"
|
366 |
msgstr ""
|
367 |
|
378 |
msgid "Directory is writeable"
|
379 |
msgstr ""
|
380 |
|
381 |
+
#: tpl/admin/config/settings.php:135
|
382 |
msgid "Disallow"
|
383 |
msgstr ""
|
384 |
|
385 |
+
#: src/admin/bundle/LocaleController.php:130 tpl/admin/common/inc-fsconn.php:16
|
386 |
+
#: tpl/admin/common/inc-fsconn.php:41 tpl/admin/errors/no-backups.php:22
|
387 |
msgid "Documentation"
|
388 |
msgstr ""
|
389 |
|
399 |
msgid "Download controller returned empty output"
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: tpl/admin/bundle/inc-po-table.php:48 tpl/admin/bundle/locale.php:63
|
403 |
msgid "Edit"
|
404 |
msgstr ""
|
405 |
|
417 |
msgid "Editing %1$s in %2$s"
|
418 |
msgstr ""
|
419 |
|
420 |
+
#: src/admin/file/BaseController.php:105
|
421 |
msgid "Editor"
|
422 |
msgstr ""
|
423 |
|
553 |
"it"
|
554 |
msgstr ""
|
555 |
|
556 |
+
#: src/js/Strings.php:67 src/error/Exception.php:149
|
557 |
msgid "Error"
|
558 |
msgstr ""
|
559 |
|
573 |
msgid "Extracting strings"
|
574 |
msgstr ""
|
575 |
|
576 |
+
#: src/fs/FileWriter.php:288
|
577 |
msgid "Failed to build directory path"
|
578 |
msgstr ""
|
579 |
|
586 |
msgid "Failed to connect to remote server"
|
587 |
msgstr ""
|
588 |
|
589 |
+
#: src/fs/FileWriter.php:160
|
590 |
#, php-format
|
591 |
msgid "Failed to copy %s to %s"
|
592 |
msgstr ""
|
593 |
|
594 |
+
#: src/ajax/SaveController.php:72
|
595 |
#, php-format
|
596 |
msgid ""
|
597 |
"Failed to create backup file in \"%s\". Check file permissions or disable "
|
598 |
"backups"
|
599 |
msgstr ""
|
600 |
|
601 |
+
#: src/fs/FileWriter.php:280
|
602 |
msgid "Failed to create directory"
|
603 |
msgstr ""
|
604 |
|
605 |
+
#: src/fs/FileWriter.php:198
|
606 |
#, php-format
|
607 |
msgid "Failed to delete %s"
|
608 |
msgstr ""
|
609 |
|
610 |
+
#: src/fs/FileWriter.php:249
|
611 |
msgid "Failed to save file"
|
612 |
msgstr ""
|
613 |
|
619 |
msgid "File backups are disabled in your plugin settings"
|
620 |
msgstr ""
|
621 |
|
622 |
+
#: src/admin/file/DeleteController.php:57 src/admin/file/DiffController.php:61
|
623 |
#, php-format
|
624 |
msgid "File deleted"
|
625 |
msgid_plural "%u files deleted"
|
634 |
msgid "File doesn't exist"
|
635 |
msgstr ""
|
636 |
|
637 |
+
#: src/admin/file/BaseController.php:107 tpl/admin/file/diff.php:60
|
638 |
+
#: tpl/admin/bundle/inc-po-table.php:22 tpl/admin/bundle/locale.php:43
|
639 |
msgid "File info"
|
640 |
msgstr ""
|
641 |
|
652 |
msgstr ""
|
653 |
|
654 |
#. Refers to bundled plugin or theme translation files - i.e. those supplied by the author
|
655 |
+
#: src/fs/LocaleDirectory.php:63
|
656 |
msgctxt "File location"
|
657 |
msgid "Author"
|
658 |
msgstr ""
|
659 |
|
660 |
#. Refers to translation files in Loco's custom/protected directory
|
661 |
+
#: src/fs/LocaleDirectory.php:69
|
662 |
msgctxt "File location"
|
663 |
msgid "Custom"
|
664 |
msgstr ""
|
665 |
|
666 |
#. Refers to translation files in an alternative location that isn't Author, System or Custom.
|
667 |
+
#: src/fs/LocaleDirectory.php:72
|
668 |
msgctxt "File location"
|
669 |
msgid "Other"
|
670 |
msgstr ""
|
671 |
|
672 |
#. Refers to system-installed translation files - i.e. those under WP_LANG_DIR
|
673 |
+
#: src/fs/LocaleDirectory.php:66
|
674 |
msgctxt "File location"
|
675 |
msgid "System"
|
676 |
msgstr ""
|
677 |
|
678 |
+
#: src/fs/FileWriter.php:299
|
679 |
msgid "File modification is disallowed by your WordPress config"
|
680 |
msgstr ""
|
681 |
|
684 |
msgid "File modified"
|
685 |
msgstr ""
|
686 |
|
687 |
+
#: src/admin/file/MoveController.php:79
|
688 |
+
#, php-format
|
689 |
+
msgid "File moved"
|
690 |
+
msgid_plural "%u files moved"
|
691 |
+
msgstr[0] ""
|
692 |
+
msgstr[1] ""
|
693 |
+
|
694 |
#: tpl/admin/errors/file-missing.php:11
|
695 |
msgid "File not found"
|
696 |
msgstr ""
|
708 |
msgid "File size"
|
709 |
msgstr ""
|
710 |
|
711 |
+
#: tpl/admin/config/settings.php:112 tpl/admin/config/settings.php:116
|
712 |
msgid "File system access"
|
713 |
msgstr ""
|
714 |
|
741 |
msgid "Find config"
|
742 |
msgstr ""
|
743 |
|
744 |
+
#: tpl/admin/bundle/inc-po-table.php:28 tpl/admin/bundle/locale.php:49
|
745 |
msgid "Folder"
|
746 |
msgstr ""
|
747 |
|
775 |
msgid "Go to WordPress Core"
|
776 |
msgstr ""
|
777 |
|
778 |
+
#: tpl/admin/config/settings.php:149
|
779 |
msgid "Grant access to roles"
|
780 |
msgstr ""
|
781 |
|
831 |
msgid "Include Fuzzy strings"
|
832 |
msgstr ""
|
833 |
|
834 |
+
#: tpl/admin/bundle/inc-po-table.php:54 tpl/admin/bundle/locale.php:69
|
835 |
msgid "Info"
|
836 |
msgstr ""
|
837 |
|
844 |
msgid "Initializing new translations in unknown set"
|
845 |
msgstr ""
|
846 |
|
847 |
+
#: src/admin/bundle/LocaleController.php:116
|
848 |
+
#: src/admin/list/LocalesController.php:35 tpl/admin/init/init-po.php:61
|
849 |
msgid "Installed languages"
|
850 |
msgstr ""
|
851 |
|
857 |
msgid "It needs configuring before you can do any translations"
|
858 |
msgstr ""
|
859 |
|
860 |
+
#: tpl/admin/init/init-po.php:153
|
861 |
msgid "Just copy English source strings"
|
862 |
msgstr ""
|
863 |
|
864 |
#. relative time when something happened in the last 30 seconds
|
865 |
+
#: src/mvc/FileParams.php:145
|
866 |
msgid "Just now"
|
867 |
msgstr ""
|
868 |
|
869 |
+
#: tpl/admin/bundle/inc-po-table.php:13
|
870 |
msgid "Language"
|
871 |
msgstr ""
|
872 |
|
894 |
msgid "Last extracted"
|
895 |
msgstr ""
|
896 |
|
897 |
+
#: tpl/admin/bundle/inc-po-table.php:25 tpl/admin/bundle/locale.php:46
|
898 |
#: tpl/admin/list/locales.php:19 tpl/admin/list/inc-table.php:17
|
899 |
msgid "Last modified"
|
900 |
msgstr ""
|
965 |
msgid "Loco, Translation Management"
|
966 |
msgstr ""
|
967 |
|
968 |
+
#: tpl/admin/config/settings.php:104
|
969 |
msgid "Look for non-standard names:"
|
970 |
msgstr ""
|
971 |
|
992 |
msgid "MO file exists for this language already. Delete it first"
|
993 |
msgstr ""
|
994 |
|
995 |
+
#: tpl/admin/config/settings.php:126
|
996 |
msgid "Modification of installed files"
|
997 |
msgstr ""
|
998 |
|
999 |
+
#: src/fs/FileWriter.php:303
|
1000 |
msgid "Modification of installed files is disallowed by the plugin settings"
|
1001 |
msgstr ""
|
1002 |
|
1006 |
msgid "Updated"
|
1007 |
msgstr ""
|
1008 |
|
1009 |
+
#: src/admin/file/MoveController.php:100 src/admin/file/MoveController.php:127
|
1010 |
+
#, php-format
|
1011 |
+
msgid "Move %s"
|
1012 |
+
msgstr ""
|
1013 |
+
|
1014 |
+
#: tpl/admin/file/move.php:24
|
1015 |
+
msgid "Move files"
|
1016 |
+
msgstr ""
|
1017 |
+
|
1018 |
#: src/admin/init/InitPoController.php:16
|
1019 |
#: src/admin/init/InitPoController.php:111
|
1020 |
+
#: src/admin/file/BaseController.php:129 src/admin/bundle/ViewController.php:96
|
1021 |
msgid "New language"
|
1022 |
msgstr ""
|
1023 |
|
1034 |
msgid "New translations template for \"%s\""
|
1035 |
msgstr ""
|
1036 |
|
1037 |
+
#: src/admin/bundle/LocaleController.php:129
|
1038 |
msgid "No core translation files are installed for this language"
|
1039 |
msgstr ""
|
1040 |
|
1042 |
msgid "No files found for this language"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
+
#: tpl/admin/init/init-po.php:60
|
1046 |
msgid "No language selected"
|
1047 |
msgstr ""
|
1048 |
|
1050 |
msgid "No previous file revisions"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
+
#: tpl/admin/bundle/inc-po-table.php:105
|
1054 |
#, php-format
|
1055 |
msgid "No translations found for \"%s\""
|
1056 |
msgstr ""
|
1060 |
msgid "no wildcards"
|
1061 |
msgstr ""
|
1062 |
|
1063 |
+
#: tpl/admin/config/settings.php:86 tpl/admin/config/settings.php:122
|
1064 |
msgid "Not recommended"
|
1065 |
msgstr ""
|
1066 |
|
1076 |
msgstr ""
|
1077 |
|
1078 |
#: src/js/Strings.php:73 src/error/Notice.php:20
|
1079 |
+
#: tpl/admin/common/inc-fsconn.php:37
|
1080 |
msgid "Notice"
|
1081 |
msgstr ""
|
1082 |
|
1100 |
msgid "OK, Load this config"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
+
#: src/admin/file/DeleteController.php:99
|
1104 |
#, php-format
|
1105 |
msgid "One dependent file will also be deleted"
|
1106 |
msgid_plural "%u dependent files will also be deleted"
|
1114 |
msgstr[0] ""
|
1115 |
msgstr[1] ""
|
1116 |
|
1117 |
+
#: src/admin/file/MoveController.php:83
|
1118 |
+
#, php-format
|
1119 |
+
msgid "One file could not be moved"
|
1120 |
+
msgid_plural "%u files could not be moved"
|
1121 |
+
msgstr[0] ""
|
1122 |
+
msgstr[1] ""
|
1123 |
+
|
1124 |
#. Where %2$s is the maximum size of a file that will be included and %3$s is the largest encountered
|
1125 |
#: src/ajax/SyncController.php:63
|
1126 |
#, php-format
|
1155 |
msgid "Overview"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
+
#: src/mvc/AdminRouter.php:243
|
1159 |
msgid "Page not found"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
+
#: src/fs/FileWriter.php:245
|
1163 |
+
msgid "Parent directory isn't writable"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
#: tpl/admin/bundle/conf.php:144
|
1171 |
msgid "Partially configured bundle"
|
1172 |
msgstr ""
|
1173 |
|
1174 |
+
#: tpl/admin/bundle/inc-po-table.php:19 tpl/admin/bundle/locale.php:39
|
1175 |
msgid "Pending"
|
1176 |
msgstr ""
|
1177 |
|
1179 |
msgid "Permission denied"
|
1180 |
msgstr ""
|
1181 |
|
1182 |
+
#: src/fs/FileWriter.php:239
|
1183 |
msgid "Permission denied to update file"
|
1184 |
msgstr ""
|
1185 |
|
1200 |
msgstr ""
|
1201 |
|
1202 |
#: src/mvc/AdminRouter.php:49 src/admin/Navigation.php:44
|
1203 |
+
#: src/admin/bundle/LocaleController.php:146
|
1204 |
msgid "Plugins"
|
1205 |
msgstr ""
|
1206 |
|
1264 |
msgid "PO file missing"
|
1265 |
msgstr ""
|
1266 |
|
1267 |
+
#: src/ajax/SaveController.php:106
|
1268 |
msgid "PO file saved and MO file compiled"
|
1269 |
msgstr ""
|
1270 |
|
1271 |
+
#: src/ajax/SaveController.php:111
|
1272 |
msgid "PO file saved, but MO file compilation failed"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
+
#: src/ajax/SaveController.php:118
|
1276 |
msgid "POT file saved"
|
1277 |
msgstr ""
|
1278 |
|
1279 |
+
#: tpl/admin/config/settings.php:99
|
1280 |
msgid "POT template files"
|
1281 |
msgstr ""
|
1282 |
|
1296 |
msgid "Recently updated:"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
+
#: src/fs/FileWriter.php:150
|
1300 |
msgid "Refusing to copy over an existing file"
|
1301 |
msgstr ""
|
1302 |
|
1305 |
msgid "Relative path from bundle root to the official POT file"
|
1306 |
msgstr ""
|
1307 |
|
1308 |
+
#: src/admin/file/BaseController.php:109
|
1309 |
+
msgid "Relocate"
|
1310 |
+
msgstr ""
|
1311 |
+
|
1312 |
#: tpl/admin/bundle/conf.php:159 tpl/admin/bundle/setup/saved.php:18
|
1313 |
msgid "Reset config"
|
1314 |
msgstr ""
|
1315 |
|
1316 |
+
#: src/admin/file/BaseController.php:108 tpl/admin/file/diff.php:30
|
1317 |
msgid "Restore"
|
1318 |
msgstr ""
|
1319 |
|
1340 |
msgid "Save config"
|
1341 |
msgstr ""
|
1342 |
|
1343 |
+
#: tpl/admin/config/settings.php:121
|
1344 |
msgid "Save credentials in session"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
+
#: tpl/admin/config/settings.php:170 tpl/admin/config/prefs.php:28
|
1348 |
msgid "Save settings"
|
1349 |
msgstr ""
|
1350 |
|
1352 |
msgid "Saving PO/POT files"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
+
#: src/ajax/FsConnectController.php:133
|
1356 |
msgid "Saving this file requires permission"
|
1357 |
msgstr ""
|
1358 |
|
1364 |
msgid "Scan PHP files with extensions:"
|
1365 |
msgstr ""
|
1366 |
|
1367 |
+
#: src/admin/bundle/LocaleController.php:137
|
1368 |
msgid "See all core translations"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
+
#: tpl/admin/root.php:54 src/admin/bundle/LocaleController.php:147
|
1372 |
msgid "See all plugins"
|
1373 |
msgstr ""
|
1374 |
|
1375 |
+
#: tpl/admin/root.php:39 src/admin/bundle/LocaleController.php:142
|
1376 |
msgid "See all themes"
|
1377 |
msgstr ""
|
1378 |
|
1392 |
msgstr ""
|
1393 |
|
1394 |
#: src/mvc/AdminRouter.php:67 src/mvc/AdminRouter.php:72
|
1395 |
+
#: tpl/admin/common/inc-fsconn.php:18 tpl/admin/common/inc-fsconn.php:43
|
1396 |
#: tpl/admin/errors/no-backups.php:24
|
1397 |
msgid "Settings"
|
1398 |
msgstr ""
|
1431 |
msgid "Skip template"
|
1432 |
msgstr ""
|
1433 |
|
1434 |
+
#: src/admin/file/BaseController.php:106
|
1435 |
msgid "Source"
|
1436 |
msgstr ""
|
1437 |
|
1447 |
msgid "Source text"
|
1448 |
msgstr ""
|
1449 |
|
1450 |
+
#: tpl/admin/init/init-po.php:173
|
1451 |
msgid "Start translating"
|
1452 |
msgstr ""
|
1453 |
|
1460 |
msgstr ""
|
1461 |
|
1462 |
#: tpl/admin/file/view-pot.php:9 tpl/admin/file/edit-pot.php:10
|
1463 |
+
#: tpl/admin/file/info-pot.php:10 tpl/admin/bundle/inc-po-table.php:42
|
1464 |
#: tpl/admin/bundle/conf.php:65
|
1465 |
msgid "Template file"
|
1466 |
msgstr ""
|
1469 |
msgid "Template file already exists"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
+
#: src/ajax/XgettextController.php:62
|
1473 |
msgid "Template file created"
|
1474 |
msgstr ""
|
1475 |
|
1477 |
msgid "Template missing"
|
1478 |
msgstr ""
|
1479 |
|
1480 |
+
#: tpl/admin/init/init-po.php:136
|
1481 |
msgid "Template options"
|
1482 |
msgstr ""
|
1483 |
|
1523 |
msgstr ""
|
1524 |
|
1525 |
#: src/mvc/AdminRouter.php:44 src/admin/Navigation.php:41
|
1526 |
+
#: src/admin/bundle/LocaleController.php:141
|
1527 |
msgid "Themes"
|
1528 |
msgstr ""
|
1529 |
|
1592 |
msgid "This directory can't be written to directly by the web server"
|
1593 |
msgstr ""
|
1594 |
|
1595 |
+
#: src/ajax/FsConnectController.php:108
|
1596 |
msgid "This directory is managed by WordPress, be careful what you delete"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
+
#: src/ajax/FsConnectController.php:111
|
1600 |
+
msgid ""
|
1601 |
+
"This directory is managed by WordPress. Removed files may be restored during "
|
1602 |
+
"updates"
|
1603 |
+
msgstr ""
|
1604 |
+
|
1605 |
#: tpl/admin/file/info.php:39
|
1606 |
msgid "This file can't be updated directly by the web server"
|
1607 |
msgstr ""
|
1608 |
|
1609 |
+
#: src/ajax/FsConnectController.php:105
|
1610 |
msgid "This file may be overwritten or deleted when you update WordPress"
|
1611 |
msgstr ""
|
1612 |
|
1614 |
msgid "This information is for developers to find problems in the bundle setup"
|
1615 |
msgstr ""
|
1616 |
|
1617 |
+
#: src/ajax/FsConnectController.php:130
|
1618 |
+
msgid "This move operation requires permission"
|
1619 |
+
msgstr ""
|
1620 |
+
|
1621 |
#: tpl/admin/errors/file-isdir.php:14
|
1622 |
msgid "This page was expecting a file, but the path is actually a directory"
|
1623 |
msgstr ""
|
1668 |
msgid "Translate themes and plugins directly in WordPress"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
+
#: tpl/admin/file/info-po.php:26 tpl/admin/bundle/inc-po-table.php:16
|
1672 |
#: tpl/admin/bundle/locale.php:36
|
1673 |
msgid "Translation progress"
|
1674 |
msgstr ""
|
1717 |
msgid "Upgrade to %s"
|
1718 |
msgstr ""
|
1719 |
|
1720 |
+
#: tpl/admin/init/init-po.php:163
|
1721 |
#, php-format
|
1722 |
msgid "Use \"%s\" as template when running Sync"
|
1723 |
msgstr ""
|
1753 |
msgid "Version %s"
|
1754 |
msgstr ""
|
1755 |
|
1756 |
+
#: tpl/admin/bundle/inc-po-table.php:51 tpl/admin/bundle/locale.php:66
|
1757 |
msgid "View"
|
1758 |
msgstr ""
|
1759 |
|
1787 |
msgid "Welcome to Loco Translate"
|
1788 |
msgstr ""
|
1789 |
|
1790 |
+
#: src/admin/init/InitPoController.php:316 tpl/admin/file/info.php:113
|
1791 |
msgid "What's this?"
|
1792 |
msgstr ""
|
1793 |
|
1795 |
msgid "WordPress"
|
1796 |
msgstr ""
|
1797 |
|
1798 |
+
#: src/package/Core.php:79 src/admin/bundle/LocaleController.php:136
|
1799 |
msgid "WordPress Core"
|
1800 |
msgstr ""
|
1801 |
|
1803 |
msgid "WordPress core"
|
1804 |
msgstr ""
|
1805 |
|
1806 |
+
#: tpl/admin/init/init-po.php:55
|
1807 |
msgid "WordPress language"
|
1808 |
msgstr ""
|
1809 |
|
1813 |
|
1814 |
#. When a file or folder cannot be modified due to filesystem permissions
|
1815 |
#: tpl/admin/file/info.php:36 tpl/admin/file/info.php:89
|
1816 |
+
#: tpl/admin/common/inc-fsconn.php:50
|
1817 |
msgid "Write protected"
|
1818 |
msgstr ""
|
1819 |
|
lib/data/locales.php
CHANGED
@@ -2,4 +2,4 @@
|
|
2 |
/**
|
3 |
* Compiled data. Do not edit.
|
4 |
*/
|
5 |
-
return array('af'=>array(0=>'Afrikaans',1=>'Afrikaans'),'ar'=>array(0=>'Arabic',1=>'العربية'),'ary'=>array(0=>'Moroccan Arabic',1=>'العربية المغربية'),'as'=>array(0=>'Assamese',1=>'অসমীয়া'),'
|
2 |
/**
|
3 |
* Compiled data. Do not edit.
|
4 |
*/
|
5 |
+
return array('af'=>array(0=>'Afrikaans',1=>'Afrikaans'),'ar'=>array(0=>'Arabic',1=>'العربية'),'ary'=>array(0=>'Moroccan Arabic',1=>'العربية المغربية'),'as'=>array(0=>'Assamese',1=>'অসমীয়া'),'az'=>array(0=>'Azerbaijani',1=>'Azərbaycan dili'),'azb'=>array(0=>'South Azerbaijani',1=>'گؤنئی آذربایجان'),'bel'=>array(0=>'Belarusian',1=>'Беларуская мова'),'bg_BG'=>array(0=>'Bulgarian',1=>'Български'),'bn_BD'=>array(0=>'Bengali (Bangladesh)',1=>'বাংলা'),'bo'=>array(0=>'Tibetan',1=>'བོད་ཡིག'),'bs_BA'=>array(0=>'Bosnian',1=>'Bosanski'),'ca'=>array(0=>'Catalan',1=>'Català'),'ceb'=>array(0=>'Cebuano',1=>'Cebuano'),'cs_CZ'=>array(0=>'Czech',1=>'Čeština'),'cy'=>array(0=>'Welsh',1=>'Cymraeg'),'da_DK'=>array(0=>'Danish',1=>'Dansk'),'de_DE_formal'=>array(0=>'German (Formal)',1=>'Deutsch (Sie)'),'de_DE'=>array(0=>'German',1=>'Deutsch'),'de_CH_informal'=>array(0=>'German (Switzerland, Informal)',1=>'Deutsch (Schweiz, Du)'),'de_CH'=>array(0=>'German (Switzerland)',1=>'Deutsch (Schweiz)'),'dzo'=>array(0=>'Dzongkha',1=>'རྫོང་ཁ'),'el'=>array(0=>'Greek',1=>'Ελληνικά'),'en_AU'=>array(0=>'English (Australia)',1=>'English (Australia)'),'en_NZ'=>array(0=>'English (New Zealand)',1=>'English (New Zealand)'),'en_CA'=>array(0=>'English (Canada)',1=>'English (Canada)'),'en_ZA'=>array(0=>'English (South Africa)',1=>'English (South Africa)'),'en_GB'=>array(0=>'English (UK)',1=>'English (UK)'),'eo'=>array(0=>'Esperanto',1=>'Esperanto'),'es_ES'=>array(0=>'Spanish (Spain)',1=>'Español'),'es_CL'=>array(0=>'Spanish (Chile)',1=>'Español de Chile'),'es_MX'=>array(0=>'Spanish (Mexico)',1=>'Español de México'),'es_AR'=>array(0=>'Spanish (Argentina)',1=>'Español de Argentina'),'es_VE'=>array(0=>'Spanish (Venezuela)',1=>'Español de Venezuela'),'es_CR'=>array(0=>'Spanish (Costa Rica)',1=>'Español de Costa Rica'),'es_PE'=>array(0=>'Spanish (Peru)',1=>'Español de Perú'),'es_GT'=>array(0=>'Spanish (Guatemala)',1=>'Español de Guatemala'),'es_CO'=>array(0=>'Spanish (Colombia)',1=>'Español de Colombia'),'et'=>array(0=>'Estonian',1=>'Eesti'),'eu'=>array(0=>'Basque',1=>'Euskara'),'fa_IR'=>array(0=>'Persian',1=>'فارسی'),'fi'=>array(0=>'Finnish',1=>'Suomi'),'fr_FR'=>array(0=>'French (France)',1=>'Français'),'fr_CA'=>array(0=>'French (Canada)',1=>'Français du Canada'),'fr_BE'=>array(0=>'French (Belgium)',1=>'Français de Belgique'),'fur'=>array(0=>'Friulian',1=>'Friulian'),'gd'=>array(0=>'Scottish Gaelic',1=>'Gàidhlig'),'gl_ES'=>array(0=>'Galician',1=>'Galego'),'gu'=>array(0=>'Gujarati',1=>'ગુજરાતી'),'haz'=>array(0=>'Hazaragi',1=>'هزاره گی'),'he_IL'=>array(0=>'Hebrew',1=>'עִבְרִית'),'hi_IN'=>array(0=>'Hindi',1=>'हिन्दी'),'hr'=>array(0=>'Croatian',1=>'Hrvatski'),'hu_HU'=>array(0=>'Hungarian',1=>'Magyar'),'hy'=>array(0=>'Armenian',1=>'Հայերեն'),'id_ID'=>array(0=>'Indonesian',1=>'Bahasa Indonesia'),'is_IS'=>array(0=>'Icelandic',1=>'Íslenska'),'it_IT'=>array(0=>'Italian',1=>'Italiano'),'ja'=>array(0=>'Japanese',1=>'日本語'),'jv_ID'=>array(0=>'Javanese',1=>'Basa Jawa'),'ka_GE'=>array(0=>'Georgian',1=>'ქართული'),'kab'=>array(0=>'Kabyle',1=>'Taqbaylit'),'kk'=>array(0=>'Kazakh',1=>'Қазақ тілі'),'km'=>array(0=>'Khmer',1=>'ភាសាខ្មែរ'),'ko_KR'=>array(0=>'Korean',1=>'한국어'),'ckb'=>array(0=>'Kurdish (Sorani)',1=>'كوردی'),'lo'=>array(0=>'Lao',1=>'ພາສາລາວ'),'lt_LT'=>array(0=>'Lithuanian',1=>'Lietuvių kalba'),'lv'=>array(0=>'Latvian',1=>'Latviešu valoda'),'mk_MK'=>array(0=>'Macedonian',1=>'Македонски јазик'),'ml_IN'=>array(0=>'Malayalam',1=>'മലയാളം'),'mn'=>array(0=>'Mongolian',1=>'Монгол'),'mr'=>array(0=>'Marathi',1=>'मराठी'),'ms_MY'=>array(0=>'Malay',1=>'Bahasa Melayu'),'my_MM'=>array(0=>'Myanmar (Burmese)',1=>'ဗမာစာ'),'nb_NO'=>array(0=>'Norwegian (Bokmål)',1=>'Norsk bokmål'),'ne_NP'=>array(0=>'Nepali',1=>'नेपाली'),'nl_BE'=>array(0=>'Dutch (Belgium)',1=>'Nederlands (België)'),'nl_NL_formal'=>array(0=>'Dutch (Formal)',1=>'Nederlands (Formeel)'),'nl_NL'=>array(0=>'Dutch',1=>'Nederlands'),'nn_NO'=>array(0=>'Norwegian (Nynorsk)',1=>'Norsk nynorsk'),'oci'=>array(0=>'Occitan',1=>'Occitan'),'pa_IN'=>array(0=>'Punjabi',1=>'ਪੰਜਾਬੀ'),'pl_PL'=>array(0=>'Polish',1=>'Polski'),'ps'=>array(0=>'Pashto',1=>'پښتو'),'pt_BR'=>array(0=>'Portuguese (Brazil)',1=>'Português do Brasil'),'pt_PT'=>array(0=>'Portuguese (Portugal)',1=>'Português'),'pt_PT_ao90'=>array(0=>'Portuguese (Portugal, AO90)',1=>'Português (AO90)'),'rhg'=>array(0=>'Rohingya',1=>'Ruáinga'),'ro_RO'=>array(0=>'Romanian',1=>'Română'),'ru_RU'=>array(0=>'Russian',1=>'Русский'),'sah'=>array(0=>'Sakha',1=>'Сахалыы'),'si_LK'=>array(0=>'Sinhala',1=>'සිංහල'),'sk_SK'=>array(0=>'Slovak',1=>'Slovenčina'),'sl_SI'=>array(0=>'Slovenian',1=>'Slovenščina'),'sq'=>array(0=>'Albanian',1=>'Shqip'),'sr_RS'=>array(0=>'Serbian',1=>'Српски језик'),'sv_SE'=>array(0=>'Swedish',1=>'Svenska'),'szl'=>array(0=>'Silesian',1=>'Ślōnskŏ gŏdka'),'ta_IN'=>array(0=>'Tamil',1=>'தமிழ்'),'te'=>array(0=>'Telugu',1=>'తెలుగు'),'th'=>array(0=>'Thai',1=>'ไทย'),'tl'=>array(0=>'Tagalog',1=>'Tagalog'),'tr_TR'=>array(0=>'Turkish',1=>'Türkçe'),'tt_RU'=>array(0=>'Tatar',1=>'Татар теле'),'tah'=>array(0=>'Tahitian',1=>'Reo Tahiti'),'ug_CN'=>array(0=>'Uighur',1=>'ئۇيغۇرچە'),'uk'=>array(0=>'Ukrainian',1=>'Українська'),'ur'=>array(0=>'Urdu',1=>'اردو'),'uz_UZ'=>array(0=>'Uzbek',1=>'O‘zbekcha'),'vi'=>array(0=>'Vietnamese',1=>'Tiếng Việt'),'zh_HK'=>array(0=>'Chinese (Hong Kong)',1=>'香港中文版 '),'zh_TW'=>array(0=>'Chinese (Taiwan)',1=>'繁體中文'),'zh_CN'=>array(0=>'Chinese (China)',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.
|
8 |
Author URI: https://localise.biz/wordpress/plugin
|
9 |
Text Domain: loco-translate
|
10 |
Domain Path: /languages/
|
@@ -36,7 +36,7 @@ function loco_plugin_file(){
|
|
36 |
* @return string
|
37 |
*/
|
38 |
function loco_plugin_version(){
|
39 |
-
return '2.
|
40 |
}
|
41 |
|
42 |
|
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.3.0
|
8 |
Author URI: https://localise.biz/wordpress/plugin
|
9 |
Text Domain: loco-translate
|
10 |
Domain Path: /languages/
|
36 |
* @return string
|
37 |
*/
|
38 |
function loco_plugin_version(){
|
39 |
+
return '2.3.0';
|
40 |
}
|
41 |
|
42 |
|
pub/css/admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@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);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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}.loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc: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}@font-face{font-family:'loco';src:url("../font/loco.eot");src:url("../font/loco.eot?#iefix") format("embedded-opentype"),url("../font/loco.woff") format("woff"),url("../font/loco.ttf") format("truetype"),url("../font/loco.svg#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 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.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.wrap .selector li,#loco.wrap .selector .handle,#loco.wrap .selectoradd a,#loco.wrap .selectorsep:before,#loco.wrap .selectorsep span{padding:0.3em 0.75em}#loco.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco.wrap .selectoradd a,#loco.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.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco.wrap .selector .handle .prefix{padding-right:0.6ex}#loco.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:0.25em;right:0.6em}#loco.wrap .selector .handle:focus:after,#loco.wrap .selector .handle:hover:after{color:#666}#loco.wrap .selector.no-caret .handle{padding-right:0.75em}#loco.wrap .selector.no-caret .handle:after{display:none}#loco.wrap .selector.no-title .handle{padding-left:0.5em;padding-right:0.5em}#loco.wrap .selector.no-title .handle .label{display:none}#loco.wrap .selector.no-title .handle .icon{margin-right:0px}#loco.wrap .selector.dummy .handle{border-color:transparent}#loco.wrap .selector.dummy .handle:after{display:none}#loco.wrap .selectoradd{position:relative}#loco.wrap .selectoradd>*{display:block;float:left;clear:none}#loco.wrap .selectoradd>a.has-icon{width:1.3em}#loco.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco.wrap .selectorsep{display:inline-block}#loco.wrap .selectorsep span{color:#666;height:1.3em}#loco.wrap .selector ul{padding:0}#loco.wrap .selector ul,#loco.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,0.2);border:solid 1px #ccc;overflow:auto}#loco.wrap .selector.up ul{margin-top:0}#loco.wrap .selector.multi li input{display:none}#loco.wrap .selector.multi li.checked{background:#e5e5e5}#loco.wrap .selector li.active{background:#e5e5e5 !important}#loco.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco.wrap .selector li.over .label{color:#fff}#loco.wrap .selector .label{font:inherit;color:inherit}#loco.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco.wrap .selector .icon.no-icon{display:none}#loco.wrap .selector .icon:before{color:#666}#loco.wrap .selector .avtr{width:18px;height:18px;background-size:18px;background-repeat:no-repeat}#loco.wrap .selector .label{line-height:1}#loco.wrap .selector .icon,#loco.wrap .selector .icon-16{vertical-align:bottom}#loco.wrap .selector .icon,#loco.wrap .selector .lang,#loco.wrap .selector .icon-16{margin-right:5px}#loco.wrap .selector .region,#loco.wrap .selector .lang-ca,#loco.wrap .selector .lang-eo,#loco.wrap .selector .lang-eu,#loco.wrap .selector .variant-wales,#loco.wrap .selector .region-gb.lang-cy,#loco.wrap .selector .variant-scotland,#loco.wrap .selector .region-gb.lang-gd{margin-left:2px;margin-right:7px}#loco.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco.wrap .selector.ticked .active .icon.no-icon:before{content:"\2713"}#loco.wrap .selectoradd a:hover,#loco.wrap .selector a.handle:focus,#loco.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco.wrap .selector.active .handle:after{color:#999}#loco.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco.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.wrap .selector.disabled .handle:after{display:none}#loco.wrap .selector.disabled .handle span.icon{color:#999 !important}#loco.wrap .selector li.disabled,#loco.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco.wrap .selector li.disabled *{cursor:text}#loco.wrap .selector li.disabled .icon:before{color:#aaa}#loco.wrap .selector li.disabled .flag,#loco.wrap .selector li.disabled .icon-16{opacity:0.4}#loco.wrap .selector.lefty ul{left:auto;right:0}#loco.wrap .selector.lefty ul .icon,#loco.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco.wrap .selector ul>form{margin:0;display:block}#loco.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.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.wrap .selector ul>form input.error{border-color:#cc0000;-webkit-box-shadow:inset 0 0 5px 0 rgba(153,0,0,0.5);-moz-box-shadow:inset 0 0 5px 0 rgba(153,0,0,0.5);box-shadow:inset 0 0 5px 0 rgba(153,0,0,0.5)}#loco.wrap .selector ul>form a.clear{margin:0;border:none}#loco.wrap .selector ul>form ::placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap .selector ul>form ::-webkit-input-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap .selector ul>form :-moz-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block;opacity:1}#loco.wrap .selector ul>form ::-moz-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block;opacity:1}#loco.wrap .selector ul>form :-ms-input-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap .selector ul>form .ielt10 .placeheld{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap div.auto-comp-wrap{width:100%}#loco.wrap div.auto-comp-wrap input{display:inline-block}#loco.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif) right 2px no-repeat}#loco.wrap div.auto-comp-drop{color:#333333;background:#FFFFFF;border-top:none;position:absolute;width:auto;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,0.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,0.4);box-shadow:0 5px 5px rgba(0,0,0,0.4)}#loco.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.wrap div.auto-comp-result:first-child{border-top:solid 1px #DDD}#loco.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco.wrap div.auto-comp-result:hover{background:#A8A8A8;color:#FFFFFF;border-top-color:#A8A8A8;border-bottom-color:#999999}#loco.wrap div.auto-comp-result.selected{background:#666666 !important;color:#FFFFFF;border-top-color:#666666;border-bottom-color:#666666}#loco.wrap div.auto-comp-result .lang,#loco.wrap div.auto-comp-result .region,#loco.wrap div.auto-comp-result .lang-ca,#loco.wrap div.auto-comp-result .lang-eo,#loco.wrap div.auto-comp-result .lang-eu,#loco.wrap div.auto-comp-result .variant-wales,#loco.wrap div.auto-comp-result .region-gb.lang-cy,#loco.wrap div.auto-comp-result .variant-scotland,#loco.wrap div.auto-comp-result .region-gb.lang-gd,#loco.wrap div.auto-comp-result .avtr{margin-right:5px}#loco.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#cc0000;opacity:1}#loco.wrap div.auto-comp-wrap.error input[type="text"]{border-color:#cc0000;color:#cc0000}#loco.wrap div.auto-comp-wrap.error input[type="text"]:focus{-webkit-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);-moz-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5)}#loco.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif);background-repeat:no-repeat;min-height:16px}#loco.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@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.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif);background-size:16px}}#loco.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.wrap ._green_glow_outer{-webkit-box-shadow:0 0 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco.wrap .loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc: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.wrap .has-icon:before{display:inline-block;padding-right:0.3em}#loco.wrap a.icon-help{cursor:help}#loco.wrap a.icon-help span{display:none}#loco.wrap .icon-magnify:before{content:"\1f50d"}#loco.wrap .icon-unicode:before{content:"\75"}#loco.wrap .icon-json:before{content:"\7b"}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\16ec"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-ok-empty:before{content:"\1f5cc"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before,#loco.wrap .icon-history:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-privacy:before{content:"\1f6e1"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon-status.is-translated:before,#loco.wrap .is-translated>header>.icon-status:before{color:#2e892e;content:"✓";text-align:center}#loco.wrap .icon-status.is-untranslated:before,#loco.wrap .is-untranslated>header>.icon-status:before{color:#aaa;content:"×";text-align:center;font-size:1.1em}#loco.wrap .icon-status.is-flagged:before,#loco.wrap .is-flagged>header>.icon-status:before{color:#bd2c00;content:"";text-align:center}#loco.wrap .icon-status.is-translated.is-blank:before,#loco.wrap .icon-status.is-translated.is-inherit:before,#loco.wrap .is-translated.is-blank>header>.icon-status:before,#loco.wrap .is-translated.is-inherit>header>.icon-status:before{content:"🗌"}#loco.wrap .icon-status.is-fuzzy:before,#loco.wrap .is-fuzzy>header>.icon-status:before{color:#666;content:""}#loco.wrap .lang,#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{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.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco.wrap .no-lang{width:18px;height:10px;border:solid 1px #2e892e;background:transparent}#loco.wrap .lang-el{background-color:#1D48A3}#loco.wrap .lang-el:before{content:"\0395\03BB"}#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png);background-repeat:no-repeat;background-color:transparent}#loco.wrap .region:before,#loco.wrap .lang-ca:before,#loco.wrap .lang-eo:before,#loco.wrap .lang-eu:before,#loco.wrap .variant-wales:before,#loco.wrap .region-gb.lang-cy:before,#loco.wrap .variant-scotland:before,#loco.wrap .region-gb.lang-gd:before{visibility:hidden}#loco.wrap .lang-zh{background-color:#B90000}#loco.wrap .lang-zh.script-hans:before{content:"\4E2D\56FD"}#loco.wrap .lang-zh.script-hant:before{content:"\4E2D\570B"}#loco.wrap .__{background-position:0 0}#loco.wrap .lang-eo{background-position:0 -12px}#loco.wrap .lang-eu{background-position:0 -24px}#loco.wrap .lang-ca{background-position:0 -36px}#loco.wrap .region-tg{background-position:0 -48px}#loco.wrap .region-me{background-position:0 -60px}#loco.wrap .region-la{background-position:0 -73px}#loco.wrap .region-mr{background-position:0 -85px}#loco.wrap .region-ni{background-position:0 -97px}#loco.wrap .region-lv{background-position:0 -109px}#loco.wrap .region-om{background-position:0 -121px}#loco.wrap .region-af{background-position:0 -133px}#loco.wrap .region-cy{background-position:0 -145px}#loco.wrap .region-bj{background-position:0 -157px}#loco.wrap .region-aq{background-position:0 -169px}#loco.wrap .region-cn{background-position:0 -186px}#loco.wrap .region-co{background-position:0 -198px}#loco.wrap .region-cx{background-position:0 -210px}#loco.wrap .region-ag{background-position:0 -222px}#loco.wrap .region-ms{background-position:0 -234px}#loco.wrap .region-md{background-position:0 -246px}#loco.wrap .region-zm{background-position:0 -258px}#loco.wrap .region-vn{background-position:0 -270px}#loco.wrap .region-tf{background-position:0 -282px}#loco.wrap .region-td{background-position:0 -294px}#loco.wrap .region-yt{background-position:0 -306px}#loco.wrap .region-lb{background-position:0 -318px}#loco.wrap .region-mf{background-position:0 -330px}#loco.wrap .region-lu{background-position:0 -347px}#loco.wrap .region-mq{background-position:0 -359px}#loco.wrap .region-cz{background-position:0 -371px}#loco.wrap .region-ae{background-position:0 -383px}#loco.wrap .region-cm{background-position:0 -395px}#loco.wrap .region-bi{background-position:0 -407px}#loco.wrap .region-ar{background-position:0 -419px}#loco.wrap .region-as{background-position:0 -431px}#loco.wrap .region-bh{background-position:0 -443px}#loco.wrap .region-cl{background-position:0 -455px}#loco.wrap .region-ad{background-position:0 -467px}#loco.wrap .region-mp{background-position:0 -479px}#loco.wrap .region-lt{background-position:0 -491px}#loco.wrap .region-mg{background-position:0 -503px}#loco.wrap .region-lc{background-position:0 -515px}#loco.wrap .region-tr{background-position:0 -527px}#loco.wrap .region-ua{background-position:0 -539px}#loco.wrap .region-tv{background-position:0 -551px}#loco.wrap .region-vi{background-position:0 -563px}#loco.wrap .region-mt{background-position:0 -575px}#loco.wrap .region-no{background-position:0 -587px}#loco.wrap .region-mc{background-position:0 -599px}#loco.wrap .region-ch{background-position:0 -611px}#loco.wrap .region-bl{background-position:0 -623px}#loco.wrap .region-aw{background-position:0 -640px}#loco.wrap .region-bz{background-position:0 -652px}#loco.wrap .region-bm{background-position:0 -664px}#loco.wrap .region-ci{background-position:0 -676px}#loco.wrap .region-mu{background-position:0 -688px}#loco.wrap .region-us{background-position:0 -700px}#loco.wrap .region-tw{background-position:0 -712px}#loco.wrap .region-ye{background-position:0 -724px}#loco.wrap .region-mw{background-position:0 -736px}#loco.wrap .region-nl{background-position:0 -748px}#loco.wrap .region-ls{background-position:0 -760px}#loco.wrap .region-bo{background-position:0 -772px}#loco.wrap .region-at{background-position:0 -784px}#loco.wrap .region-ck{background-position:0 -796px}#loco.wrap .region-by{background-position:0 -808px}#loco.wrap .region-au{background-position:0 -820px}#loco.wrap .region-bn{background-position:0 -832px}#loco.wrap .region-ma{background-position:0 -844px}#loco.wrap .region-nz{background-position:0 -856px}#loco.wrap .region-lr{background-position:0 -868px}#loco.wrap .region-mv{background-position:0 -880px}#loco.wrap .region-tc{background-position:0 -892px}#loco.wrap .region-ug{background-position:0 -904px}#loco.wrap .region-tt{background-position:0 -916px}#loco.wrap .region-pl{background-position:0 -928px}#loco.wrap .region-rs{background-position:0 -940px}#loco.wrap .region-in{background-position:0 -952px}#loco.wrap .region-ge{background-position:0 -964px}#loco.wrap .region-gr{background-position:0 -976px}#loco.wrap .region-gs{background-position:0 -988px}#loco.wrap .region-gd{background-position:0 -1000px}#loco.wrap .region-io{background-position:0 -1012px}#loco.wrap .region-hk{background-position:0 -1024px}#loco.wrap .region-kp{background-position:0 -1036px}#loco.wrap .region-kg{background-position:0 -1048px}#loco.wrap .region-pm{background-position:0 -1060px}#loco.wrap .region-sv{background-position:0 -1072px}#loco.wrap .region-re{background-position:0 -1084px}#loco.wrap .region-sa{background-position:0 -1096px}#loco.wrap .region-sc{background-position:0 -1108px}#loco.wrap .region-st{background-position:0 -1120px}#loco.wrap .region-ke{background-position:0 -1132px}#loco.wrap .region-im{background-position:0 -1144px}#loco.wrap .region-kr{background-position:0 -1161px}#loco.wrap .region-gf{background-position:0 -1173px}#loco.wrap .region-dj{background-position:0 -1185px}#loco.wrap .region-gq{background-position:0 -1197px}#loco.wrap .region-gp{background-position:0 -1209px}#loco.wrap .region-dk{background-position:0 -1221px}#loco.wrap .region-gg{background-position:0 -1233px}#loco.wrap .region-il{background-position:0 -1250px}#loco.wrap .region-pn{background-position:0 -1262px}#loco.wrap .region-sb{background-position:0 -1274px}#loco.wrap .region-py{background-position:0 -1286px}#loco.wrap .region-ru{background-position:0 -1298px}#loco.wrap .region-kw{background-position:0 -1310px}#loco.wrap .region-do{background-position:0 -1322px}#loco.wrap .region-gt{background-position:0 -1334px}#loco.wrap .region-gb{background-position:0 -1346px}#loco.wrap .region-gu{background-position:0 -1358px}#loco.wrap .region-je{background-position:0 -1370px}#loco.wrap .region-hm{background-position:0 -1387px}#loco.wrap .region-sg{background-position:0 -1399px}#loco.wrap .region-pk{background-position:0 -1411px}#loco.wrap .region-sr{background-position:0 -1423px}#loco.wrap .region-se{background-position:0 -1435px}#loco.wrap .region-jp{background-position:0 -1447px}#loco.wrap .region-gw{background-position:0 -1459px}#loco.wrap .region-eh{background-position:0 -1471px}#loco.wrap .region-dz{background-position:0 -1483px}#loco.wrap .region-ga{background-position:0 -1495px}#loco.wrap .region-fr{background-position:0 -1507px}#loco.wrap .region-dm{background-position:0 -1519px}#loco.wrap .region-hn{background-position:0 -1531px}#loco.wrap .region-sd{background-position:0 -1543px}#loco.wrap .region-rw{background-position:0 -1555px}#loco.wrap .region-ph{background-position:0 -1567px}#loco.wrap .region-ss{background-position:0 -1579px}#loco.wrap .region-qa{background-position:0 -1596px}#loco.wrap .region-pe{background-position:0 -1608px}#loco.wrap .region-pr{background-position:0 -1620px}#loco.wrap .region-si{background-position:0 -1632px}#loco.wrap .region-ht{background-position:0 -1644px}#loco.wrap .region-es{background-position:0 -1656px}#loco.wrap .region-gl{background-position:0 -1668px}#loco.wrap .region-gm{background-position:0 -1680px}#loco.wrap .region-er{background-position:0 -1692px}#loco.wrap .region-fi{background-position:0 -1704px}#loco.wrap .region-ee{background-position:0 -1716px}#loco.wrap .region-kn{background-position:0 -1728px}#loco.wrap .region-hu{background-position:0 -1740px}#loco.wrap .region-iq{background-position:0 -1752px}#loco.wrap .region-ky{background-position:0 -1764px}#loco.wrap .region-sh{background-position:0 -1776px}#loco.wrap .region-ps{background-position:0 -1788px}#loco.wrap .region-pf{background-position:0 -1800px}#loco.wrap .region-sj{background-position:0 -1812px}#loco.wrap .region-id{background-position:0 -1824px}#loco.wrap .region-is{background-position:0 -1836px}#loco.wrap .region-eg{background-position:0 -1848px}#loco.wrap .region-fk{background-position:0 -1860px}#loco.wrap .region-fj{background-position:0 -1872px}#loco.wrap .region-gn{background-position:0 -1884px}#loco.wrap .region-gy{background-position:0 -1896px}#loco.wrap .region-ir{background-position:0 -1908px}#loco.wrap .region-km{background-position:0 -1920px}#loco.wrap .region-ie{background-position:0 -1932px}#loco.wrap .region-kz{background-position:0 -1944px}#loco.wrap .region-ro{background-position:0 -1956px}#loco.wrap .region-sk{background-position:0 -1968px}#loco.wrap .region-pg{background-position:0 -1980px}#loco.wrap .region-pt{background-position:0 -1992px}#loco.wrap .region-so{background-position:0 -2004px}#loco.wrap .region-sx{background-position:0 -2016px}#loco.wrap .region-hr{background-position:0 -2033px}#loco.wrap .region-ki{background-position:0 -2045px}#loco.wrap .region-jm{background-position:0 -2057px}#loco.wrap .region-ec{background-position:0 -2069px}#loco.wrap .region-et{background-position:0 -2081px}#loco.wrap .region-fo{background-position:0 -2093px}#loco.wrap .region-kh{background-position:0 -2105px}#loco.wrap .region-sy{background-position:0 -2117px}#loco.wrap .region-sn{background-position:0 -2129px}#loco.wrap .region-pw{background-position:0 -2141px}#loco.wrap .region-sl{background-position:0 -2153px}#loco.wrap .region-fm{background-position:0 -2165px}#loco.wrap .region-gi{background-position:0 -2177px}#loco.wrap .region-de{background-position:0 -2189px}#loco.wrap .region-gh{background-position:0 -2201px}#loco.wrap .region-jo{background-position:0 -2213px}#loco.wrap .region-it{background-position:0 -2225px}#loco.wrap .region-pa{background-position:0 -2237px}#loco.wrap .region-sz{background-position:0 -2249px}#loco.wrap .region-sm{background-position:0 -2261px}#loco.wrap .region-tn{background-position:0 -2273px}#loco.wrap .region-ml{background-position:0 -2285px}#loco.wrap .region-cg{background-position:0 -2297px}#loco.wrap .region-ax{background-position:0 -2309px}#loco.wrap .region-ao{background-position:0 -2321px}#loco.wrap .region-bt{background-position:0 -2333px}#loco.wrap .region-an{background-position:0 -2345px}#loco.wrap .region-bb{background-position:0 -2357px}#loco.wrap .region-cf{background-position:0 -2369px}#loco.wrap .region-mm{background-position:0 -2381px}#loco.wrap .region-li{background-position:0 -2393px}#loco.wrap .region-na{background-position:0 -2405px}#loco.wrap .region-mz{background-position:0 -2417px}#loco.wrap .region-to{background-position:0 -2429px}#loco.wrap .region-vg{background-position:0 -2441px}#loco.wrap .region-ve{background-position:0 -2453px}#loco.wrap .region-tz{background-position:0 -2465px}#loco.wrap .region-tm{background-position:0 -2477px}#loco.wrap .region-mx{background-position:0 -2489px}#loco.wrap .region-nc{background-position:0 -2501px}#loco.wrap .region-mo{background-position:0 -2513px}#loco.wrap .region-lk{background-position:0 -2525px}#loco.wrap .region-cd{background-position:0 -2537px}#loco.wrap .region-al{background-position:0 -2549px}#loco.wrap .region-bw{background-position:0 -2561px}#loco.wrap .region-cs{background-position:0 -2573px}#loco.wrap .region-cr{background-position:0 -2585px}#loco.wrap .region-bv{background-position:0 -2597px}#loco.wrap .region-am{background-position:0 -2609px}#loco.wrap .region-az{background-position:0 -2621px}#loco.wrap .region-ba{background-position:0 -2633px}#loco.wrap .region-mn{background-position:0 -2645px}#loco.wrap .region-nu{background-position:0 -2657px}#loco.wrap .region-my{background-position:0 -2669px}#loco.wrap .region-tl{background-position:0 -2681px}#loco.wrap .region-ws{background-position:0 -2693px}#loco.wrap .region-th{background-position:0 -2705px}#loco.wrap .region-nf{background-position:0 -2717px}#loco.wrap .region-ly{background-position:0 -2729px}#loco.wrap .region-ai{background-position:0 -2741px}#loco.wrap .region-br{background-position:0 -2753px}#loco.wrap .region-cv{background-position:0 -2765px}#loco.wrap .region-be{background-position:0 -2777px}#loco.wrap .region-ca{background-position:0 -2789px}#loco.wrap .region-bd{background-position:0 -2801px}#loco.wrap .region-cw{background-position:0 -2813px}#loco.wrap .region-bs{background-position:0 -2830px}#loco.wrap .region-ng{background-position:0 -2842px}#loco.wrap .region-mk{background-position:0 -2854px}#loco.wrap .region-np{background-position:0 -2866px}#loco.wrap .region-va{background-position:0 -2878px}#loco.wrap .region-uz{background-position:0 -2890px}#loco.wrap .region-um{background-position:0 -2902px}#loco.wrap .region-tk{background-position:0 -2914px}#loco.wrap .region-vc{background-position:0 -2926px}#loco.wrap .region-zw{background-position:0 -2938px}#loco.wrap .region-nr{background-position:0 -2950px}#loco.wrap .region-ne{background-position:0 -2962px}#loco.wrap .region-cu{background-position:0 -2974px}#loco.wrap .region-bq{background-position:0 -2986px}#loco.wrap .region-bf{background-position:0 -2998px}#loco.wrap .region-bg{background-position:0 -3010px}#loco.wrap .region-cc{background-position:0 -3022px}#loco.wrap .region-mh{background-position:0 -3034px}#loco.wrap .region-za{background-position:0 -3046px}#loco.wrap .region-uy{background-position:0 -3058px}#loco.wrap .region-wf{background-position:0 -3070px}#loco.wrap .region-vu{background-position:0 -3082px}#loco.wrap .region-tj{background-position:0 -3094px}#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco.wrap .variant-valencia{background-position:0 -3118px}#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco.wrap .x-eu{background-position:0 -3142px}#loco.wrap span.lang code{display:none}#loco.wrap .icon-magnify:before{content:"\1f50d"}#loco.wrap .icon-unicode:before{content:"\75"}#loco.wrap .icon-json:before{content:"\7b"}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\16ec"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-ok-empty:before{content:"\1f5cc"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before,#loco.wrap .icon-history:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-privacy:before{content:"\1f6e1"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.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.wrap .icon,#loco.wrap .has-icon:before{font-family:'loco'}#loco.wrap .has-dashicon:before{font-family:'dashicons';font-size:1.4em}#loco.wrap .has-icon:before,#loco.wrap .has-dashicon:before,#loco.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco.wrap .only-icon{text-align:center}#loco.wrap .only-icon:before{text-align:center}#loco.wrap .only-icon span{display:none}#loco.wrap a,#loco.wrap .wp-core-ui .button-link{text-decoration:none}#loco.wrap h3:hover>a.loco-anchor{color:#ccc}#loco.wrap h3:hover>a.loco-anchor:before{content:"\B6"}#loco.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco.wrap h1 ul,#loco.wrap h1 li{margin:0;padding:0}#loco.wrap h1 li{display:inline-block}#loco.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco.wrap h1 li:last-child:after{content:""}#loco.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco.wrap h2 span{color:#999;font-weight:normal}#loco.wrap h2 .loco-meta,#loco.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco.wrap .wp-list-table td{white-space:nowrap}#loco.wrap .wp-list-table td>a,#loco.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.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"\25bc"}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"\25b2"}#loco.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco.wrap form.loco-filter{display:block;margin-bottom:5px}#loco.wrap form.loco-filter .icon-filter{color:#999}#loco.wrap nav.above-list-table{margin-bottom:1em}#loco.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco.wrap .wp-core-ui button.inverted,#loco.wrap .wp-core-ui button.inverted:hover{background:-moz-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:-webkit-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:linear-gradient(to bottom, #ccc 0%, #e0e0e0 5%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:#bbb}#loco.wrap .wp-core-ui button:active,#loco.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco.wrap .loco-clearable a.clear,#loco.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.wrap .loco-clearable a.clear:before,#loco.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco.wrap .loco-clearable a.clear:hover:before,#loco.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco.wrap .loco-clearable a.clear span,#loco.wrap .auto-comp-wrap a.clear span{display:none}#loco.wrap .loco-clearable ::-ms-clear,#loco.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco.wrap div.progress{color:#000;background:transparent !important}#loco.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco.wrap div.progress .l{display:block}#loco.wrap td div.progress .t{border:none}#loco.wrap td div.progress .l{display:none}#loco.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco.wrap .loco-danger{color:#d54e21}#loco.wrap .notice,#loco.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco.wrap .notice-generic{border-color:#ddd}#loco.wrap .notice-success>.has-icon,#loco.wrap .notice-success p>strong.has-icon{color:#000}#loco.wrap .notice-warning{border-color:#FFA500}#loco.wrap .notice-error{border-color:#dc3232}#loco.wrap .notice-debug{border-color:#00a0d2}#loco.wrap .notice-danger{border-color:#dc3232}#loco.wrap .notice-locked{border-color:#FFA500}#loco.wrap .notice>.has-icon:before,#loco.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco.wrap .notice>p>a.button.has-icon:before{width:1.5em}#loco.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco.wrap .notice>p>em a{color:inherit}#loco.wrap .notice>p a:hover,#loco.wrap .notice>nav a:hover{text-decoration:underline}#loco.wrap .notice>p a.button,#loco.wrap .notice>nav a.button{text-decoration:inherit}#loco.wrap .notice.has-nav{display:flex;flex-direction:row}#loco.wrap .notice.has-nav p,#loco.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco.wrap .notice.has-nav a{font-size:12px;white-space:nowrap}#loco.wrap .notice.has-nav nav>span{color:#666}#loco.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco.wrap ul.problems li{font-style:italic}#loco.wrap label{position:relative}#loco.wrap label.for-disabled,#loco.wrap label.for-disabled>input{cursor:default !important}#loco.wrap input.regular-text,#loco.wrap textarea.regular-text{width:25em}#loco.wrap .button-link{padding:0 10px 1px}#loco.wrap .button-danger{background:#ba0000;border-color:#990000 #660000 #660000;-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 #660000, 1px 0 1px #660000, 0 1px 1px #660000, -1px 0 1px #660000}#loco.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.wrap .button-success:hover{background:#3db63d}#loco.wrap form button.loco-loading.button-large{padding-left:0}#loco.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.wrap ::placeholder{color:#ccc}#loco.wrap ::-webkit-input-placeholder{color:#ccc}#loco.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco.wrap :-ms-input-placeholder{color:#ccc}#loco.wrap .ielt10 .placeheld{color:#ccc}#loco.wrap a.has-raquo:after{content:"\A0\BB"}#loco.wrap a.has-laquo:before{content:"\AB\A0"}#loco.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco.wrap .jshide,.no-js #loco.wrap .jsonly{display:none !important}#loco.wrap .invis{visibility:hidden}.form-table tr{vertical-align:top}.form-table tr.compact td{padding-top:0}.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) center 20px no-repeat}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif) 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:0.5em;padding-right:0.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,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif) 0 0 no-repeat !important}
|
1 |
+
._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.3.0);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.3.0) 0 0 no-repeat;min-height:75px}@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.3.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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}.loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc: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}@font-face{font-family:'loco';src:url("../font/loco.eot");src:url("../font/loco.eot?#iefix") format("embedded-opentype"),url("../font/loco.woff") format("woff"),url("../font/loco.ttf") format("truetype"),url("../font/loco.svg#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 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.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.wrap .selector li,#loco.wrap .selector .handle,#loco.wrap .selectoradd a,#loco.wrap .selectorsep:before,#loco.wrap .selectorsep span{padding:0.3em 0.75em}#loco.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco.wrap .selectoradd a,#loco.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.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco.wrap .selector .handle .prefix{padding-right:0.6ex}#loco.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:0.25em;right:0.6em}#loco.wrap .selector .handle:focus:after,#loco.wrap .selector .handle:hover:after{color:#666}#loco.wrap .selector.no-caret .handle{padding-right:0.75em}#loco.wrap .selector.no-caret .handle:after{display:none}#loco.wrap .selector.no-title .handle{padding-left:0.5em;padding-right:0.5em}#loco.wrap .selector.no-title .handle .label{display:none}#loco.wrap .selector.no-title .handle .icon{margin-right:0px}#loco.wrap .selector.dummy .handle{border-color:transparent}#loco.wrap .selector.dummy .handle:after{display:none}#loco.wrap .selectoradd{position:relative}#loco.wrap .selectoradd>*{display:block;float:left;clear:none}#loco.wrap .selectoradd>a.has-icon{width:1.3em}#loco.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco.wrap .selectorsep{display:inline-block}#loco.wrap .selectorsep span{color:#666;height:1.3em}#loco.wrap .selector ul{padding:0}#loco.wrap .selector ul,#loco.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,0.2);border:solid 1px #ccc;overflow:auto}#loco.wrap .selector.up ul{margin-top:0}#loco.wrap .selector.multi li input{display:none}#loco.wrap .selector.multi li.checked{background:#e5e5e5}#loco.wrap .selector li.active{background:#e5e5e5 !important}#loco.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco.wrap .selector li.over .label{color:#fff}#loco.wrap .selector .label{font:inherit;color:inherit}#loco.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco.wrap .selector .icon.no-icon{display:none}#loco.wrap .selector .icon:before{color:#666}#loco.wrap .selector .avtr{width:18px;height:18px;background-size:18px;background-repeat:no-repeat}#loco.wrap .selector .label{line-height:1}#loco.wrap .selector .icon,#loco.wrap .selector .icon-16{vertical-align:bottom}#loco.wrap .selector .icon,#loco.wrap .selector .lang,#loco.wrap .selector .icon-16{margin-right:5px}#loco.wrap .selector .region,#loco.wrap .selector .lang-ca,#loco.wrap .selector .lang-eo,#loco.wrap .selector .lang-eu,#loco.wrap .selector .variant-wales,#loco.wrap .selector .region-gb.lang-cy,#loco.wrap .selector .variant-scotland,#loco.wrap .selector .region-gb.lang-gd{margin-left:2px;margin-right:7px}#loco.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco.wrap .selector.ticked .active .icon.no-icon:before{content:"\2713"}#loco.wrap .selectoradd a:hover,#loco.wrap .selector a.handle:focus,#loco.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco.wrap .selector.active .handle:after{color:#999}#loco.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco.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.wrap .selector.disabled .handle:after{display:none}#loco.wrap .selector.disabled .handle span.icon{color:#999 !important}#loco.wrap .selector li.disabled,#loco.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco.wrap .selector li.disabled *{cursor:text}#loco.wrap .selector li.disabled .icon:before{color:#aaa}#loco.wrap .selector li.disabled .flag,#loco.wrap .selector li.disabled .icon-16{opacity:0.4}#loco.wrap .selector.lefty ul{left:auto;right:0}#loco.wrap .selector.lefty ul .icon,#loco.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco.wrap .selector ul>form{margin:0;display:block}#loco.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.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.wrap .selector ul>form input.error{border-color:#cc0000;-webkit-box-shadow:inset 0 0 5px 0 rgba(153,0,0,0.5);-moz-box-shadow:inset 0 0 5px 0 rgba(153,0,0,0.5);box-shadow:inset 0 0 5px 0 rgba(153,0,0,0.5)}#loco.wrap .selector ul>form a.clear{margin:0;border:none}#loco.wrap .selector ul>form ::placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap .selector ul>form ::-webkit-input-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap .selector ul>form :-moz-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block;opacity:1}#loco.wrap .selector ul>form ::-moz-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block;opacity:1}#loco.wrap .selector ul>form :-ms-input-placeholder{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap .selector ul>form .ielt10 .placeheld{color:#808080;font-size:16px;font-family:'loco';text-align:right;display:block}#loco.wrap div.auto-comp-wrap{width:100%}#loco.wrap div.auto-comp-wrap input{display:inline-block}#loco.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif?v=2.3.0) right 2px no-repeat}#loco.wrap div.auto-comp-drop{color:#333333;background:#FFFFFF;border-top:none;position:absolute;width:auto;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,0.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,0.4);box-shadow:0 5px 5px rgba(0,0,0,0.4)}#loco.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.wrap div.auto-comp-result:first-child{border-top:solid 1px #DDD}#loco.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco.wrap div.auto-comp-result:hover{background:#A8A8A8;color:#FFFFFF;border-top-color:#A8A8A8;border-bottom-color:#999999}#loco.wrap div.auto-comp-result.selected{background:#666666 !important;color:#FFFFFF;border-top-color:#666666;border-bottom-color:#666666}#loco.wrap div.auto-comp-result .lang,#loco.wrap div.auto-comp-result .region,#loco.wrap div.auto-comp-result .lang-ca,#loco.wrap div.auto-comp-result .lang-eo,#loco.wrap div.auto-comp-result .lang-eu,#loco.wrap div.auto-comp-result .variant-wales,#loco.wrap div.auto-comp-result .region-gb.lang-cy,#loco.wrap div.auto-comp-result .variant-scotland,#loco.wrap div.auto-comp-result .region-gb.lang-gd,#loco.wrap div.auto-comp-result .avtr{margin-right:5px}#loco.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#cc0000;opacity:1}#loco.wrap div.auto-comp-wrap.error input[type="text"]{border-color:#cc0000;color:#cc0000}#loco.wrap div.auto-comp-wrap.error input[type="text"]:focus{-webkit-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);-moz-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5)}#loco.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.3.0);background-repeat:no-repeat;min-height:16px}#loco.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.3.0) 0 0 no-repeat;min-height:75px}@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.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.3.0);background-size:16px}}#loco.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.wrap ._green_glow_outer{-webkit-box-shadow:0 0 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco.wrap .loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc: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.wrap .has-icon:before{display:inline-block;padding-right:0.3em}#loco.wrap a.icon-help{cursor:help}#loco.wrap a.icon-help span{display:none}#loco.wrap .icon-magnify:before{content:"\1f50d"}#loco.wrap .icon-unicode:before{content:"\75"}#loco.wrap .icon-json:before{content:"\7b"}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\16ec"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-ok-empty:before{content:"\1f5cc"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before,#loco.wrap .icon-history:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-privacy:before{content:"\1f6e1"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon-status.is-translated:before,#loco.wrap .is-translated>header>.icon-status:before{color:#2e892e;content:"✓";text-align:center}#loco.wrap .icon-status.is-untranslated:before,#loco.wrap .is-untranslated>header>.icon-status:before{color:#aaa;content:"×";text-align:center;font-size:1.1em}#loco.wrap .icon-status.is-flagged:before,#loco.wrap .is-flagged>header>.icon-status:before{color:#bd2c00;content:"";text-align:center}#loco.wrap .icon-status.is-translated.is-blank:before,#loco.wrap .icon-status.is-translated.is-inherit:before,#loco.wrap .is-translated.is-blank>header>.icon-status:before,#loco.wrap .is-translated.is-inherit>header>.icon-status:before{content:"🗌"}#loco.wrap .icon-status.is-fuzzy:before,#loco.wrap .is-fuzzy>header>.icon-status:before{color:#666;content:""}#loco.wrap .lang,#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{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.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco.wrap .no-lang{width:18px;height:10px;border:solid 1px #2e892e;background:transparent}#loco.wrap .lang-el{background-color:#1D48A3}#loco.wrap .lang-el:before{content:"\0395\03BB"}#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png?v=2.3.0);background-repeat:no-repeat;background-color:transparent}#loco.wrap .region:before,#loco.wrap .lang-ca:before,#loco.wrap .lang-eo:before,#loco.wrap .lang-eu:before,#loco.wrap .variant-wales:before,#loco.wrap .region-gb.lang-cy:before,#loco.wrap .variant-scotland:before,#loco.wrap .region-gb.lang-gd:before{visibility:hidden}#loco.wrap .lang-zh{background-color:#B90000}#loco.wrap .lang-zh.script-hans:before{content:"\4E2D\56FD"}#loco.wrap .lang-zh.script-hant:before{content:"\4E2D\570B"}#loco.wrap .__{background-position:0 0}#loco.wrap .lang-eo{background-position:0 -12px}#loco.wrap .lang-eu{background-position:0 -24px}#loco.wrap .lang-ca{background-position:0 -36px}#loco.wrap .region-tg{background-position:0 -48px}#loco.wrap .region-me{background-position:0 -60px}#loco.wrap .region-la{background-position:0 -73px}#loco.wrap .region-mr{background-position:0 -85px}#loco.wrap .region-ni{background-position:0 -97px}#loco.wrap .region-lv{background-position:0 -109px}#loco.wrap .region-om{background-position:0 -121px}#loco.wrap .region-af{background-position:0 -133px}#loco.wrap .region-cy{background-position:0 -145px}#loco.wrap .region-bj{background-position:0 -157px}#loco.wrap .region-aq{background-position:0 -169px}#loco.wrap .region-cn{background-position:0 -186px}#loco.wrap .region-co{background-position:0 -198px}#loco.wrap .region-cx{background-position:0 -210px}#loco.wrap .region-ag{background-position:0 -222px}#loco.wrap .region-ms{background-position:0 -234px}#loco.wrap .region-md{background-position:0 -246px}#loco.wrap .region-zm{background-position:0 -258px}#loco.wrap .region-vn{background-position:0 -270px}#loco.wrap .region-tf{background-position:0 -282px}#loco.wrap .region-td{background-position:0 -294px}#loco.wrap .region-yt{background-position:0 -306px}#loco.wrap .region-lb{background-position:0 -318px}#loco.wrap .region-mf{background-position:0 -330px}#loco.wrap .region-lu{background-position:0 -347px}#loco.wrap .region-mq{background-position:0 -359px}#loco.wrap .region-cz{background-position:0 -371px}#loco.wrap .region-ae{background-position:0 -383px}#loco.wrap .region-cm{background-position:0 -395px}#loco.wrap .region-bi{background-position:0 -407px}#loco.wrap .region-ar{background-position:0 -419px}#loco.wrap .region-as{background-position:0 -431px}#loco.wrap .region-bh{background-position:0 -443px}#loco.wrap .region-cl{background-position:0 -455px}#loco.wrap .region-ad{background-position:0 -467px}#loco.wrap .region-mp{background-position:0 -479px}#loco.wrap .region-lt{background-position:0 -491px}#loco.wrap .region-mg{background-position:0 -503px}#loco.wrap .region-lc{background-position:0 -515px}#loco.wrap .region-tr{background-position:0 -527px}#loco.wrap .region-ua{background-position:0 -539px}#loco.wrap .region-tv{background-position:0 -551px}#loco.wrap .region-vi{background-position:0 -563px}#loco.wrap .region-mt{background-position:0 -575px}#loco.wrap .region-no{background-position:0 -587px}#loco.wrap .region-mc{background-position:0 -599px}#loco.wrap .region-ch{background-position:0 -611px}#loco.wrap .region-bl{background-position:0 -623px}#loco.wrap .region-aw{background-position:0 -640px}#loco.wrap .region-bz{background-position:0 -652px}#loco.wrap .region-bm{background-position:0 -664px}#loco.wrap .region-ci{background-position:0 -676px}#loco.wrap .region-mu{background-position:0 -688px}#loco.wrap .region-us{background-position:0 -700px}#loco.wrap .region-tw{background-position:0 -712px}#loco.wrap .region-ye{background-position:0 -724px}#loco.wrap .region-mw{background-position:0 -736px}#loco.wrap .region-nl{background-position:0 -748px}#loco.wrap .region-ls{background-position:0 -760px}#loco.wrap .region-bo{background-position:0 -772px}#loco.wrap .region-at{background-position:0 -784px}#loco.wrap .region-ck{background-position:0 -796px}#loco.wrap .region-by{background-position:0 -808px}#loco.wrap .region-au{background-position:0 -820px}#loco.wrap .region-bn{background-position:0 -832px}#loco.wrap .region-ma{background-position:0 -844px}#loco.wrap .region-nz{background-position:0 -856px}#loco.wrap .region-lr{background-position:0 -868px}#loco.wrap .region-mv{background-position:0 -880px}#loco.wrap .region-tc{background-position:0 -892px}#loco.wrap .region-ug{background-position:0 -904px}#loco.wrap .region-tt{background-position:0 -916px}#loco.wrap .region-pl{background-position:0 -928px}#loco.wrap .region-rs{background-position:0 -940px}#loco.wrap .region-in{background-position:0 -952px}#loco.wrap .region-ge{background-position:0 -964px}#loco.wrap .region-gr{background-position:0 -976px}#loco.wrap .region-gs{background-position:0 -988px}#loco.wrap .region-gd{background-position:0 -1000px}#loco.wrap .region-io{background-position:0 -1012px}#loco.wrap .region-hk{background-position:0 -1024px}#loco.wrap .region-kp{background-position:0 -1036px}#loco.wrap .region-kg{background-position:0 -1048px}#loco.wrap .region-pm{background-position:0 -1060px}#loco.wrap .region-sv{background-position:0 -1072px}#loco.wrap .region-re{background-position:0 -1084px}#loco.wrap .region-sa{background-position:0 -1096px}#loco.wrap .region-sc{background-position:0 -1108px}#loco.wrap .region-st{background-position:0 -1120px}#loco.wrap .region-ke{background-position:0 -1132px}#loco.wrap .region-im{background-position:0 -1144px}#loco.wrap .region-kr{background-position:0 -1161px}#loco.wrap .region-gf{background-position:0 -1173px}#loco.wrap .region-dj{background-position:0 -1185px}#loco.wrap .region-gq{background-position:0 -1197px}#loco.wrap .region-gp{background-position:0 -1209px}#loco.wrap .region-dk{background-position:0 -1221px}#loco.wrap .region-gg{background-position:0 -1233px}#loco.wrap .region-il{background-position:0 -1250px}#loco.wrap .region-pn{background-position:0 -1262px}#loco.wrap .region-sb{background-position:0 -1274px}#loco.wrap .region-py{background-position:0 -1286px}#loco.wrap .region-ru{background-position:0 -1298px}#loco.wrap .region-kw{background-position:0 -1310px}#loco.wrap .region-do{background-position:0 -1322px}#loco.wrap .region-gt{background-position:0 -1334px}#loco.wrap .region-gb{background-position:0 -1346px}#loco.wrap .region-gu{background-position:0 -1358px}#loco.wrap .region-je{background-position:0 -1370px}#loco.wrap .region-hm{background-position:0 -1387px}#loco.wrap .region-sg{background-position:0 -1399px}#loco.wrap .region-pk{background-position:0 -1411px}#loco.wrap .region-sr{background-position:0 -1423px}#loco.wrap .region-se{background-position:0 -1435px}#loco.wrap .region-jp{background-position:0 -1447px}#loco.wrap .region-gw{background-position:0 -1459px}#loco.wrap .region-eh{background-position:0 -1471px}#loco.wrap .region-dz{background-position:0 -1483px}#loco.wrap .region-ga{background-position:0 -1495px}#loco.wrap .region-fr{background-position:0 -1507px}#loco.wrap .region-dm{background-position:0 -1519px}#loco.wrap .region-hn{background-position:0 -1531px}#loco.wrap .region-sd{background-position:0 -1543px}#loco.wrap .region-rw{background-position:0 -1555px}#loco.wrap .region-ph{background-position:0 -1567px}#loco.wrap .region-ss{background-position:0 -1579px}#loco.wrap .region-qa{background-position:0 -1596px}#loco.wrap .region-pe{background-position:0 -1608px}#loco.wrap .region-pr{background-position:0 -1620px}#loco.wrap .region-si{background-position:0 -1632px}#loco.wrap .region-ht{background-position:0 -1644px}#loco.wrap .region-es{background-position:0 -1656px}#loco.wrap .region-gl{background-position:0 -1668px}#loco.wrap .region-gm{background-position:0 -1680px}#loco.wrap .region-er{background-position:0 -1692px}#loco.wrap .region-fi{background-position:0 -1704px}#loco.wrap .region-ee{background-position:0 -1716px}#loco.wrap .region-kn{background-position:0 -1728px}#loco.wrap .region-hu{background-position:0 -1740px}#loco.wrap .region-iq{background-position:0 -1752px}#loco.wrap .region-ky{background-position:0 -1764px}#loco.wrap .region-sh{background-position:0 -1776px}#loco.wrap .region-ps{background-position:0 -1788px}#loco.wrap .region-pf{background-position:0 -1800px}#loco.wrap .region-sj{background-position:0 -1812px}#loco.wrap .region-id{background-position:0 -1824px}#loco.wrap .region-is{background-position:0 -1836px}#loco.wrap .region-eg{background-position:0 -1848px}#loco.wrap .region-fk{background-position:0 -1860px}#loco.wrap .region-fj{background-position:0 -1872px}#loco.wrap .region-gn{background-position:0 -1884px}#loco.wrap .region-gy{background-position:0 -1896px}#loco.wrap .region-ir{background-position:0 -1908px}#loco.wrap .region-km{background-position:0 -1920px}#loco.wrap .region-ie{background-position:0 -1932px}#loco.wrap .region-kz{background-position:0 -1944px}#loco.wrap .region-ro{background-position:0 -1956px}#loco.wrap .region-sk{background-position:0 -1968px}#loco.wrap .region-pg{background-position:0 -1980px}#loco.wrap .region-pt{background-position:0 -1992px}#loco.wrap .region-so{background-position:0 -2004px}#loco.wrap .region-sx{background-position:0 -2016px}#loco.wrap .region-hr{background-position:0 -2033px}#loco.wrap .region-ki{background-position:0 -2045px}#loco.wrap .region-jm{background-position:0 -2057px}#loco.wrap .region-ec{background-position:0 -2069px}#loco.wrap .region-et{background-position:0 -2081px}#loco.wrap .region-fo{background-position:0 -2093px}#loco.wrap .region-kh{background-position:0 -2105px}#loco.wrap .region-sy{background-position:0 -2117px}#loco.wrap .region-sn{background-position:0 -2129px}#loco.wrap .region-pw{background-position:0 -2141px}#loco.wrap .region-sl{background-position:0 -2153px}#loco.wrap .region-fm{background-position:0 -2165px}#loco.wrap .region-gi{background-position:0 -2177px}#loco.wrap .region-de{background-position:0 -2189px}#loco.wrap .region-gh{background-position:0 -2201px}#loco.wrap .region-jo{background-position:0 -2213px}#loco.wrap .region-it{background-position:0 -2225px}#loco.wrap .region-pa{background-position:0 -2237px}#loco.wrap .region-sz{background-position:0 -2249px}#loco.wrap .region-sm{background-position:0 -2261px}#loco.wrap .region-tn{background-position:0 -2273px}#loco.wrap .region-ml{background-position:0 -2285px}#loco.wrap .region-cg{background-position:0 -2297px}#loco.wrap .region-ax{background-position:0 -2309px}#loco.wrap .region-ao{background-position:0 -2321px}#loco.wrap .region-bt{background-position:0 -2333px}#loco.wrap .region-an{background-position:0 -2345px}#loco.wrap .region-bb{background-position:0 -2357px}#loco.wrap .region-cf{background-position:0 -2369px}#loco.wrap .region-mm{background-position:0 -2381px}#loco.wrap .region-li{background-position:0 -2393px}#loco.wrap .region-na{background-position:0 -2405px}#loco.wrap .region-mz{background-position:0 -2417px}#loco.wrap .region-to{background-position:0 -2429px}#loco.wrap .region-vg{background-position:0 -2441px}#loco.wrap .region-ve{background-position:0 -2453px}#loco.wrap .region-tz{background-position:0 -2465px}#loco.wrap .region-tm{background-position:0 -2477px}#loco.wrap .region-mx{background-position:0 -2489px}#loco.wrap .region-nc{background-position:0 -2501px}#loco.wrap .region-mo{background-position:0 -2513px}#loco.wrap .region-lk{background-position:0 -2525px}#loco.wrap .region-cd{background-position:0 -2537px}#loco.wrap .region-al{background-position:0 -2549px}#loco.wrap .region-bw{background-position:0 -2561px}#loco.wrap .region-cs{background-position:0 -2573px}#loco.wrap .region-cr{background-position:0 -2585px}#loco.wrap .region-bv{background-position:0 -2597px}#loco.wrap .region-am{background-position:0 -2609px}#loco.wrap .region-az{background-position:0 -2621px}#loco.wrap .region-ba{background-position:0 -2633px}#loco.wrap .region-mn{background-position:0 -2645px}#loco.wrap .region-nu{background-position:0 -2657px}#loco.wrap .region-my{background-position:0 -2669px}#loco.wrap .region-tl{background-position:0 -2681px}#loco.wrap .region-ws{background-position:0 -2693px}#loco.wrap .region-th{background-position:0 -2705px}#loco.wrap .region-nf{background-position:0 -2717px}#loco.wrap .region-ly{background-position:0 -2729px}#loco.wrap .region-ai{background-position:0 -2741px}#loco.wrap .region-br{background-position:0 -2753px}#loco.wrap .region-cv{background-position:0 -2765px}#loco.wrap .region-be{background-position:0 -2777px}#loco.wrap .region-ca{background-position:0 -2789px}#loco.wrap .region-bd{background-position:0 -2801px}#loco.wrap .region-cw{background-position:0 -2813px}#loco.wrap .region-bs{background-position:0 -2830px}#loco.wrap .region-ng{background-position:0 -2842px}#loco.wrap .region-mk{background-position:0 -2854px}#loco.wrap .region-np{background-position:0 -2866px}#loco.wrap .region-va{background-position:0 -2878px}#loco.wrap .region-uz{background-position:0 -2890px}#loco.wrap .region-um{background-position:0 -2902px}#loco.wrap .region-tk{background-position:0 -2914px}#loco.wrap .region-vc{background-position:0 -2926px}#loco.wrap .region-zw{background-position:0 -2938px}#loco.wrap .region-nr{background-position:0 -2950px}#loco.wrap .region-ne{background-position:0 -2962px}#loco.wrap .region-cu{background-position:0 -2974px}#loco.wrap .region-bq{background-position:0 -2986px}#loco.wrap .region-bf{background-position:0 -2998px}#loco.wrap .region-bg{background-position:0 -3010px}#loco.wrap .region-cc{background-position:0 -3022px}#loco.wrap .region-mh{background-position:0 -3034px}#loco.wrap .region-za{background-position:0 -3046px}#loco.wrap .region-uy{background-position:0 -3058px}#loco.wrap .region-wf{background-position:0 -3070px}#loco.wrap .region-vu{background-position:0 -3082px}#loco.wrap .region-tj{background-position:0 -3094px}#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco.wrap .variant-valencia{background-position:0 -3118px}#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco.wrap .x-eu{background-position:0 -3142px}#loco.wrap span.lang code{display:none}#loco.wrap .icon-magnify:before{content:"\1f50d"}#loco.wrap .icon-unicode:before{content:"\75"}#loco.wrap .icon-json:before{content:"\7b"}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\16ec"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-ok-empty:before{content:"\1f5cc"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before,#loco.wrap .icon-history:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-privacy:before{content:"\1f6e1"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.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.wrap .icon,#loco.wrap .has-icon:before{font-family:'loco'}#loco.wrap .has-dashicon:before{font-family:'dashicons';font-size:1.4em}#loco.wrap .has-icon:before,#loco.wrap .has-dashicon:before,#loco.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco.wrap .only-icon{text-align:center}#loco.wrap .only-icon:before{text-align:center}#loco.wrap .only-icon span{display:none}#loco.wrap a,#loco.wrap .wp-core-ui .button-link{text-decoration:none}#loco.wrap h3:hover>a.loco-anchor{color:#ccc}#loco.wrap h3:hover>a.loco-anchor:before{content:"\B6"}#loco.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco.wrap h1 ul,#loco.wrap h1 li{margin:0;padding:0}#loco.wrap h1 li{display:inline-block}#loco.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco.wrap h1 li:last-child:after{content:""}#loco.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco.wrap h2 span{color:#999;font-weight:normal}#loco.wrap h2 .loco-meta,#loco.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco.wrap .wp-list-table td{white-space:nowrap}#loco.wrap .wp-list-table td>a,#loco.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.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"\25bc"}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"\25b2"}#loco.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco.wrap form.loco-filter{display:block;margin-bottom:5px}#loco.wrap form.loco-filter .icon-filter{color:#999}#loco.wrap nav.above-list-table{margin-bottom:1em}#loco.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco.wrap .wp-core-ui button.inverted,#loco.wrap .wp-core-ui button.inverted:hover{background:-moz-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:-webkit-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:linear-gradient(to bottom, #ccc 0%, #e0e0e0 5%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:#bbb}#loco.wrap .wp-core-ui button:active,#loco.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco.wrap .loco-clearable a.clear,#loco.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.wrap .loco-clearable a.clear:before,#loco.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco.wrap .loco-clearable a.clear:hover:before,#loco.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco.wrap .loco-clearable a.clear span,#loco.wrap .auto-comp-wrap a.clear span{display:none}#loco.wrap .loco-clearable ::-ms-clear,#loco.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco.wrap div.progress{color:#000;background:transparent !important}#loco.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco.wrap div.progress .l{display:block}#loco.wrap td div.progress .t{border:none}#loco.wrap td div.progress .l{display:none}#loco.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco.wrap .loco-danger{color:#d54e21}#loco.wrap .notice,#loco.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco.wrap .notice-generic{border-color:#ddd}#loco.wrap .notice-success>.has-icon,#loco.wrap .notice-success p>strong.has-icon{color:#000}#loco.wrap .notice-warning{border-color:#FFA500}#loco.wrap .notice-error{border-color:#dc3232}#loco.wrap .notice-debug{border-color:#00a0d2}#loco.wrap .notice-danger{border-color:#dc3232}#loco.wrap .notice-locked{border-color:#FFA500}#loco.wrap .notice>.has-icon:before,#loco.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco.wrap .notice>p>a.button.has-icon:before{width:1.5em}#loco.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco.wrap .notice>p>em a{color:inherit}#loco.wrap .notice>p a:hover,#loco.wrap .notice>nav a:hover{text-decoration:underline}#loco.wrap .notice>p a.button,#loco.wrap .notice>nav a.button{text-decoration:inherit}#loco.wrap .notice.has-nav{display:flex;flex-direction:row}#loco.wrap .notice.has-nav p,#loco.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco.wrap .notice.has-nav a{font-size:12px;white-space:nowrap}#loco.wrap .notice.has-nav nav>span{color:#666}#loco.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco.wrap ul.problems li{font-style:italic}#loco.wrap label{position:relative}#loco.wrap label.for-disabled,#loco.wrap label.for-disabled>input{cursor:default !important}#loco.wrap input.regular-text,#loco.wrap textarea.regular-text{width:25em}#loco.wrap .button-link{padding:0 10px 1px}#loco.wrap .button-danger{background:#ba0000;border-color:#990000 #660000 #660000;-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 #660000, 1px 0 1px #660000, 0 1px 1px #660000, -1px 0 1px #660000}#loco.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.wrap .button-success:hover{background:#3db63d}#loco.wrap form button.loco-loading.button-large{padding-left:0}#loco.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.wrap ::placeholder{color:#ccc}#loco.wrap ::-webkit-input-placeholder{color:#ccc}#loco.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco.wrap :-ms-input-placeholder{color:#ccc}#loco.wrap .ielt10 .placeheld{color:#ccc}#loco.wrap a.has-raquo:after{content:"\A0\BB"}#loco.wrap a.has-laquo:before{content:"\AB\A0"}#loco.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif?v=2.3.0) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco.wrap .jshide,.no-js #loco.wrap .jsonly{display:none !important}#loco.wrap .invis{visibility:hidden}.form-table tr{vertical-align:top}.form-table tr.compact td{padding-top:0}.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.3.0) center 20px no-repeat}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif?v=2.3.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:0.5em;padding-right:0.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,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/css/editor.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@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);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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 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:0.4em 0.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:"\00AC"}#loco-editor div.ta-mirror .eof:after{content:"\00B6"}#loco-editor div.ta-mirror .x20:after{content:"\00B7";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"\27F6"}#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:0.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:0.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:#808080}#loco-editor .ace_icu-quoted{color:#808080}#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) 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);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@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);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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 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) 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) 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:"\25b2"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"\25bc"}#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:0.5em 1em;margin-top:0.2em;color:#000;text-decoration:none;-webkit-border-radius:0.2em 0.2em 0 0;-moz-border-radius:0.2em 0.2em 0 0;-ms-border-radius:0.2em 0.2em 0 0;-o-border-radius:0.2em 0.2em 0 0;border-radius:0.2em 0.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:"\e613";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"\e612";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .wg-cell p.notes>mark,#loco-editor .is-table .wg-cols>div>div>mark{display:inline-block;vertical-align:text-bottom;font:inherit;color:#fff;border-radius:2px;font-weight:normal}#loco-editor .wg-cell p.notes>mark{padding:0 0.3em;line-height:normal;background-color:#c0c0c0}#loco-editor .is-table .wg-cols>div>div>mark{font-size:90%;line-height:1;padding:0.2em 0.3em;background-color:rgba(0,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-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 .wg-cell>p.notes,#loco-editor .wg-cell>p.errors{font-size:13px;line-height:1.4em;margin:0;padding:5px 10px;cursor:default !important}#loco-editor .wg-cell>p.errors{color:#cc0000}#loco-editor .wg-cell>p.notes{color:#333;white-space:pre-line}#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-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) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco.wrap #loco-toolbar{font-size:14px;height:50px}#loco.wrap #loco-toolbar form{display:block;float:left;clear:none;padding:0;margin:0}#loco.wrap #loco-toolbar form.aux{float:right;margin-right:5px}#loco.wrap #loco-toolbar fieldset{display:block;position:relative;float:left;clear:none}#loco.wrap #loco-toolbar button,#loco.wrap #loco-toolbar 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.wrap #loco-toolbar input[type="text"]{padding:0 10px;font-size:14px;line-height:normal}#loco.wrap #loco-toolbar .invalid input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap #loco-toolbar .loco-clearable{padding:0 20px}#loco.wrap #loco-toolbar .loco-clearable.invalid a.clear:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear{right:25px;line-height:2}#loco.wrap #loco-toolbar .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar .loco-clearable a.clear:hover:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear:active:before{color:#000}#loco.wrap #loco-toolbar button{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar button.has-icon:before{width:16px;padding:0}#loco.wrap #loco-toolbar button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif) 0 0 no-repeat}#loco.wrap #loco-toolbar button.only-icon{width:40px}
|
1 |
+
#loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.3.0);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.3.0) 0 0 no-repeat;min-height:75px}@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.3.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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 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:0.4em 0.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:"\00AC"}#loco-editor div.ta-mirror .eof:after{content:"\00B6"}#loco-editor div.ta-mirror .x20:after{content:"\00B7";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"\27F6"}#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:0.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:0.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:#808080}#loco-editor .ace_icu-quoted{color:#808080}#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.3.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.3.0);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.3.0) 0 0 no-repeat;min-height:75px}@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.3.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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 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.3.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.3.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:"\25b2"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"\25bc"}#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:0.5em 1em;margin-top:0.2em;color:#000;text-decoration:none;-webkit-border-radius:0.2em 0.2em 0 0;-moz-border-radius:0.2em 0.2em 0 0;-ms-border-radius:0.2em 0.2em 0 0;-o-border-radius:0.2em 0.2em 0 0;border-radius:0.2em 0.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:"\e613";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"\e612";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .wg-cell p.notes>mark,#loco-editor .is-table .wg-cols>div>div>mark{display:inline-block;vertical-align:text-bottom;font:inherit;color:#fff;border-radius:2px;font-weight:normal}#loco-editor .wg-cell p.notes>mark{padding:0 0.3em;line-height:normal;background-color:#c0c0c0}#loco-editor .is-table .wg-cols>div>div>mark{font-size:90%;line-height:1;padding:0.2em 0.3em;background-color:rgba(0,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-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 .wg-cell>p.notes,#loco-editor .wg-cell>p.errors{font-size:13px;line-height:1.4em;margin:0;padding:5px 10px;cursor:default !important}#loco-editor .wg-cell>p.errors{color:#cc0000}#loco-editor .wg-cell>p.notes{color:#333;white-space:pre-line}#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-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.3.0) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco.wrap #loco-toolbar{font-size:14px;height:50px}#loco.wrap #loco-toolbar form{display:block;float:left;clear:none;padding:0;margin:0}#loco.wrap #loco-toolbar form.aux{float:right;margin-right:5px}#loco.wrap #loco-toolbar fieldset{display:block;position:relative;float:left;clear:none}#loco.wrap #loco-toolbar button,#loco.wrap #loco-toolbar 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.wrap #loco-toolbar input[type="text"]{padding:0 10px;font-size:14px;line-height:normal}#loco.wrap #loco-toolbar .invalid input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap #loco-toolbar .loco-clearable{padding:0 20px}#loco.wrap #loco-toolbar .loco-clearable.invalid a.clear:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear{right:25px;line-height:2}#loco.wrap #loco-toolbar .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar .loco-clearable a.clear:hover:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear:active:before{color:#000}#loco.wrap #loco-toolbar button{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar button.has-icon:before{width:16px;padding:0}#loco.wrap #loco-toolbar button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif?v=2.3.0) 0 0 no-repeat}#loco.wrap #loco-toolbar button.only-icon{width:40px}
|
pub/css/podiff.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#loco.wrap .revisions-diff{padding:10px;min-height:20px}#loco.wrap table.diff{border-collapse:collapse}#loco.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.wrap table.diff td>span{color:#aaa}#loco.wrap table.diff td>span:after{content:". "}#loco.wrap table.diff tbody{border-top:1px dashed #ccc}#loco.wrap table.diff tbody:first-child{border-top:none}#loco.wrap .revisions.loading .diff-meta{color:#eee}#loco.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif) center center no-repeat}#loco.wrap .revisions-meta{clear:both;padding:10px 12px;margin:0;position:relative;top:10px}#loco.wrap .revisions-meta .diff-meta{clear:none;float:left;width:50%;padding:0;min-height:auto}#loco.wrap .revisions-meta .diff-meta button{margin-top:5px}#loco.wrap .revisions-meta .diff-meta-current{float:right;text-align:right}#loco.wrap .revisions-meta time{color:#72777c}#loco.wrap .revisions-control-frame{margin:10px 0}#loco.wrap .revisions-diff-frame{margin-top:20px}
|
1 |
+
#loco.wrap .revisions-diff{padding:10px;min-height:20px}#loco.wrap table.diff{border-collapse:collapse}#loco.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.wrap table.diff td>span{color:#aaa}#loco.wrap table.diff td>span:after{content:". "}#loco.wrap table.diff tbody{border-top:1px dashed #ccc}#loco.wrap table.diff tbody:first-child{border-top:none}#loco.wrap .revisions.loading .diff-meta{color:#eee}#loco.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif?v=2.3.0) center center no-repeat}#loco.wrap .revisions-meta{clear:both;padding:10px 12px;margin:0;position:relative;top:10px}#loco.wrap .revisions-meta .diff-meta{clear:none;float:left;width:50%;padding:0;min-height:auto}#loco.wrap .revisions-meta .diff-meta button{margin-top:5px}#loco.wrap .revisions-meta .diff-meta-current{float:right;text-align:right}#loco.wrap .revisions-meta time{color:#72777c}#loco.wrap .revisions-control-frame{margin:10px 0}#loco.wrap .revisions-diff-frame{margin-top:20px}
|
pub/css/poview.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.js #loco.wrap .loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif) center center no-repeat}.js #loco.wrap .loco-loading ol.msgcat{display:none}#loco.wrap #loco-po{padding-right:0;overflow:auto}#loco.wrap ol.msgcat{margin-left:3em;padding-top:1em;border-top:1px dashed #ccc}#loco.wrap ol.msgcat:first-child{padding-top:0;border-top:none}#loco.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.wrap ol.msgcat li>*{color:#333;white-space:pre}#loco.wrap ol.msgcat li>.po-comment{color:#3CC200}#loco.wrap ol.msgcat li>.po-refs{color:#0073aa}#loco.wrap ol.msgcat li>.po-refs a{color:inherit;text-decoration:none}#loco.wrap ol.msgcat li>.po-refs a:hover{text-decoration:underline}#loco.wrap ol.msgcat li>.po-flags{color:#77904a}#loco.wrap ol.msgcat li>.po-flags em{font-style:normal}#loco.wrap ol.msgcat li>.po-word{color:#000}#loco.wrap ol.msgcat li>.po-junk{font-style:italic;color:#CCC}#loco.wrap ol.msgcat li>.po-string>span{color:#C931C7}#loco.wrap form.loco-filter{top:0;right:0;position:absolute}#loco.wrap .loco-invalid form.loco-filter input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap .loco-invalid ol.msgcat{list-style-type:none}#loco.wrap .loco-invalid ol.msgcat li{color:#000}.loco-modal{min-width:90% !important;min-height:100px}#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}
|
1 |
+
.js #loco.wrap .loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif?v=2.3.0) center center no-repeat}.js #loco.wrap .loco-loading ol.msgcat{display:none}#loco.wrap #loco-po{padding-right:0;overflow:auto}#loco.wrap ol.msgcat{margin-left:3em;padding-top:1em;border-top:1px dashed #ccc}#loco.wrap ol.msgcat:first-child{padding-top:0;border-top:none}#loco.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.wrap ol.msgcat li>*{color:#333;white-space:pre}#loco.wrap ol.msgcat li>.po-comment{color:#3CC200}#loco.wrap ol.msgcat li>.po-refs{color:#0073aa}#loco.wrap ol.msgcat li>.po-refs a{color:inherit;text-decoration:none}#loco.wrap ol.msgcat li>.po-refs a:hover{text-decoration:underline}#loco.wrap ol.msgcat li>.po-flags{color:#77904a}#loco.wrap ol.msgcat li>.po-flags em{font-style:normal}#loco.wrap ol.msgcat li>.po-word{color:#000}#loco.wrap ol.msgcat li>.po-junk{font-style:italic;color:#CCC}#loco.wrap ol.msgcat li>.po-string>span{color:#C931C7}#loco.wrap form.loco-filter{top:0;right:0;position:absolute}#loco.wrap .loco-invalid form.loco-filter input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap .loco-invalid ol.msgcat{list-style-type:none}#loco.wrap .loco-invalid ol.msgcat li{color:#000}.loco-modal{min-width:90% !important;min-height:100px}#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}
|
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,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/blue/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(9,100,132,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/blue/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/css/skins/coffee.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(199,165,137,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/coffee/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(199,165,137,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/coffee/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/css/skins/ectoplasm.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(163,183,69,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/ectoplasm/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(163,183,69,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/ectoplasm/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/css/skins/light.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(136,136,136,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/light/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(136,136,136,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/light/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/css/skins/midnight.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(225,77,67,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/midnight/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(225,77,67,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/midnight/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/css/skins/ocean.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(158,186,160,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/ocean/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(158,186,160,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/ocean/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/css/skins/sunrise.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(221,130,59,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/sunrise/spin-primary-button.gif?v=2.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(221,130,59,0.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}.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 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../../img/skins/sunrise/spin-primary-button.gif?v=2.3.0) 0 0 no-repeat !important}
|
pub/font/loco.eot
CHANGED
Binary file
|
pub/font/loco.svg
CHANGED
@@ -103,6 +103,7 @@
|
|
103 |
<glyph unicode="" glyph-name="restore" d="M0 548.571v256q0 24 22.857 33.714 22.286 9.714 39.429-8l74.286-73.714q61.143 57.714 139.714 89.429t162.571 31.714q89.143 0 170.286-34.857t140-93.714 93.714-140 34.857-170.286-34.857-170.286-93.714-140-140-93.714-170.286-34.857q-98.286 0-186.857 41.429t-150.857 116.857q-4 5.714-3.714 12.857t4.857 11.714l78.286 78.857q5.714 5.143 14.286 5.143 9.143-1.143 13.143-6.857 41.714-54.286 102.286-84t128.571-29.714q59.429 0 113.429 23.143t93.429 62.571 62.571 93.429 23.143 113.429-23.143 113.429-62.571 93.429-93.429 62.571-113.429 23.143q-56 0-107.429-20.286t-91.429-58l78.286-78.857q17.714-17.143 8-39.429-9.714-22.857-33.714-22.857h-256q-14.857 0-25.714 10.857t-10.857 25.714zM292.571 347.428v36.571q0 8 5.143 13.143t13.143 5.143h128v201.143q0 8 5.143 13.143t13.143 5.143h36.571q8 0 13.143-5.143t5.143-13.143v-256q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143z" />
|
104 |
<glyph unicode="" glyph-name="translate" d="M628.217 728.84h-81.381q-24.792 0-48.236-10.509t-37.457-27.217l-48.505 145.516h-154.678l-128.808-377.263h91.082l39.882 107.789h152.522v-215.579h-269.474q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798h377.263q44.194 0 75.992-31.798t31.798-75.992v-107.789zM386.23 621.051h-108.867l53.895 157.912zM574.322 674.945h377.263q44.194 0 75.992-31.798t31.798-75.992v-377.263q0-44.194-31.798-75.992t-75.992-31.798h-377.263q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798zM965.059 405.472v58.206h-170.846v116.952h-62.518v-116.952h-170.846v-58.206h68.985q4.851-35.571 22.636-73.297t46.349-67.907q-34.493-14.013-70.872-23.714t-53.625-9.701l2.695-14.013q2.695-14.013 5.659-33.415t2.425-31.259q33.415 0 82.998 17.516t93.777 44.463q44.733-26.947 95.394-44.463t84.615-17.516q-0.539 7.545 0.539 18.055t2.695 20.749 3.234 19.133 3.234 14.821l1.078 5.928q-17.785 0-55.512 9.971t-72.758 23.983q27.486 30.181 45.002 67.907t22.366 72.758h73.297zM759.72 301.455q-40.96 37.726-54.434 104.017h112.64q-14.013-66.829-53.895-104.017l-2.156-1.617q-1.617 1.078-2.156 1.617z" />
|
105 |
<glyph unicode="🐦" glyph-name="twitter" horiz-adv-x="951" d="M925.714 717.714q-38.286-56-92.571-95.429 0.571-8 0.571-24 0-74.286-21.714-148.286t-66-142-105.429-120.286-147.429-83.429-184.571-31.143q-154.857 0-283.429 82.857 20-2.286 44.571-2.286 128.571 0 229.143 78.857-60 1.143-107.429 36.857t-65.143 91.143q18.857-2.857 34.857-2.857 24.571 0 48.571 6.286-64 13.143-106 63.714t-42 117.429v2.286q38.857-21.714 83.429-23.429-37.714 25.143-60 65.714t-22.286 88q0 50.286 25.143 93.143 69.143-85.143 168.286-136.286t212.286-56.857q-4.571 21.714-4.571 42.286 0 76.571 54 130.571t130.571 54q80 0 134.857-58.286 62.286 12 117.143 44.571-21.143-65.714-81.143-101.714 53.143 5.714 106.286 28.571z" />
|
|
|
106 |
<glyph unicode="🗌" glyph-name="ok-empty" d="M397.434 42.304l-397.868 391.6 197.378 194.27 200.49-197.332 429.62 422.852 197.378-194.27-626.998-617.12zM107.912 433.904l289.524-284.962 518.656 510.482-89.036 87.632-429.62-422.852-200.49 197.334-89.034-87.634z" />
|
107 |
<glyph unicode="🛡" glyph-name="privacy" horiz-adv-x="731" d="M0 402.286v438.857q0 14.857 10.857 25.714t25.714 10.857h658.286q14.857 0 25.714-10.857t10.857-25.714v-438.857q0-49.143-19.143-97.429t-47.429-85.714-67.429-72.857-72.286-58.857-69.143-44.286-51.143-28.286-24.286-11.429q-6.857-3.429-14.857-3.429t-14.857 3.429q-9.143 4-24.286 11.429t-51.143 28.286-69.143 44.286-72.286 58.857-67.429 72.857-47.429 85.714-19.143 97.429zM365.714 118.286q68 36 121.714 78.286 134.286 105.143 134.286 205.714v365.714h-256v-649.714z" />
|
108 |
</font></defs></svg>
|
103 |
<glyph unicode="" glyph-name="restore" d="M0 548.571v256q0 24 22.857 33.714 22.286 9.714 39.429-8l74.286-73.714q61.143 57.714 139.714 89.429t162.571 31.714q89.143 0 170.286-34.857t140-93.714 93.714-140 34.857-170.286-34.857-170.286-93.714-140-140-93.714-170.286-34.857q-98.286 0-186.857 41.429t-150.857 116.857q-4 5.714-3.714 12.857t4.857 11.714l78.286 78.857q5.714 5.143 14.286 5.143 9.143-1.143 13.143-6.857 41.714-54.286 102.286-84t128.571-29.714q59.429 0 113.429 23.143t93.429 62.571 62.571 93.429 23.143 113.429-23.143 113.429-62.571 93.429-93.429 62.571-113.429 23.143q-56 0-107.429-20.286t-91.429-58l78.286-78.857q17.714-17.143 8-39.429-9.714-22.857-33.714-22.857h-256q-14.857 0-25.714 10.857t-10.857 25.714zM292.571 347.428v36.571q0 8 5.143 13.143t13.143 5.143h128v201.143q0 8 5.143 13.143t13.143 5.143h36.571q8 0 13.143-5.143t5.143-13.143v-256q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143z" />
|
104 |
<glyph unicode="" glyph-name="translate" d="M628.217 728.84h-81.381q-24.792 0-48.236-10.509t-37.457-27.217l-48.505 145.516h-154.678l-128.808-377.263h91.082l39.882 107.789h152.522v-215.579h-269.474q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798h377.263q44.194 0 75.992-31.798t31.798-75.992v-107.789zM386.23 621.051h-108.867l53.895 157.912zM574.322 674.945h377.263q44.194 0 75.992-31.798t31.798-75.992v-377.263q0-44.194-31.798-75.992t-75.992-31.798h-377.263q-44.194 0-75.992 31.798t-31.798 75.992v377.263q0 44.194 31.798 75.992t75.992 31.798zM965.059 405.472v58.206h-170.846v116.952h-62.518v-116.952h-170.846v-58.206h68.985q4.851-35.571 22.636-73.297t46.349-67.907q-34.493-14.013-70.872-23.714t-53.625-9.701l2.695-14.013q2.695-14.013 5.659-33.415t2.425-31.259q33.415 0 82.998 17.516t93.777 44.463q44.733-26.947 95.394-44.463t84.615-17.516q-0.539 7.545 0.539 18.055t2.695 20.749 3.234 19.133 3.234 14.821l1.078 5.928q-17.785 0-55.512 9.971t-72.758 23.983q27.486 30.181 45.002 67.907t22.366 72.758h73.297zM759.72 301.455q-40.96 37.726-54.434 104.017h112.64q-14.013-66.829-53.895-104.017l-2.156-1.617q-1.617 1.078-2.156 1.617z" />
|
105 |
<glyph unicode="🐦" glyph-name="twitter" horiz-adv-x="951" d="M925.714 717.714q-38.286-56-92.571-95.429 0.571-8 0.571-24 0-74.286-21.714-148.286t-66-142-105.429-120.286-147.429-83.429-184.571-31.143q-154.857 0-283.429 82.857 20-2.286 44.571-2.286 128.571 0 229.143 78.857-60 1.143-107.429 36.857t-65.143 91.143q18.857-2.857 34.857-2.857 24.571 0 48.571 6.286-64 13.143-106 63.714t-42 117.429v2.286q38.857-21.714 83.429-23.429-37.714 25.143-60 65.714t-22.286 88q0 50.286 25.143 93.143 69.143-85.143 168.286-136.286t212.286-56.857q-4.571 21.714-4.571 42.286 0 76.571 54 130.571t130.571 54q80 0 134.857-58.286 62.286 12 117.143 44.571-21.143-65.714-81.143-101.714 53.143 5.714 106.286 28.571z" />
|
106 |
+
<glyph unicode="🔍" glyph-name="magnify" d="M898.304 180.89l-193.485 193.485c29.184 47.872 45.978 104.192 45.978 164.352 0 174.95-151.603 326.502-326.554 326.502-174.95 0.051-316.723-141.773-316.723-316.723 0-174.899 151.603-326.502 326.502-326.502 58.214 0 112.64 15.821 159.488 43.213l194.509-194.611c19.046-18.995 49.92-18.995 68.915 0l48.282 48.282c18.995 18.995 12.083 43.008-6.912 62.003zM205.005 548.506c0 121.139 98.15 219.29 219.238 219.29 121.139 0 229.069-107.878 229.069-229.069 0-121.088-98.202-219.29-219.29-219.29-121.139 0.051-229.018 107.981-229.018 229.069z" />
|
107 |
<glyph unicode="🗌" glyph-name="ok-empty" d="M397.434 42.304l-397.868 391.6 197.378 194.27 200.49-197.332 429.62 422.852 197.378-194.27-626.998-617.12zM107.912 433.904l289.524-284.962 518.656 510.482-89.036 87.632-429.62-422.852-200.49 197.334-89.034-87.634z" />
|
108 |
<glyph unicode="🛡" glyph-name="privacy" horiz-adv-x="731" d="M0 402.286v438.857q0 14.857 10.857 25.714t25.714 10.857h658.286q14.857 0 25.714-10.857t10.857-25.714v-438.857q0-49.143-19.143-97.429t-47.429-85.714-67.429-72.857-72.286-58.857-69.143-44.286-51.143-28.286-24.286-11.429q-6.857-3.429-14.857-3.429t-14.857 3.429q-9.143 4-24.286 11.429t-51.143 28.286-69.143 44.286-72.286 58.857-67.429 72.857-47.429 85.714-19.143 97.429zM365.714 118.286q68 36 121.714 78.286 134.286 105.143 134.286 205.714v365.714h-256v-649.714z" />
|
109 |
</font></defs></svg>
|
pub/font/loco.ttf
CHANGED
Binary file
|
pub/font/loco.woff
CHANGED
Binary file
|
pub/js/debug.js
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
tick = span[0].textContent
|
10 |
;
|
11 |
if( 1 !== tick.length || 0x2713 !== tick.charCodeAt(0) ){
|
12 |
-
loco.notices.
|
13 |
}
|
14 |
|
15 |
// show custom endpoint if set in global
|
9 |
tick = span[0].textContent
|
10 |
;
|
11 |
if( 1 !== tick.length || 0x2713 !== tick.charCodeAt(0) ){
|
12 |
+
loco.notices.warn("This page has a problem rendering UTF-8").stick();
|
13 |
}
|
14 |
|
15 |
// show custom endpoint if set in global
|
pub/js/delete.js
CHANGED
@@ -4,12 +4,10 @@
|
|
4 |
!function( window, document, $ ){
|
5 |
|
6 |
var fsHook = document.getElementById('loco-fs'),
|
7 |
-
elForm = document.getElementById('loco-del')
|
8 |
-
|
9 |
if( fsHook && elForm ){
|
10 |
-
window.locoScope.fs
|
11 |
-
.init( fsHook )
|
12 |
-
.setForm( elForm );
|
13 |
}
|
14 |
|
15 |
}( window, document, jQuery );
|
4 |
!function( window, document, $ ){
|
5 |
|
6 |
var fsHook = document.getElementById('loco-fs'),
|
7 |
+
elForm = document.getElementById('loco-del')
|
8 |
+
;
|
9 |
if( fsHook && elForm ){
|
10 |
+
window.locoScope.fs.init(fsHook).setForm(elForm);
|
|
|
|
|
11 |
}
|
12 |
|
13 |
}( window, document, jQuery );
|
pub/js/editor.js
CHANGED
@@ -8,6 +8,7 @@
|
|
8 |
|
9 |
syncParams = null,
|
10 |
saveParams = null,
|
|
|
11 |
|
12 |
// UI translation
|
13 |
translator = loco.l10n,
|
@@ -36,6 +37,13 @@
|
|
36 |
saveButton,
|
37 |
innerDiv = document.getElementById('loco-editor-inner')
|
38 |
;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
|
41 |
/**
|
@@ -104,6 +112,21 @@
|
|
104 |
}
|
105 |
|
106 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
/**
|
108 |
* Post full editor contents to "posave" endpoint
|
109 |
*/
|
@@ -114,13 +137,20 @@
|
|
114 |
// Update saved time update
|
115 |
$('#loco-po-modified').text( result.datetime||'[datetime error]' );
|
116 |
}
|
117 |
-
|
118 |
if( fsConnect ){
|
119 |
-
fsConnect.applyCreds(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
}
|
121 |
-
|
122 |
-
saveParams.data = String( messages );
|
123 |
-
loco.ajax.post( 'save', saveParams, onSuccess, callback );
|
124 |
}
|
125 |
|
126 |
|
8 |
|
9 |
syncParams = null,
|
10 |
saveParams = null,
|
11 |
+
ajaxUpload = conf.multipart,
|
12 |
|
13 |
// UI translation
|
14 |
translator = loco.l10n,
|
37 |
saveButton,
|
38 |
innerDiv = document.getElementById('loco-editor-inner')
|
39 |
;
|
40 |
+
|
41 |
+
|
42 |
+
// warn if ajax uploads are enabled but not supported
|
43 |
+
if( ajaxUpload && ! ( window.FormData && window.Blob ) ){
|
44 |
+
ajaxUpload = false;
|
45 |
+
loco.notices.warn("Your browser doesn't support ajax file uploads. Falling back to standard postdata");
|
46 |
+
}
|
47 |
|
48 |
|
49 |
/**
|
112 |
}
|
113 |
|
114 |
|
115 |
+
/**
|
116 |
+
* @param params {Object}
|
117 |
+
* @return FormData
|
118 |
+
*/
|
119 |
+
function initMultiPart( params ){
|
120 |
+
var p, data = new FormData;
|
121 |
+
for( p in params ){
|
122 |
+
if( params.hasOwnProperty(p) ) {
|
123 |
+
data.append(p, params[p]);
|
124 |
+
}
|
125 |
+
}
|
126 |
+
return data;
|
127 |
+
}
|
128 |
+
|
129 |
+
|
130 |
/**
|
131 |
* Post full editor contents to "posave" endpoint
|
132 |
*/
|
137 |
// Update saved time update
|
138 |
$('#loco-po-modified').text( result.datetime||'[datetime error]' );
|
139 |
}
|
140 |
+
var postData = $.extend( {locale:String(messages.locale()||'')}, saveParams||{} );
|
141 |
if( fsConnect ){
|
142 |
+
fsConnect.applyCreds(postData);
|
143 |
+
}
|
144 |
+
// submit PO as concrete file if configured
|
145 |
+
if( ajaxUpload ){
|
146 |
+
var fname = String(postData.path).split('/').pop() || 'untitled.po';
|
147 |
+
postData = initMultiPart(postData);
|
148 |
+
postData.append('po', new Blob([String(messages)],{type:'application/x-gettext'}), fname );
|
149 |
+
}
|
150 |
+
else {
|
151 |
+
postData.data = String(messages);
|
152 |
}
|
153 |
+
loco.ajax.post( 'save', postData, onSuccess, callback );
|
|
|
|
|
154 |
}
|
155 |
|
156 |
|
pub/js/min/admin.js
CHANGED
@@ -1,47 +1,47 @@
|
|
1 |
-
(function(
|
2 |
-
""}b=p(b);var a={};return{_:function(a){return
|
3 |
-
b!=b?b=0:0!=b&&Infinity!=b&&-Infinity!=b&&(b=(0<b||-1)*Math.floor(Math.abs(b))));if(b>=a)return-1;for(b=0<=b?b:Math.max(a-Math.abs(b),0);b<a;b++)if(b in
|
4 |
-
n)return"%";
|
5 |
-
if(a){var n=e.shift();a[n].apply(a,e)}else
|
6 |
-
b,
|
7 |
-
|
8 |
-
l.require("$48","title.js").get()};b.location=location.protocol+"//"+location.hostname+b.page;
|
9 |
-
"/help"===location.pathname.substr(0,5);
|
10 |
-
"_blank");p(e,"external")}break}return
|
11 |
-
String(y-a)+"px"}function a(a){a?(m.show(),k.addClass("has-title")):(m.hide(),k.removeClass("has-title"))}var e,n,k,g,m,
|
12 |
-
e.append(n.append(k)).append(g).prependTo(l.body);h(l).on("keydown",p);h(f).resize(b);
|
13 |
-
k.css("width",a+"px")}return
|
14 |
-
return
|
15 |
-
function(){
|
16 |
-
function(a){F().off("overlayClosed",a);return
|
17 |
-
h(l.body).on("overlayOpened overlayClosing",function(a){
|
18 |
-
this.options.gravity.call(this.$element[0]):this.options.gravity,m;switch(g.charAt(0)){case "n":m={top:a.top+a.height+this.options.offset,left:a.left+a.width/2-b/2};break;case "s":m={top:a.top-
|
19 |
g);e.find(".tipsy-arrow")[0].className="tipsy-arrow tipsy-arrow-"+g.charAt(0);this.options.className&&e.addClass("function"==typeof this.options.className?this.options.className.call(this.$element[0]):this.options.className);e.addClass("in")}},hide:function(){this.tip().remove()},fixTitle:function(){var a=this.$element,e=a.attr("title")||"";(e||"string"!==typeof a.attr("original-title"))&&a.attr("original-title",e).removeAttr("title")},getTitle:function(){var a,e=this.$element,b=this.options;this.fixTitle();
|
20 |
"string"==typeof b.title?a=e.attr("title"==b.title?"original-title":b.title):"function"==typeof b.title&&(a=b.title.call(e[0]));return(a=(""+a).replace(/(^\s*|\s*$)/,""))||b.fallback},setTitle:function(a){var e=this.$element;e.attr("default-title")||e.attr("default-title",this.getTitle());null==a&&(a=e.attr("default-title")||this.getTitle());e.attr("original-title",a);if(this.$tip)this.$tip.find(".tipsy-inner")[this.options.html?"html":"text"](a)},tip:function(){this.$tip||(this.$tip=h('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'),
|
21 |
-
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(a){function e(e){var
|
22 |
-
(g.fixTitle(),setTimeout(function(){"in"==g.hoverState&&g.show()},
|
23 |
-
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(a,
|
24 |
-
|
25 |
-
(g&&clearTimeout(g),a(b),m?g=setTimeout(e,m):e())}var k,g;
|
26 |
-
b)return k;g&&clearTimeout(g);
|
27 |
-
l.body.appendChild(
|
28 |
-
|
29 |
-
m),b.call(f,a),!1}};
|
30 |
-
(e=a.modal)&&l.require("$32","modal.js").replace(e);(e=a.async)&&b(e.job_id,e.title)}function b(a,b){var
|
31 |
-
{401:"Authorization Required",422:"Invalid data sent to server",404:"Not Found",500:"Server Error",502:"Bad Gateway",503:"Service unavailable",504:"Gateway timeout"};
|
32 |
-
return k};
|
33 |
-
else{if("parsererror"===
|
34 |
-
typeof a)return m(
|
35 |
-
(a=g+" seconds");a="Job timeout after "+a;n();e();b("error",[a])}function a(a,
|
36 |
-
|
37 |
-
b){var
|
38 |
-
m.enableNav(
|
39 |
-
|
40 |
-
a.type,
|
41 |
-
k.title("Loading ..").disableClose().disableNav();k.think();var k=g.split("#"),
|
42 |
-
b="Error",
|
43 |
-
!0};
|
44 |
-
|
45 |
"\u0227":"a","\u01e1":"a","\u0105":"a","\u0101":"a","\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",
|
46 |
"\u1ec5":"e","\u1ec3":"e","\u011b":"e","\u00eb":"e","\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",
|
47 |
"\u1e96":"h","\u00ed":"i","\u00ec":"i","\u012d":"i","\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",
|
@@ -53,185 +53,189 @@ d.script=function(a,b){if(b){if("function"!==typeof b.run)throw Error(a+" macro
|
|
53 |
"\u1f90":"\u03b7","\u1f21":"\u03b7","\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",
|
54 |
"\u1fd0":"\u03b9","\u1fd6":"\u03b9","\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",
|
55 |
"\u1f7b":"\u03c5","\u1f7a":"\u03c5","\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",
|
56 |
-
"\u1ff4":"\u03c9","\u1f7c":"\u03c9","\u1ff2":"\u03c9","\u1ff6":"\u03c9","\u1ff7":"\u03c9","\u1ff3":"\u03c9","\u0491":"\u0433","\u0450":"\u0435","\u0451":"\u0435","\u04c2":"\u0436","\u045d":"\u0438","\u04e3":"\u0438","\u04ef":"\u0443"});l.register("$7",function(
|
57 |
-
|
58 |
-
|
59 |
-
return this}}};return
|
60 |
-
b+"px").css("minWidth",a+"px");
|
61 |
-
(
|
62 |
-
{label:"Error"},
|
63 |
-
"off");
|
64 |
-
|
65 |
-
url:this.url+encodeURIComponent(b)};l.require("$22","http.js").ajax(e,function(e){var g=e&&e.results;g&&(a&&e.query&&e.query===b&&a(e.results),g.length||(
|
66 |
-
a.selectIndex(b,!0);return!1}).mouseover(function(){h(this).addClass("over");a.hover=b;return!0}).mouseout(function(){h(this).removeClass("over");a.hover=-1;return!0});return e}function
|
67 |
-
"icon no-icon";++
|
68 |
-
|
69 |
-
new e};var n,k=e.prototype;k.enable=function(){var a=this;a.bound?a.wrapper.removeClass("disabled"):(a.handle.click(function(a){a.preventDefault();return!1}).mouseover(function(b){return a.onRollover(b)}).mouseout(function(b){return a.onRollout(b)}).mousedown(function(b){return a.onPress(b)}).keydown(function(b){return a.onKeydown(b)}),h(
|
70 |
-
k.isDisabled=function(){return this.wrapper.hasClass("disabled")};k.onRollover=function(){return this.over=!0};k.onRollout=function(){this.over=!1;return!0};k.onPress=function(a){return this.active?this.over?(this.close(),a.stopPropagation(),a.preventDefault(),!1):!0:(this.open(),a.stopPropagation(),a.preventDefault(),this.handle.focus(),!1)};k.onRelease=function(){this.active&&!this.over&&this.close();return!0};k.onGlobalKeydown=
|
71 |
-
p(a);case 40:return this.hoverNext(1),p(a);case 38:return this.hoverNext(-1),p(a);case 13:if(-1!=this.hover)return this.selectIndex(this.hover,!0),this.hoverItem(-1),this.close(),p(a)}return!0};k.onKeydown=function(a){return this.active||40!==a.keyCode?!0:(this.open(),p(a))};k.resize=function(){var a=this.list,b=this.handle,e=b.outerWidth()||0,
|
72 |
-
|
73 |
-
this.hover=-1);a.removeClass("active");b&&b.enable();
|
74 |
-
function(a){this.confirm=a;return this};k.clearOptions=function(){this.index={};this.length=0;this.options=[];this.list.html("");this.hidden.val("");this.idx=this.hover=-1;return this};k.destroy=function(){this.clearOptions();this.hidden.remove()};k.addOption=function(a,e,c,
|
75 |
-
a)&&(n=a);n&&k.attr("lang",n);
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
this.
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
h(
|
90 |
-
|
91 |
-
"
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
a.
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
function
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
(
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
p
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
124 |
{token:"locked",regex:/<(?:xliff:)?(bx|ex|x)[^\/>]*\/>/},{token:"constant.language",regex:/<\/?[:a-z]+[^>]*>/}]},e=n(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]*[^{}]+)?)?}"},
|
125 |
{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]+",
|
126 |
next:"icuType"},{defaultToken:"icu",next:"icuType"}],icuType:[{token:"icu",regex:/[{}]/,next:"start"},{defaultToken:"icu"}]}:e&&b.start.push({token:"printf",regex:e});this.$rules=b}}function n(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%]/;
|
127 |
-
case "javascript":return/%(?:[1-9]\d*\$)?\+?(?:0|'[^$])?-?\d*(?:\.\d+)?[b-gijostTuvxX%]/;case "auto":return/%(?:\d+\$)?(?:[-+0]?\d*(\.\d+)?[duxoefgaDUXOEFGA]|[@scSC%])/;case g:return k||"%%"}}var k,g="auto";
|
128 |
-
var
|
129 |
-
enable:function(a){
|
130 |
-
|
131 |
-
a;a._getContent=a.getContent;a.getContent=function(a){a=this._getContent(a);a=a.replace(/(<\/?)loco:script/ig,"$1script");if(!s&&"<p>"===a.substr(0,3)&&"</p>"===a.substr(-4)){var b=a.substr(3,a.length-7);if(b===
|
132 |
-
|
133 |
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",entities:"38,amp,60,lt,62,gt,160,nbsp",entity_encoding:"named",keep_styles:!1,init_instance_callback:g})});
|
134 |
-
return{val:function(a){a=k(a);null==m?(e.value=a,h(
|
135 |
-
return this}}};return
|
136 |
-
return{val:function(b){
|
137 |
-
this.p;a&&(a.kill(),this.p=null);this.e=null};TextAreaPrototype.reload=function(a,b){var
|
138 |
-
TextAreaPrototype.focus=function(){var a=this.p;a?a.focus():h(this.e).focus()};TextAreaPrototype.focused=function(){return
|
139 |
-
a&&a.enable&&a.enable(this.l);return this};TextAreaPrototype.disable=function(){var a=this.p;this.e.setAttribute("readonly",!0);this.unlisten();a&&a.disable&&a.disable();return this};TextAreaPrototype.listen=function(){var a=this.l;a&&a.kill();this.l=p(this.e);return this};TextAreaPrototype.unlisten=function(){var a=this.l;a&&(a.kill(),this.l=null);return this};TextAreaPrototype.setInvs=function(a,b){var
|
140 |
-
a&&(this._i=l.require("$50","mirror.js").init(this.e)),this.i=a;return this};TextAreaPrototype.getInvs=function(){return this.i||!1};TextAreaPrototype.setMode=function(a){var b=this.p,
|
141 |
-
return this};TextAreaPrototype.name=function(a){this.e.setAttribute("name",a);return this};TextAreaPrototype.placeholder=function(a){this.e.setAttribute("placeholder",a);return this};TextAreaPrototype.redraw=function(){var a=this.p;a&&a.resize&&a.resize()};TextAreaPrototype=null;return
|
142 |
-
return this}}function a(a){return function(b){for(var
|
143 |
-
b,
|
144 |
-
s.init=function(
|
145 |
-
this.rows=
|
146 |
-
s.render=function(){for(var a,b,
|
147 |
-
a.page?this.select(
|
148 |
-
0,b=-1,
|
149 |
-
s.tr=function(a){return(a=this.row(a))?a.cells():[]};s.row=function(a){return this.rows[a]};s.td=function(a,b){return this.tr(a)[b]};s.next=function(a,b,
|
150 |
-
s.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};s.selectRow=function(a,b){return this.select(this.idxs[a])};s.select=function(a,b){var
|
151 |
-
|
152 |
-
[],g=e.length;++
|
153 |
-
m.prototype;s.has=function(a){return null!=this[a]};s.add=function(a){var b=this,
|
154 |
-
|
155 |
-
|
156 |
-
function(){return(this.rendered?this.live:this.dead).offsetTop};s.height=function(){var a=this.h;null==a&&(this.h=a=this.rendered?this.live.firstChild.offsetHeight:this.dead.offsetHight);a||p("row has zero height");return a};s.render=function(a){for(var b,
|
157 |
-
this.height(),b=this.live,
|
158 |
-
s=null;return
|
159 |
-
|
160 |
-
a.className;this.id=b;this.el=a;this.pos=this.index=0;this.css=[
|
161 |
-
f.indexOf=function(a){return(a=s[a.id||String(a)])&&a.pid===this.id?a.index:-1};f.on=function(){return this.$("on",arguments)};f.off=function(){return this.$("off",arguments)};f.find=function(a){return h(this.el).find(a)};f.$=function(a,b){h.fn[a].apply(h(this.el),b);return this};f.addClass=function(a){this.css.push(a);return this};f.removeClass=function(a){a=this.css.indexOf(a);-1!==a&&this.css.splice(a,1);return this};f.parent=function(){return this.pid&&s[this.pid]};f.splitx=function(){return this._split(
|
162 |
-
arguments)};f.splity=function(){return this._split(2,arguments)};f._split=function(a,b){(this.length||this.field)&&this.clear();for(var
|
163 |
-
null;a.className=this._cn||"";h(a).off();return this};f.exists=function(){return this===s[this.id]};f.clear=function(){for(var a=this.el,b=this.cells,
|
164 |
-
function(a,b){if(!b&&(b=this.cells[1],!b))return;var
|
165 |
-
1;b<
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
for(;++d
|
170 |
-
b)):g.init(h(a).insertBefore(b));return this};f.header=function(a,b){if(null==a&&null==b)return this.el.getElementsByTagName("header")[0];this.t=g.txt(a||"");this.el.insertBefore(g.el("header",b),this.body).appendChild(this.t);this.redraw();return this};f.title=function(a){var b=this.t;if(b)return b.nodeValue=a||"",b;this.header(a);return this.t};f.titled=function(){var a=this.t;return a&&a.nodeValue};f.bodyY=function(){return m(this.body,this.el)};f.scrollY=function(a){if(
|
171 |
-
this.body.scrollTop=a};f.tabulate=function(a){var b=this.table;b?b.clear():b=l.require("$47","wgtable.js").create(this);b.init(a);return this.table=b};f.lock=function(){this.body.className+=" locked";return this};f.scrollTo=function(a,b){var c
|
172 |
-
|
173 |
-
h(a.el).hide()});
|
174 |
-
|
175 |
-
b.replace("src=","x=");return a.textContent}}(),u=
|
176 |
-
a._x("Single","Editor")+":";b[m]=a._x("Plural","Editor")+":";b[6]=a._x("Untranslated","Editor");b[7]=a._x("Translated","Editor");b[8]=a._x("Fuzzy","Editor");this.labels=b;this.t=a;return this};u.setRootCell=function(a){function b(a){
|
177 |
-
u.setListCell=function(a){var b=this;b.listCell=a;a.on("wgRowSelect",function(a,
|
178 |
function(a){var b=this.active;if("undefined"===typeof a)return b;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&&
|
179 |
-
this.contextCell&&this.contextCell.editable()};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,
|
180 |
-
if(a){if(g===a)return e||0;if(g&&!e&&0===a.indexOf(g))return 0;
|
181 |
-
this.listTable.tr(b)){var
|
182 |
-
return this};u.getSorter=function(){return null};u.reload=function(){var a=this,b,
|
183 |
-
|
184 |
-
(b=this.contextCell)&&b.eachTextarea(function(b){b.val(a.context())});if(b=this.targetCell)
|
185 |
-
u.setNotes=function(a,b){var
|
186 |
-
this.$errs=
|
187 |
-
e&&e.plurals||["One","Other"],
|
188 |
-
u.unsave(c
|
189 |
-
for(
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
b=this.t,
|
194 |
-
[null])};u.updateListCell=function(a,b){var
|
195 |
-
d
|
196 |
-
|
197 |
-
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();a&&a.focus();return this};u=null;return
|
198 |
-
function(
|
199 |
-
while("0"===
|
200 |
-
a=a[1].header("Loading..");b.distribute([0.34]);f.distribute([0.8]);
|
201 |
-
(a=h.createElement("p"),a.appendChild(h.createElement("mark")).innerText=f,a.appendChild(h.createTextNode("\u00a0"+
|
202 |
-
this.targetCell,delete this.targetCell,this.fire("poLock",[!1]),this.active&&this.loadMessage(this.active))};f.lock=function(){var b;this._unlocked&&(b=this.targetLocale=this._unlocked,delete this._unlocked,this.po&&this.po.lock(b),this.editable={source:!1,context:!1,target:!0},this.targetCell=this.contextCell,delete this.contextCell,this.fire("poLock",[!0,b]),this.active&&this.loadMessage(this.active))};f.locked=function(){return!this._unlocked};f.getSorter=function(){function b(a,b){var
|
203 |
-
g=b.weight();return
|
204 |
-
85:function(a,b){b.focus().fuzzy(!b.fuzzy())},13:function(a,b){b.getFirstEditable()&&b.next(1,!0,!0)},40:function(a,b){var
|
205 |
-
|
206 |
-
|
207 |
-
1)};f.cut=function(b,
|
208 |
-
l.register("$27",function(
|
209 |
-
79;0<b&&(a=l(b-3," "),
|
210 |
-
b}}};return
|
211 |
function(b){return this.rows[b]};f.lock=function(b){return this.locale(b||{lang:"zxx",label:"Unknown",nplurals:1,pluraleq:"n!=1"})};f.unlock=function(){var b=this.loc;this.loc=null;return b};f.locale=function(b){null==b?b=this.loc:this.loc=b=l.require("$38","locale.js").cast(b);return b};f.each=function(b){this.rows.each(b);return this};f.indexOf=function(b){"object"!==typeof b&&(b=this.get(b));if(!b)return-1;null==b.idx&&(b.idx=this.rows.indexOf(b.hash()));return b.idx};f.get=function(b){return this.rows&&
|
212 |
-
this.rows.get(b)};f.del=function(b){b=this.indexOf(b);if(-1!==b){var
|
213 |
-
|
214 |
-
return!1};f.flags=function(){for(var b,
|
215 |
-
1]=b||"";return this};f.sourceForms=function(){return this.srcF};f.targetForms=function(){return this.msgF};f.each=function(b){for(var
|
216 |
-
for(b=0;b<a;b++)
|
217 |
b)return this.xcmt;this.xcmt=b||"";return this};f.refs=function(b){if(null==b)return this.ref;this.ref=b||"";return this};f.format=function(b){if(null==b)return this.fmt;this.fmt=b;return this};f.context=function(b){if(null==b)return this.ctx||"";this.ctx=b||"";return this};f.toString=f.toText=function(){return this.src.concat(this.msg,[this.id,this.ctx]).join(" ")};f.weight=function(){var b=0;this.translation()||(b+=2);this.fuzzy()&&(b+=1);return b};f.equals=function(b){return this===b||this.hash()===
|
218 |
-
b.hash()};f.hash=function(){return this.id};f.normalize=function(){for(var b=this.msg.length;0!==b--;)this.msg[b]=this.src[b]||""};f.disabled=function(b){return!!(this.lck||[])[b||0]};f.disable=function(b){(this.lck||(this.lck=[]))[b||0]=!0;return this};f.saved=function(b){var
|
219 |
-
|
220 |
-
function b(a,b){var
|
221 |
-
String(b);
|
222 |
-
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"]="YEAR-MO-DA HO:MI+ZONE",b="POT-Creation-Date");a[b]||(a[b]=
|
223 |
-
var
|
224 |
-
0===
|
225 |
-
l.push(
|
226 |
-
|
227 |
-
f+"-format");(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(
|
228 |
-
h=h=null;return
|
229 |
-
J.dialog("close"),
|
230 |
-
|
231 |
-
g.find('input[type="submit"]').addClass("button-primary");
|
232 |
-
(
|
233 |
-
|
234 |
-
|
235 |
-
b){var c,f,g,h=[],k={_:a,$:b},l=b.getElementsByTagName("td");for(f in e){c=l[f];(g=c.textContent.replace(/(^\s+|\s+$)/g,""))&&h.push(g);c.hasAttribute("data-sort-value")&&(g=c.getAttribute("data-sort-value"));
|
236 |
-
|
237 |
-
|
|
1 |
+
(function(v,z,h,S){var l=function(){var c={};return{register:function(f,h){c[f]=h},require:function(f,h){var p=c[f];if(!p)throw Error('CommonJS error: failed to require("'+h+'")');return p}}}();l.register("$1",function(c,f,h){function p(b){var d=typeof b;if("string"===d)if(/[^ <>!=()%^&|?:n0-9]/.test(b))console.error("Invalid plural: "+b);else return new Function("n","return "+b);"function"!==d&&(b=function(a){return 1!=a});return b}c.init=function(b){function d(e,b,d){return(e=a[e])&&e[d]?e[d]:b||
|
2 |
+
""}b=p(b);var a={};return{_:function(a){return d(a,a,0)},_x:function(a,b){return d(b+"\u0004"+a,a,0)},_n:function(a,n,k){k=Number(b(k));isNaN(k)&&(k=0);return d(a,k?n:a,k)},load:function(e){a=e||{};return this},pluraleq:function(a){b=p(a);return this}}};return c}({},v,z));l.register("$2",function(c,f,h){Array.prototype.indexOf||(Array.prototype.indexOf=function(c){if(null==this)throw new TypeError;var b,d=Object(this),a=d.length>>>0;if(0===a)return-1;b=0;1<arguments.length&&(b=Number(arguments[1]),
|
3 |
+
b!=b?b=0:0!=b&&Infinity!=b&&-Infinity!=b&&(b=(0<b||-1)*Math.floor(Math.abs(b))));if(b>=a)return-1;for(b=0<=b?b:Math.max(a-Math.abs(b),0);b<a;b++)if(b in d&&d[b]===c)return b;return-1});return c}({},v,z));l.register("$3",function(c,f,h){c.trim=function(c,b){for(b||(b=" \n");c&&-1!==b.indexOf(c.substr(0,1));)c=c.substr(1);for(;c&&-1!==b.indexOf(c.substr(-1));)c=c.substr(0,c.length-1);return c};c.sprintf=function(c){var b=0,d,a=[].slice.call(arguments,1);return c.replace(/%(s|u|%)/g,function(e,n){if("%"===
|
4 |
+
n)return"%";d=a[b++];return String(d)||""})};return c}({},v,z));l.register("$48",function(c,f,h){function p(){var b=a;e&&(b="("+e+") "+b);h.title=b}function b(e){e||(e=d);e!==a&&(a=e,p())}var d=h.title,a=d,e=0;c.set=function(a){b(a);return c};c.get=function(){return a};c.replace=function(e,d){b(a.replace(e,d));return c};c.badge=function(a){isNaN(a=Number(a))&&(a=0);a!==e&&(e=a,p());return c};return c}({},v,z));l.register("$42",function(c,f,h){function p(e){a||f._gat&&(a=_gat._createTracker(b,"loco"));
|
5 |
+
if(a){var n=e.shift();a[n].apply(a,e)}else d&&d.push(e);return c}var b,d,a;c._init=function(a){if(b=a.code){d=f._gaq||(f._gaq=[]);d.push(["_setAccount",b]);d.push(["_gat._anonymizeIp"]);d.push(["_setDomainName",a.host]);d.push(["_trackPageview"]);a=h.createElement("script");a.type="text/javascript";a.async=!0;a.src=("https:"==h.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js";var n=h.getElementsByTagName("script")[0];n.parentNode.insertBefore(a,n)}return c};c.event=function(a,
|
6 |
+
b,d,g){return p(["_trackEvent",a||"",b||"",d||"",g||0])};c.page=function(a,b){var d={page:a||location.pathname+location.hash,title:b||l.require("$48","title.js").get()};return p(["_trackPageview",d])};return c}({},v,z));l.register("$43",function(c,f,h){function p(a,e){if(b)b[a](e);else f.ga&&ga(a,e);return c}var b,d;c._init=function(a){a.code&&(function(a,b,d,g,m,A,c){a.GoogleAnalyticsObject=m;a[m]=a[m]||function(){(a[m].q=a[m].q||[]).push(arguments)};a[m].l=1*new Date;A=b.createElement(d);c=b.getElementsByTagName(d)[0];
|
7 |
+
A.async=1;A.src=g;c.parentNode.insertBefore(A,c)}(f,h,"script","//www.google-analytics.com/analytics.js","ga"),ga("create",a.code,{alwaysSendReferrer:!0,userId:a.uid}),ga("set","anonymizeIp",!0),a.custom&&p("set",a.custom),c.page(),ga(function(a){b=a}));return c};c.event=function(a,e,b,d){return p("send",{hitType:"event",eventCategory:a||"",eventAction:e||"",eventLabel:b||"",eventValue:Number(d||0)})};c.page=function(a,e){var b={hitType:"pageview",page:a||location.pathname+location.hash,title:e||
|
8 |
+
l.require("$48","title.js").get()};b.location=location.protocol+"//"+location.hostname+b.page;d&&p("set",{referrer:d});d=b.location;return p("send",b)};c.reset=function(){d=location.href;var a={page:location.pathname+location.hash,title:l.require("$48","title.js").get(),location:d};p("set",a);return c};return c}({},v,z));l.register("$31",function(c,f,D){function p(a,d){h(a).click(function(a){b&&b.event(d,"click",this.getAttribute("href")||"");return!0});a=null;return c}var b,d=location.hostname,a=
|
9 |
+
"/help"===location.pathname.substr(0,5);c.init=function(a){!b&&a&&(d=a.host||(a.host=d),b=a.legacy?l.require("$42","legacy.js"):l.require("$43","universal.js"),b._init(a));return c};c.link=function(e){for(var b=e.getAttribute("href");b&&"#"!==b;){if(0===b.indexOf("#"))return p(e,"anchor");if("/help"===b.substr(0,5)&&!a)e.setAttribute("target","_blank");else if(0===b.indexOf("http")||0===b.indexOf("//")){if(-1!==b.indexOf(d)&&/^(https?:)*\/\/([^\/]+)/.exec(b)&&d===RegExp.$2)break;e.setAttribute("target",
|
10 |
+
"_blank");p(e,"external")}break}return c};c.page=function(){b&&b.page.apply(b,arguments);return c};c.event=function(){b&&b.event.apply(b,arguments);return c};c.reset=function(){b&&b.reset&&b.reset();return c};return c}({},v,z));l.register("$36",function(c,f,l){function p(a){return 27===a.keyCode&&r&&w?(I(),a.preventDefault(),!1):!0}function b(){if(r){var a=f.innerWidth,e=f.innerHeight;a!==H&&(H=a,K(u));e!==y&&(y=e,s&&d())}return!0}function d(){var a=n.outerHeight(!0)-s.clientHeight;s.style.maxHeight=
|
11 |
+
String(y-a)+"px"}function a(a){a?(m.show(),k.addClass("has-title")):(m.hide(),k.removeClass("has-title"))}var e,n,k,g,m,A,B,s,r=!1,w=!1,q=!1,C,E,H,u,y,F=c.init=function(){if(!e){e=h('<div id="overlay"></div>');n=h('<div class="overlay-frame"></div>');k=h('<div class="overlay-container"></div>');m=h('<div class="overlay-title"><span class="icon"></span><span class="title">Untitled</span></div>');A=h("<nav></nav>");B=h('<a class="overlay-close" href="#"><span>x</span></a>');g=h('<div class="overlay-bg"></div>');
|
12 |
+
e.append(n.append(k)).append(g).prependTo(l.body);h(l).on("keydown",p);h(f).resize(b);H=f.innerWidth;y=f.innerHeight;E=k.outerWidth(!0)-k.width()+(n.innerWidth()-n.width());C=parseInt(k.css("width"));if(!C||isNaN(C))C=k.width();A.hide().prependTo(n);m.append(B.hide()).hide().prependTo(n);e.hide()}return e},K=c.width=function(a){var e=F();if(null===a)n.css("width",""),k.css("width","");else{a=a||C||640;x=a+E;u=a;var g=H;x>g?(x=g,a=x-E,e.addClass("spill")):e.removeClass("spill");n.css("width",x+"px");
|
13 |
+
k.css("width",a+"px")}return c};c.autoSize=function(){var a=F(),e=C||0;k.children().each(function(a,g){e=Math.max(e,h(g).outerWidth(!0))});K(e);if(s=a.find("div.overlay-scroll")[0])y=f.innerHeight,d();return c};c.css=function(a){F().attr("class",a);return c};c.think=function(){F().addClass("loading");return c};c.unthink=function(){F().removeClass("loading");return c};c.html=function(a){F();f.innerShiv&&(a=innerShiv(a,!1));return k.html(a)};c.append=function(a){F();a instanceof jQuery||(a=h(a));k.append(a);
|
14 |
+
return c};var I=c.close=function(a){if(r){var g=function(){F().hide();h(l.body).removeClass("has-overlay");r=!1;k.html("");r=null;e.trigger("overlayClosed",[c])};null==a&&(a=300);e.trigger("overlayClosing",[c]);a?e.fadeOut(a,g):g()}return c};c.title=function(e,g){F();var b="",d=m.find("span");g&&/^lang lang-(\w+)/.exec(g)&&(b=RegExp.$1);d.eq(0).attr("class",g||"no-icon").attr("lang",b);q=e||"";d.eq(1).text(q);null!=e?a(!0):w||a(!1);return c};c.enableClose=function(){F();w=!0;B.off("click").on("click",
|
15 |
+
function(){I();return!1});a(!0);B.show();return c};c.disableClose=function(){F();w=!1;B.hide();r&&q||a(!1);return c};c.enableNav=function(a){A.append(a);A.show();return c};c.disableNav=function(){A.html("").hide();return c};c.open=function(){F();k.html("");K(C);e.attr("class","");h(l.body).addClass("has-overlay");F().show();r||(r=!0,b());c.title(null);w&&a(!0);e.trigger("overlayOpened",[c]);return c};c.active=function(){return r};c.listen=function(a){F().on("overlayClosed",a);return c};c.unlisten=
|
16 |
+
function(a){F().off("overlayClosed",a);return c};return c}({},v,z));l.register("$11",function(c,f,l){function p(a,e){this.$element=h(a);this.options=e;this.enabled=!0;this.fixTitle()}c.init=function(a,e){var n={fade:!0,offset:5,delayIn:b,delayOut:d,anchor:a.attr("data-anchor"),gravity:a.attr("data-gravity")||"s"};e&&(n=h.extend({},n,e));a.tipsy(n)};c.delays=function(a,e){b=a||150;d=e||100};c.kill=function(){h("div.tipsy").remove()};c.text=function(a,e){e.data("tipsy").setTitle(a)};var b,d;c.delays();
|
17 |
+
h(l.body).on("overlayOpened overlayClosing",function(a){c.kill();return!0});p.prototype={show:function(){var a=this.getTitle();if(a&&this.enabled){var e=this.tip();e.find(".tipsy-inner")[this.options.html?"html":"text"](a);e[0].className="tipsy";e.remove().css({top:0,left:0}).prependTo(l.body);var a=(a=this.options.anchor)?this.$element.find(a):this.$element,a=h.extend({},a.offset(),{width:a[0].offsetWidth,height:a[0].offsetHeight}),b=e[0].offsetWidth,d=e[0].offsetHeight,g="function"==typeof this.options.gravity?
|
18 |
+
this.options.gravity.call(this.$element[0]):this.options.gravity,m;switch(g.charAt(0)){case "n":m={top:a.top+a.height+this.options.offset,left:a.left+a.width/2-b/2};break;case "s":m={top:a.top-d-this.options.offset,left:a.left+a.width/2-b/2};break;case "e":m={top:a.top+a.height/2-d/2,left:a.left-b-this.options.offset};break;case "w":m={top:a.top+a.height/2-d/2,left:a.left+a.width+this.options.offset}}2==g.length&&("w"==g.charAt(1)?m.left=a.left+a.width/2-15:m.left=a.left+a.width/2-b+15);e.css(m).addClass("tipsy-"+
|
19 |
g);e.find(".tipsy-arrow")[0].className="tipsy-arrow tipsy-arrow-"+g.charAt(0);this.options.className&&e.addClass("function"==typeof this.options.className?this.options.className.call(this.$element[0]):this.options.className);e.addClass("in")}},hide:function(){this.tip().remove()},fixTitle:function(){var a=this.$element,e=a.attr("title")||"";(e||"string"!==typeof a.attr("original-title"))&&a.attr("original-title",e).removeAttr("title")},getTitle:function(){var a,e=this.$element,b=this.options;this.fixTitle();
|
20 |
"string"==typeof b.title?a=e.attr("title"==b.title?"original-title":b.title):"function"==typeof b.title&&(a=b.title.call(e[0]));return(a=(""+a).replace(/(^\s*|\s*$)/,""))||b.fallback},setTitle:function(a){var e=this.$element;e.attr("default-title")||e.attr("default-title",this.getTitle());null==a&&(a=e.attr("default-title")||this.getTitle());e.attr("original-title",a);if(this.$tip)this.$tip.find(".tipsy-inner")[this.options.html?"html":"text"](a)},tip:function(){this.$tip||(this.$tip=h('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'),
|
21 |
+
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(a){function e(e){var g=h.data(e,"tipsy");g||(g=new p(e,h.fn.tipsy.elementOptions(e,a)),h.data(e,"tipsy",g));return g}function b(){var g=e(this),d=a.delayIn;g.hoverState="in";0==d?g.show():
|
22 |
+
(g.fixTitle(),setTimeout(function(){"in"==g.hoverState&&g.show()},d))}function d(){var g=e(this),b=a.delayOut;g.hoverState="out";0==b?g.hide():(g.tip().removeClass("in"),setTimeout(function(){"out"==g.hoverState&&g.hide()},b))}a=h.extend({},h.fn.tipsy.defaults,a);a.live||this.each(function(){e(this)});if("manual"!=a.trigger){var g=a.live?"live":"bind",m="hover"==a.trigger?"mouseleave":"blur";this[g]("hover"==a.trigger?"mouseenter":"focus",b)[g](m,d)}return this};h.fn.tipsy.defaults={className:null,
|
23 |
+
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(a,e){return h.metadata?h.extend({},e,h(a).metadata()):e};h.fn.tipsy.autoNS=function(){return h(this).offset().top>h(l).scrollTop()+h(f).height()/2?"s":"n"};h.fn.tipsy.autoWE=function(){return h(this).offset().left>h(l).scrollLeft()+h(f).width()/2?"e":"w"};h.fn.tipsy.autoBounds=function(a,e){return function(){var b=e[0],d=1<e.length?
|
24 |
+
e[1]:!1,g=h(l).scrollTop()+a,m=h(l).scrollLeft()+a,A=h(this);A.offset().top<g&&(b="n");A.offset().left<m&&(d="w");h(f).width()+h(l).scrollLeft()-A.offset().left<a&&(d="e");h(f).height()+h(l).scrollTop()-A.offset().top<a&&(b="s");return b+(d?d:"")}};return c}({},v,z));l.register("$8",function(c,f,l){c.listen=function(c,b){function d(){s[k?"show":"hide"]()}function a(a){B&&c.setAttribute("size",2+a.length);k=a;d();return a}function e(){g=null;b(k)}function n(){var b=c.value;A&&b===A&&(b="");b!==k&&
|
25 |
+
(g&&clearTimeout(g),a(b),m?g=setTimeout(e,m):e())}var k,g;c=c instanceof jQuery?c[0]:c;var m=150,A=f.attachEvent&&c.getAttribute("placeholder"),B=1===Number(c.size),s=h('<a href="#clear" tabindex="-1" class="icon clear"><span>clear</span></a>').click(function(){c.value="";n();return!1});a(c.value);h(c).on("input blur focus",function(){n();return!0}).after(s);d();return{delay:function(a){m=a},ping:function(b){b?(g&&clearTimeout(g),b=c.value,A&&b===A&&(b=""),a(b),e(),b=void 0):b=n();return b},val:function(b){if(null==
|
26 |
+
b)return k;g&&clearTimeout(g);c.value=a(b);d()},el:function(){return c},blur:function(a){return h(c).on("blur",a)}}};return c}({},v,z));l.register("$35",function(c,f,l){function p(a,b,n,c,g){function m(){s&&clearTimeout(s);r&&r.fadeOut(400,function(){h(this).remove();r=null});return!1}function A(){B();-1!==c&&(s=setTimeout(m,c||2E3));r.off("mouseleave").on("mouseenter",B)}function B(){s&&clearTimeout(s);s=null;r.off("mouseenter").on("mouseleave",A)}var s;d||(d=l.createElement("div"),d.id="growls",
|
27 |
+
l.body.appendChild(d));var r=h('<div class="growl growl-'+n+'"><div><a class="close" href="#"><span>X</span></a><span class="badge"></span><p class="message"></p><small class="caption"></small></div></div>');r.find("p").text(a||"Empty message");b?r.find("small").text(b):r.find("small").remove();if(g.length){g.push({label:"Cancel",callback:m,css:"cancel"});var w,q=h('<form action="#" class="dialog"></form>');b=function(a,b){w=h('<input type="button" value="'+b.label+'" class="butt '+(b.css||"")+'" />');
|
28 |
+
w.click(function(a){"function"===typeof b.callback&&b.callback(a,{close:m})});q.append(w);return w};for(a=0;a<g.length;a++)b(a,g[a]);r.append(q)}h(d).prepend(r.hide().fadeIn(400));r.find("a").click(m);A()}var b,d;c.init=function(){if(!b)return b=f.alert,f.alert=function(a){a=String(a).split("\n");var b=a[1]&&a.slice(1).join("\n");c.alert(a[0],b)},c};c.debug=function(a){b(a);return c};c.alert=function(a,e,d,c,g){try{return p(a,e||"",d||"alert",c||4E3,g||[]),!0}catch(m){return a+="\n\n--\n"+(m.message||
|
29 |
+
m),b.call(f,a),!1}};c.success=function(a,b,d){return c.alert(a,b,"success",d||2E3)};c.dialog=function(a,b,d,k){return c.alert(a,b,k||"alert",-1,d)};return c}({},v,z));l.register("$22",function(c,f,D){function p(a){var e;(e=a.alert)&&alert(e);(e=a.success)&&l.require("$35","growl.js").success.apply(null,e.push?e:[e]);if(e=a.download)f.location.assign(e);else if(e=a.redirect)if(0===e.indexOf("/modal/"))a.modal={url:e};else return f.location.assign(e),!1;else if(a.reload)return f.location.reload(),!1;
|
30 |
+
(e=a.modal)&&l.require("$32","modal.js").replace(e);(e=a.async)&&b(e.job_id,e.title)}function b(a,b){var d=l.require("$36","overlay.js");d.open().disableClose().css("modal-processing").html('<div class="wrap"><h2>'+(b||"Please wait")+"</h2></div>");l.require("$37","async.js").init(a).delay(500).timeout(2E4).listen("error",function(a){d.css("modal-error").enableClose().title("Error");d.html("<h2>"+(a||"Unknown error")+"</h2>")}).listen("complete",function(a){d.close();d=null;a&&p(a)}).start()}var d=
|
31 |
+
{401:"Authorization Required",422:"Invalid data sent to server",404:"Not Found",500:"Server Error",502:"Bad Gateway",503:"Service unavailable",504:"Gateway timeout"};c.jsonLink=function(a){if(!a)return"";a=a.split("?");a[0]=a[0].replace(/(\.[a-z0-9]{1,4})?$/i,".json");return a.join("?")};c.errorData=function(a,b,c){var k,g;c=a.responseText;b=a.status;if(!c&&0===b)return null;try{k=h.parseJSON(c)||{}}catch(m){k={},g=d[a.status]||m.message||m}k.error=g||k.error||k.statusText||a.statusText||d[b]||"Unknown Error";
|
32 |
+
return k};c.ajax=function(a,b,n,k){function g(a){function b(a){var g=a&&a[0];if(!g||D.contains&&!D.contains(g))a=h(D.body);return a}var g=b(k);g.trigger("locoAjaxSuccess",[a]);var e=a.events;if(e&&e.length)for(var d,q=l.require("$31","ga.js");d=e.shift();)g=b(g),g.trigger(d,[a]),q.event("ajax",d);if(!1===p(a))return!1;n&&n();return!0}function m(m,k,s){if("abort"!==k){var r=m.status,w,q=a.statusCode;if(200===r||!q||!q[r])if(401===r)l.require("$32","modal.js").load("/modal/user/ping.json?r="+encodeURIComponent(location.pathname),
|
33 |
+
d[r]);else{if("parsererror"===k)f.console&&console.error&&console.error(r,m.responseText),w=404===r?"Ajax service not found":/^\s+Fatal error/.test(m.responseText)?"Fatal server error from Ajax request":"Bad Ajax response";else{var C=c.errorData(m,k,s);C&&C.error&&(w=C.error)}"function"===typeof b&&!1===b(null,w,r,m)?n&&n():C&&C.data&&!g(C.data)||(alert(w||"Unknown Ajax error"),n&&n())}}}(a.headers||(a.headers={}))["X-Loco-Csrf"]=f.loco&&G.csrf||"";a.error=m;a.success=function(a,c,s){if(!a||"object"!==
|
34 |
+
typeof a)return m(s,"unknown");(a.status||a.error)&&alert(a.error||a.statusText||s.statusText||d[a.status]||"Unknown Error");"function"===typeof b&&!1===b(a&&a.data?a.data:a,null,c,s)?n&&n():a&&a.data?g(a.data):n&&n()};-1!==a.url.indexOf(".json")&&(a.dataType="json");return h.ajax(a)};return c}({},v,z));l.register("$37",function(c,f,h){c.init=function(c){function b(a,b){for(var g=-1,e,d=q[a]||[];++g<d.length;)(e=d[g])&&e.apply&&e.apply(null,b||[])}function d(){var a=B+"ms",g=Math.round(B/1E3);1<g&&
|
35 |
+
(a=g+" seconds");a="Job timeout after "+a;n();e();b("error",[a])}function a(a,d){if(!a||d)a={state:"error",message:d};try{switch(a.state){case "error":throw Error(a.message||"Unknown error tracking job progress");case "queued":case "starting":case "progress":var q=a.progress||0,r=a.message,y=a.state;q!==m&&(n(),m=q);b("progress",[m,r,y]);g();break;case "done":var A=a.data,c=a.message;m=100;n();e();b("complete",[A,c]);break;default:throw Error("Unexpected job status: "+a.state);}}catch(w){q=w.message||
|
36 |
+
w,n(),e(),b("error",[q])}}function e(){r&&(clearTimeout(r),r=null)}function n(){s&&(clearTimeout(s),s=null)}function k(){var b={dataType:"json",url:A};l.require("$22","http.js").ajax(b,a)}function g(){e();r=setTimeout(k,w);s||(s=setTimeout(d,B))}var m=0,A="/ajax/async/poll/"+c+".json",B=1E4,s,r,w=100,q={error:[],complete:[],progress:[]};return{start:function(){n();g();return this},stop:function(){n();e();return this},delay:function(a){w=a;return this},timeout:function(a){B=a;return this},listen:function(a,
|
37 |
+
b){var g=q[a];if(g)g.push(b);else throw Error(a+" is not a valid async event");return this}}};return c}({},v,z));l.register("$32",function(c,f,D){function p(a){a.stopPropagation();a.preventDefault();return!1}function b(){m||(m=l.require("$36","overlay.js"),m.listen(n));return m}function d(){var a=s.length-1,b=s[a],g=h('<a class="has-icon icon-back" data-gravity="w">Back</a>').attr("href",b[0]).attr("title",b[1]).click(function(g){if(s[a]===b&&C())return l.require("$11","tooltip.js").kill(),p(g)});
|
38 |
+
m.enableNav(g);l.require("$11","tooltip.js").init(g)}function a(a,b,g){a=a.split("#");var e=a[0],e=e+(-1===e.indexOf("?")?"?":"&"),e=e+(encodeURIComponent(b)+"="+encodeURIComponent(g));a[0]=e;return a.join("#")}function e(a,g){var e=b().autoSize(),q=e.init();l.require("$18","html.js").init(q);g&&g.lock&&e.disableClose();s.length&&d();q.find("[data-script]").each(function(a,b){b=h(b);for(var e=-1,d,q=b.attr("data-script").split(" ");++e<q.length;)d=q[e],B[d]?B[d](b,g||{}):alert("Unknown script "+d)});
|
39 |
+
q.trigger("locoModalLoaded",[e,a||"",g||{}]);var m=q.find("form")[0],r;if(m)a:for(e=0;e<m.elements.length;e++)switch(q=m.elements[e],q.type){case "text":case "email":case "textarea":r=Number(q.getAttribute("tabindex"));if(isNaN(r)||100>r)continue a;h(q).focus();break a}}function n(){r=null;s=[];return!0}function k(a){var b=h(a.currentTarget),e=b.attr("data-modal");if("back"===e){if(C())return p(a);e="close"}if("close"===e){q();var d=b.attr("href");if(d&&-1!==d.indexOf("#!"))return!0}else{var m="submit"===
|
40 |
+
a.type,r=b.attr("title")||b.attr("data-title"),d=b.attr("href")||b.attr("action"),A=m?b.serialize():"",b=m?b.attr("method"):"get";w(d,r,b,A,"modal "+(e||g(d)))}return p(a)}function g(a){return"http"===a.substr(0,4)?a.split("/").slice(3,6).join("-"):a.split("/").slice(1,4).join("-")}var m,A=l.require("$31","ga.js"),B={},s=[],r,w=c.load=function(g,d,q,y,n){var k=r;r=[].slice.call(arguments);k&&g!==k[0]&&(s.push(k),g=a(g,"r",k[0]));k=b();k.active()||k.open().css("modal").html('<div class="loading"></div>');
|
41 |
+
k.title("Loading ..").disableClose().disableNav();k.think();var k=g.split("#"),B=k[1];B&&(g=k[0]);var k=l.require("$22","http.js"),C={type:q||"get",data:y||"",url:k.jsonLink(g)};k.ajax(C,function(a,b,c){var k=a&&a.html;if(!k)return a&&a.redirect?(r=s.pop()||null,w(a.redirect,d,q,y,n)):(a=h('<h3 class="error"></h3>').text(b||"Unknown error"),b=h('<footer class="buttonset"><a href="/" data-modal="close" class="has-icon icon-ok">Close</a></footer>'),a=h('<div class="basic"></div>').append(a).append(b),
|
42 |
+
b="Error",c&&200!==c&&(b+=" "+c),m.unthink().enableClose().title(b).html("").append(a),l.require("$18","html.js").init(m.init())),!1;d=a.title||d||"Untitled";r&&(r[1]=d);m.unthink().enableClose().title(d,a.icon).width(null).css(n||"modal").autoSize().html(k);c=a.js||{};B&&(c["#"]=B);e(g,c);A.page(g,d);m.init().one("overlayClosed",function(){A.reset()});return!0});return c},q=c.close=function(){b().close();return c},C=c.back=function(){if(previous=s.pop())return r=s[s.length-2],w.apply(null,previous),
|
43 |
+
!0};c.reload=function(){r&&w.apply(null,r)};c.postback=function(a){r&&(r[2]="post",r[3]=a,w.apply(null,r))};c.initLink=function(a){a.click(k)};c.initForm=function(a){h(a).submit(k)};c.replace=function(a){var d=b(),q=a&&a.html,m=a&&a.url,r=a&&a.title,A=a&&a.action;if(m)q=s.length-1,q=0<=q?s[q][0]:void 0,m===q?C():w(m,r,"","",a&&a.css||"modal "+g(m));else if(q)d.open().html(q),r&&d.enableClose().title(r),e("",a&&a.js);else if("function"===typeof c[A])c[A]();return d};c.find=function(a){return b().init().find(a)};
|
44 |
+
c.script=function(a,b){if(b){if("function"!==typeof b.run)throw Error(a+" macro has no run function");B[a]=b.run;return c}return B[a]};c.hash=function(a){var b=a.hash;"#/modal/"===b.substr(0,8)&&(b=b.substr(1),a.hash="",c.replace({url:b}))};return c}({},v,z));l.register("$21",{"\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",
|
45 |
"\u0227":"a","\u01e1":"a","\u0105":"a","\u0101":"a","\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",
|
46 |
"\u1ec5":"e","\u1ec3":"e","\u011b":"e","\u00eb":"e","\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",
|
47 |
"\u1e96":"h","\u00ed":"i","\u00ec":"i","\u012d":"i","\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",
|
53 |
"\u1f90":"\u03b7","\u1f21":"\u03b7","\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",
|
54 |
"\u1fd0":"\u03b9","\u1fd6":"\u03b9","\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",
|
55 |
"\u1f7b":"\u03c5","\u1f7a":"\u03c5","\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",
|
56 |
+
"\u1ff4":"\u03c9","\u1f7c":"\u03c9","\u1ff2":"\u03c9","\u1ff6":"\u03c9","\u1ff7":"\u03c9","\u1ff3":"\u03c9","\u0491":"\u0433","\u0450":"\u0435","\u0451":"\u0435","\u04c2":"\u0436","\u045d":"\u0438","\u04e3":"\u0438","\u04ef":"\u0443"});l.register("$7",function(c,f,h){c.init=function(){function c(a){return m[a]||a}function b(a,b,g,e){b=a.split(b);for(var d=b.length;0!==d--;)(a=b[d])&&null==e[a]&&(g.push(a),e[a]=!0);return g}function d(a){return b(String(a||"").toLowerCase().replace(k,c),g,[],{})}function a(a,
|
57 |
+
e){for(var d=[],m={},w,q=e.length,C=g;0!==q--;)(w=e[q])&&b(String(w||"").toLowerCase().replace(k,c),C,d,m);n[a]=d}function e(a,b){var g=[],e=-1,d=n,q=d.length,m,c,k,f,y,h,p=a.length,I=b?!0:!1;a:for(;++e<q;)if(k=d[e],null!=k&&(f=k.length)){y=0;b:for(;y<p;y++){h=a[y];for(m=0;m<f;m++)if(c=k[m],0===c.indexOf(h))continue b;continue a}g.push(I?b[e]:e)}return g}var n=[],k=/[^a-z0-9]/g,g=/[\-_\s.?!;:,*^+=~`"(){}<>\[\]\/\\\u00a0\u1680\u180e\u2000-\u206f\u2e00-\u2e7f\u3000-\u303f]+/,m=l.require("$21","flatten.json");
|
58 |
+
return{split:d,pull:function(a,b){return e(a,b)},find:function(a,b){return e(d(a),b)},add:function(a,b){n[a]=d(b)},push:function(b){a(n.length,b)},index:function(b,g){a(b,g)},size:function(){return n.length},clear:function(){n=[]},remove:function(a){n[a]=null}}};return c}({},v,z));l.register("$23",function(c,f,h){c.create=function(){var c=[],b=l.require("$7","fulltext.js").init();return{add:function(d,a){b.add(c.length,a);c.push(d);return this},find:function(d){return b.find(d,c)},clear:function(){c=
|
59 |
+
[];b.clear();return this}}};return c}({},v,z));l.register("$10",function(c,f,D){function p(b){-1===b.indexOf("?")&&(b="/auto/"+b+".json?q=");this.url=b;this.dead={}}function b(){this.dict=l.require("$23","dict.js").create()}c.init=function(d){function a(){if("hint"!==K){var a=y.val()&&!(J&&J.val())&&null==f&&!q;D[a?"addClass":"removeClass"]("error")}}function e(a){J&&J.val(a)}function c(){v.show();var a=y.outerWidth(!1),b=y.outerHeight(!1),g=y.css("margin-top");g&&(g=parseInt(g),isNaN(g)||(b+=g));
|
60 |
+
a-=2;v.css("top",b+"px").css("minWidth",a+"px");q=!0}function k(){v.hide();q=!1}function g(){v.html("");k();w=0;u=f=null}function m(b){g();var e;for(e=0;e<b.length;e++){var d=e,q=b[e],m=q.value,r=q.lang||m.lang,y=h('<span class="label"></span>').text(q.label),k=h('<div class="auto-comp-result"></div>'),s=void 0,E=void 0;if(E=q.icon)s=h("<span></span>").attr("class",E).appendTo(k),r?(s.attr("lang",r),q.lang=r):-1!==E.indexOf("lang-"+m)&&(s.attr("lang",m),q.lang=m);for(E in q)k.data(E,q[E]);k.append(y);
|
61 |
+
A(d,k)}(w=b.length)?(C&&c(),B(0)):(B(null),a(),D.trigger("locoAutonone",[]))}function A(a,b){v.append(b);b.click(function(g){g.stopPropagation();B(a,b);r();return!1});return b}function B(a,b){u&&(u.removeClass("selected"),u=null);f=null;null==a?e(""):(b||(b=v.find("div.auto-comp-result").eq(a)),b.length&&(b.addClass("selected"),f=a,u=b))}function s(a){if(w){var b=w-1;null==f?a=0<a?0:b:(a=f+a,0>a?a=b:a>b&&(a=0));return B(a)}}function r(){if(null==f)z.val(""),e("");else{var b=v.find("div.auto-comp-result").eq(f),
|
62 |
+
d=b.data()||{label:"Error"},q=d.value,m=d.label;e(q);z.val(m);k();b=b.clone();b.data(d);g();A(0,b);w=1;B(0,b);a();b.trigger("locoAutocomp",[q,m,b])}}var w=0,q=!1,C=!1,E=d.form,f=null,u=null,y=h(d),F=y.attr("name"),K=y.attr("data-mode"),I=y.attr("data-provider"),J="hint"!==K&&h('<input type="hidden" value="" name="'+F+'" />').appendTo(E),D=h('<div class="auto-comp-wrap"></div>').replaceAll(y),v=h('<div class="auto-comp-drop"></div>');I&&(I=new p(I));J&&y.attr("name","_"+F);y.attr("autocomplete")||
|
63 |
+
y.attr("autocomplete","off");D.append(y).append(v);k();y.focus(function(){C=!0;1<w&&c()}).blur(function(){C=!1;a()}).keydown(function(a){function b(){a.preventDefault();a.stopPropagation();return!1}switch(a.keyCode){case 27:q&&(a.stopPropagation(),k(),y.blur());break;case 40:w&&(q?s(1):c());break;case 38:q&&s(-1);break;case 13:if(q)return r(),b();if(!f&&"hint"!==K)return b()}return!0});var z=l.require("$8","LocoTextListener.js").listen(y,function(a){I&&I.fetch(a,m)});(E=y.attr("data-pre"))&&(E=h.parseJSON(E))&&
|
64 |
+
E.value&&E.label?(m([E]),r()):!d.value||J&&J.val()||!I||I.fetch(d.value,function(a){m(a);r()});return{$:y,val:function(){return J&&J.val()},clear:g,reset:function(){g();y.val("");e("");z.ping()},force:function(a,b){g();e(b||"");z.val(a)},preload:function(a){w&&g();I=new b;var e,d;for(e in a)d=a[e],I.add(d)},mode:function(a){K=a},provide:function(a){I=new p(a)}}};p.prototype.fetch=function(b,a){if(!b)return a&&a([]),this.dead={},this;var e,c=this.dead;for(e in c)if(0===b.indexOf(e))return a&&a([]),
|
65 |
+
this;e={dataType:"json",url:this.url+encodeURIComponent(b)};l.require("$22","http.js").ajax(e,function(e){var g=e&&e.results;g&&(a&&e.query&&e.query===b&&a(e.results),g.length||(c[b]=0));return!0});return this};b.prototype.add=function(b){var a=b.fulltext||b.label||b.value;a&&this.dict.add(b,a)};b.prototype.fetch=function(b,a){var e=b?this.dict.find(b):[];a&&a(e);return this};return c}({},v,z));l.register("$9",function(c,f,D){function p(a){a.stopPropagation();a.preventDefault();return!1}function b(a,
|
66 |
+
b,e){e.off().mouseup(function(e){e.stopPropagation();a.selectIndex(b,!0);return!1}).mouseover(function(){h(this).addClass("over");a.hover=b;return!0}).mouseout(function(){h(this).removeClass("over");a.hover=-1;return!0});return e}function d(b){n===b&&(h(f).off("resize scroll",a),n=null);return b}function a(){n&&n.resize()}function e(a){if(a){var b,e=a[0],d=e.id,c=e.title,r=e.disabled,n=[],q=[],k,E=-1,f=e.options.length,u=this.selectedIcon||"";this.id=d||"";this.name=e.name||"";this.prefix=e.getAttribute("data-prefix");
|
67 |
+
for(this.defaultIcon=e.getAttribute("data-icon")||"icon no-icon";++E<f;)b=e.options[E],k=h(b),b.selected&&n.push(E),q.push([k.val(),k.text(),k.attr("data-icon")||u,b.disabled,k.attr("lang")]);this.hidden||(this.hidden=h('<input type="hidden" name="'+this.name+'" value="" />').appendTo(e.form));this.list=h("<ul></ul>").mouseup(p);this.icon=h('<span class="icon"> </span>');this.selection=h('<span class="label"></span>');this.handle=h('<a class="handle" href="#"></a>').attr("tabindex",a.attr("tabindex")||
|
68 |
+
"").append(this.icon).append(this.selection);b=h('<div class="selector"></div>').addClass(e.className).append(this.handle).append(this.list).replaceAll(e);d&&b.attr("id",d);c&&a.hasClass("hastip")&&(b.attr("title",c),l.require("$11","tooltip.js").init(b,{gravity:a.attr("data-gravity")||"s",anchor:a.attr("data-anchor")}));this.wrapper=b;this.up=b.hasClass("up");for(this.clearOptions();b=q.shift();)this.addOption.apply(this,b);r?this.disable():this.enable();this.close();if(f=n.length)for(E=0;E<f;E++)this.selectIndex(n[E]);
|
69 |
+
else E=e.selectedIndex,null!=E&&0<=E&&this.selectIndex(E)}}c.create=function(a){return new e(a)};c.extend=function(a){a.parent=e;a.prototype=new e};var n,k=e.prototype;k.enable=function(){var a=this;a.bound?a.wrapper.removeClass("disabled"):(a.handle.click(function(a){a.preventDefault();return!1}).mouseover(function(b){return a.onRollover(b)}).mouseout(function(b){return a.onRollout(b)}).mousedown(function(b){return a.onPress(b)}).keydown(function(b){return a.onKeydown(b)}),h(D).mouseup(function(b){return a.onRelease(b)}).keydown(function(b){return a.onGlobalKeydown(b)}),
|
70 |
+
a.bound=!0)};k.disable=function(){this.wrapper.addClass("disabled")};k.isDisabled=function(){return this.wrapper.hasClass("disabled")};k.onRollover=function(){return this.over=!0};k.onRollout=function(){this.over=!1;return!0};k.onPress=function(a){return this.active?this.over?(this.close(),a.stopPropagation(),a.preventDefault(),!1):!0:(this.open(),a.stopPropagation(),a.preventDefault(),this.handle.focus(),!1)};k.onRelease=function(){this.active&&!this.over&&this.close();return!0};k.onGlobalKeydown=
|
71 |
+
function(a){if(this.active)switch(a.keyCode){case 27:return this.close(),p(a);case 40:return this.hoverNext(1),p(a);case 38:return this.hoverNext(-1),p(a);case 13:if(-1!=this.hover)return this.selectIndex(this.hover,!0),this.hoverItem(-1),this.close(),p(a)}return!0};k.onKeydown=function(a){return this.active||40!==a.keyCode?!0:(this.open(),p(a))};k.resize=function(){var a=this.list,b=this.handle,e=b.outerWidth()||0,d=a.outerWidth()||0,c;this.up?(c=a.outerHeight(),a.css("top","-"+(c+2)+"px")):(c=b.outerHeight()||
|
72 |
+
0,c+=2,a.css("top",c+"px"),b=c+l.require("$18","html.js").top(b[0]),c=f.innerHeight-Math.max(0,b-f.pageYOffset),c-=4,a.css("max-height",c+"px"));e>d&&(e-=d-a.width(),a.css("min-width",String(e)+"px"))};k.open=function(){var b=this.list,e=this.wrapper,c=e.data("tipsy");this.active=!0;this.hover=-1;e.addClass("active");b.show().scrollTop(0);c&&c.disable();this!==n&&(n&&d(n),h(f).on("resize scroll",a),n=this);this.resize()};k.close=function(){var a=this.wrapper,b=a.data("tipsy");this.list.hide();this.active=
|
73 |
+
!1;-1!==this.hover&&(this.getElement(this.hover).removeClass("over"),this.hover=-1);a.removeClass("active");b&&b.enable();d(this)};k.hoverItem=function(a,b){-1!==this.hover&&this.getElement(this.hover).removeClass("over");this.hover=a;-1!==a&&(b=b||this.getElement(a),b.addClass("over"))};k.hoverNext=function(a){var b=this.hover,e=this.options.length,d,c=null;for(-1===b&&0>a&&(b=e);e;){b+=a;if(0>b){this.close();break}else b>=e&&(b=0);if((d=this.options[b])&&!d.disabled&&!d.hidden){this.hoverItem(b);
|
74 |
+
break}if(null==c)c=b;else if(c===b)break}};k.enableChange=function(a){this.eventName=a;this.eventData=[].slice.call(arguments,1);return this};k.enableConfirm=function(a){this.confirm=a;return this};k.clearOptions=function(){this.index={};this.length=0;this.options=[];this.list.html("");this.hidden.val("");this.idx=this.hover=-1;this.dict=null;return this};k.destroy=function(){this.clearOptions();this.hidden.remove()};k.addOption=function(a,e,d,c,n){var r=this.options.length,k=h("<span></span>").addClass(d||
|
75 |
+
"icon no-icon"),q=h('<span class="label"></span>').text(e||a),q=h("<li></li>").append(k).append(q).appendTo(this.list);14<r&&this.getDict().add(r,e);n?n=n.split("-").shift():d&&-1!==d.indexOf("lang-"+a)&&(n=a);n&&k.attr("lang",n);q.attr("data-option",r);this.options[r]={value:a,text:e,lang:n||"",icon:d};this.index[a]=r;this.length=r+1;c?this.disableIndex(r):b(this,r,q);return r};k.getDict=function(){return this.dict||(this.dict=this.createDict())};k.createDict=function(){var a=this,b=l.require("$7",
|
76 |
+
"fulltext.js").init(),e=h('<input type="text" placeholder="🔍"/>').appendTo(h('<form class="clearable"></form>').submit(p).insertBefore(a.getElement(0)));l.require("$8","LocoTextListener.js").listen(e,function(d){0===(""===d?a.unfilter():a.filter(b.find(d)))?e.addClass("error"):e.removeClass("error")});h.each(a.options,function(a,e){b.add(a,e.text)});return b};k.filter=function(a){var b=-1,e=this.length,d,c=-1,r=a.length;if(r===e)this.unfilter();else{for(;++c<r;){for(d=a[c];++b<d;)this.hideIndex(b);
|
77 |
+
this.showIndex(b)}for(;++b<e;)this.hideIndex(b)}return r};k.unfilter=function(){for(var a=-1,b=this.length;++a<b;)this.showIndex(a);return b};k.disableOption=function(a){return this.disableIndex(this.index[a])};k.enableOption=function(a){return this.enableIndex(this.index[a])};k.disableIndex=function(a){var b=this.options[a];b&&!b.disabled&&(b.disabled=!0,this.getElement(a).addClass("disabled").off());return this};k.enableIndex=function(a){var e=this.options[a];e&&e.disabled&&(e.disabled=null,b(this,
|
78 |
+
a,this.getElement(a)).removeClass("disabled"));return this};k.hideIndex=function(a){var b=this.options[a];b&&!b.hidden&&(b.hidden=!0,this.getElement(a).hide())};k.showIndex=function(a){var b=this.options[a];b&&b.hidden&&(b.hidden=null,this.getElement(a).show())};k.each=function(a){for(var b=-1,e=this.options,d=e.length;++b<d;)a(b,e[b]);return this};k.reIndex=function(){var a=-1,b={},e,d=this.dict,c=this.options,r=c.length;for(d&&d.clear();++a<r;)e=c[a],b[e.value]=a,d&&d.add(a,e.text);this.index=b;
|
79 |
+
this.length=r};k.selectValue=function(a,b){return this.selectIndex(this.index[a],b)};k.hasValue=function(a){return null!=this.index[a]};k.hasIndex=function(a){return this.length>a};k.getIndex=function(){return this.idx};k.selectIndex=function(a,b){var e=this.options[a];if(e){var d=this,c=d.idx,r=e.value,n=e.icon||d.defaultIcon,q=function(){null!=c&&d.getElement(c).removeClass("active");d.getElement(a).addClass("active");d.setLabel(e.text).setIcon(n,e.lang);d.hidden.val(r);d.idx=a;b&&d.change()};c===
|
80 |
+
a?d.hidden.val(r):b?"function"===typeof d.confirm?d.confirm.call(null,e,function(a){a&&q()}):d.beforeChange(r)&&q():q();d.active&&d.close()}return this};k.setLabel=function(a){this.selection.text(a);(a=this.prefix)&&this.selection.prepend(h('<span class="prefix"></span>').text(a));return this};k.setIcon=function(a,b){this.icon.attr("class",a).attr("lang",b||"");return this};k.val=function(){var a=this.options[this.idx];return a&&a.value};k.change=function(){var a=this.val(),b=this.save,e=this.eventName||
|
81 |
+
"change",d=[a].concat(this.eventData||[]);this.wrapper.trigger(e,d);b&&b(a);this.hidden.triggerHandler("change");return this};k.beforeChange=function(a){var b=h.Event("locoBeforeSelect");this.wrapper.trigger(b,[a]);return!b.isDefaultPrevented()};k.renameOption=function(a,b){var e=this.index[a],d=this.options[e];d&&(d.text=b,this.getElement(e).find("span.label").text(b),e===this.idx&&this.setLabel(b));return this};k.removeOption=function(a){var b=this.index[a],e=this.options[b];e&&(a=this.val(),this.getElement(b).remove(),
|
82 |
+
this.options.splice(b,1),this.reIndex(),a===e.value?this.selectIndex(0,!0):this.selectValue(a,!1))};k.getElement=function(a){return this.list.find("li").eq(a)};k.getWrapper=function(){return this.wrapper};k.tip=function(){return this.getWrapper().data("tipsy")};k.$=function(a,b){h.fn[a].apply(this.wrapper,b||[]);return this};k.persist=function(a){var b=this.id||this.name,e=a.fetch(b);null!=e&&this.selectValue(e,!0);this.save=function(e){a.store(b,e)};return this};k.listen=function(a){return this.on(this.eventName||
|
83 |
+
"change",a)};k.on=function(a,b){this.wrapper.on(a,b);return this};k=null;return c}({},v,z));l.register("$33",function(c,f,D){function p(b){var d=[],a=h([]);this.hidden=a;this.selected=d;this.selectedIcon="icon icon-checkbox";this.constructor.call(this,b);this.wrapper.addClass("multi");for(var e,c,k,g=h('<input type="checkbox" name="'+this.name+'[]" />')[0],m=this.options,A=m.length,f=-1;++f<A;)e=this.getElement(f)[0],k=g.cloneNode(!0),d[f]&&(k.checked=!0),k.setAttribute("value",m[f].value),a.push(e.appendChild(k));
|
84 |
+
(c=this.defaultIcon)&&this.setIcon(c);(c=b.attr("title"))?this.setLabel(c):this.wrapper.addClass("no-title")}c.create=function(b){return new p(b)};l.require("$9","LocoSelector.js").extend(p);f=p.prototype;f.selectIndex=function(b,d){return this.setIndexState(b,!this.selected[b],d)};f.setIndexState=function(b,d,a){var e=this.options[b],c=this.getElement(b),k=this.hidden[b],g=this.selected;e&&d!==g[b]&&(g[b]=d,c[d?"addClass":"removeClass"]("checked"),k&&(k.checked=d),a&&this.change());return this};
|
85 |
+
f.selectValue=function(b,d){if(null==b.pop)return p.parent.prototype.selectValue.call(this,b,d);for(var a=this.selected.slice(),e=this.options.length,c=this.index||{},k=!1,g=-1,m=-1;++g<e;)a[g]&&(k=!0),a[g]=!1;if(e=b.length)for(;++m<e;)g=c[b[m]],null==g?k=!0:!1===a[g]&&(k=a[g]=!0);if(k){for(g in a)this.setIndexState(g,a[g]);d&&this.change()}return this};f.val=function(){for(var b=[],d=this.options,a=this.selected,e=a.length,c=-1;++c<e;)a[c]&&b.push(d[c].value);return b};f=null;return c}({},v,z));
|
86 |
+
l.register("$44",function(c,f,h){function p(b,a){for(var e=String(b);a>e.length;)e="0"+e;return e}function b(b){var a=b%10;if(1===a){if(11!==b)return"st"}else if(2===a){if(12!==b)return"nd"}else if(3===a&&13!==b)return"rd";return"th"}c.formatter=function(){return{format:function(b,a){var e=this;return a.replace(/%[YmdHisMjSghAa]/g,function(a){return e[a.charAt(1)](b)})},Y:function(b){return String(b.getFullYear())},m:function(b){return p(1+b.getFullMonth(),2)},M:function(b){return"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ")[b.getMonth()]},
|
87 |
+
d:function(b){return p(b.getDate(),2)},H:function(b){return p(b.getHours(),2)},i:function(b){return p(b.getMinutes(),2)},s:function(b){return p(b.getSeconds(),2)},j:function(b){return String(b.getDate())},S:function(d){return b(d.getDate())},g:function(b){b=b.getHours();return String(0===b?12:12<b?b-12:b)},h:function(b){return p(this.g(b),2)},a:function(b){return 12>b.getHours()?"am":"pm"},A:function(b){return 12>b.getHours()?"AM":"PM"}}};return c}({},v,z));l.register("$34",function(c,f,D){function p(a){var d=
|
88 |
+
a.id,c=n||(n=[]),r=k||(k={}),w=a.getAttribute("datetime"),w=m(w);if(!isNaN(w))return d||(d="tick"+ ++g,a.setAttribute("id",d)),a={id:d,el:a,dt:new Date(w),st:a.textContent},r[d]||c.push(a),r[d]=a,e||(e=setTimeout(b,200)),a}function b(){for(var a=n,c=a.length,g={},r=[];0<c--;)ticker=a[c],d(ticker)&&(r.push(ticker),g[ticker.id]=ticker);r.length?(n=r,k=g,e=setTimeout(b,3E4)):e=k=n=null}function d(b){var e=b.el;if(D.contains&&!D.contains(e))return!1;strDate=a(b.dt,new Date,!0);if(""===strDate)return!1;
|
89 |
+
strDate!==b.st&&(h(e).text(strDate),b.st=strDate);return!0}function a(a,b,e){var d=b.getTime(),c=a.getTime(),q=d-c;if(6E4>q)return"Just now";if(36E5>q)return a=Math.floor(q/6E4),String(a)+" minute"+(1===a?"":"s")+" ago";if(864E5>q&&b.getDate()===a.getDate()&&b.getMonth()===a.getMonth()&&b.getFullYear()===a.getFullYear())return a=Math.round(q/36E5),"About "+String(a)+" hour"+(1===a?"":"s")+" ago";if(e)return"";e=Math.floor(d/864E5)-Math.floor(c/864E5);d=l.require("$44","date.js").formatter();q=d.format(a,
|
90 |
+
" %g:%i %A");return 1>=e&&(b.setHours(0),b.setMinutes(0),b.setSeconds(0),b=b.getTime()-864E5,c>=b)?"Yesterday at"+q:11>e?e+" days ago at"+q:d.format(a,"%M %j%S %Y,")+q}var e,n,k,g=0,m=Date.parse||function(){return Number.NaN};c.onEach=function(a,b){p(b)};c.update=function(a){d(p(a))};c.rel=a;return c}({},v,z));l.register("$18",function(c,f,D){var p=f.ieVersion;c.ie=function(b){return b?p<=b:p};var b=c.init=function(b){b?b instanceof jQuery||(b=h(b)):b=h(D.body);var a=l.require("$31","ga.js"),e=l.require("$19",
|
91 |
+
"forms.js"),n=l.require("$32","modal.js"),k=l.require("$10","LocoAutoComplete.js"),g=l.require("$9","LocoSelector.js"),m=l.require("$33","LocoMultiSelector.js"),f=l.require("$11","tooltip.js");b.find("form").each(function(a,b){var d=h(b);p&&10>p&&e.placeholders(d);b.getAttribute("data-modal")?n.initForm(b):b.hasAttribute("action")&&"#"!==d.attr("action").charAt(0)&&!b.target&&e.jsonify(b);d.find("input.auto-comp").each(function(a,b){k.init(b)});d.find("select.selector").each(function(a,b){b.hasAttribute("multiple")?
|
92 |
+
m.create(h(b)):g.create(h(b))});d.hasClass("hasreveal")&&e.revealify(d);d.find("button.hastip").each(function(a,b){f.init(h(b))})});b.find("a").each(function(b,e){-1!==e.className.indexOf("hastip")&&f.init(h(e));"/modal/"===String(e.getAttribute("href")).substr(0,7)||e.getAttribute("data-modal")?n.initLink(h(e)):a.link(e)});b.find("time.tick").each(l.require("$34","tick.js").onEach);e=n=k=b=null;return c};c.$=function(b){return h(f.innerShiv?innerShiv(b,!1):b)};h.fn._html=function(d){return null!=
|
93 |
+
d?(d=this.html(f.innerShiv?innerShiv(d,!1):d),b(this),d):j.html()};h.fn.macro=function(b,a){if("function"!==typeof b.run)throw Error("macro has no run function");b.run(this,a||{});return this};c.el=function(b,a){var e=D.createElement(b||"div");a&&(e.className=a);return e};c.txt=function(b){return D.createTextNode(b||"")};c.h=function(){function b(){c=/[<>&]/g;k=/(\r\n|\n|\r)/g;g=/(?:https?):\/\/(\S+)/ig;b=null}function a(a){return"&#"+a.charCodeAt(0)+";"}function e(a,b){return'<a href="'+a+'" target="'+
|
94 |
+
(b.indexOf(location.hostname)?"_blank":"_top")+'">'+b+"</a>"}var c,k,g;return function(m,f){b&&b();var h=m.replace(c,a);f&&(h=h.replace(g,e).replace(k,"<br />"));return h}}();c.noop=function(b){b&&(b.preventDefault(),b.stopPropagation(),h(b.target).blur());return!1};c.top=function(b,a){a||(a=D.body);for(var e=b.offsetTop||0;(b=b.offsetParent)&&b!==a;)e+=b.offsetTop||0;return e};c.left=function(b,a){a||(a=D.body);for(var e=b.offsetLeft||0;(b=b.offsetParent)&&b!==a;)e+=b.offsetLeft||0;return e};return c}({},
|
95 |
+
v,z));l.register("$19",function(c,f,D){function p(a){function b(){a.value===g&&(a.value="",c.removeClass("placeheld"));return!0}function d(){""===a.value&&(a.value=g,c.addClass("placeheld"));return!0}var c=h(a);if(!c.hasClass("auto-comp")){var g=c.attr("placeholder");if(g)return c.focus(b).blur(d),d(),{kill:function(){b();c.off("focus",b).off("blur",d)}}}}var b=c.enable=function(a){function b(a,e){e.getAttribute("data-was-disabled")||(e.disabled=!1)}a.find(".button").removeClass("loading");a.find("button").each(b);
|
96 |
+
a.find("input").each(b);a.find("select").each(b);a.find("textarea").each(b);f.attachEvent&&a.hasClass("has-placeholders")&&c.placeholders(a);a.removeClass("disabled").trigger("locoEnable");delete a._disabled},d=c.disable=function(a){function b(a,e){e.disabled?e.setAttribute("data-was-disabled","true"):e.disabled=!0}a._disabled||(a.find(".button").addClass("loading"),a.find("button").each(b),a.find("input").each(b),a.find("select").each(b),a.find("textarea").each(b),a.addClass("disabled").trigger("locoDisable"),
|
97 |
+
a._disabled=!0)};c.jsonify=function(a,e,c){a instanceof jQuery||(a=h(a));a.disable||(h.fn.disable=function(){d(this);return this},h.fn.enable=function(){b(this);this.placehold&&this.placehold();return this});var k="";a.find('[type="submit"]').click(function(a){a&&a.target&&a.target.name&&(k=encodeURIComponent(a.target.name)+"="+encodeURIComponent(a.target.value));return!0});a.submit(function(b){if(b&&b.isDefaultPrevented&&b.isDefaultPrevented()||c&&!1===c(b))return!1;var d=a.serialize(),d=d.replace(/%0D%0A/g,
|
98 |
+
"%0A");k&&(d&&(d+="&"),d+=k,k="");a.disable();var f=l.require("$22","http.js"),d={url:f.jsonLink(a.attr("action")),type:a.attr("method"),data:d};f.ajax(d,e,function(){a.enable()},a);b.preventDefault();b.stopPropagation();return!1})};c.revealify=function(a){a=a.closest("form");a.find("div[data-reveal-if]").each(function(b,d){function c(a){var b;b=p;q=q||a.target;if("."===r)b=Boolean(q&&q[w]),p&&(b=!b);else{var e,d,y=h(q.form).serializeArray();for(d in y)y[d].name===s&&(e=y[d].value);"!="===r&&(b=!b);
|
99 |
+
b=b?w!==e:w===e}if(b!==f)if(f=b,a)g[f?"slideDown":"slideUp"](200);else g[f?"show":"hide"]();return!0}var g=h(d),m=/^(\!?)([_\w\-\[\]]+)(\.|!?=)(.*)$/.exec(g.attr("data-reveal-if"));if(m){var f,p=m[1]?!0:!1,s=m[2],r=m[3],w=m[4],m=a[0][s];if(m.type||null==m.length)m=[m];b=m.length;for(var q;0!==b--;)q=m[b],c(),h(q).change(c).removeClass("jshide");m=m=q=null}});a=null};c.linkify=function(a){var b=a.getAttribute("data-icon");if(b){var d=h(a),c=h("<a> </a>");c.attr("href",a.form.action);c.attr("class",
|
100 |
+
d.attr("class"));c.attr("tabindex",d.attr("tabindex"));d.attr("tabindex","-1");c.text(d.val());b&&h("<span></span>").prependTo(c).addClass(b);d.hide().after(c);c.click(function(a){d.click();return!1})}};c.placeholders=function(a){var b,d=[];a.find("input[placeholder]").each(function(a,c){"password"!==c.type&&(b=p(c))&&d.push(b)});d.length&&(a.submit(function(){for(var a in d)d[a].kill()}),a.addClass("has-placeholders"),b=i=null)};return c}({},v,z));l.register("$4",function(c,f,D){function p(a,b,e){function d(){c();
|
101 |
+
g=setTimeout(b,e)}function c(){g&&clearTimeout(g);g=null}var g;d();h(a).mouseenter(c).mouseleave(d);return{die:function(){c();h(a).off("mouseenter mouseleave")}}}function b(a,b){a.fadeTo(b,0,function(){a.slideUp(b,function(){a.remove();h(f).triggerHandler("resize")})});return a}function d(a,e){function d(e){g[r]=null;b(h(a),250);c&&c.die();var q;if(q=e)e.stopPropagation(),e.preventDefault(),q=!1;return q}var c,r;h(a).addClass("is-dismissible");h('<button type="button" class="notice-dismiss" href="#"> </a>').prependTo(a).click(d);
|
102 |
+
h(f).triggerHandler("resize");m();r=g.length;g.push(d);e&&(c=p(a,d,e));return{stick:function(){c&&c.die();c=null;g[r]=null}}}function a(a,b,e){var d=l.require("$18","html.js");a=h('<div class="notice notice-'+a+'" loco-notice inline></div>').prependTo(h("#loco-notices"));var c=h(d.el("p"));e=h(d.el("span")).text(e);b=h(d.el("strong","has-icon")).text(b+": ");c.append(b).append(e).appendTo(a);return a}function e(b,e,c,g){b=a(c,e,b).hide().fadeIn(500);h(f).triggerHandler("resize");return d(b,g)}function n(a){return e(a,
|
103 |
+
B,"warning")}function k(){h("#loco-notices").find("div.notice").each(function(a,b){if(-1===b.className.indexOf("jshide")){var e=-1===b.className.indexOf("notice-success")?null:5E3;d(b,e)}})}var g=[],m=Date.now||function(){return(new Date).getTime()},A,B,s,r;c.error=function(a){return e(a,A,"error")};c.warn=n;c.info=function(a){return e(a,s,"info")};c.success=function(a){return e(a,r,"success",5E3)};c.warning=n;c.log=function(){f.console&&console.log&&console.log.apply(console,arguments)};c.debug=
|
104 |
+
function(a,b){f.console&&console.error&&(console.error("Loco Error: "+a),b&&console.debug&&console.debug(b))};c.clear=function(){for(var a=-1,b,e=g,d=e.length;++a<d;)(b=e[a])&&b();g=[];return c};c.create=a;c.raise=function(a){(c[a.type]||c.error).call(c,a.message)};c.convert=d;c.init=function(a){A=a._("Error");B=a._("Warning");s=a._("Notice");r=a._("OK");setTimeout(k,1E3);return c};return c}({},v,z));l.register("$5",function(c,f,D){function p(a){var b=h("<pre>"+a+"</pre>").text();b&&(b=b.replace(/[\r\n]+/g,
|
105 |
+
"\n").replace(/(^|\n)\s+/g,"$1").replace(/\s+$/,""));b||(b=a)||(b="Blank response from server");return b}function b(a){return(a=a.split(/[\r\n]/)[0])?(a=a.replace(/ +in +\S+ on line \d+/,""),a=a.replace(/^[()! ]+Fatal error:\s*/,"")):t._("Server returned invalid data")}function d(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 n(a,e,d,c){function q(e,c,q){if("abort"!==c){var y=g||{_:function(a){return a}},k=e.status,f=e.responseText,w=p(f),h=e.getResponseHeader("Content-Type")||
|
106 |
+
"text/html",s=e.getResponseHeader("Content-Length")||f.length;"success"===c&&q?n.error(q):(n.error(b(w)+".\n"+y._("Check console output for debugging information")),n.debug("Ajax failure for "+a,{status:k,error:c,message:q,output:f}),"parsererror"===c&&(q="Response not JSON"),n.log([y._("Provide the following text when reporting a problem")+":","----","Status "+k+' "'+(q||y._("Unknown error"))+'" ('+h+" "+s+" bytes)",w,"===="].join("\n")));d&&d.call&&d(e,c,q);m=e}}c.url=A;c.dataType="json";c.error=
|
107 |
+
q;c.success=function(a,b,d){var c=a&&a.data,g=a&&a.notices,r=g&&g.length;for(!c||a.error?q(d,b,a&&a.error&&a.error.message):e&&e(c,b,d);r--;)n.raise(g[r])};var n=l.require("$4","notices.js").clear();return h.ajax(c)}var k={},g,m,A=f.ajaxurl||"/wp-admin/admin-ajax.php";c.init=function(a){k=a.nonces||k;return c};c.localise=function(a){g=a;return c};c.xhr=function(){return m};c.strip=p;c.parse=b;c.submit=function(a,b,e){function d(){c.removeClass("loading");l.require("$19","forms.js").enable(c)}var c=
|
108 |
+
h(a),g=c.serialize();c.addClass("loading");l.require("$19","forms.js").disable(c);return n(a.route.value,function(a,e,c){d();b&&b(a,e,c)},function(a,b,c){d();e&&e(a,b,c)},{type:a.method,data:g})};c.post=function(b,c,g,m){var q,C=!0;c=c||{};(q=k[b])||(f.console&&console.debug&&console.debug('No nonce for "'+b+'"'),q="");var E=q;f.FormData&&c instanceof FormData?(C=!1,q=e):q=Array.isArray(c)?a:d;q(c,"action","loco_json");q(c,"route",b);q(c,"loco-nonce",E);return n(b,g,m,{type:"post",data:c,processData:C,
|
109 |
+
contentType:C?"application/x-www-form-urlencoded; charset=UTF-8":!1})};c.setNonce=function(a,b){k[a]=b;return c};c.hasNonce=function(a){return!!k[a]};return c}({},v,z));l.register("$20",{arab:1,aran:1,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});l.register("$6",function(c,f,h){function p(){}var b,d=l.require("$20","rtl.json");
|
110 |
+
c.init=function(){return new p};c.cast=function(a){return a instanceof p?a:"string"===typeof a?c.parse(a):c.clone(a)};c.clone=function(a){var b,d=new p;for(b in a)d[b]=a[b];return d};c.parse=function(a){if(!(b||(b=/^([a-z]{2,3})(?:[-_]([a-z]{2}))?(?:[-_]([a-z0-9]{3,8}))?$/i)).exec(a))return null;var e=new p;e.lang=RegExp.$1.toLowerCase();if(a=RegExp.$2)e.region=a.toUpperCase();if(a=RegExp.$3)e.variant=a.toLowerCase();return e};f=p.prototype;f.isValid=function(){return!!this.lang};f.isKnown=function(){var a=
|
111 |
+
this.lang;return!(!a||"zxx"===a)};f.toString=function(a){a=a||"-";var b,d=this.lang||"zxx";if(b=this.region)d+=a+b;if(b=this.variant)d+=a+b;return d};f.getIcon=function(){for(var a=3,b,d,c=["variant","region","lang"],g=[];0!==a--;)if(b=c[a],d=this[b])g.push(b),g.push(b+"-"+d.toLowerCase());return g.join(" ")};f.isRTL=function(){return!!d[String(this.lang).toLowerCase()]};f=null;return c}({},v,z));l.register("$38",function(c,f,h){function p(){}var b,d,a=l.require("$20","rtl.json");c.init=function(){return new p};
|
112 |
+
c.cast=function(a){return a instanceof p?a:"string"===typeof a?c.parse(a):c.clone(a)};c.clone=function(a){var b,d=new p;for(b in a)d[b]=a[b];return d};c.parse=function(a){b||(d=/[-_+]/,b=/^([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(d).join("-");if(!b.exec(a))return null;var c=new p;c.lang=RegExp.$1.toLowerCase();if(a=RegExp.$2)c.script=a.charAt(0).toUpperCase()+a.substr(1).toLowerCase();if(a=RegExp.$3)c.region=
|
113 |
+
a.toUpperCase();if(a=RegExp.$4)c.variant=a.toLowerCase();if(a=RegExp.$5)c.extension=a;return c};f=p.prototype;f.isValid=function(){return!!this.lang};f.isKnown=function(){var a=this.lang;return!(!a||"zxx"===a)};f.toString=function(a){a=a||"-";var b,d=this.lang||"zxx";if(b=this.script)d+=a+b;if(b=this.region)d+=a+b;if(b=this.variant)d+=a+b;if(b=this.extension)d+=a+b;return d};f.getIcon=function(){for(var a=4,b,d,c=["variant","region","script","lang"],m=[];0!==a--;)if(b=c[a],d=this[b])d.join&&(d=d.join("-")),
|
114 |
+
1===a&&3===d.length?m.push("region-m49"):m=m.concat([b,b+"-"+d.toLowerCase()]);return m.join(" ")};f.isRTL=function(){return!!a[String(this.script||this.lang).toLowerCase()]};f=null;return c}({},v,z));l.register("$39",function(c,f,h){function p(a){f.console&&console.error&&console.error(a)}function b(){p("Method not implemented")}function d(){}function a(a){}d.prototype.toString=function(){return"[Undefined]"};a.prototype._validate=function(a){var c,k,g=!0;for(c in this)k=this[c],k===b?(p(a+"."+c+
|
115 |
+
"() must be implemented"),g=!1):k instanceof d&&(p(a+"."+c+" must be defined"),g=!1);return g};c.init=function(e,c){var k,g=new a;if(e)for(k=e.length;0!==k--;)g[e[k]]=b;if(c)for(k=c.length;0!==k--;)g[c[k]]=new d;return g};c.validate=function(a){var b=/function (\w+)\(/.exec(a.toString())?RegExp.$1:"";a.prototype._validate(b||"Object")};return c}({},v,z));l.register("$49",function(c,f,h){var p=f.requestAnimationFrame,b=f.cancelAnimationFrame,d=0;if(!p||!b)for(var a in{ms:1,moz:1,webkit:1,o:1})if(p=
|
116 |
+
f[a+"RequestAnimationFrame"])if(b=f[a+"CancelAnimationFrame"]||f[a+"CancelRequestAnimationFrame"])break;p&&b||(p=function(a){var b=e();timeToCall=Math.max(0,16-(b-d));nextTime=b+timeToCall;timerId=f.setTimeout(function(){a(nextTime)},timeToCall);d=nextTime;return timerId},b=function(a){clearTimeout(a)});var e=Date.now||function(){return(new Date).getTime()};c.loop=function(a,e){function d(){f=p(d,e);a(c++)}var c=0,f;d();return{stop:function(){f&&b(f);f=null}}};return c}({},v,z));l.register("$45",
|
117 |
+
function(c,f,h){function p(b,e,d,c){if(a){var g=d;d=function(a){if((a.MSPOINTER_TYPE_TOUCH||"touch")===a.pointerType)return g(a)}}b.addEventListener(e,d,c);return{unbind:function(){b.removeEventListener(e,d,c)}}}function b(a){a.preventDefault();a.stopPropagation();return!1}var d,a=!!f.navigator.msPointerEnabled,e=a?"MSPointerDown":"touchstart",n=a?"MSPointerMove":"touchmove",k=a?"MSPointerUp":"touchend";c.ok=function(a){null==d&&(d="function"===typeof h.body.addEventListener);d&&a&&a(c);return d};
|
118 |
+
c.ms=function(){return a};c.dragger=function(a,d){function c(b){a.addEventListener(b,m[b],!1)}function r(b){a.removeEventListener(b,m[b],!1)}var m={};m[e]=function(a){g(a,function(b,c){c.type=e;d(a,c,q)});c(n);c(k);return!0};m[k]=function(a){r(n);r(k);g(a,function(b,e){e.type=k;d(a,e,q)});return!0};m[n]=function(a){g(a,function(b,e){e.type=n;d(a,e,q)});return b(a)};c(e);var q={kill:function(){r(e);r(n);r(k);a=q=d=null}};return q};c.swiper=function(d,c,f){function r(a){d.addEventListener(a,u[a],!1)}
|
119 |
+
function w(a){d.removeEventListener(a,u[a],!1)}function q(){h&&h.stop();h=null}var h,E,p,u={},y=[],F=[],K=[];u[e]=function(a){E=!1;q();var b=m();g(a,function(a,e){y[a]=b;F[a]=e.clientX;K[a]=e.clientY});p=d.scrollLeft;return!0};u[k]=function(a){g(a,function(a,b){var e=m()-y[a],d=F[a]-b.clientX,e=Math.abs(d)/e;c(e,d?0>d?-1:1:0)});p=null;return!0};u[n]=function(a){var e,c;null==p||g(a,function(a,b){e=F[a]-b.clientX;c=K[a]-b.clientY});if(c&&Math.abs(c)>Math.abs(e))return E=!0;e&&(E=!0,d.scrollLeft=Math.max(0,
|
120 |
+
p+e));return b(a)};if(!a||f)r(e),r(n),r(k),a&&(d.className+=" mstouch");return{kill:function(){w(e);w(n);w(k);q()},swiped:function(){return E},ms:function(){return a},snap:function(b){a&&!f&&(d.style["-ms-scroll-snap-points-x"]="snapInterval(0px,"+b+"px)",d.style["-ms-scroll-snap-type"]="mandatory",d.style["-ms-scroll-chaining"]="none")},scroll:function(a,b,e){q();var c=d.scrollLeft,g=a>c?1:-1,r=Math[1===g?"min":"max"],y=Math.round(16*b*g);return h=l.require("$49","fps.js").loop(function(b){b&&(c=
|
121 |
+
Math.max(0,r(a,c+y)),d.scrollLeft=c,a===c&&(q(),e&&e(c)))},d)}}};c.start=function(a,b){return p(a,e,b,!1)};c.move=function(a,b){return p(a,n,b,!1)};c.end=function(a,b){return p(a,k,b,!1)};var g=c.each=function(b,e){if(a)(b.MSPOINTER_TYPE_TOUCH||"touch")===b.pointerType&&e(0,b);else for(var d=-1,c=(b.originalEvent||b).changedTouches||[];++d<c.length;)e(d,c[d])},m=Date.now||function(){return(new Date).getTime()};return c}({},v,z));l.register("$50",function(c,f,l){c.init=function(c){function b(){f.style.top=
|
122 |
+
String(-c.scrollTop)+"px";return!0}function d(){var b=f;b.textContent=c.value;b.innerHTML=b.innerHTML.replace(/[ \t]/g,a).split(/(?:\n|\r\n?)/).join('<span class="eol crlf"></span>\r\n')+'<span class="eol eof"></span>';return!0}function a(a){return'<span class="x'+a.charCodeAt(0).toString(16)+'">'+a+"</span>"}var e=c.parentNode,f=e.insertBefore(l.createElement("div"),c);h(c).on("input",d).on("scroll",b);h(e).addClass("has-mirror");f.className="ta-mirror";var k=c.offsetWidth-c.clientWidth;2<k&&(f.style.marginRight=
|
123 |
+
String(k-2)+"px");d();b();return{kill:function(){h(c).off("input",d).off("scroll",b);e.removeChild(f);f=null;h(e).removeClass("has-mirror")}}};return c}({},v,z));l.register("$30",function(c,f,h){function p(a,e){for(var d=0,c=-1,g=e&&f[e],m=b[a]||[],h=m.length;++c<h;)callback=m[c],"function"===typeof callback&&(callback(g),d++);return d}var b={},d;c.load=function(a,e,d){function c(){A&&(clearTimeout(A),A=null);l&&(l.onreadystatechange=null,l=l=l.onload=null);a&&(delete b[a],a=null)}function g(b,e){var g=
|
124 |
+
l&&l.readyState;if(e||!g||"loaded"===g||"complete"===g)e||p(a,d),c()}function m(){if(0===p(a))throw Error('Failed to load "'+(d||a)+'"');c()}if(d&&f[d])"function"===typeof e&&e(f[d]);else if(null!=b[a])b[a].push(e);else{b[a]=[e];var A=setTimeout(m,4E3),l=h.createElement("script");l.setAttribute("src",a);l.setAttribute("async","true");l.onreadystatechange=g;l.onload=g;l.onerror=m;l.onabort=c;h.getElementsByTagName("head")[0].appendChild(l)}};c.stat=function(a){var b;if(!(b=d)){for(var c,f,g=h.getElementsByTagName("script"),
|
125 |
+
m=-1,p=g.length;++m<p;)if(b=g[m].getAttribute("src"))if(c=b.indexOf("/lib/vendor"),-1!==c){f=b.substr(0,c);break}b=d=f||"/static"}return b+a};return c}({},v,z));l.register("$15",function(c,f,D){function p(a,b){a.setReadOnly(!1);a.on("change",function(a,e){return b.val(e.getValue())});a.on("focus",function(){return b.focus()});a.on("blur",function(){return b.blur()})}function b(a){a.off("change");a.off("focus");a.off("blur")}function d(a){b(a);a.setReadOnly(!0);a.setHighlightGutterLine(!1);a.setHighlightActiveLine(!1)}
|
126 |
+
function a(a,b){function d(){this.HighlightRules=c}var c=e(b),g=a.require,f=g("ace/lib/oop");f.inherits(c,g("ace/mode/text_highlight_rules").TextHighlightRules);f.inherits(d,g("ace/mode/text").Mode);return new d}function e(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",regex:/<!\[CDATA\[/},{token:"constant.language",regex:/\]\]>/},{token:"locked",regex:/<(?:xliff:)?(?:g|ph)[^>]*>[^<]*<\/(?:xliff:)?(?:g|ph)>/},
|
127 |
{token:"locked",regex:/<(?:xliff:)?(bx|ex|x)[^\/>]*\/>/},{token:"constant.language",regex:/<\/?[:a-z]+[^>]*>/}]},e=n(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]*[^{}]+)?)?}"},
|
128 |
{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]+",
|
129 |
next:"icuType"},{defaultToken:"icu",next:"icuType"}],icuType:[{token:"icu",regex:/[{}]/,next:"start"},{defaultToken:"icu"}]}:e&&b.start.push({token:"printf",regex:e});this.$rules=b}}function n(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%]/;
|
130 |
+
case "javascript":return/%(?:[1-9]\d*\$)?\+?(?:0|'[^$])?-?\d*(?:\.\d+)?[b-gijostTuvxX%]/;case "auto":return/%(?:\d+\$)?(?:[-+0]?\d*(\.\d+)?[duxoefgaDUXOEFGA]|[@scSC%])/;case g:return k||"%%"}}var k,g="auto";c.init=function(e,c,k){var n,r=!1,w=k||g,q=e.parentNode,C=q.appendChild(D.createElement("div"));h(q).addClass("has-proxy has-ace");l.require("$30","remote.js").load("https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ace.js",function(b){if(C){if(!b)throw Error("Failed to load code editor");n=b.edit(C);
|
131 |
+
var q=n.session,g=n.renderer;n.$blockScrolling=Infinity;n.setShowInvisibles(r);n.setWrapBehavioursEnabled(!1);n.setBehavioursEnabled(!1);n.setHighlightActiveLine(!1);q.setUseSoftTabs(!1);g.setShowGutter(!0);g.setPadding(10);g.setScrollMargin(8);q.setMode(a(b,w));n.setValue(e.value,-1);q.setUseWrapMode(!0);c?p(n,c):d(n)}},"ace");return{kill:function(){n&&(b(n),n.destroy(),n=null);C&&(q.removeChild(C),h(q).removeClass("has-proxy has-ace"),C=null);return this},disable:function(){n&&d(n);c=null;return this},
|
132 |
+
enable:function(a){c=a;n&&p(n,a);return this},resize:function(){n&&n.resize();return this},val:function(a){n&&a!==n.getValue()&&n.setValue(a,-1);return this},invs:function(a){a=a||!1;r!==a&&(r=a,n&&n.setShowInvisibles(a));return this},strf:function(b){b=b||g;b!==w&&(w=b,n&&n.session.setMode(a(f.ace,b)));return this},focus:function(){return this}}};c.strf=function(a,b){g=a;k=b;return c};return c}({},v,z));l.register("$51",function(c,f,D){function p(a,b){function d(){return b.val(a.getContent())}a.on("input",
|
133 |
+
d);a.on("change",d);a.on("focus",function(){return b.focus()});a.on("blur",function(){return b.blur()});a.setMode("design")}function b(a){a.off("input");a.off("change");a.off("focus");a.off("blur")}function d(a){b(a);a.setMode("readonly")}var a=0;c.load=function(a){var b=l.require("$30","remote.js");b.load(b.stat("/lib/tinymce.min.js"),a,"tinymce");return c};c.init=function(e,f){function k(a){B=a;s="<p>"===a.substr(0,3)&&"</p>"===a.substr(-4);return a.replace(/(<\/?)script/ig,"$1loco:script")}function g(a){m=
|
134 |
+
a;a._getContent=a.getContent;a.getContent=function(a){a=this._getContent(a);a=a.replace(/(<\/?)loco:script/ig,"$1script");if(!s&&"<p>"===a.substr(0,3)&&"</p>"===a.substr(-4)){var b=a.substr(3,a.length-7);if(b===B||-1===b.indexOf("</p>"))a=b}return a};a._setContent=a.setContent;a.setContent=function(a,b){return this._setContent(k(a),b)};f?(p(a,f),f.reset()):d(a);h(q).removeClass("loading")}var m,l=!1,B="",s=!1,r=e.parentNode,w=r.parentNode,q=r.appendChild(D.createElement("div")),C=w.insertBefore(D.createElement("nav"),
|
135 |
+
r);C.id="_tb"+String(++a);h(r).addClass("has-proxy has-mce");h(q).addClass("mce-content-body loading").html(k(e.value));c.load(function(a){if(!a)throw Error("Failed to load HTML editor");q&&a.init({inline:!0,target:q,hidden_input:!1,theme:"modern",skin:!1,plugins:"link lists",browser_spellcheck:!0,menubar:!1,fixed_toolbar_container:"#"+C.id,toolbar:"formatselect | bold italic link unlink | bullist numlist outdent indent",block_formats:"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h4;Heading 4=h4;Heading 5=h5;Heading 6=h6;",
|
136 |
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",entities:"38,amp,60,lt,62,gt,160,nbsp",entity_encoding:"named",keep_styles:!1,init_instance_callback:g})});
|
137 |
+
return{val:function(a){a=k(a);null==m?(e.value=a,h(q).html(a)):m.getContent()!==a&&m.setContent(a);f&&f.val(a);return this},kill:function(){m&&(f&&f.val(m.getContent()),b(m),m.destroy(),m=null);q&&(r.removeChild(q),h(r).removeClass("has-proxy has-mce"),q=null);C&&(w.removeChild(C),C=null);return this},enable:function(a){f=a;m&&p(m,a);return this},disable:function(){m&&d(m);f=null;return this},focus:function(){m&&f&&m.focus();return this},invs:function(a){a=a||!1;l!==a&&(l=a,h(r)[a?"addClass":"removeClass"]("show-invs"));
|
138 |
+
return this}}};return c}({},v,z));l.register("$46",function(c,f,D){function p(a){function b(){p&&(l.off("input",c),p=!1)}function c(){var b=a.value;b!==r&&(l.trigger("changing",[b,r]),r=b)}function f(){c();p&&w!==r&&l.trigger("changed",[r])}function g(){d=a;w=r;p||(l.on("input",c),p=!0);l.trigger("editFocus");s.addClass("has-focus");return!0}function m(){d===a&&(d=null);l.trigger("editBlur");s.removeClass("has-focus");p&&(f(),b());return!0}var p=!1,l=h(a),s=h(a.parentNode),r=a.value,w;l.blur(m).focus(g);
|
139 |
+
return{val:function(b){r!==b&&(a.value=b,l.triggerHandler("input"),r=b);return!0},kill:function(){b();l.off("blur",m).off("focus",g)},fire:function(){r=null;c()},ping:f,blur:m,focus:g,reset:function(){w=r=a.value}}}function b(a){this.e=a}var d;c._new=function(a){return new b(a)};c.init=function(a){var e=new b(a);a.disabled?(a.removeAttribute("disabled"),e.disable()):a.readOnly?e.disable():e.enable();return e};TextAreaPrototype=b.prototype;TextAreaPrototype.destroy=function(){this.unlisten();var a=
|
140 |
+
this.p;a&&(a.kill(),this.p=null);this.e=null};TextAreaPrototype.reload=function(a,b){var d=this.l;d&&!b&&(this.disable(),d=null);this.val(a||"");b&&!d&&this.enable();return this};TextAreaPrototype.val=function(a){var b=this.e;if(null==a)return b.value;var d=this.l,c=this.p;c&&c.val(a);d&&d.val(a);d||b.value===a||(b.value=a,h(b).triggerHandler("input"));return this};TextAreaPrototype.fire=function(){this.l&&this.l.fire();return this};TextAreaPrototype.ping=function(){this.l&&this.l.ping();return this};
|
141 |
+
TextAreaPrototype.focus=function(){var a=this.p;a?a.focus():h(this.e).focus()};TextAreaPrototype.focused=function(){return d&&d===this.el};TextAreaPrototype.parent=function(){return this.e.parentNode};TextAreaPrototype.attr=function(a,b){var d=this.e;if(1===arguments.length)return d.getAttribute(a);null==b?d.removeAttribute(a):d.setAttribute(a,b);return this};TextAreaPrototype.editable=function(){return!!this.l};TextAreaPrototype.enable=function(){var a=this.p;this.e.removeAttribute("readonly");this.listen();
|
142 |
+
a&&a.enable&&a.enable(this.l);return this};TextAreaPrototype.disable=function(){var a=this.p;this.e.setAttribute("readonly",!0);this.unlisten();a&&a.disable&&a.disable();return this};TextAreaPrototype.listen=function(){var a=this.l;a&&a.kill();this.l=p(this.e);return this};TextAreaPrototype.unlisten=function(){var a=this.l;a&&(a.kill(),this.l=null);return this};TextAreaPrototype.setInvs=function(a,b){var d=this.i||!1;if(b||d!==a)this._i&&(this._i.kill(),delete this._i),(d=this.p)?d.invs&&d.invs(a):
|
143 |
+
a&&(this._i=l.require("$50","mirror.js").init(this.e)),this.i=a;return this};TextAreaPrototype.getInvs=function(){return this.i||!1};TextAreaPrototype.setMode=function(a){var b=this.p,c=this.i||!1;a!==(this.m||"")&&(this.m=a,b&&b.kill(),this.p=b="code"===a?l.require("$15","ace.js").init(this.e,this.l,this["%"]):"html"===a?l.require("$51","mce.js").init(this.e,this.l):null,this.setInvs(c,!0),d&&this.focus());return this};TextAreaPrototype.setStrf=function(a){this["%"]=a;"code"===this.m&&this.p.strf(a);
|
144 |
+
return this};TextAreaPrototype.name=function(a){this.e.setAttribute("name",a);return this};TextAreaPrototype.placeholder=function(a){this.e.setAttribute("placeholder",a);return this};TextAreaPrototype.redraw=function(){var a=this.p;a&&a.resize&&a.resize()};TextAreaPrototype=null;return c}({},v,z));l.register("$47",function(c,f,l){function p(a){var b=f.console;b&&b.error&&b.error(a)}function b(a){var b=l.createElement("div");a&&b.setAttribute("class",a);return b}function d(a){return function(){a.resize();
|
145 |
+
return this}}function a(a){return function(b){for(var d=b.target,c=d.$index;null==c&&"DIV"!==d.nodeName&&(d=d.parentElement);)c=d.$index;null!=c&&(b.stopImmediatePropagation(),a.select(c));return!0}}function e(a){return function(){a.redrawDirty()&&a.redraw();return!0}}function n(a){return function(b){var d;d=b.keyCode;if(40===d)d=1;else if(38===d)d=-1;else return!0;if(b.shiftKey||b.ctrlKey||b.metaKey||b.altKey)return!0;a.selectNext(d);b.stopPropagation();b.preventDefault();return!1}}function k(a,
|
146 |
+
b,d){function c(a){p("row["+a+"] disappeared");return{cellVal:function(){return""}}}return function(e){var g=b||0,f=d?-1:1,y=a.rows||[];e.sort(function(a,b){return f*(y[a]||c(a)).cellVal(g).localeCompare((y[b]||c(b)).cellVal(g))})}}function g(a){this.w=a}function m(a){this.t=a;this.length=0}function A(a,b,d){var c=l.createElement("div");c.className=d||"";this._=c;this.d=b||[];this.i=a||0;this.length=b.length}function B(a){this.live=a;this.rows=[]}c.create=function(a){return new g(a)};var s=g.prototype;
|
147 |
+
s.init=function(c){var g=this.w,q=g.id,f=g.splity(q+"-thead",q+"-tbody"),m=f[0],f=f[1],k=[],p=[],y=[],F=[];if(c)this.ds=c,this.idxs=p,this._idxs=null;else if(!(c=this.ds))throw Error("No datasource");m.css.push("wg-thead");f.css.push("wg-tbody");c.eachCol(function(a,b,d){y[a]=q+"-col-"+b;F[a]=d||b});for(var l=b(),s=-1,B=y.length,D=b("wg-cols"),v=m.splitx.apply(m,y);++s<B;)v[s].header(F[s]),D.appendChild(l.cloneNode(!1)).setAttribute("for",y[s]);c.eachRow(function(a,b,d){k[a]=new A(a,b,d);p[a]=a});
|
148 |
+
this.rows=k;this.cols=D;this.ww=null;this.root=l=f.body;this.head=m;m.redraw=d(this);m=f.fixed=v[0].bodyY()||20;g.lock().resize(m,f);g.css.push("is-table");g.restyle();this.sc?this._re_sort(B):c.sort&&c.sort(p);this.redrawDirty();this.render();h(l).attr("tabindex","-1").on("keydown",n(this)).on("mousedown",a(this)).on("scroll",e(this));return this};s.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};
|
149 |
+
s.render=function(){for(var a,b,d=[],c=this.rows||[],e=-1,g,f=this.idxs,y=f.length,m=this.idxr={},k=this.r,h=this._r,n=this.root,p=this.cols;++e<y;){0===e%100&&(a=p.cloneNode(!0),b=new B(a),b.h=2200,b.insert(n),d.push(b));g=f[e];m[g]=e;a=c[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);this.pages=d;this.mx=this.mn=null;this.redrawDirty();this.redraw();null==k?null!=h&&(a=c[h])&&a.page&&(delete this._r,this.select(h,!0)):(a=c[k])&&
|
150 |
+
a.page?this.select(k,!0):(this.deselect(),this._r=k);return this};s.resize=function(){var a=-1,b=this.ww||(this.ww=[]),d=this.w,c=d.cells[0],e=c.body.childNodes,g=e.length,f=this.pages||[],y=f.length;for(d.redraw.call(c);++a<g;)b[a]=e[a].style.width;if(y){d=this.mx;for(a=this.mn;a<=d;a++)f[a].widths(b);this.redrawDirty()&&this.redraw()}};s.redrawDirty=function(){var a=!1,b=this.root,d=b.scrollTop,b=b.clientHeight;this.sy!==d&&(a=!0,this.sy=d);this.vh!==b&&(a=!0,this.vh=b);return a};s.redraw=function(){for(var a=
|
151 |
+
0,b=-1,d=null,c=null,e=this.ww,g=this.sy,f=this.vh,y=this.mn,m=this.mx,k=Math.max(0,g-100),g=f+g+100,h=this.pages||[],n=h.length;++b<n&&!(a>g);)f=h[b],a+=f.height(),a<k||(null===d&&(d=b),c=b,f.rendered||f.render(e));if(y!==d){if(null!==y&&d>y)for(b=y;b<d;b++){f=h[b];if(!f)throw Error("Shit!");f.rendered&&f.sleep()}this.mn=d}if(m!==c){if(null!==m&&c<m)for(b=m;b>c;b--)f=h[b],f.rendered&&f.sleep();this.mx=c}};s.selected=function(){return this.r};s.thead=function(){return this.w.cells[0]};s.tbody=function(){return this.w.cells[1]};
|
152 |
+
s.tr=function(a){return(a=this.row(a))?a.cells():[]};s.row=function(a){return this.rows[a]};s.td=function(a,b){return this.tr(a)[b]};s.next=function(a,b,d){null==d&&(d=this.r||0);var c=this.idxs,e=c.length,g=(this.idxr||{})[d];for(d=g;d!==(g+=a)&&!(0<=g&&e>g);)if(b&&e)g=1===a?-1:e,b=!1;else return null;d=c[g];return null==d||null==this.rows[d]?(p("Bad next: ["+g+"] does not map to data row"),null):d};s.selectNext=function(a,b,d){a=this.next(a,b);null!=a&&this.r!==a&&this.select(a,d);return this};
|
153 |
+
s.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};s.selectRow=function(a,b){return this.select(this.idxs[a])};s.select=function(a,b){var d=this.rows[a],c=d&&d.page;if(!c)return this.deselect(!1),p("Row is filtered out"),this;this.deselect(!0);var e,g=this.w.cells[1];c.rendered||(e=c.top(),g.scrollY(e),this.redrawDirty()&&this.redraw());if(!d.rendered)return c.rendered||p("Failed to render page"),p("Row ["+
|
154 |
+
d.i+"] not rendered"),this;c=d.cells();h(c).addClass("selected");this.r=a;b||(e=g.scrollY(),h(this.root).focus(),e!==g.scrollY()&&g.scrollY(e));g.scrollTo(c[0],!0);this.w.fire("wgRowSelect",[a,d.data()]);return this};s.unfilter=function(){this._idxs&&(this.idxs=this._sort(this._idxs),this._idxs=null,this.clear().render());return this};s.filter=function(a){this._idxs||(this._idxs=this.idxs);this.idxs=this._sort(a);return this.clear().render()};s.each=function(a){for(var b,d=-1,c=this.rows||[],e=this.idxs||
|
155 |
+
[],g=e.length;++d<g;)b=e[d],a(c[b],d,b);return this};s.sortable=function(a){var b=this.sc||(this.sc=new m(this));b.has(a)||b.add(a);return this};s._re_sort=function(a){var b=-1,d=this.sc,c=d.active;for(this.sc=d=new m(this);++b<a;)d.add(b);c&&(b=this.head.indexOf(c.id),-1===b&&(b=Math.min(c.idx,a-1)),this.sort(b,c.desc));return this};s._sort=function(a,b){b?(this.s=b,b(a)):(b=this.s)&&b(a);return a};s.sort=function(a,b){this._sort(this.idxs,k(this,a,b));this.sc.activate(a,b);return this};s=null;s=
|
156 |
+
m.prototype;s.has=function(a){return null!=this[a]};s.add=function(a){var b=this,d=b.t.head.cells[a];b[a]={desc:null,idx:a,id:d.id};b.length++;d.addClass("wg-sortable").on("click",function(d){if("header"===d.target.nodeName.toLowerCase())return d.stopImmediatePropagation(),b.toggle(a),!1});return b};s.toggle=function(a){this.t.sort(a,!this[a].desc).clear().render();return this};s.activate=function(a,b){var d,c;d=this.active;var e=this[a],g=this.t.head.cells;d&&(c=g[d.idx])&&(c.removeClass(d.css),
|
157 |
+
d!==e&&c.restyle());(c=g[a])?(e.desc=b,this.active=e,d="wg-"+(b?"desc":"asc"),c.addClass(d).restyle(),e.css=d):this.active=null;return this};s=null;s=A.prototype;s.render=function(a){var b,d=[],c=this._,e=this.length;if(c){for(this.c=d;0!==e--;)b=c.cloneNode(!1),d[e]=this.update(e,b),b.$index=this.i,a[e].appendChild(b);this._=null}else for(d=this.c;0!==e--;)a[e].appendChild(d[e]);this.rendered=!0;return this};s.update=function(a,b){var d=b||this.c[a]||{},c=(this.d[a]||function(){})()||"\u00a0";null==
|
158 |
+
c.innerHTML?d.textContent=c:d.innerHTML=c.innerHTML;return d};s.cells=function(){return this.c||[]};s.data=function(){for(var a=-1,b=[],d=this.length;++a<d;)b[a]=this.cellVal(a);return b};s.destroy=function(){this.page=null;this.rendered=!1};s.cellVal=function(a){a=this.d[a]()||"";return String(a.textContent||a)};s=null;s=B.prototype;s.size=function(){return this.rows.length};s.insert=function(a){var d=this.h,c=b("wg-dead");c.style.height=String(d)+"px";a.appendChild(c);return this.dead=c};s.top=
|
159 |
+
function(){return(this.rendered?this.live:this.dead).offsetTop};s.height=function(){var a=this.h;null==a&&(this.h=a=this.rendered?this.live.firstChild.offsetHeight:this.dead.offsetHight);a||p("row has zero height");return a};s.render=function(a){for(var b,d=-1,c=this.rows,e=c.length,g=this.dead,f=this.live,y=f.childNodes;++d<e;)b=c[d],b.rendered||b.render(y);e=a.length;for(d=0;d<e;d++)y[d].style.width=a[d];g.parentNode.replaceChild(f,g);this.rendered=!0;this.h=null;return this};s.sleep=function(){var a=
|
160 |
+
this.height(),b=this.live,d=this.dead;d.style.height=String(a)+"px";b.parentNode.replaceChild(d,b);this.rendered=!1;this.h=a;return this};s.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};s.widths=function(a){for(var b=this.live.childNodes,d=a.length;0!==d--;)b[d].style.width=a[d];return this};s.destroy=function(){var a=this.rendered?this.live:this.dead,b=this.rows,d=b.length;for(a.parentNode.removeChild(a);0!==d--;)b[d].destroy()};
|
161 |
+
s=null;return c}({},v,z));l.register("$40",function(c,f,D){function p(a,b){var d=a.id,c=d&&s[d],e=c&&c.parent();if(!c||!e)return null;var g=e.dir===B,d=g?"X":"Y",f="page"+d,g=g?A:m,k=g(e.el),d=b["offset"+d],h=e.el,n=h.className;null==d&&(d=b[f]-g(a));d&&(k+=d);h.className=n+" is-resizing";return{done:function(){h.className=n},move:function(a){e.resize(a[f]-k,c);return!0}}}function b(b,d){function c(){h(D).off("mousemove",e);w&&(w.done(),w=null);return!0}function e(a){w?w.move(a):c();return!0}if(w)return!0;
|
162 |
+
w=p(b.target,b);if(!w)return!0;h(D).one("mouseup",c).on("mousemove",e);return a(b)}function d(a,b){var d=b.type;"touchmove"===d?w&&w.move(b):"touchstart"===d?w=p(a.target,b):"touchend"===d&&w&&(w.done(),w=null)}function a(a){a.stopPropagation();a.preventDefault();return!1}function e(a){var b=r;b&&b.redraw();a&&a.redraw();return r=a}function n(a,b){var d=h(b).on("editFocus",function(){d.trigger("wgFocus",[e(a)])}).on("editBlur",function(){d.trigger("wgBlur",[e(null)])})}function k(a){var b=a.id,d=
|
163 |
+
a.className;this.id=b;this.el=a;this.pos=this.index=0;this.css=[d||"wg-root","wg-cell"];this._cn=d;s[b]=this;this.clear()}var g=l.require("$18","html.js"),m=g.top,A=g.left,B=1,s={},r,w=!1;c.init=function(a){var c=new k(a);c.redraw();l.require("$45","touch.js").ok(function(b){b.dragger(a,d)});h(a).mousedown(b);return c};f=k.prototype;f.fire=function(a,b){var d=h.Event(a);d.cell=this;h(this.el).trigger(d,b);return this};f.each=function(a){for(var b=-1,d=this.cells,c=d.length;++b<c;)a(d[b],b);return this};
|
164 |
+
f.indexOf=function(a){return(a=s[a.id||String(a)])&&a.pid===this.id?a.index:-1};f.on=function(){return this.$("on",arguments)};f.off=function(){return this.$("off",arguments)};f.find=function(a){return h(this.el).find(a)};f.$=function(a,b){h.fn[a].apply(h(this.el),b);return this};f.addClass=function(a){this.css.push(a);return this};f.removeClass=function(a){a=this.css.indexOf(a);-1!==a&&this.css.splice(a,1);return this};f.parent=function(){return this.pid&&s[this.pid]};f.splitx=function(){return this._split(B,
|
165 |
+
arguments)};f.splity=function(){return this._split(2,arguments)};f._split=function(a,b){(this.length||this.field)&&this.clear();for(var d=-1,c,e=b.length,f=1/e,m=0;++d<e;){c=g.el();this.body.appendChild(c);for(var h=c,n=b[d],p=n,l=1;s[n];)n=p+"-"+ ++l;h.id=n;c=new k(c);c.index=d;c.pid=this.id;c._locale(this.lang,this.rtl);c.pos=m;m+=f;this.cells.push(c);this.length++}this.dir=a;this.redraw();return this.cells};f.destroy=function(){this.clear();delete s[this.id];var a=this.el;a.innerHTML="";this.body=
|
166 |
+
null;a.className=this._cn||"";h(a).off();return this};f.exists=function(){return this===s[this.id]};f.clear=function(){for(var a=this.el,b=this.cells,d=this.field,c=this.body,e=this.nav,f=this.length||0;0!==f--;)delete s[b[f].destroy().id];this.cells=[];this.length=0;e&&(a.removeChild(e),this.nav=null);c&&(d&&(g.ie()&&h(c).triggerHandler("blur"),d.destroy(),this.field=null),this.table&&(this.table=null),a.removeChild(c));this.body=a.appendChild(g.el("","wg-body"));this._h=null;return this};f.resize=
|
167 |
+
function(a,b){if(!b&&(b=this.cells[1],!b))return;var d=b.index,c=this.cells,e=h(this.el)[this.dir===B?"width":"height"](),g=c[d+1],d=c[d-1];pad=(b.body||b.el.firstChild).offsetTop||0;max=(g?g.pos*e:e)-pad;min=d?d.pos*e:0;b.pos=Math.min(max,Math.max(min,a))/e;this.redraw();return this};f.distribute=function(a){for(var b=-1,d=0,c,e=this.cells,g=a.length;++b<g&&(c=e[++d]);)c.pos=Math.max(0,Math.min(1,a[b]));this.redraw();return this};f.distribution=function(){for(var a=[],b=0,d=this.cells,c=d.length-
|
168 |
+
1;b<c;)a[b]=d[++b].pos;return a};f.restyle=function(){var a=this.css.concat();0===this.index?a.push("first"):a.push("not-first");this.dir&&(a.push("wg-split"),2===this.dir?a.push("wg-split-y"):a.push("wg-split-x"));this.t&&a.push("has-title");this.nav&&a.push("has-nav");this.field&&(a.push("is-field"),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};f.redraw=function(a){this.restyle();var b=this.el,d=this.body,
|
169 |
+
c=this.field;if(d){var e,g=b.clientWidth||0,f=b.clientHeight||0,m=d.offsetTop||0,f=m>f?0:f-m;this._h!==f&&(this._h=f,d.style.height=String(f)+"px",e=c);this._w!==g&&(this._w=g,e=c);e&&e.redraw()}d=this.length;g=1;f=this.nav;for(m=2===this.dir?"height":"width";0!==d--;)c=this.cells[d],f?e=1:(c.fixed&&(c.pos=c.fixed/h(b)[m]()),e=g-c.pos,g=c.pos),c.el.style[m]=String(100*e)+"%",c.redraw(a);return this};f.contents=function(a,b){var d=this.el,c=this.body;if(null==a)return c.innerHTML;this.length?this.clear():
|
170 |
+
c&&(d.removeChild(c),c=null);c||(this.body=c=d.appendChild(g.el("",b||"wg-content")),this._h=null,(d=this.lang)&&this._locale(d,this.rtl,!0));"string"===typeof a?h(c)._html(a):a&&this.append(a);this.redraw();return this};f.textarea=function(a,b){var d=this.field;if(d){var c=d.editable();d.reload(a,b);c!==b&&this.restyle()}else this.length&&this.clear(),c=g.el("textarea"),c.setAttribute("wrap","virtual"),c.value=a,this.contents(c),d=l.require("$46","field.js")._new(c)[b?"enable":"disable"](),n(this,
|
171 |
+
c),this.field=d,this.restyle();this.lang||this.locale("en");return d};f.locale=function(a){a=l.require("$38","locale.js").cast(a);return this._locale(String(a),a.isRTL())};f._locale=function(a,b,d){var c=this.body;if(d||a!==this.lang)this.lang=a,c&&c.setAttribute("lang",a);if(d||b!==this.rtl)this.rtl=b,c&&c.setAttribute("dir",b?"RTL":"LTR");return this};f.editable=function(){var a=this.field;if(a)return a.editable()?a:null;var b=this.cells,d=b.length,c=this.navigated();if(null!=c)return b[c].editable();
|
172 |
+
for(;++c<d;){for(c=0;c<d;d++);if(a=b[c].editable())return a}};f.eachTextarea=function(a){var b=this.field;b?a(b):this.each(function(b){b.eachTextarea(a)});return this};f.append=function(a){a&&(a.nodeType?g.init(this.body.appendChild(a)):g.init(h(a).appendTo(this.body)));return this};f.prepend=function(a){var b=this.body;if(a.nodeType){var d=b.firstChild;g.init(d?b.insertBefore(a,d):b.appendChild(a))}else g.init(h(a).prependTo(b));return this};f.before=function(a){var b=this.body;a.nodeType?g.init(this.el.insertBefore(a,
|
173 |
+
b)):g.init(h(a).insertBefore(b));return this};f.header=function(a,b){if(null==a&&null==b)return this.el.getElementsByTagName("header")[0];this.t=g.txt(a||"");this.el.insertBefore(g.el("header",b),this.body).appendChild(this.t);this.redraw();return this};f.title=function(a){var b=this.t;if(b)return b.nodeValue=a||"",b;this.header(a);return this.t};f.titled=function(){var a=this.t;return a&&a.nodeValue};f.bodyY=function(){return m(this.body,this.el)};f.scrollY=function(a){if(S===a)return this.body.scrollTop;
|
174 |
+
this.body.scrollTop=a};f.tabulate=function(a){var b=this.table;b?b.clear():b=l.require("$47","wgtable.js").create(this);b.init(a);return this.table=b};f.lock=function(){this.body.className+=" locked";return this};f.scrollTo=function(a,b){var d,c=this.body;d=c.scrollTop;var e=m(a,c);if(d>e)d=e;else{var g=c.clientHeight,e=e+h(a).outerHeight();if(g+d<e)d=e-g;else return}b?c.scrollTop=d:h(c).stop(!0).animate({scrollTop:d},250)};f.navigize=function(b,d){function c(a){var b=f[a],d=k[a],e=h(b.el).show();
|
175 |
+
d.addClass("active");m=a;n.data("idx",a);b.fire("wgTabSelect",[a]);return e}var e=this,f=e.cells,y=e.nav,m,k=[];y&&e.el.removeChild(y);var y=e.nav=e.el.insertBefore(g.el("nav","wg-tabs"),e.body),n=h(y).on("click",function(b){var d=h(b.target).data("idx");if(null==d)return!0;if(null!=m){var g=k[m];h(f[m].el).hide();g.removeClass("active")}c(d);e.redraw();return a(b)});null==d&&(d=n.data("idx")||0);e.each(function(a,d){k[d]=h('<a href="#'+a.id+'"></a>').data("idx",d).text(b[d]).appendTo(n);a.pos=0;
|
176 |
+
h(a.el).hide()});c(f[d]?d:0);e.lock();e.redraw();return e};f.navigated=function(){var a=this.nav;if(a)return h(a).data("idx")};f=null;return c}({},v,z));l.register("$24",function(c,f,D){function p(a){var b=[];a&&(a.saved()||b.push("po-unsaved"),a.fuzzy()?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 b(a,b,d){b=h(a.title(b).parentNode);var c=b.find("span.lang");d?(d=l.require("$38","locale.js").cast(d),
|
177 |
+
c.length||(c=h("<span></span>").prependTo(b)),c.attr("lang",d.lang).attr("class",d.getIcon()||"lang region region-"+(d.region||"zz").toLowerCase())):(c.remove(),d="en");a.locale(d);return b}function d(){this.dirty=0}var a="poUpdate",e="changing",n="changed",k=0,g=1,m=2,A=3,B=4,s=5,r=/^\s+/,w,q,C=l.require("$3","string.js").sprintf,v=l.require("$18","html.js");c.extend=function(a){return a.prototype=new d};c.localise=function(a){q=a;return c};var z=function(){var a=D.createElement("p");return function(b){a.innerHTML=
|
178 |
+
b.replace("src=","x=");return a.textContent}}(),u=d.prototype=l.require("$39","abstract.js").init(["getListColumns","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=q||l.require("$1","t.js").init());var b=[];b[k]=a._x("Source text","Editor")+":";b[A]=a._x("%s translation","Editor")+":";b[B]=a._x("Context","Editor")+":";b[s]=a._x("Comments","Editor")+":";b[g]=
|
179 |
+
a._x("Single","Editor")+":";b[m]=a._x("Plural","Editor")+":";b[6]=a._x("Untranslated","Editor");b[7]=a._x("Translated","Editor");b[8]=a._x("Fuzzy","Editor");this.labels=b;this.t=a;return this};u.setRootCell=function(a){function b(a){d.redraw(!0,a);return!0}var d=l.require("$40","wingrid.js").init(a);h(f).on("resize",b);this.redraw=b;h(a).on("wgFocus wgBlur",function(a,b){a.stopPropagation();w=b});this.destroy=function(){d.destroy();h(f).off("resize",b)};this.rootDiv=a;return d};u.$=function(){return h(this.rootDiv)};
|
180 |
+
u.setListCell=function(a){var b=this;b.listCell=a;a.on("wgRowSelect",function(a,d){b.loadMessage(b.po.row(d));return!0}).on("wgRowDeselect",function(a,d,c){c||b.loadNothing();return!0})};u.setSourceCell=function(a){this.sourceCell=a};u.setTargetCell=function(a){this.targetCell=a};u.next=function(a,b,d){for(var c=this.listTable,e=c.selected(),g=e,f,m=this.po;null!=(e=c.next(a,d,e));){if(g===e){e=null;break}if(b&&(f=m.row(e),f.translated(0)))continue;break}null!=e&&c.select(e,!0);return e};u.current=
|
181 |
function(a){var b=this.active;if("undefined"===typeof a)return b;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&&
|
182 |
+
this.contextCell&&this.contextCell.editable()};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,d=b.length,c=this.dict;for(c.clear();++a<d;)c.add(a,b[a].toText())};u.filtered=function(){return this.lastSearch||""};u.filter=function(a,b){var d,c=this.listTable,e=this.lastFound,g=this.lastSearch;
|
183 |
+
if(a){if(g===a)return e||0;if(g&&!e&&0===a.indexOf(g))return 0;d=this.dict.find(a)}this.lastSearch=g=a;this.lastFound=e=d?d.length:this.po.length;d?c.filter(d):c.unfilter();b||this.fire("poFilter",[g,e]);return e};u.countFiltered=function(){return this.lastSearch?this.lastFound:this.po.length};u.unsave=function(a,b){var d=!1;if(a=a||self.active){if(d=a.saved(b))this.dirty++,a.unsave(b),this.fire("poUnsaved",[a,b]);this.markUnsaved(a)}return d};u.markUnsaved=function(a){var b=this.po.indexOf(a);if(b=
|
184 |
+
this.listTable.tr(b)){var d=b[0].className;a=d.replace(/(?:^| +)po-[a-z]+/g,"")+" "+p(a);a!==d&&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 d=this.handle;if(d&&d[a]&&(d=d[a].apply(this,b||[]),!1===d))return!1;d=h.Event(a);this.$().trigger(d,b);return!d.isDefaultPrevented()};u.on=function(a,b){this.$().on(a,b);
|
185 |
+
return this};u.getSorter=function(){return null};u.reload=function(){var a=this,b,d=a.listCell,c=a.listTable,e=a.po,g=e&&e.locale(),f=g&&g.isRTL(),m=e&&e.length||0;if(!e||!e.row)return d&&d.clear().header("Error").contents("Invalid messages list"),!1;a.lastSearch&&(a.lastSearch="",a.lastFound=m,a.fire("poFilter",["",m]));c&&(b=c.thead().distribution());a.listTable=c=d.tabulate({eachCol:function(b){var d,c,e=a.getListColumns(),g=a.getListHeadings();for(c in e)d=e[c],b(d,c,g[d])},eachRow:function(b){e.each(function(d,
|
186 |
+
c){b(c.idx,a.getListEntry(c),p(c))})},sort:a.getSorter()});var k,d=a.getListColumns();for(k in d)c.sortable(d[k]);b&&c.thead().distribute(b);c.tbody().$(f?"addClass":"removeClass",["is-rtl"]);a.targetLocale=g;a.fire("poLoad");return!!m};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,d=0;(b=this.sourceCell)&&b.eachTextarea(function(b){b.val(a.source(null,d++))});
|
187 |
+
(b=this.contextCell)&&b.eachTextarea(function(b){b.val(a.context())});if(b=this.targetCell)d=0,b.eachTextarea(function(b){b.val(a.translation(d++))});this.updateListCell(a,"source");this.updateListCell(a,"target");return this};u.reloadMessage=function(a){var b=this.sourceCell,d=this.targetCell,c;this.pasteMessage(a);b&&this.setNotes(a,b)&&b.redraw();d&&(c=d.navigated()||0,c=this.setErrors(a.errors(c),d),!b&&this.setNotes(a,d)&&(c=!0),c&&d.redraw());return this};u.setStatus=function(){return null};
|
188 |
+
u.setNotes=function(a,b){var d;d=!1;var c=this.$notes,e=this.labels,g=a.notes(),f=a.context();g||f?(c||(c=b.find("p.notes"),c.length||(c=h('<p class="notes"></p>').insertAfter(b.header())),this.$notes=c),d=[],f&&d.push(e[B]+" <mark>"+v.h(f)+"</mark>"),g&&d.push(v.h(g,!0)),c.html(d.join("\n")).show(),v.init(c),d=!0):c&&c.text()&&(c.text("").hide(),d=!0);return d};u.setErrors=function(a,b){var d=!1,c=this.$errs;a&&a.length?(c||(c=b.find("p.errors"),c.length||(c=h('<p class="errors"></p>').insertAfter(this.targetCell.header())),
|
189 |
+
this.$errs=c),c.html(v.h(a.join(".\n")+".",!0)).show(),v.init(c),d=!0):c&&c.text()&&(c.text("").hide(),d=!0);return d};u.loadMessage=function(d){function c(a,b){var d=b?a.split(" "):a.split(" ",1);a=d[0];"="===a.charAt(0)&&(a=a.substr(1),a=["zero","one","two"][Number(a)]||a);d[0]=a.charAt(0).toUpperCase()+a.substr(1).toLowerCase();return d.join(" ")}function f(a,e){var n=S,p=O[k];a.off();a.titled()!==p&&b(a,p,e||"en");p=!1;u.setNotes(d,a)&&(p=!0);if(d.plural()){var p=-1,l=[],r=[],q=a.id+"-",s=d.sourceForms()||
|
190 |
+
e&&e.plurals||["One","Other"],A=s.length;if(2!==A||"="===s[0].charAt(0)&&"=1"!==s[0])for(;++p<A;)l[p]=q+String(p),r[p]=c(s[p])+":";else l=[q+"-0",q+"-1"],r=[O[g],O[m]];a.splity.apply(a,l);a.each(function(a,b){a.header(r[b]).textarea(d.source(null,b),n).setStrf(H).setMode(v).setInvs(z)});a.lock();n&&a.each(function(a,b){h(a,b)})}else p&&a.redraw(),a.textarea(d.source(),n).setStrf(H).setMode(v).setInvs(z),n&&h(a,0)}function h(b,c){b.on(e,function(a,b){d.source(b,c);0===c&&u.updateListCell(d,"source");
|
191 |
+
u.unsave(d,c)}).on(n,function(){0===c&&u.po.reIndex(d);u.dict&&u.rebuildSearch();u.fire(a,[d])})}function p(a,e,g){P&&a.eachTextarea(function(a){a.ping()});a.off();var f=e.isKnown()&&e.label||"Target",f=C(O[A],f);a.titled()!==f&&b(a,f,e);f=!1;!this.sourceCell&&u.setNotes(d,a)&&(f=!0);u.setErrors(d.errors(g),a)&&(f=!0);u.setStatus(d,g);if(d.pluralized()){var m=[],k=[],h=a.id+"-",n=d.targetForms()||e.plurals||["One","Other"],f=n.length,r=function(a){var b=n[a];k.push(b?c(b,!0):"Form "+a);m.push(h+String(a))};
|
192 |
+
for(d.each(r);(e=m.length)<f;)r(e);a.splitx.apply(a,m);a.each(function(a,b){var c=P&&!d.disabled(b);a.textarea(d.translation(b),c).setStrf(H).setMode(v).setInvs(z);P&&l(a,b)});a.navigize(k,g||null).on("wgTabSelect",function(b,c){var e=P&&b.cell.editable();e&&e.focus();u.setErrors(d.errors(c),a);u.setStatus(d,c);u.fire("poTab",[c])})}else f&&a.redraw(),a.textarea(d.translation(),P&&!d.disabled(0)).setStrf(H).setMode(v).setInvs(z),P&&l(a,0)}function l(b,c){b.on(e,function(a,b,e){d.translate(b,c);0===
|
193 |
+
c&&u.updateListCell(d,"target");d.fuzzy(c)?u.fuzzy(!1,d,c):u.unsave(d,c);""===b?u.fire("poEmpty",[!0,d,c]):""===e&&u.fire("poEmpty",[!1,d,c])}).on(n,function(){u.dict&&u.rebuildSearch();u.fire(a,[d])})}function r(c){c.off();var g=O[B];c.titled()!==g&&(b(c,g),u.setStatus(null));c.textarea(d.context(),!0).setMode(v).setInvs(z);X&&c.on(e,function(a,b){d.context(b);u.updateListCell(d,"source");u.unsave(d,R)}).on(n,function(){u.po.reIndex(d);u.dict&&u.rebuildSearch();u.fire(a,[d])})}function q(a){var c=
|
194 |
+
O[s];a.titled()!==c&&b(a,c);a.off().on(e,function(a,b){d.comment(b);u.fire("poComment",[d,b]);u.unsave(d,R)}).textarea(d.comment(),!0)}var u=this,v=u.mode,D=d.isHTML(),z=u.inv||!1,E=this.fmt||null,H=d.format()||null,G=d.is(u.active),R=0,L=u.sourceCell,T=u.targetCell,U=u.contextCell,V=u.commentCell,P=u.editable.target,S=u.editable.source,X=u.editable.context,Q=w,Y=u.sourceLocale,W=u.targetLocale,O=u.labels;u.html!==D&&(u.html=D,"code"!==u.mode&&(v=D?"html":"",u.setMode(v)));u.active=d;L&&f(L,Y);U&&
|
195 |
+
r(U);T&&W&&(R=T.navigated()||0,p(T,W,R));V&&q(V);Q&&(Q.exists()||(Q=Q.parent()),(D=Q.editable())&&D.focus());E!==H&&(this.fmt=H);G||u.fire("poSelected",[d])};u.unloadActive=function(){var a;(a=this.$notes)&&a.text("").hide();(a=this.$errs)&&a.text("").hide();(a=this.sourceCell)&&a.off().clear();(a=this.contextCell)&&a.off().clear();(a=this.targetCell)&&a.off().clear();(a=this.commentCell)&&a.off();this.active&&(this.fire("poDeselected",[this.active]),this.active=null);return this};u.loadNothing=function(){var a,
|
196 |
+
b=this.t,d=this.mode||"",c=this.inv||!1,e=this.fmt;this.unloadActive();this.setStatus(null);(a=this.commentCell)&&a.textarea("",!1);if(a=this.sourceCell)a.textarea("",!1).setStrf(e).setMode(d).setInvs(c),a.title(b._x("Source text not loaded","Editor")+":");if(a=this.contextCell)a.textarea("",!1).setMode(d).setInvs(c),a.title(b._x("Context not loaded","Editor")+":");if(a=this.targetCell)a.textarea("",!1).setStrf(e).setMode(d).setInvs(c),a.title(b._x("Translation not loaded","Editor")+":");this.fire("poSelected",
|
197 |
+
[null])};u.updateListCell=function(a,b){var d=this.getListColumns()[b],c=this.po.indexOf(a);(c=this.listTable.row(c))&&c.update(d)};u.cellText=function(a){if(-1!==a.indexOf("<")||-1!==a.indexOf("&"))a=z(a);return a.replace(r,"")||"\u00a0"};u.fuzzy=function(a,b,d){var c=4===this.flag(null,b,d);!0!==a||c?!1===a&&c&&this.flag(0,b,d)&&this.fire("poFuzzy",[b,!1,d]):this.flag(4,b,d)&&this.fire("poFuzzy",[b,!0,d]);return c};u.flag=function(b,d,c){if(!d){d=this.active;c=this.getTargetOffset();if(null==c)return null;
|
198 |
+
c&&d.targetForms()&&(c=0)}var e=d.flagged(c);if(null==b)return e;if(e===b||b&&!d.translated(c)||!this.fire("poFlag",[b,e,d,c]))return!1;d.flag(b,c);this.fire(a,[d])&&this.unsave(d,c);this.setStatus(d,c);return!0};u.add=function(b,d){var c,e=this.po.get(b,d);e?c=this.po.indexOf(e):(c=this.po.length,e=this.po.add(b,d),this.load(this.po,-1),this.fire("poAdd",[e]),this.fire(a,[e]));this.lastSearch&&this.filter("");this.listTable.select(c);return e};u.del=function(b){if(b=b||this.active){var d=this.lastSearch,
|
199 |
+
c=this.po.del(b);null!=c&&(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&&(d&&this.filter(d),this.active||(c=Math.min(c,this.po.length-1),this.listTable.select(c))))}};u.setMono=function(a){return this.setMode(a?"code":this.html?"html":"")};u.setMode=function(a){this.mode!==a&&(this.mode=a,this.callTextareas(function(b){b.setMode(a)}));return this};u.getMono=function(){return"code"===
|
200 |
+
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();a&&a.focus();return this};u=null;return c}({},v,z));l.register("$25",function(c,f,h){Number.prototype.format=
|
201 |
+
function(c){c=Math.pow(10,c||0);var b=Math.round(c*this)/c;c=[];var b=String(b),d=b.split("."),b=d[0],d=d[1],a=b.length;do c.unshift(b.substring(a-3,a));while(0<(a-=3));b=c.join(",");if(c=d){c=d;for(var e,d=c.length;"0"===c.charAt(--d);)e=d;e&&(c=substring(0,e));c=d=c}c&&(b+="."+d);return b};Number.prototype.percent=function(c){var b=0,d=this&&c?100*(this/c):0;if(0===d)return"0";if(100===d)return"100";if(99<d)d=Math.min(d,99.9),c=d.format(++b);else if(0.5>d){d=Math.max(d,1E-4);do c=d.format(++b);
|
202 |
+
while("0"===c&&4>b);c=c.substr(1)}else c=d.format(0);return c};return c}({},v,z));l.register("$12",function(c,f,h){function p(){this.init()._validate();this.sourceLocale={lang:"en",label:"English",plurals:["One","Other"]}}f=l.require("$24","base.js");l.require("$25","number.js");c.init=function(b){var d=new p;b=d.setRootCell(b);var a=b.splity("po-list","po-edit"),c=a[0],f=a[1],a=f.splitx("po-trans","po-comment"),k=a[0],g=a[1].header("Loading.."),a=k.splity("po-source","po-target"),k=a[0].header("Loading.."),
|
203 |
+
a=a[1].header("Loading..");b.distribute([0.34]);f.distribute([0.8]);d.setListCell(c);d.setSourceCell(k);d.setTargetCell(a);d.commentCell=g;d.editable.source=!1;return d};f=p.prototype=f.extend(p);f.getListHeadings=function(){var b=this.t||{_x:function(b){return b}};return[b._x("Source text","Editor"),b._x("Translation","Editor")]};f.getListColumns=function(){return{source:0,target:1}};f.getListEntry=function(b){var d=this.cellText;return[function(){var a,c=d(b.source()||""),f=b.context();return f?
|
204 |
+
(a=h.createElement("p"),a.appendChild(h.createElement("mark")).innerText=f,a.appendChild(h.createTextNode("\u00a0"+c)),a):c},function(){return d(b.translation()||"")}]};f.stats=function(){var b=this.po,d=b.length,a=0,c=0,f=0;b.each(function(b,d){d.fuzzy()?f++:d.translated()?a++:c++});return{t:d,p:a.percent(d)+"%",f:f,u:c}};f.unlock=function(){this._unlocked||(this._unlocked=this.targetLocale,delete this.targetLocale,this.po&&this.po.unlock(),this.editable={source:!0,context:!0,target:!1},this.contextCell=
|
205 |
+
this.targetCell,delete this.targetCell,this.fire("poLock",[!1]),this.active&&this.loadMessage(this.active))};f.lock=function(){var b;this._unlocked&&(b=this.targetLocale=this._unlocked,delete this._unlocked,this.po&&this.po.lock(b),this.editable={source:!1,context:!1,target:!0},this.targetCell=this.contextCell,delete this.contextCell,this.fire("poLock",[!0,b]),this.active&&this.loadMessage(this.active))};f.locked=function(){return!this._unlocked};f.getSorter=function(){function b(a,b){var c=a.weight(),
|
206 |
+
g=b.weight();return c===g?d(a,b):c>g?-1:1}function d(a,b){return a.hash().localeCompare(b.hash())}var a=this;return function(c){var f=a.po,k=a.locked()?b:d;c.sort(function(a,b){return k(f.row(a),f.row(b))})}};return c}({},v,z));l.register("$13",function(c,f,l){var p={copy:66,clear:75,save:83,fuzzy:85,next:40,prev:38,enter:13,invis:73},b={38:!0,40:!0,73:!0},d={66:function(a,b){var d=b.current();d&&(d.normalize(),b.focus().pasteMessage(d))},75:function(a,b){var d=b.current();d&&(d.untranslate(),b.focus().pasteMessage(d))},
|
207 |
+
85:function(a,b){b.focus().fuzzy(!b.fuzzy())},13:function(a,b){b.getFirstEditable()&&b.next(1,!0,!0)},40:function(a,b){var d=a.shiftKey;b.next(1,d,d)},38:function(a,b){var d=a.shiftKey;b.next(-1,d,d)},73:function(a,b){if(!a.shiftKey)return!1;b.setInvs(!b.getInvs())}};c.init=function(a,c){function n(c){if(c.isDefaultPrevented()||!c.metaKey&&!c.ctrlKey)return!0;var e=c.which;if(!k[e])return!0;var f=d[e];if(!f)throw Error("command undefined #"+e);if(c.altKey||c.shiftKey&&!b[e]||!1===f(c,a))return!0;
|
208 |
+
c.stopPropagation();c.preventDefault();return!1}var k={};h(c||f).on("keydown",n);return{add:function(a,b){d[p[a]]=b;return this},enable:function(){var a,b;for(b in arguments)a=p[arguments[b]],k[a]=!0;return this},disable:function(){h(c||f).off("keydown",n);a=c=k=null}}};return c}({},v,z));l.register("$26",function(c,f,h){function l(){this.reIndex([])}c.init=function(){return new l};f=l.prototype;f.reIndex=function(b){for(var d={},a=-1,c=b.length;++a<c;)d[b[a]]=a;this.keys=b;this.length=a;this.ords=
|
209 |
+
d};f.key=function(b,d){if(null==d)return this.keys[b];var a=this.keys[b],c=this.ords[d];if(d!==a){if(null!=c)throw Error("Clash with item at ["+c+"]");this.keys[b]=d;delete this.ords[a];this.ords[d]=b}return b};f.indexOf=function(b){b=this.ords[b];return null==b?-1:b};f.add=function(b,d){var a=this.ords[b];null==a&&(this.keys[this.length]=b,a=this.ords[b]=this.length++);this[a]=d;return a};f.get=function(b){return this[this.ords[b]]};f.has=function(b){return null!=this.ords[b]};f.del=function(b){this.cut(this.ords[b],
|
210 |
+
1)};f.cut=function(b,d){d=d||1;var a=[].splice.call(this,b,d);this.keys.splice(b,d);this.reIndex(this.keys);return a};f.each=function(b){for(var d=-1,a=this.keys,c=this.length;++d<c;)b(a[d],this[d],d);return this};f.sort=function(b){for(var d=-1,a=this.length,c,f=this.keys,k=this.ords,g=[];++d<a;)g[d]=[this[d],f[d]];g.sort(function(a,d){return b(a[0],d[0])});for(d=0;d<a;d++)c=g[d],this[d]=c[0],c=c[1],f[d]=c,k[c]=d;return this};f.join=function(b){return[].join.call(this,b)};f=null;return c}({},v,z));
|
211 |
+
l.register("$27",function(c,f,h){function l(b,d){var a=RegExp("^.{0,"+(b-1)+"}["+d+"]"),c=RegExp("^[^"+d+"]+");return function(d,f){for(var g=d.length,m;g>b;){m=a.exec(d)||c.exec(d);if(null==m)break;m=m[0];f.push(m);m=m.length;g-=m;d=d.substr(m)}0!==g&&f.push(d);return f}}c.create=function(b){function d(a){return m[a]||"\\"+a}var a,c,f=/(?:\r\n|[\r\n\v\f\u2028\u2029])/g,h=/[ \r\n]+/g,g=/[\t\v\f\x07\x08\\\"]/g,m={"\t":"\\t","\v":"\\v","\f":"\\f","\u0007":"\\a","\b":"\\b"};if(null==b||isNaN(b=Number(b)))b=
|
212 |
+
79;0<b&&(a=l(b-3," "),c=l(b-2,"-\u2013 \\.,:;\\?!\\)\\]\\}\\>"));return{pair:function(a,m){if(!m)return a+' ""';m=m.replace(g,d);var h=0;m=m.replace(f,function(){h++;return"\\n\n"});if(!(h||b&&b<m.length+a.length+3))return a+' "'+m+'"';var k=[a+' "'],l=m.split("\n");if(c)for(var p=-1,v=l.length;++p<v;)c(l[p],k);else k=k.concat(l);return k.join('"\n"')+'"'},prefix:function(a,b){var d=a.split(f);return b+d.join("\n"+b)},refs:function(b){b=b.replace(h," ",b);a&&(b=a(b,[]).join("\n#: "));return"#: "+
|
213 |
+
b}}};return c}({},v,z));l.register("$41",function(c,f,h){function l(){this.length=0}c.init=function(){return new l};f=l.prototype;f.push=function(b){this[this.length++]=b;return this};f.sort=function(b){[].sort.call(this,b);return this};f.each=function(b){for(var d=-1,a=this.length;++d<a;)b(d,this[d]);return this};return c}({},v,z));l.register("$28",function(c,f,h){function p(){}c.extend=function(b){return b.prototype=new p};f=p.prototype=l.require("$39","abstract.js").init(["add","load"]);f.row=
|
214 |
function(b){return this.rows[b]};f.lock=function(b){return this.locale(b||{lang:"zxx",label:"Unknown",nplurals:1,pluraleq:"n!=1"})};f.unlock=function(){var b=this.loc;this.loc=null;return b};f.locale=function(b){null==b?b=this.loc:this.loc=b=l.require("$38","locale.js").cast(b);return b};f.each=function(b){this.rows.each(b);return this};f.indexOf=function(b){"object"!==typeof b&&(b=this.get(b));if(!b)return-1;null==b.idx&&(b.idx=this.rows.indexOf(b.hash()));return b.idx};f.get=function(b){return this.rows&&
|
215 |
+
this.rows.get(b)};f.del=function(b){b=this.indexOf(b);if(-1!==b){var d=this.rows.cut(b,1);if(d&&d.length)return this.length=this.rows.length,this.rows.each(function(a,b,d){b.idx=d}),b}};f.reIndex=function(b,d){var a=this.indexOf(b),c=b.hash(),f=this.rows.indexOf(c);return f===a?a:-1!==f?(d=(d||0)+1,b.source("Error, duplicate "+String(d)+": "+b.source()),this.reIndex(b,d)):this.rows.key(a,c)};f.sort=function(b){this.rows.sort(b);return this};f["export"]=function(){for(var b=-1,d=this.rows,a=d.length,
|
216 |
+
c=l.require("$41","list.js").init();++b<a;)c.push(d[b]);return c};f=null;return c}({},v,z));l.register("$29",function(c,f,h){function l(){this.xcmt=this.cmt=this.ref=this._id=this.id=""}c.extend=function(b){return b.prototype=new l};f=l.prototype;f.flag=function(b,d){var a=this.flg||(this.flg=[]);if(null!=d)a[d]=b;else for(var c=Math.max(a.length,this.src.length,this.msg.length);0!==c--;)a[c]=b;return this};f.flagged=function(b){var d=this.flg||[];if(null!=b)return d[b]||0;for(b=d.length;0!==b--;)if(d[b])return!0;
|
217 |
+
return!1};f.flags=function(){for(var b,d={},a=[],c=this.flg||[],f=c.length;0!==f--;)b=c[f],d[b]||(d[b]=!0,a.push(b));return a};f.flaggedAs=function(b,d){var a=this.flg||[];if(null!=d)return b===a[d]||0;for(var c=a.length;0!==c--;)if(a[c]===b)return!0;return!1};f.fuzzy=function(b,d){var a=this.flaggedAs(4,b);null!=d&&this.flag(d?4:0,b);return a};f.source=function(b,d){if(null==b)return this.src[d||0]||"";this.src[d||0]=b;return this};f.plural=function(b,d){if(null==b)return this.src[d||1]||"";this.src[d||
|
218 |
+
1]=b||"";return this};f.sourceForms=function(){return this.srcF};f.targetForms=function(){return this.msgF};f.each=function(b){for(var d=-1,a=this.src,c=this.msg,f=Math.max(a.length,c.length);++d<f;)b(d,a[d],c[d]);return this};f.count=function(){return Math.max(this.src.length,this.msg.length)};f.pluralized=function(){return 1<this.src.length||1<this.msg.length};f.translate=function(b,d){this.msg[d||0]=b||"";return this};f.untranslate=function(b){if(null!=b)this.msg[b]="";else{var d=this.msg,a=d.length;
|
219 |
+
for(b=0;b<a;b++)d[b]=""}return this};f.translation=function(b){return this.msg[b||0]||""};f.errors=function(b){return this.err&&this.err[b||0]||[]};f.translated=function(b){if(null!=b)return!!this.msg[b];var d=this.msg,a=d.length;for(b=0;b<a;b++)if(!d[b])return!1;return!0};f.untranslated=function(b){if(null!=b)return!this.msg[b];var d=this.msg,a=d.length;for(b=0;b<a;b++)if(d[b])return!1;return!0};f.comment=function(b){if(null==b)return this.cmt;this.cmt=b||"";return this};f.notes=function(b){if(null==
|
220 |
b)return this.xcmt;this.xcmt=b||"";return this};f.refs=function(b){if(null==b)return this.ref;this.ref=b||"";return this};f.format=function(b){if(null==b)return this.fmt;this.fmt=b;return this};f.context=function(b){if(null==b)return this.ctx||"";this.ctx=b||"";return this};f.toString=f.toText=function(){return this.src.concat(this.msg,[this.id,this.ctx]).join(" ")};f.weight=function(){var b=0;this.translation()||(b+=2);this.fuzzy()&&(b+=1);return b};f.equals=function(b){return this===b||this.hash()===
|
221 |
+
b.hash()};f.hash=function(){return this.id};f.normalize=function(){for(var b=this.msg.length;0!==b--;)this.msg[b]=this.src[b]||""};f.disabled=function(b){return!!(this.lck||[])[b||0]};f.disable=function(b){(this.lck||(this.lck=[]))[b||0]=!0;return this};f.saved=function(b){var d=this.drt;if(!d)return!0;if(null!=b)return!d[b];for(b=d.length;0!==b--;)if(d[b])return!1;return!0};f.unsave=function(b){(this.drt||(this.drt=[]))[b||0]=!0;return this};f.save=function(b){var d=this.drt;null==b?this.drt=null:
|
222 |
+
d[b]=!1;return this};f.is=function(b){return b&&(b===this||b.idx===this.idx)};f.isHTML=function(b){if(null==b)return this.htm||!1;this.htm=b};f=null;return c}({},v,z));l.register("$14",function(c,f,h){function p(a){return{"Project-Id-Version":"PACKAGE VERSION","Report-Msgid-Bugs-To":"","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"}}
|
223 |
+
function b(a,b){var d=a||"";b&&(d+="\x00"+b);return d}function d(){return l.require("$26","collection.js").init()}function a(a){var b=f.console;b&&b.error&&b.error(a.message||String(a))}function e(a){return l.require("$27","format.js").create(a)}function n(a){this.locale(a);this.length=0;this.rows=d();this.head=p(this.now())}function k(a,b){this.src=[a||""];this.msg=[b||""]}c.create=function(a){return new n(a)};h=l.require("$28","messages.js").extend(n);h.now=function(){function a(b,d){for(var c=
|
224 |
+
String(b);c.length<d;)c="0"+c;return c}var b=new Date,d=b.getUTCFullYear(),c=b.getUTCMonth()+1,e=b.getUTCDate(),f=b.getUTCHours(),b=b.getUTCMinutes();return a(d,4)+"-"+a(c,2)+"-"+a(e,2)+" "+a(f,2)+":"+a(b,2)+"+0000"};h.header=function(a,b){var d=this.head||(this.head={});if(null==b)return this.headers()[a]||"";d[a]=b||"";return this};h.headers=function(a){var b,d=this.now(),c=this.head||(this.head=p(d));if(null!=a){for(b in a)c[b]=a[b];return this}var e=this.locale();a={};for(b in c)a[b]=String(c[b]);
|
225 |
+
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"]="YEAR-MO-DA HO:MI+ZONE",b="POT-Creation-Date");a[b]||(a[b]=d);a["X-Generator"]="Loco https://localise.biz/";return a};h.get=function(a,d){var c=b(a,d);return this.rows.get(c)};h.add=function(b,d){b instanceof k||(b=new k(b));d&&b.context(d);
|
226 |
+
var c=b.hash();this.rows.get(c)?a("Duplicate message at index "+this.indexOf(b)):(b.idx=this.rows.add(c,b),this.length=this.rows.length);return b};h.load=function(b){for(var d=-1,c,e,f,h,l,n,p=(f=this.locale())&&f.nplurals||2,v=[];++d<b.length;)c=b[d],null==c.parent?(e=c.source||c.id,f=c.target||"",h=c.context,e||h?(l=new k(e,f),l._id=c._id,h&&l.context(h),c.flag&&l.flag(c.flag,0),c.comment&&l.comment(c.comment),c.notes&&l.notes(c.notes),c.refs&&l.refs(c.refs),l.format(c.format),c.message=l,this.add(l)):
|
227 |
+
0===d&&"object"===typeof f&&(this.head=f,this.headcmt=c.comment)):v.push(c);for(d=-1;++d<v.length;)try{c=v[d];e=c.source||c.id;l=b[c.parent]&&b[c.parent].message;if(!l)throw Error("parent missing for plural "+e);n=c.plural;1===n&&l.plural(e);n>=p||(c.flag&&l.flag(c.flag,n),l.translate(c.target||"",n),c.format&&!l.format()&&l.format(c.format))}catch(z){a(z)}return this};h.merge=function(b){var c=this,e,f=b.header("POT-Creation-Date"),h=c.rows,k=[],l=[];b=b.rows;c.rows.each(function(a,d){null==b.get(a)&&
|
228 |
+
l.push(d)});c.rows=d();b.each(function(b,d){try{(e=h.get(b))?(e.ref=d.ref,e.fmt=d.fmt):(e=d,k.push(e)),c.add(e)}catch(f){a(f)}});f&&c.header("POT-Creation-Date",f);return{add:k,del:l}};h.wrap=function(a){this.fmtr=e(a);return this};h.toString=function(){var a,b=this.locale(),d=[],c=[],f=this.headers(),h=!b,l=b&&b.nplurals||2,n=this.fmtr||e();f[b?"PO-Revision-Date":"POT-Creation-Date"]=this.now();for(a in f)c.push(a+": "+f[a]);c=new k("",c.join("\n"));c.comment(this.headcmt||"");h&&c.fuzzy(0,!0);d.push(c.toString());
|
229 |
+
d.push("");this.rows.each(function(a,b){a&&(d.push(b.cat(n,h,l)),d.push(""))});return d.join("\n")};h=l.require("$29","message.js").extend(k);h.hash=function(){return b(this.source(),this.context())};h.toString=function(){return this.cat(e())};h.cat=function(a,b,d){var c,e=[],f;(f=this.cmt)&&e.push(a.prefix(f,"# "));(f=this.xcmt)&&e.push(a.prefix(f,"#. "));c=this.ref;if(f=this._id)c+=(c?" ":"")+"loco:"+f;c&&/\S/.test(c)&&e.push(a.refs(c));!b&&this.fuzzy()&&e.push("#, fuzzy");(f=this.fmt)&&e.push("#, "+
|
230 |
+
f+"-format");(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(c=-1,e.push(a.pair("msgid_plural",this.src[1])),f=this.msg||["",""],d=d||f.length;++c<d;)e.push(a.pair("msgstr["+c+"]",b?"":f[c]||""));return e.join("\n")};h.compare=function(a,b){var d=this.weight(),c=a.weight();if(d>c)return 1;if(d<c)return-1;if(b){d=this.hash().toLowerCase();c=a.hash().toLowerCase();if(d<c)return 1;if(d>c)return-1}return 0};
|
231 |
+
h=h=null;return c}({},v,z));l.register("$16",function(c,f,l){c.init=function(c){function b(){M||(I.click(m),M=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 M}function d(){G&&(a(h(q)),G=!1);if(H&&L){var b=L,c=h(J);c.find("span.loco-msg").text(b);N||(c.removeClass("jshide").hide().fadeIn(500),
|
232 |
+
N=!0)}else N&&(a(h(J)),N=!1)}function a(a){a.slideUp(250).fadeOut(250,function(){h(this).addClass("jshide")})}function e(){if(H)return M&&M.dialog("close"),d(),h(c).find('button[type="submit"]').attr("disabled",!1),h(f).triggerHandler("resize"),w&&w(!0),!0;y&&M?(G||(h(q).removeClass("jshide").hide().fadeIn(500),G=!0),N&&(a(h(J)),N=!1)):d();h(c).find('input[type="submit"]').attr("disabled",!0);w&&w(!1);return!1}function n(a){var b,c,d=r||{};for(b in d)d.hasOwnProperty(b)&&(c=d[b],a[b]?a[b].value=c:
|
233 |
+
h('<input type="hidden" />').attr("name",b).appendTo(a).val(c))}function k(a){a.preventDefault();a=h(a.target).serializeArray();s(a);E=!0;return!1}function g(a){a.preventDefault();M.dialog("close");return!1}function m(a){a.preventDefault();M.dialog("open").find('input[name="connection_type"]').change();return!1}function v(a){H=a.authed;C=a.method;h(q).find("span.loco-msg").text(a.message||"Something went wrong.");L=a.warning||"";a.notice&&u.notices.info(a.notice);if(H)"direct"!==C&&(r=a.creds,n(c),
|
234 |
+
E&&a.success&&u.notices.success(a.success)),e();else if(a.reason)u.notices.info(a.reason);else if(a=a.prompt){var d=b();d.html(a).find("form").submit(k);d.dialog("option","title",d.find("h2").remove().text());d.find("button.cancel-button").show().click(g);d.find('input[type="submit"]').addClass("button-primary");e();h(f).triggerHandler("resize")}else u.notices.error("Server didn't return credentials, nor a prompt for credentials")}function z(){e()}function s(a){E=!1;u.ajax.setNonce("fsConnect",K).post("fsConnect",
|
235 |
+
a,v,z);return a}var r,w,q=c,C=null,E=!1,H=!1,u=f.locoScope,y=c.path.value,F=c.auth.value,K=c["loco-nonce"].value,I=h(q).find("button.button-primary"),J=l.getElementById(q.id+"-warn"),G=!1,N=!1,L="",M;u.notices.convert(J).stick();c.connection_type?(r={},r.connection_type=c.connection_type.value,H=!0):y&&F&&s({path:y,auth:F});e();return{applyCreds:function(a){if(a.nodeType)n(a);else{var b,c=r||{};for(b in c)c.hasOwnProperty(b)&&(a[b]=c[b])}return this},setForm:function(a){c=a;e();n(a);return this},
|
236 |
+
connect:function(){y=c.path.value;F=c.auth.value;s(h(c).serializeArray());return this},listen:function(a){w=a;H&&a(!0);return this}}};return c}({},v,z));l.register("$17",function(c,f,v){function p(c,f,g,h){f="n"===g?d(f):a(f);h&&(f=e(f));return b([].sort,[f])(c)}function b(a,b){return function(c){a.apply(c,b);return c}}function d(a){return function(b,c){var d=b&&b[a]||0,e=c&&c[a]||0;return d===e?0:d>e?1:-1}}function a(a){return function(b,c){return(b&&b[a]||"").localeCompare(c&&c[a]||"")}}function e(a){return function(b,
|
237 |
+
c){return-1*a(b,c)}}c.init=function(a){function b(a){var c=-1,d=a.length;for(h("tr",q).remove();++c<d;)q.appendChild(a[c].$)}function c(a){s=a?z.find(a,d):d.slice(0);w&&(a=e[w],s=p(s,w,a.type,a.desc));b(s)}var d=[],e=[],f=0,s,r,w,q=a.getElementsByTagName("tbody")[0],v=a.getElementsByTagName("thead")[0],z=l.require("$7","fulltext.js").init();v&&q&&(h("th",v).each(function(a,c){var g=c.getAttribute("data-sort-type");g&&(a=f,h(c).addClass("loco-sort").click(function(c){c.preventDefault();c=a;var f=e[c],
|
238 |
+
g=f.type,l=!(f.desc=!f.desc);s=p(s||d.slice(0),c,g,l);b(s);r&&r.removeClass("loco-desc loco-asc");r=h(f.$).addClass(l?"loco-desc":"loco-asc").removeClass(l?"loco-asc":"loco-desc");w=c;return!1}),e[f]={$:c,type:g});c.hasAttribute("colspan")?f+=Number(c.getAttribute("colspan")):f++}),h("tr",q).each(function(a,b){var c,f,g,h=[],k={_:a,$:b},l=b.getElementsByTagName("td");for(f in e){c=l[f];(g=c.textContent.replace(/(^\s+|\s+$)/g,""))&&h.push(g);c.hasAttribute("data-sort-value")&&(g=c.getAttribute("data-sort-value"));
|
239 |
+
switch(e[f].type){case "n":g=Number(g)}k[f]=g}d[a]=k;z.index(a,h)}),a=h('form.loco-filter input[type="text"]',a.parentNode),a.length&&(a=a[0],v=h(a.form),1<d.length?l.require("$8","LocoTextListener.js").listen(a,c):v.hide(),v.on("submit",function(a){a.preventDefault();return!1})))};return c}({},v,z));var G=v.locoScope||(v.locoScope={});v=v.locoConf||(v.locoConf={});z=l.require("$1","t.js").init();var L=v.wplang;l.require("$2","array.js");G.l10n=z;z.load(v.wpl10n);L&&z.pluraleq(L.pluraleq);G.string=
|
240 |
+
l.require("$3","string.js");G.notices=l.require("$4","notices.js").init(z);G.ajax=l.require("$5","ajax.js").init(v).localise(z);G.locale=l.require("$6","wplocale.js");G.fulltext=l.require("$7","fulltext.js");G.watchtext=l.require("$8","LocoTextListener.js").listen;G.selector=l.require("$9","LocoSelector.js").create;G.autocomp=l.require("$10","LocoAutoComplete.js").init;G.tooltip=l.require("$11","tooltip.js");G.po={ed:l.require("$12","poedit.js"),kbd:l.require("$13","hotkeys.js"),init:l.require("$14",
|
241 |
+
"po.js").create,ace:l.require("$15","ace.js").strf("php")};G.fs=l.require("$16","fsconn.js");h("#loco.wrap table.wp-list-table").each(function(c,f){l.require("$17","tables.js").init(f)})})(window,document,window.jQuery);
|
pub/js/move.js
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Script for file move operation
|
3 |
+
*/
|
4 |
+
!function( window, document, $ ){
|
5 |
+
|
6 |
+
var fsConn,
|
7 |
+
destPath,
|
8 |
+
fsHook = document.getElementById('loco-fs'),
|
9 |
+
elForm = document.getElementById('loco-move'),
|
10 |
+
origPath = elForm.path.value
|
11 |
+
;
|
12 |
+
|
13 |
+
function setFormDisabled( disabled ){
|
14 |
+
$(elForm).find('button.button-primary').each( function(i,button){
|
15 |
+
button.disabled = disabled;
|
16 |
+
} );
|
17 |
+
}
|
18 |
+
|
19 |
+
function onFsConnect( valid ){
|
20 |
+
setFormDisabled( ! ( valid && destPath ) );
|
21 |
+
}
|
22 |
+
|
23 |
+
function validate(event){
|
24 |
+
var field = event.target||{}, value;
|
25 |
+
if( 'dest' === field.name && ( field.checked || 'text' === field.type ) ){
|
26 |
+
value = field.value;
|
27 |
+
if( value && value !== destPath ){
|
28 |
+
destPath = value;
|
29 |
+
setFormDisabled(true);
|
30 |
+
// check chosen target permissions
|
31 |
+
if( origPath !== value ){
|
32 |
+
fsHook.dest.value = value;
|
33 |
+
fsConn.connect();
|
34 |
+
}
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
function process( event ){
|
40 |
+
if( destPath ){
|
41 |
+
return true;
|
42 |
+
}
|
43 |
+
event.preventDefault();
|
44 |
+
return false;
|
45 |
+
}
|
46 |
+
|
47 |
+
if( fsHook && elForm ){
|
48 |
+
fsConn = window.locoScope.fs.init(fsHook).setForm(elForm).listen(onFsConnect);
|
49 |
+
$(elForm).change(validate).submit(process);
|
50 |
+
}
|
51 |
+
|
52 |
+
}( window, document, jQuery );
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: timwhitlock
|
|
3 |
Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, PO, MO, productivity, multilingual, internationalization
|
4 |
Requires at least: 4.1
|
5 |
Requires PHP: 5.2.4
|
6 |
-
Tested up to: 5.
|
7 |
-
Stable tag: 2.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -97,6 +97,13 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
|
|
97 |
|
98 |
== Changelog ==
|
99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
= 2.2.2 =
|
101 |
* Security fixes for reading sensitive files
|
102 |
* Fixed old PHP version error in data files
|
@@ -299,7 +306,7 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
|
|
299 |
|
300 |
== Upgrade Notice ==
|
301 |
|
302 |
-
= 2.
|
303 |
* Various bug fixes and improvements
|
304 |
|
305 |
|
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.2.1
|
7 |
+
Stable tag: 2.3.0
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
97 |
|
98 |
== Changelog ==
|
99 |
|
100 |
+
= 2.3.0 =
|
101 |
+
* Added experimental support for multipart uploads
|
102 |
+
* Added relocation tab for moving translation sets
|
103 |
+
* Creation of missing directories when writing new files
|
104 |
+
* Fixed duplicate file addition when iterating over symlink
|
105 |
+
* Bumped WP compatibility to 5.2.1
|
106 |
+
|
107 |
= 2.2.2 =
|
108 |
* Security fixes for reading sensitive files
|
109 |
* Fixed old PHP version error in data files
|
306 |
|
307 |
== Upgrade Notice ==
|
308 |
|
309 |
+
= 2.3.0 =
|
310 |
* Various bug fixes and improvements
|
311 |
|
312 |
|
src/admin/bundle/BaseController.php
CHANGED
@@ -130,46 +130,25 @@ abstract class Loco_admin_bundle_BaseController extends Loco_mvc_AdminController
|
|
130 |
|
131 |
// may have fs credentials saved in session
|
132 |
try {
|
133 |
-
|
134 |
-
|
135 |
-
|
|
|
|
|
136 |
}
|
137 |
}
|
138 |
catch( Exception $e ){
|
139 |
Loco_error_AdminNotices::debug( $e->getMessage() );
|
140 |
}
|
141 |
|
142 |
-
// specific wording based on file operation type
|
143 |
-
if( 'create' === $type ){
|
144 |
-
$this->set('fsPrompt', __('Creating this file requires permission','loco-translate') );
|
145 |
-
}
|
146 |
-
else if( 'delete' === $type ){
|
147 |
-
$this->set('fsPrompt', __('Deleting this file requires permission','loco-translate') );
|
148 |
-
}
|
149 |
-
else {
|
150 |
-
$this->set('fsPrompt', __('Saving this file requires permission','loco-translate') );
|
151 |
-
}
|
152 |
-
|
153 |
// Run pre-checks that may determine file should not be written
|
154 |
if( $relpath ){
|
155 |
$file = new Loco_fs_File( $relpath );
|
156 |
$file->normalize( loco_constant('WP_CONTENT_DIR') );
|
157 |
-
// total file system block makes connection type
|
158 |
try {
|
159 |
$api = new Loco_api_WordPressFileSystem;
|
160 |
$api->preAuthorize($file);
|
161 |
-
// else just warn if file is sensitive (system)
|
162 |
-
if( Loco_data_Settings::get()->fs_protect && ( $systype = $file->getUpdateType() ) ){
|
163 |
-
if( 'create' === $type ){
|
164 |
-
$this->set('fsWarning', __('This file may be overwritten or deleted when you update WordPress','loco-translate' ) );
|
165 |
-
}
|
166 |
-
else if( 'delete' === $type ){
|
167 |
-
$this->set('fsWarning', __('This directory is managed by WordPress, be careful what you delete','loco-translate' ) );
|
168 |
-
}
|
169 |
-
else {
|
170 |
-
$this->set('fsWarning', __('Changes to this file may be overwritten or deleted when you update WordPress','loco-translate' ) );
|
171 |
-
}
|
172 |
-
}
|
173 |
}
|
174 |
catch( Loco_error_WriteException $e ){
|
175 |
$this->set('fsLocked', $e->getMessage() );
|
@@ -179,5 +158,4 @@ abstract class Loco_admin_bundle_BaseController extends Loco_mvc_AdminController
|
|
179 |
return $fields;
|
180 |
}
|
181 |
|
182 |
-
|
183 |
}
|
130 |
|
131 |
// may have fs credentials saved in session
|
132 |
try {
|
133 |
+
if( Loco_data_Settings::get()->fs_persist ){
|
134 |
+
$session = Loco_data_Session::get();
|
135 |
+
if( isset($session['loco-fs']) ){
|
136 |
+
$fields['connection_type'] = $session['loco-fs']['connection_type'];
|
137 |
+
}
|
138 |
}
|
139 |
}
|
140 |
catch( Exception $e ){
|
141 |
Loco_error_AdminNotices::debug( $e->getMessage() );
|
142 |
}
|
143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
// Run pre-checks that may determine file should not be written
|
145 |
if( $relpath ){
|
146 |
$file = new Loco_fs_File( $relpath );
|
147 |
$file->normalize( loco_constant('WP_CONTENT_DIR') );
|
148 |
+
// total file system block makes connection type irrelevant
|
149 |
try {
|
150 |
$api = new Loco_api_WordPressFileSystem;
|
151 |
$api->preAuthorize($file);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
}
|
153 |
catch( Loco_error_WriteException $e ){
|
154 |
$this->set('fsLocked', $e->getMessage() );
|
158 |
return $fields;
|
159 |
}
|
160 |
|
|
|
161 |
}
|
src/admin/bundle/LocaleController.php
CHANGED
@@ -107,6 +107,7 @@ class Loco_admin_bundle_LocaleController extends Loco_mvc_AdminController {
|
|
107 |
'view' => Loco_mvc_AdminRouter::generate( $type.'-file-view', $args ),
|
108 |
'info' => Loco_mvc_AdminRouter::generate( $type.'-file-info', $args ),
|
109 |
'edit' => Loco_mvc_AdminRouter::generate( $type.'-file-edit', $args ),
|
|
|
110 |
'delete' => Loco_mvc_AdminRouter::generate( $type.'-file-delete', $args ),
|
111 |
'copy' => Loco_mvc_AdminRouter::generate( $type.'-msginit', $args ),
|
112 |
) );
|
107 |
'view' => Loco_mvc_AdminRouter::generate( $type.'-file-view', $args ),
|
108 |
'info' => Loco_mvc_AdminRouter::generate( $type.'-file-info', $args ),
|
109 |
'edit' => Loco_mvc_AdminRouter::generate( $type.'-file-edit', $args ),
|
110 |
+
'move' => Loco_mvc_AdminRouter::generate( $type.'-file-move', $args ),
|
111 |
'delete' => Loco_mvc_AdminRouter::generate( $type.'-file-delete', $args ),
|
112 |
'copy' => Loco_mvc_AdminRouter::generate( $type.'-msginit', $args ),
|
113 |
) );
|
src/admin/bundle/ViewController.php
CHANGED
@@ -200,9 +200,11 @@ class Loco_admin_bundle_ViewController extends Loco_admin_bundle_BaseController
|
|
200 |
}
|
201 |
|
202 |
|
203 |
-
|
204 |
/**
|
205 |
-
*
|
|
|
|
|
|
|
206 |
*/
|
207 |
private function createFileParams( Loco_package_Project $project, Loco_fs_File $file, Loco_Locale $locale = null ){
|
208 |
// Pull Gettext meta data from cache if possible
|
@@ -231,6 +233,7 @@ class Loco_admin_bundle_ViewController extends Loco_admin_bundle_BaseController
|
|
231 |
'view' => $this->getProjectLink('file-view', $project, $args ),
|
232 |
'info' => $this->getProjectLink('file-info', $project, $args ),
|
233 |
'edit' => $this->getProjectLink('file-edit', $project, $args ),
|
|
|
234 |
'delete' => $this->getProjectLink('file-delete', $project, $args ),
|
235 |
'copy' => $this->getProjectLink('msginit', $project, $args ),
|
236 |
) );
|
200 |
}
|
201 |
|
202 |
|
|
|
203 |
/**
|
204 |
+
* @param Loco_package_Project
|
205 |
+
* @param Loco_fs_File
|
206 |
+
* @param Loco_Locale
|
207 |
+
* @return Loco_mvc_ViewParams
|
208 |
*/
|
209 |
private function createFileParams( Loco_package_Project $project, Loco_fs_File $file, Loco_Locale $locale = null ){
|
210 |
// Pull Gettext meta data from cache if possible
|
233 |
'view' => $this->getProjectLink('file-view', $project, $args ),
|
234 |
'info' => $this->getProjectLink('file-info', $project, $args ),
|
235 |
'edit' => $this->getProjectLink('file-edit', $project, $args ),
|
236 |
+
'move' => $this->getProjectLink('file-move', $project, $args ),
|
237 |
'delete' => $this->getProjectLink('file-delete', $project, $args ),
|
238 |
'copy' => $this->getProjectLink('msginit', $project, $args ),
|
239 |
) );
|
src/admin/config/SettingsController.php
CHANGED
@@ -29,7 +29,7 @@ class Loco_admin_config_SettingsController extends Loco_admin_config_BaseControl
|
|
29 |
$perms->populate( $post->has('caps') ? $post->caps : array() );
|
30 |
// done update
|
31 |
Loco_error_AdminNotices::success( __('Settings saved','loco-translate') );
|
32 |
-
// remove saved params if
|
33 |
if( ! $opts['fs_persist'] ){
|
34 |
$session = Loco_data_Session::get();
|
35 |
if( isset($session['loco-fs']) ){
|
29 |
$perms->populate( $post->has('caps') ? $post->caps : array() );
|
30 |
// done update
|
31 |
Loco_error_AdminNotices::success( __('Settings saved','loco-translate') );
|
32 |
+
// remove saved params from session if persistent options unset
|
33 |
if( ! $opts['fs_persist'] ){
|
34 |
$session = Loco_data_Session::get();
|
35 |
if( isset($session['loco-fs']) ){
|
src/admin/file/BaseController.php
CHANGED
@@ -66,13 +66,15 @@ abstract class Loco_admin_file_BaseController extends Loco_admin_bundle_BaseCont
|
|
66 |
// POT file has no locale
|
67 |
if( 'pot' === $ext ){
|
68 |
$locale = null;
|
|
|
69 |
}
|
70 |
// else file may have a locale suffix (unless invalid, such as "default.po")
|
71 |
else {
|
72 |
$locale = $file->getLocale();
|
|
|
73 |
}
|
74 |
|
75 |
-
if( $
|
76 |
$this->locale = $locale;
|
77 |
$code = (string) $locale;
|
78 |
$this->set( 'locale', new Loco_mvc_ViewParams( array(
|
@@ -104,14 +106,18 @@ abstract class Loco_admin_file_BaseController extends Loco_admin_bundle_BaseCont
|
|
104 |
'file-view' => __('Source','loco-translate'),
|
105 |
'file-info' => __('File info','loco-translate'),
|
106 |
'file-diff' => __('Restore','loco-translate'),
|
|
|
107 |
'file-delete' => __('Delete','loco-translate'),
|
108 |
);
|
109 |
|
110 |
$suffix = $this->get('action');
|
111 |
$prefix = $this->get('type');
|
|
|
112 |
foreach( $actions as $action => $name ){
|
113 |
-
|
114 |
-
|
|
|
|
|
115 |
}
|
116 |
|
117 |
// Provide common language creation link if project scope is is valid
|
66 |
// POT file has no locale
|
67 |
if( 'pot' === $ext ){
|
68 |
$locale = null;
|
69 |
+
$localised = false;
|
70 |
}
|
71 |
// else file may have a locale suffix (unless invalid, such as "default.po")
|
72 |
else {
|
73 |
$locale = $file->getLocale();
|
74 |
+
$localised = $locale->isValid();
|
75 |
}
|
76 |
|
77 |
+
if( $localised ){
|
78 |
$this->locale = $locale;
|
79 |
$code = (string) $locale;
|
80 |
$this->set( 'locale', new Loco_mvc_ViewParams( array(
|
106 |
'file-view' => __('Source','loco-translate'),
|
107 |
'file-info' => __('File info','loco-translate'),
|
108 |
'file-diff' => __('Restore','loco-translate'),
|
109 |
+
'file-move' => $localised ? __('Relocate','loco-translate') : null,
|
110 |
'file-delete' => __('Delete','loco-translate'),
|
111 |
);
|
112 |
|
113 |
$suffix = $this->get('action');
|
114 |
$prefix = $this->get('type');
|
115 |
+
$args = array_intersect_key($_GET,array('path'=>1,'bundle'=>1,'domain'=>1));
|
116 |
foreach( $actions as $action => $name ){
|
117 |
+
if( is_string($name) ){
|
118 |
+
$href = Loco_mvc_AdminRouter::generate( $prefix.'-'.$action, $args );
|
119 |
+
$tabs->add( $name, $href, $action === $suffix );
|
120 |
+
}
|
121 |
}
|
122 |
|
123 |
// Provide common language creation link if project scope is is valid
|
src/admin/file/DeleteController.php
CHANGED
@@ -7,6 +7,7 @@ class Loco_admin_file_DeleteController extends Loco_admin_file_BaseController {
|
|
7 |
|
8 |
/**
|
9 |
* Expand single path to all files that will be deleted
|
|
|
10 |
* @return array
|
11 |
*/
|
12 |
private function expandFiles( Loco_fs_File $file ){
|
@@ -42,7 +43,7 @@ class Loco_admin_file_DeleteController extends Loco_admin_file_BaseController {
|
|
42 |
// attempt delete if valid nonce posted back
|
43 |
if( $this->checkNonce($action) ){
|
44 |
$api = new Loco_api_WordPressFileSystem;
|
45 |
-
// delete dependant files, so
|
46 |
$files = array_reverse( $this->expandFiles($file) );
|
47 |
try {
|
48 |
/* @var $trash Loco_fs_File */
|
@@ -57,7 +58,7 @@ class Loco_admin_file_DeleteController extends Loco_admin_file_BaseController {
|
|
57 |
Loco_data_Session::close();
|
58 |
}
|
59 |
catch( Exception $e ){
|
60 |
-
//
|
61 |
}
|
62 |
// redirect to bundle overview
|
63 |
$href = Loco_mvc_AdminRouter::generate( $this->get('type').'-view', array( 'bundle' => $this->get('bundle') ) );
|
@@ -70,7 +71,7 @@ class Loco_admin_file_DeleteController extends Loco_admin_file_BaseController {
|
|
70 |
}
|
71 |
}
|
72 |
}
|
73 |
-
|
74 |
$bundle = $this->getBundle();
|
75 |
$this->set('title', sprintf( __('Delete %s','loco-translate'), $file->basename() ).' ‹ '.$bundle->getName() );
|
76 |
}
|
7 |
|
8 |
/**
|
9 |
* Expand single path to all files that will be deleted
|
10 |
+
* @param Loco_fs_File primary file being deleted, probably the PO
|
11 |
* @return array
|
12 |
*/
|
13 |
private function expandFiles( Loco_fs_File $file ){
|
43 |
// attempt delete if valid nonce posted back
|
44 |
if( $this->checkNonce($action) ){
|
45 |
$api = new Loco_api_WordPressFileSystem;
|
46 |
+
// delete dependant files first, so master still exists if others fail
|
47 |
$files = array_reverse( $this->expandFiles($file) );
|
48 |
try {
|
49 |
/* @var $trash Loco_fs_File */
|
58 |
Loco_data_Session::close();
|
59 |
}
|
60 |
catch( Exception $e ){
|
61 |
+
// tolerate session failure
|
62 |
}
|
63 |
// redirect to bundle overview
|
64 |
$href = Loco_mvc_AdminRouter::generate( $this->get('type').'-view', array( 'bundle' => $this->get('bundle') ) );
|
71 |
}
|
72 |
}
|
73 |
}
|
74 |
+
// set page title before render sets inline title
|
75 |
$bundle = $this->getBundle();
|
76 |
$this->set('title', sprintf( __('Delete %s','loco-translate'), $file->basename() ).' ‹ '.$bundle->getName() );
|
77 |
}
|
src/admin/file/EditController.php
CHANGED
@@ -140,6 +140,7 @@ class Loco_admin_file_EditController extends Loco_admin_file_BaseController {
|
|
140 |
$this->set( 'js', new Loco_mvc_ViewParams( array(
|
141 |
'podata' => $data->jsonSerialize(),
|
142 |
'powrap' => (int) Loco_data_Settings::get()->po_width,
|
|
|
143 |
'locale' => $locale ? $locale->jsonSerialize() : null,
|
144 |
'potpath' => $locale && $potfile ? $potfile->getRelativePath($wp_content) : null,
|
145 |
'popath' => $this->get('path'),
|
@@ -153,7 +154,6 @@ class Loco_admin_file_EditController extends Loco_admin_file_BaseController {
|
|
153 |
'sync' => wp_create_nonce('sync'),
|
154 |
),
|
155 |
) ) );
|
156 |
-
|
157 |
$this->set( 'ui', new Loco_mvc_ViewParams( array(
|
158 |
// Translators: button for adding a new string when manually editing a POT file
|
159 |
'add' => _x('Add','Editor','loco-translate'),
|
140 |
$this->set( 'js', new Loco_mvc_ViewParams( array(
|
141 |
'podata' => $data->jsonSerialize(),
|
142 |
'powrap' => (int) Loco_data_Settings::get()->po_width,
|
143 |
+
'multipart' => (bool) Loco_data_Settings::get()->ajax_files,
|
144 |
'locale' => $locale ? $locale->jsonSerialize() : null,
|
145 |
'potpath' => $locale && $potfile ? $potfile->getRelativePath($wp_content) : null,
|
146 |
'popath' => $this->get('path'),
|
154 |
'sync' => wp_create_nonce('sync'),
|
155 |
),
|
156 |
) ) );
|
|
|
157 |
$this->set( 'ui', new Loco_mvc_ViewParams( array(
|
158 |
// Translators: button for adding a new string when manually editing a POT file
|
159 |
'add' => _x('Add','Editor','loco-translate'),
|
src/admin/file/MoveController.php
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Translation set relocation tool.
|
4 |
+
* Moves PO/MO pair and all related files to a new location
|
5 |
+
*/
|
6 |
+
class Loco_admin_file_MoveController extends Loco_admin_file_BaseController {
|
7 |
+
|
8 |
+
|
9 |
+
/**
|
10 |
+
* {@inheritdoc}
|
11 |
+
*/
|
12 |
+
public function init(){
|
13 |
+
parent::init();
|
14 |
+
$file = $this->get('file');
|
15 |
+
/* @var Loco_fs_File $file */
|
16 |
+
if( $file->exists() && ! $file->isDirectory() ){
|
17 |
+
$files = new Loco_fs_Siblings($file);
|
18 |
+
// nonce action will be specific to file for extra security
|
19 |
+
$path = $file->getPath();
|
20 |
+
$action = 'move:'.$path;
|
21 |
+
// set up view now in case of late failure
|
22 |
+
$fields = new Loco_mvc_HiddenFields( array() );
|
23 |
+
$fields->setNonce( $action );
|
24 |
+
$fields['auth'] = 'move';
|
25 |
+
$fields['path'] = $this->get('path');
|
26 |
+
$this->set('hidden',$fields );
|
27 |
+
// attempt move if valid nonce posted back
|
28 |
+
while( $this->checkNonce($action) ){
|
29 |
+
// Chosen location should be valid as a posted "dest" parameter
|
30 |
+
if( ! Loco_mvc_PostParams::get()->has('dest') ){
|
31 |
+
Loco_error_AdminNotices::err('No destination posted');
|
32 |
+
break;
|
33 |
+
}
|
34 |
+
$target = new Loco_fs_LocaleFile( Loco_mvc_PostParams::get()->dest );
|
35 |
+
$ext = $target->extension();
|
36 |
+
// primary file extension should only be permitted to change between po and pot
|
37 |
+
if( $ext !== $file->extension() && 'po' !== $ext && 'pot' !== $ext ){
|
38 |
+
Loco_error_AdminNotices::err('Invalid file extension, *.po or *.pot only');
|
39 |
+
break;
|
40 |
+
}
|
41 |
+
$target->normalize( loco_constant('WP_CONTENT_DIR') );
|
42 |
+
$target_dir = $target->getParent()->getPath();
|
43 |
+
// Primary file gives template remapping, so all files are renamed with same stub.
|
44 |
+
// this can only be one of three things: (en -> en) or (foo-en -> en) or (en -> foo-en)
|
45 |
+
// suffix will then consist of file extension, plus any other stuff like backup file date.
|
46 |
+
$target_base = $target->filename();
|
47 |
+
$source_snip = strlen( $file->filename() );
|
48 |
+
// buffer all files to move to preempt write failures
|
49 |
+
$movable = array();
|
50 |
+
$api = new Loco_api_WordPressFileSystem;
|
51 |
+
foreach( $files->expand() as $source ){
|
52 |
+
$suffix = substr( $source->basename(), $source_snip ); // <- e.g. "-backup.po~"
|
53 |
+
$target = new Loco_fs_File( $target_dir.'/'.$target_base.$suffix );
|
54 |
+
// permit valid change of file extension on primary source file (po/pot)
|
55 |
+
if( $source === $files->getSource() && $target->extension() !== $ext ){
|
56 |
+
$target = $target->cloneExtension($ext);
|
57 |
+
}
|
58 |
+
if( ! $api->authorizeMove($source,$target) ) {
|
59 |
+
Loco_error_AdminNotices::err('Failed to authorize relocation of '.$source->basename() );
|
60 |
+
break 2;
|
61 |
+
}
|
62 |
+
$movable[] = array($source,$target);
|
63 |
+
}
|
64 |
+
// commit moves. If any fail we'll have separated the files, which is bad
|
65 |
+
$count = 0;
|
66 |
+
$total = count($movable);
|
67 |
+
foreach( $movable as $pair ){
|
68 |
+
try {
|
69 |
+
$pair[0]->move( $pair[1] );
|
70 |
+
$count++;
|
71 |
+
}
|
72 |
+
catch( Loco_error_Exception $e ){
|
73 |
+
Loco_error_AdminNotices::add($e);
|
74 |
+
}
|
75 |
+
}
|
76 |
+
// flash messages for display after redirect
|
77 |
+
try {
|
78 |
+
if( $count ) {
|
79 |
+
Loco_data_Session::get()->flash( 'success', sprintf( _n( 'File moved', '%u files moved', $total, 'loco-translate' ), $total ) );
|
80 |
+
}
|
81 |
+
if( $total > $count ){
|
82 |
+
$diff = $total - $count;
|
83 |
+
Loco_data_Session::get()->flash( 'error', sprintf( _n( 'One file could not be moved', '%u files could not be moved', $diff, 'loco-translate' ), $diff ) );
|
84 |
+
}
|
85 |
+
Loco_data_Session::close();
|
86 |
+
}
|
87 |
+
catch( Exception $e ){
|
88 |
+
// tolerate session failure
|
89 |
+
}
|
90 |
+
// redirect to bundle overview
|
91 |
+
$href = Loco_mvc_AdminRouter::generate( $this->get('type').'-view', array( 'bundle' => $this->get('bundle') ) );
|
92 |
+
if( wp_redirect($href) ){
|
93 |
+
exit;
|
94 |
+
}
|
95 |
+
break;
|
96 |
+
}
|
97 |
+
}
|
98 |
+
// set page title before render sets inline title
|
99 |
+
$bundle = $this->getBundle();
|
100 |
+
$this->set('title', sprintf( __('Move %s','loco-translate'), $file->basename() ).' ‹ '.$bundle->getName() );
|
101 |
+
}
|
102 |
+
|
103 |
+
|
104 |
+
/**
|
105 |
+
* {@inheritdoc}
|
106 |
+
*/
|
107 |
+
public function render(){
|
108 |
+
$file = $this->get('file');
|
109 |
+
if( $fail = $this->getFileError($file) ){
|
110 |
+
return $fail;
|
111 |
+
}
|
112 |
+
// relocation requires knowing text domain and locale
|
113 |
+
try {
|
114 |
+
$project = $this->getProject();
|
115 |
+
}
|
116 |
+
catch( Loco_error_Exception $e ){
|
117 |
+
Loco_error_AdminNotices::warn($e->getMessage());
|
118 |
+
$project = null;
|
119 |
+
}
|
120 |
+
$files = new Loco_fs_Siblings($file);
|
121 |
+
$file = new Loco_fs_LocaleFile( $files->getSource() );
|
122 |
+
$locale = $file->getLocale();
|
123 |
+
// switch between canonical move and custom file path mode
|
124 |
+
$custom = is_null($project) || $this->get('custom') || 'po' !== $file->extension() || ! $locale->isValid();
|
125 |
+
// common page elements:
|
126 |
+
$this->set('files',$files->expand() );
|
127 |
+
$this->set('title', sprintf( __('Move %s','loco-translate'), $file->filename() ) );
|
128 |
+
$this->enqueueScript('move');
|
129 |
+
// set info for existing file location
|
130 |
+
$content_dir = loco_constant('WP_CONTENT_DIR');
|
131 |
+
$current = $file->getRelativePath($content_dir);
|
132 |
+
$parent = new Loco_fs_LocaleDirectory( $file->dirname() );
|
133 |
+
$typeId = $parent->getTypeId();
|
134 |
+
$this->set('current', new Loco_mvc_ViewParams(array(
|
135 |
+
'path' => $parent->getRelativePath($content_dir),
|
136 |
+
'type' => $parent->getTypeLabel($typeId),
|
137 |
+
)) );
|
138 |
+
// moving files will require deletion permission on current file location
|
139 |
+
// plus write permission on target location, but we don't know what that is yet.
|
140 |
+
$fields = $this->prepareFsConnect('move',$current);
|
141 |
+
$fields['path'] = '';
|
142 |
+
$fields['dest'] = '';
|
143 |
+
// custom file move template (POT mode)
|
144 |
+
if( $custom ){
|
145 |
+
$this->get('hidden')->offsetSet('custom','1');
|
146 |
+
$this->set('file', Loco_mvc_FileParams::create($file) );
|
147 |
+
return $this->view('admin/file/move-pot');
|
148 |
+
}
|
149 |
+
// establish valid locations for translation set, which may include current:
|
150 |
+
$filechoice = $project->initLocaleFiles($locale);
|
151 |
+
// start with current location so always first in list
|
152 |
+
$locations = array();
|
153 |
+
$locations[$typeId] = new Loco_mvc_ViewParams( array(
|
154 |
+
'label' => $parent->getTypeLabel($typeId),
|
155 |
+
'paths' => array( new Loco_mvc_ViewParams( array(
|
156 |
+
'path' => $current,
|
157 |
+
'active' => true,
|
158 |
+
) ) )
|
159 |
+
) );
|
160 |
+
/* @var Loco_fs_File $pofile */
|
161 |
+
foreach( $filechoice as $pofile ){
|
162 |
+
$relpath = $pofile->getRelativePath($content_dir);
|
163 |
+
if( $current === $relpath ){
|
164 |
+
continue;
|
165 |
+
}
|
166 |
+
// initialize location type (system, etc..)
|
167 |
+
$parent = new Loco_fs_LocaleDirectory( $pofile->dirname() );
|
168 |
+
$typeId = $parent->getTypeId();
|
169 |
+
if( ! isset($locations[$typeId]) ){
|
170 |
+
$locations[$typeId] = new Loco_mvc_ViewParams( array(
|
171 |
+
'label' => $parent->getTypeLabel($typeId),
|
172 |
+
'paths' => array(),
|
173 |
+
) );
|
174 |
+
}
|
175 |
+
$choice = new Loco_mvc_ViewParams( array(
|
176 |
+
'path' => $relpath,
|
177 |
+
) );
|
178 |
+
$locations[$typeId]['paths'][] = $choice;
|
179 |
+
}
|
180 |
+
$this->set('locations', $locations );
|
181 |
+
$this->set('advanced', $_SERVER['REQUEST_URI'].'&custom=1' );
|
182 |
+
return $this->view('admin/file/move-po');
|
183 |
+
}
|
184 |
+
|
185 |
+
}
|
src/admin/init/InitPoController.php
CHANGED
@@ -259,15 +259,6 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
|
|
259 |
'paths' => array(),
|
260 |
) );
|
261 |
}
|
262 |
-
// lazy build of directory path, suppressing errors
|
263 |
-
if( ! $parent->exists() ){
|
264 |
-
try {
|
265 |
-
$parent->mkdir();
|
266 |
-
}
|
267 |
-
catch( Exception $e ){
|
268 |
-
// Loco_error_AdminNotices::warn( $e->getMessage() );
|
269 |
-
}
|
270 |
-
}
|
271 |
// folder may be unwritable (requiring connect to create file) or may be denied under security settings
|
272 |
try {
|
273 |
$context = $parent->getWriteContext()->authorize();
|
@@ -310,7 +301,7 @@ class Loco_admin_init_InitPoController extends Loco_admin_bundle_BaseController
|
|
310 |
}
|
311 |
|
312 |
// hidden fields to pass through to Ajax endpoint
|
313 |
-
$this->set('hidden', new
|
314 |
'action' => 'loco_json',
|
315 |
'route' => 'msginit',
|
316 |
'loco-nonce' => $this->setNonce('msginit')->value,
|
259 |
'paths' => array(),
|
260 |
) );
|
261 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
// folder may be unwritable (requiring connect to create file) or may be denied under security settings
|
263 |
try {
|
264 |
$context = $parent->getWriteContext()->authorize();
|
301 |
}
|
302 |
|
303 |
// hidden fields to pass through to Ajax endpoint
|
304 |
+
$this->set('hidden', new Loco_mvc_HiddenFields( array(
|
305 |
'action' => 'loco_json',
|
306 |
'route' => 'msginit',
|
307 |
'loco-nonce' => $this->setNonce('msginit')->value,
|
src/ajax/DownloadController.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* Ajax "download" route, for
|
4 |
*/
|
5 |
class Loco_ajax_DownloadController extends Loco_mvc_AjaxController {
|
6 |
|
1 |
<?php
|
2 |
/**
|
3 |
+
* Ajax "download" route, for outputting raw gettext file contents.
|
4 |
*/
|
5 |
class Loco_ajax_DownloadController extends Loco_mvc_AjaxController {
|
6 |
|
src/ajax/FsConnectController.php
CHANGED
@@ -11,6 +11,7 @@ class Loco_ajax_FsConnectController extends Loco_mvc_AjaxController {
|
|
11 |
|
12 |
|
13 |
/**
|
|
|
14 |
* @return bool
|
15 |
*/
|
16 |
private function authorizeDelete( Loco_fs_File $file ){
|
@@ -21,13 +22,23 @@ class Loco_ajax_FsConnectController extends Loco_mvc_AjaxController {
|
|
21 |
return false;
|
22 |
}
|
23 |
}
|
24 |
-
// else no dependants failed
|
25 |
return true;
|
26 |
}
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
29 |
|
30 |
/**
|
|
|
31 |
* @return bool
|
32 |
*/
|
33 |
private function authorizeCreate( Loco_fs_File $file ){
|
@@ -35,7 +46,6 @@ class Loco_ajax_FsConnectController extends Loco_mvc_AjaxController {
|
|
35 |
}
|
36 |
|
37 |
|
38 |
-
|
39 |
/**
|
40 |
* @return bool
|
41 |
*/
|
@@ -57,37 +67,73 @@ class Loco_ajax_FsConnectController extends Loco_mvc_AjaxController {
|
|
57 |
}
|
58 |
|
59 |
|
60 |
-
|
61 |
/**
|
62 |
* {@inheritdoc}
|
63 |
*/
|
64 |
public function render(){
|
65 |
-
|
66 |
$post = $this->validate();
|
67 |
-
|
68 |
-
$func = 'authorize'.ucfirst($
|
69 |
$auth = array( $this, $func );
|
70 |
if( ! is_callable($auth) ){
|
71 |
throw new Loco_error_Exception('Unexpected file operation');
|
72 |
}
|
73 |
-
|
74 |
$file = new Loco_fs_File( $post->path );
|
75 |
$base = loco_constant('WP_CONTENT_DIR');
|
76 |
$file->normalize($base);
|
77 |
-
|
78 |
-
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
80 |
try {
|
81 |
-
|
|
|
82 |
$this->set( 'authed', true );
|
83 |
$this->set( 'valid', $this->api->getOutputCredentials() );
|
84 |
$this->set( 'creds', $this->api->getInputCredentials() );
|
85 |
$this->set( 'method', $this->api->getFileSystem()->method );
|
86 |
$this->set( 'success', __('Connected to remote file system','loco-translate') );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
}
|
88 |
else if( $html = $this->api->getForm() ){
|
89 |
$this->set( 'authed', false );
|
90 |
$this->set( 'prompt', $html );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
else {
|
93 |
throw new Loco_error_Exception('Failed to get credentials form');
|
11 |
|
12 |
|
13 |
/**
|
14 |
+
* @param Loco_fs_File existing file path (must exist)
|
15 |
* @return bool
|
16 |
*/
|
17 |
private function authorizeDelete( Loco_fs_File $file ){
|
22 |
return false;
|
23 |
}
|
24 |
}
|
25 |
+
// else no dependants failed deletable test
|
26 |
return true;
|
27 |
}
|
28 |
+
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @param Loco_fs_File file being moved (must exist)
|
32 |
+
* @param Loco_fs_File target path (should not exist)
|
33 |
+
* @return bool
|
34 |
+
*/
|
35 |
+
private function authorizeMove( Loco_fs_File $source, Loco_fs_File $target = null ){
|
36 |
+
return $this->api->authorizeMove($source,$target);
|
37 |
+
}
|
38 |
|
39 |
|
40 |
/**
|
41 |
+
* @param Loco_fs_File new file path (should not exist)
|
42 |
* @return bool
|
43 |
*/
|
44 |
private function authorizeCreate( Loco_fs_File $file ){
|
46 |
}
|
47 |
|
48 |
|
|
|
49 |
/**
|
50 |
* @return bool
|
51 |
*/
|
67 |
}
|
68 |
|
69 |
|
|
|
70 |
/**
|
71 |
* {@inheritdoc}
|
72 |
*/
|
73 |
public function render(){
|
74 |
+
// establish operation being authorized (create,delete,etc..)
|
75 |
$post = $this->validate();
|
76 |
+
$type = $post->auth;
|
77 |
+
$func = 'authorize'.ucfirst($type);
|
78 |
$auth = array( $this, $func );
|
79 |
if( ! is_callable($auth) ){
|
80 |
throw new Loco_error_Exception('Unexpected file operation');
|
81 |
}
|
82 |
+
// all auth methods require at least one file argument
|
83 |
$file = new Loco_fs_File( $post->path );
|
84 |
$base = loco_constant('WP_CONTENT_DIR');
|
85 |
$file->normalize($base);
|
86 |
+
$args = array($file);
|
87 |
+
// some auth methods also require a destination/target (move,copy,etc..)
|
88 |
+
if( $dest = $post->dest ){
|
89 |
+
$file = new Loco_fs_File($dest);
|
90 |
+
$file->normalize($base);
|
91 |
+
$args[] = $file;
|
92 |
+
}
|
93 |
+
// call auth method and respond with status and prompt HTML if connect required
|
94 |
try {
|
95 |
+
$this->api = new Loco_api_WordPressFileSystem;
|
96 |
+
if( call_user_func_array($auth,$args) ){
|
97 |
$this->set( 'authed', true );
|
98 |
$this->set( 'valid', $this->api->getOutputCredentials() );
|
99 |
$this->set( 'creds', $this->api->getInputCredentials() );
|
100 |
$this->set( 'method', $this->api->getFileSystem()->method );
|
101 |
$this->set( 'success', __('Connected to remote file system','loco-translate') );
|
102 |
+
// warning when writing to this location is risky (overwrites during wp update)
|
103 |
+
if( Loco_data_Settings::get()->fs_protect && $file->getUpdateType() ){
|
104 |
+
if( 'create' === $type ){
|
105 |
+
$message = __('This file may be overwritten or deleted when you update WordPress','loco-translate');
|
106 |
+
}
|
107 |
+
else if( 'delete' === $type ){
|
108 |
+
$message = __('This directory is managed by WordPress, be careful what you delete','loco-translate');
|
109 |
+
}
|
110 |
+
else if( 'move' === $type ){
|
111 |
+
$message = __('This directory is managed by WordPress. Removed files may be restored during updates','loco-translate');
|
112 |
+
}
|
113 |
+
else {
|
114 |
+
$message = __('Changes to this file may be overwritten or deleted when you update WordPress','loco-translate');
|
115 |
+
}
|
116 |
+
$this->set('warning',$message);
|
117 |
+
}
|
118 |
}
|
119 |
else if( $html = $this->api->getForm() ){
|
120 |
$this->set( 'authed', false );
|
121 |
$this->set( 'prompt', $html );
|
122 |
+
// supporting text based on file operation type explains why auth is required
|
123 |
+
if( 'create' === $type ){
|
124 |
+
$message = __('Creating this file requires permission','loco-translate');
|
125 |
+
}
|
126 |
+
else if( 'delete' === $type ){
|
127 |
+
$message = __('Deleting this file requires permission','loco-translate');
|
128 |
+
}
|
129 |
+
else if( 'move' === $type ){
|
130 |
+
$message = __('This move operation requires permission','loco-translate');
|
131 |
+
}
|
132 |
+
else {
|
133 |
+
$message = __('Saving this file requires permission','loco-translate');
|
134 |
+
}
|
135 |
+
// message is printed before default text, so needs delimiting.
|
136 |
+
$this->set('message',$message.'.');
|
137 |
}
|
138 |
else {
|
139 |
throw new Loco_error_Exception('Failed to get credentials form');
|
src/ajax/SaveController.php
CHANGED
@@ -43,8 +43,14 @@ class Loco_ajax_SaveController extends Loco_ajax_common_BundleController {
|
|
43 |
// force the use of remote file system when configured from front end
|
44 |
$api = new Loco_api_WordPressFileSystem;
|
45 |
|
46 |
-
// data posted
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
|
49 |
// WordPress-ize some headers that differ from JavaScript libs
|
50 |
if( $compile = (bool) $locale ){
|
43 |
// force the use of remote file system when configured from front end
|
44 |
$api = new Loco_api_WordPressFileSystem;
|
45 |
|
46 |
+
// data posted may be either 'multipart/form-data' (recommended for large files)
|
47 |
+
if( isset($_FILES['po']) ){
|
48 |
+
$data = Loco_gettext_Data::fromSource( Loco_data_Upload::src('po') );
|
49 |
+
}
|
50 |
+
// else 'application/x-www-form-urlencoded' by default
|
51 |
+
else {
|
52 |
+
$data = Loco_gettext_Data::fromSource( $post->data );
|
53 |
+
}
|
54 |
|
55 |
// WordPress-ize some headers that differ from JavaScript libs
|
56 |
if( $compile = (bool) $locale ){
|
src/ajax/XgettextController.php
CHANGED
@@ -32,7 +32,6 @@ class Loco_ajax_XgettextController extends Loco_ajax_common_BundleController {
|
|
32 |
$potfile = new Loco_fs_File( $target.'/'.$name );
|
33 |
$api = new Loco_api_WordPressFileSystem;
|
34 |
$api->authorizeCreate($potfile);
|
35 |
-
|
36 |
// Do extraction and grab only given domain's strings
|
37 |
$ext = new Loco_gettext_Extraction( $bundle );
|
38 |
$domain = $project->getDomain()->getName();
|
32 |
$potfile = new Loco_fs_File( $target.'/'.$name );
|
33 |
$api = new Loco_api_WordPressFileSystem;
|
34 |
$api->authorizeCreate($potfile);
|
|
|
35 |
// Do extraction and grab only given domain's strings
|
36 |
$ext = new Loco_gettext_Extraction( $bundle );
|
37 |
$domain = $project->getDomain()->getName();
|
src/api/WordPressFileSystem.php
CHANGED
@@ -60,6 +60,8 @@ class Loco_api_WordPressFileSystem {
|
|
60 |
|
61 |
|
62 |
/**
|
|
|
|
|
63 |
* @throws Loco_error_WriteException
|
64 |
* @return bool always true
|
65 |
*/
|
@@ -76,6 +78,7 @@ class Loco_api_WordPressFileSystem {
|
|
76 |
|
77 |
/**
|
78 |
* Authorize for the creation of a file that does not exist
|
|
|
79 |
* @return bool whether file system is authorized NOT necessarily whether file is creatable
|
80 |
*/
|
81 |
public function authorizeCreate( Loco_fs_File $file ){
|
@@ -89,6 +92,7 @@ class Loco_api_WordPressFileSystem {
|
|
89 |
|
90 |
/**
|
91 |
* Authorize for the update of a file that does exist
|
|
|
92 |
* @return bool whether file system is authorized NOT necessarily whether file is updatable
|
93 |
*/
|
94 |
public function authorizeUpdate( Loco_fs_File $file ){
|
@@ -102,6 +106,7 @@ class Loco_api_WordPressFileSystem {
|
|
102 |
|
103 |
/**
|
104 |
* Authorize for update or creation, depending whether file exists
|
|
|
105 |
* @return bool
|
106 |
*/
|
107 |
public function authorizeSave( Loco_fs_File $file ){
|
@@ -111,7 +116,8 @@ class Loco_api_WordPressFileSystem {
|
|
111 |
|
112 |
|
113 |
/**
|
114 |
-
* Authorize for copy, meaning file must exist and directory be writable
|
|
|
115 |
* @return bool
|
116 |
*/
|
117 |
public function authorizeCopy( Loco_fs_File $file ){
|
@@ -121,10 +127,29 @@ class Loco_api_WordPressFileSystem {
|
|
121 |
}
|
122 |
return $file->creatable() || $this->authorize($file);
|
123 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
|
125 |
|
126 |
/**
|
127 |
* Authorize for the removal of an existing file
|
|
|
128 |
* @return bool whether file system is authorized NOT necessarily whether file is removable
|
129 |
*/
|
130 |
public function authorizeDelete( Loco_fs_File $file ){
|
@@ -138,6 +163,7 @@ class Loco_api_WordPressFileSystem {
|
|
138 |
|
139 |
/**
|
140 |
* Connect file to credentials in posted data. Used when established in advance what connection is needed
|
|
|
141 |
* @return bool whether file system is authorized
|
142 |
*/
|
143 |
public function authorizeConnect( Loco_fs_File $file ){
|
@@ -151,14 +177,14 @@ class Loco_api_WordPressFileSystem {
|
|
151 |
}
|
152 |
|
153 |
|
154 |
-
|
155 |
/**
|
156 |
-
* Wraps `request_filesystem_credentials` negotiation to obtain a remote connection and buffer WordPress form
|
157 |
* Call before output started, because buffers.
|
|
|
|
|
158 |
*/
|
159 |
private function authorize( Loco_fs_File $file ){
|
160 |
// may already have authorized successfully
|
161 |
-
// TODO unsure whether to pass $disconnected
|
162 |
if( $fs = $this->fs ){
|
163 |
$file->getWriteContext()->connect( $fs, false );
|
164 |
return true;
|
@@ -184,7 +210,7 @@ class Loco_api_WordPressFileSystem {
|
|
184 |
$session = Loco_data_Session::get();
|
185 |
if( isset($session['loco-fs']) ){
|
186 |
$creds = $session['loco-fs'];
|
187 |
-
if( $this->tryCredentials($creds,$file) ){
|
188 |
$this->creds_in = array();
|
189 |
return true;
|
190 |
}
|
@@ -234,14 +260,15 @@ class Loco_api_WordPressFileSystem {
|
|
234 |
$type = apply_filters( 'filesystem_method', $type, $post->getArrayCopy(), $context, true );
|
235 |
|
236 |
// the only params we'll pass into form will be those used by the ajax fsConnect end point
|
237 |
-
$extra = array( 'loco-nonce', 'path', 'auth' );
|
238 |
|
239 |
// capture WordPress output during negotiation.
|
240 |
$buffer = Loco_output_Buffer::start();
|
241 |
|
242 |
-
|
|
|
243 |
// credentials passed through, should allow connect if they are correct
|
244 |
-
if( $this->tryCredentials(
|
245 |
$this->persistCredentials();
|
246 |
return true;
|
247 |
}
|
@@ -265,9 +292,9 @@ class Loco_api_WordPressFileSystem {
|
|
265 |
}
|
266 |
|
267 |
|
268 |
-
|
269 |
/**
|
270 |
-
* @
|
|
|
271 |
* @return bool when credentials connected ok
|
272 |
*/
|
273 |
private function tryCredentials( array $creds, Loco_fs_File $file ){
|
@@ -284,10 +311,9 @@ class Loco_api_WordPressFileSystem {
|
|
284 |
}
|
285 |
|
286 |
|
287 |
-
|
288 |
/**
|
289 |
* Set current credentials in session if settings allow
|
290 |
-
* @return bool whether
|
291 |
*/
|
292 |
private function persistCredentials(){
|
293 |
try {
|
@@ -307,7 +333,6 @@ class Loco_api_WordPressFileSystem {
|
|
307 |
}
|
308 |
|
309 |
|
310 |
-
|
311 |
/**
|
312 |
* Get working credentials that resulted in connection
|
313 |
* @return array
|
@@ -315,8 +340,7 @@ class Loco_api_WordPressFileSystem {
|
|
315 |
public function getOutputCredentials(){
|
316 |
return $this->creds_out;
|
317 |
}
|
318 |
-
|
319 |
-
|
320 |
|
321 |
/**
|
322 |
* Get input credentials from original post.
|
@@ -328,7 +352,6 @@ class Loco_api_WordPressFileSystem {
|
|
328 |
}
|
329 |
|
330 |
|
331 |
-
|
332 |
/**
|
333 |
* Get currently configured filesystem API
|
334 |
* @return WP_Filesystem_Direct
|
@@ -341,9 +364,9 @@ class Loco_api_WordPressFileSystem {
|
|
341 |
}
|
342 |
|
343 |
|
344 |
-
|
345 |
/**
|
346 |
* Check if a file is safe from WordPress automatic updates
|
|
|
347 |
* @return bool
|
348 |
*/
|
349 |
public function isAutoUpdatable( Loco_fs_File $file ){
|
@@ -366,9 +389,8 @@ class Loco_api_WordPressFileSystem {
|
|
366 |
}
|
367 |
|
368 |
|
369 |
-
|
370 |
/**
|
371 |
-
* Check if
|
372 |
* @return bool
|
373 |
*/
|
374 |
public function isAutoUpdateDenied(){
|
60 |
|
61 |
|
62 |
/**
|
63 |
+
* Pre-auth checks for superficial file system blocks and disconnects any active remotes
|
64 |
+
* @param Loco_fs_File
|
65 |
* @throws Loco_error_WriteException
|
66 |
* @return bool always true
|
67 |
*/
|
78 |
|
79 |
/**
|
80 |
* Authorize for the creation of a file that does not exist
|
81 |
+
* @param Loco_fs_File
|
82 |
* @return bool whether file system is authorized NOT necessarily whether file is creatable
|
83 |
*/
|
84 |
public function authorizeCreate( Loco_fs_File $file ){
|
92 |
|
93 |
/**
|
94 |
* Authorize for the update of a file that does exist
|
95 |
+
* @param Loco_fs_File
|
96 |
* @return bool whether file system is authorized NOT necessarily whether file is updatable
|
97 |
*/
|
98 |
public function authorizeUpdate( Loco_fs_File $file ){
|
106 |
|
107 |
/**
|
108 |
* Authorize for update or creation, depending whether file exists
|
109 |
+
* @param Loco_fs_File
|
110 |
* @return bool
|
111 |
*/
|
112 |
public function authorizeSave( Loco_fs_File $file ){
|
116 |
|
117 |
|
118 |
/**
|
119 |
+
* Authorize for copy (to same directory), meaning source file must exist and directory be writable
|
120 |
+
* @param Loco_fs_File
|
121 |
* @return bool
|
122 |
*/
|
123 |
public function authorizeCopy( Loco_fs_File $file ){
|
127 |
}
|
128 |
return $file->creatable() || $this->authorize($file);
|
129 |
}
|
130 |
+
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Authorize for move (to another path if given).
|
134 |
+
* @param Loco_fs_File file being moved (must exist)
|
135 |
+
* @param Loco_fs_File target path (should not exist)
|
136 |
+
* @return bool
|
137 |
+
*/
|
138 |
+
public function authorizeMove( Loco_fs_File $source, Loco_fs_File $target = null ){
|
139 |
+
// source is in charge of its own deletion
|
140 |
+
$result = $this->authorizeDelete($source);
|
141 |
+
// target is in charge of copying original which it must also be able to read.
|
142 |
+
if( $target && ! $this->authorizeCreate($target) ){
|
143 |
+
$result = false;
|
144 |
+
}
|
145 |
+
// value returned will be false if at least one file requires we add credentials
|
146 |
+
return $result;
|
147 |
+
}
|
148 |
|
149 |
|
150 |
/**
|
151 |
* Authorize for the removal of an existing file
|
152 |
+
* @param Loco_fs_File
|
153 |
* @return bool whether file system is authorized NOT necessarily whether file is removable
|
154 |
*/
|
155 |
public function authorizeDelete( Loco_fs_File $file ){
|
163 |
|
164 |
/**
|
165 |
* Connect file to credentials in posted data. Used when established in advance what connection is needed
|
166 |
+
* @param Loco_fs_File
|
167 |
* @return bool whether file system is authorized
|
168 |
*/
|
169 |
public function authorizeConnect( Loco_fs_File $file ){
|
177 |
}
|
178 |
|
179 |
|
|
|
180 |
/**
|
181 |
+
* Wraps `request_filesystem_credentials` negotiation to obtain a remote connection and buffer WordPress form output
|
182 |
* Call before output started, because buffers.
|
183 |
+
* @param Loco_fs_File
|
184 |
+
* @return bool
|
185 |
*/
|
186 |
private function authorize( Loco_fs_File $file ){
|
187 |
// may already have authorized successfully
|
|
|
188 |
if( $fs = $this->fs ){
|
189 |
$file->getWriteContext()->connect( $fs, false );
|
190 |
return true;
|
210 |
$session = Loco_data_Session::get();
|
211 |
if( isset($session['loco-fs']) ){
|
212 |
$creds = $session['loco-fs'];
|
213 |
+
if( is_array($creds) && $this->tryCredentials($creds,$file) ){
|
214 |
$this->creds_in = array();
|
215 |
return true;
|
216 |
}
|
260 |
$type = apply_filters( 'filesystem_method', $type, $post->getArrayCopy(), $context, true );
|
261 |
|
262 |
// the only params we'll pass into form will be those used by the ajax fsConnect end point
|
263 |
+
$extra = array( 'loco-nonce', 'path', 'auth', 'dest' );
|
264 |
|
265 |
// capture WordPress output during negotiation.
|
266 |
$buffer = Loco_output_Buffer::start();
|
267 |
|
268 |
+
$creds = request_filesystem_credentials( '', $type, false, $context, $extra );
|
269 |
+
if( is_array($creds) ){
|
270 |
// credentials passed through, should allow connect if they are correct
|
271 |
+
if( $this->tryCredentials($creds,$file) ){
|
272 |
$this->persistCredentials();
|
273 |
return true;
|
274 |
}
|
292 |
}
|
293 |
|
294 |
|
|
|
295 |
/**
|
296 |
+
* @param array credentials returned from request_filesystem_credentials
|
297 |
+
* @param Loco_fs_File file to authorize write context
|
298 |
* @return bool when credentials connected ok
|
299 |
*/
|
300 |
private function tryCredentials( array $creds, Loco_fs_File $file ){
|
311 |
}
|
312 |
|
313 |
|
|
|
314 |
/**
|
315 |
* Set current credentials in session if settings allow
|
316 |
+
* @return bool whether credentials persisted
|
317 |
*/
|
318 |
private function persistCredentials(){
|
319 |
try {
|
333 |
}
|
334 |
|
335 |
|
|
|
336 |
/**
|
337 |
* Get working credentials that resulted in connection
|
338 |
* @return array
|
340 |
public function getOutputCredentials(){
|
341 |
return $this->creds_out;
|
342 |
}
|
343 |
+
|
|
|
344 |
|
345 |
/**
|
346 |
* Get input credentials from original post.
|
352 |
}
|
353 |
|
354 |
|
|
|
355 |
/**
|
356 |
* Get currently configured filesystem API
|
357 |
* @return WP_Filesystem_Direct
|
364 |
}
|
365 |
|
366 |
|
|
|
367 |
/**
|
368 |
* Check if a file is safe from WordPress automatic updates
|
369 |
+
* @param Loco_fs_File
|
370 |
* @return bool
|
371 |
*/
|
372 |
public function isAutoUpdatable( Loco_fs_File $file ){
|
389 |
}
|
390 |
|
391 |
|
|
|
392 |
/**
|
393 |
+
* Check if system is configured to deny auto-updates
|
394 |
* @return bool
|
395 |
*/
|
396 |
public function isAutoUpdateDenied(){
|
src/data/Settings.php
CHANGED
@@ -15,6 +15,7 @@
|
|
15 |
* @property bool $po_utf8_bom Whether to prepend PO and POT files with UTF-8 byte order mark
|
16 |
* @property string $po_width PO/POT file maximum line width (wrapping) zero to disable
|
17 |
* @property bool $jed_pretty Whether to pretty print JSON JED files
|
|
|
18 |
*/
|
19 |
class Loco_data_Settings extends Loco_data_Serializable {
|
20 |
|
@@ -43,6 +44,7 @@ class Loco_data_Settings extends Loco_data_Serializable {
|
|
43 |
'po_utf8_bom' => false,
|
44 |
'po_width' => '79',
|
45 |
'jed_pretty' => false,
|
|
|
46 |
);
|
47 |
|
48 |
|
15 |
* @property bool $po_utf8_bom Whether to prepend PO and POT files with UTF-8 byte order mark
|
16 |
* @property string $po_width PO/POT file maximum line width (wrapping) zero to disable
|
17 |
* @property bool $jed_pretty Whether to pretty print JSON JED files
|
18 |
+
* @property bool $ajax_files Whether to submit PO data as concrete files
|
19 |
*/
|
20 |
class Loco_data_Settings extends Loco_data_Serializable {
|
21 |
|
44 |
'po_utf8_bom' => false,
|
45 |
'po_width' => '79',
|
46 |
'jed_pretty' => false,
|
47 |
+
'ajax_files' => false,
|
48 |
);
|
49 |
|
50 |
|
src/data/Upload.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Simple wrapper for transient file uploads carrying PO data.
|
4 |
+
* Doesn't move or persist uploaded files, so doesn't call wp_handle_upload()
|
5 |
+
*/
|
6 |
+
class Loco_data_Upload {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @var Loco_fs_File
|
10 |
+
*/
|
11 |
+
private $file;
|
12 |
+
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Pass through temporary file data
|
16 |
+
* @param string key in $_FILES known to exist
|
17 |
+
* @return string
|
18 |
+
* @throws Loco_error_UploadException
|
19 |
+
*/
|
20 |
+
public static function src($key){
|
21 |
+
$upload = new Loco_data_Upload($_FILES[$key]);
|
22 |
+
return $upload->file->getContents();
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @param array member of $_FILE
|
28 |
+
* @throws Loco_error_UploadException
|
29 |
+
*/
|
30 |
+
public function __construct( array $data ){
|
31 |
+
// https://www.php.net/manual/en/features.file-upload.errors.php
|
32 |
+
$code = (int) $data['error'];
|
33 |
+
switch( $code ){
|
34 |
+
case UPLOAD_ERR_OK:
|
35 |
+
break;
|
36 |
+
case UPLOAD_ERR_INI_SIZE:
|
37 |
+
throw new Loco_error_UploadException('The uploaded file exceeds the upload_max_filesize directive in php.ini',$code);
|
38 |
+
case UPLOAD_ERR_FORM_SIZE:
|
39 |
+
throw new Loco_error_UploadException('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',$code);
|
40 |
+
case UPLOAD_ERR_PARTIAL:
|
41 |
+
throw new Loco_error_UploadException('The uploaded file was only partially uploaded',$code);
|
42 |
+
case UPLOAD_ERR_NO_FILE:
|
43 |
+
throw new Loco_error_UploadException('No file was uploaded, or data is empty',$code);
|
44 |
+
case UPLOAD_ERR_NO_TMP_DIR:
|
45 |
+
throw new Loco_error_UploadException('Missing temporary folder for uploaded file',$code);
|
46 |
+
case UPLOAD_ERR_CANT_WRITE:
|
47 |
+
throw new Loco_error_UploadException('Failed to save uploaded file to disk',$code);
|
48 |
+
case UPLOAD_ERR_EXTENSION:
|
49 |
+
throw new Loco_error_UploadException('Your server blocked the file upload',$code);
|
50 |
+
default:
|
51 |
+
throw new Loco_error_UploadException('Unknown file upload error',$code);
|
52 |
+
}
|
53 |
+
// mime check is largely pointless but may as well check as we'll only send one type
|
54 |
+
if( 'application/x-gettext' !== $data['type'] ){
|
55 |
+
throw new Loco_error_UploadException('Unsupported file type, expected PO or POT file');
|
56 |
+
}
|
57 |
+
// upload is OK according to PHP, but check it's really readable and not empty
|
58 |
+
$path = $data['tmp_name'];
|
59 |
+
$file = new Loco_fs_File($path);
|
60 |
+
if( ! $file->exists() ){
|
61 |
+
throw new Loco_error_UploadException('Uploaded file is not readable',UPLOAD_ERR_NO_FILE);
|
62 |
+
}
|
63 |
+
if( 0 === $file->size() ){
|
64 |
+
throw new Loco_error_UploadException('Uploaded file contains no data',UPLOAD_ERR_NO_FILE);
|
65 |
+
}
|
66 |
+
// file is really ok
|
67 |
+
$this->file = $file;
|
68 |
+
}
|
69 |
+
|
70 |
+
}
|
71 |
+
|
src/error/AdminNotices.php
CHANGED
@@ -44,31 +44,13 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
44 |
}
|
45 |
// if exception wasn't thrown we have to do some work to establish where it was invoked
|
46 |
if( __FILE__ === $error->getFile() ){
|
47 |
-
/*$stack = debug_backtrace(0);
|
48 |
-
if( is_array($stack) && 1 < count($stack) ){
|
49 |
-
$callee = $stack[1];
|
50 |
-
if( is_array($callee) ){
|
51 |
-
$error->setCallee($callee);
|
52 |
-
}
|
53 |
-
}*/
|
54 |
$error->setCallee(1);
|
55 |
}
|
56 |
// Log messages of minimum priority and up, depending on debug mode
|
57 |
// note that non-debug level is in line with error_reporting set by WordPress (notices ignored)
|
58 |
$priority = loco_debugging() ? Loco_error_Exception::LEVEL_DEBUG : Loco_error_Exception::LEVEL_WARNING;
|
59 |
if( $error->getLevel() <= $priority ){
|
60 |
-
$
|
61 |
-
$path = $file->getRelativePath( loco_plugin_root() );
|
62 |
-
$text = sprintf('[Loco.%s] "%s" in %s:%u', $error->getType(), $error->getMessage(), $path, $error->getRealLine() );
|
63 |
-
// separate error log in CWD for tests
|
64 |
-
if( 'cli' === PHP_SAPI && defined('LOCO_TEST') && LOCO_TEST ){
|
65 |
-
error_log( '['.date('c').'] '.$text."\n", 3, 'debug.log' );
|
66 |
-
}
|
67 |
-
// Else write to default PHP log, but note that WordPress may have set this to wp-content/debug.log.
|
68 |
-
// If no `error_log` is set this will send message to the SAPI, so check your httpd/fast-cgi errors too.
|
69 |
-
else {
|
70 |
-
error_log( $text, 0 );
|
71 |
-
}
|
72 |
}
|
73 |
return $error;
|
74 |
}
|
@@ -85,6 +67,17 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
85 |
}
|
86 |
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
/**
|
89 |
* Raise a warning message
|
90 |
* @param string
|
44 |
}
|
45 |
// if exception wasn't thrown we have to do some work to establish where it was invoked
|
46 |
if( __FILE__ === $error->getFile() ){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
$error->setCallee(1);
|
48 |
}
|
49 |
// Log messages of minimum priority and up, depending on debug mode
|
50 |
// note that non-debug level is in line with error_reporting set by WordPress (notices ignored)
|
51 |
$priority = loco_debugging() ? Loco_error_Exception::LEVEL_DEBUG : Loco_error_Exception::LEVEL_WARNING;
|
52 |
if( $error->getLevel() <= $priority ){
|
53 |
+
$error->log();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
}
|
55 |
return $error;
|
56 |
}
|
67 |
}
|
68 |
|
69 |
|
70 |
+
/**
|
71 |
+
* Raise a failure message
|
72 |
+
* @param string
|
73 |
+
* @return Loco_error_Exception
|
74 |
+
*/
|
75 |
+
public static function err( $message ){
|
76 |
+
$notice = new Loco_error_Exception($message);
|
77 |
+
return self::add( $notice->setCallee(1) );
|
78 |
+
}
|
79 |
+
|
80 |
+
|
81 |
/**
|
82 |
* Raise a warning message
|
83 |
* @param string
|
src/error/Debug.php
CHANGED
@@ -26,5 +26,20 @@ class Loco_error_Debug extends Loco_error_Exception {
|
|
26 |
public function getLevel(){
|
27 |
return Loco_error_Exception::LEVEL_DEBUG;
|
28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
}
|
26 |
public function getLevel(){
|
27 |
return Loco_error_Exception::LEVEL_DEBUG;
|
28 |
}
|
29 |
+
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Log debugging message to file without raising admin notice
|
33 |
+
* @param string
|
34 |
+
* @codeCoverageIgnore
|
35 |
+
*/
|
36 |
+
public static function trace( $message ){
|
37 |
+
if( 1 < func_get_args() ){
|
38 |
+
$message = call_user_func_array('sprintf',func_get_args());
|
39 |
+
}
|
40 |
+
$debug = new Loco_error_Debug($message);
|
41 |
+
$debug->setCallee(1);
|
42 |
+
$debug->log();
|
43 |
+
}
|
44 |
|
45 |
}
|
src/error/Exception.php
CHANGED
@@ -93,6 +93,27 @@ class Loco_error_Exception extends Exception implements JsonSerializable {
|
|
93 |
}
|
94 |
|
95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
/**
|
97 |
* Get view template for rendering error to HTML.
|
98 |
* @return string path relative to root tpl directory
|
93 |
}
|
94 |
|
95 |
|
96 |
+
/**
|
97 |
+
* Write this error to file regardless of log level
|
98 |
+
* @param Loco_error_Exception
|
99 |
+
* @return void
|
100 |
+
*/
|
101 |
+
public function log(){
|
102 |
+
$file = new Loco_fs_File( $this->getRealFile() );
|
103 |
+
$path = $file->getRelativePath( loco_plugin_root() );
|
104 |
+
$text = sprintf('[Loco.%s] "%s" in %s:%u', $this->getType(), $this->getMessage(), $path, $this->getRealLine() );
|
105 |
+
// separate error log in CWD for tests
|
106 |
+
if( 'cli' === PHP_SAPI && defined('LOCO_TEST') && LOCO_TEST ){
|
107 |
+
error_log( '['.date('c').'] '.$text."\n", 3, 'debug.log' );
|
108 |
+
}
|
109 |
+
// Else write to default PHP log, but note that WordPress may have set this to wp-content/debug.log.
|
110 |
+
// If no `error_log` is set this will send message to the SAPI, so check your httpd/fast-cgi errors too.
|
111 |
+
else {
|
112 |
+
error_log( $text, 0 );
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
|
117 |
/**
|
118 |
* Get view template for rendering error to HTML.
|
119 |
* @return string path relative to root tpl directory
|
src/error/UploadException.php
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Exception type for failed uploads
|
4 |
+
*/
|
5 |
+
class Loco_error_UploadException extends Loco_error_Exception {
|
6 |
+
|
7 |
+
|
8 |
+
}
|
src/fs/Directory.php
CHANGED
@@ -12,7 +12,7 @@ class Loco_fs_Directory extends Loco_fs_File {
|
|
12 |
|
13 |
|
14 |
/**
|
15 |
-
* @
|
16 |
*/
|
17 |
public function isDirectory(){
|
18 |
return true;
|
@@ -21,6 +21,7 @@ class Loco_fs_Directory extends Loco_fs_File {
|
|
21 |
|
22 |
/**
|
23 |
* Set recursive flag for use when traversing directory trees
|
|
|
24 |
* @return Loco_fs_Directory
|
25 |
*/
|
26 |
public function setRecursive( $bool ){
|
@@ -33,14 +34,10 @@ class Loco_fs_Directory extends Loco_fs_File {
|
|
33 |
* @return bool
|
34 |
*/
|
35 |
public function isRecursive(){
|
36 |
-
if( func_num_args() ){
|
37 |
-
throw new InvalidArgumentException('Did you mean to use setRecursive?');
|
38 |
-
}
|
39 |
return $this->r;
|
40 |
}
|
41 |
|
42 |
|
43 |
-
|
44 |
/**
|
45 |
* Create this directory for real.
|
46 |
*
|
@@ -54,5 +51,4 @@ class Loco_fs_Directory extends Loco_fs_File {
|
|
54 |
return $this;
|
55 |
}
|
56 |
|
57 |
-
|
58 |
}
|
12 |
|
13 |
|
14 |
/**
|
15 |
+
* {@inheritDoc}
|
16 |
*/
|
17 |
public function isDirectory(){
|
18 |
return true;
|
21 |
|
22 |
/**
|
23 |
* Set recursive flag for use when traversing directory trees
|
24 |
+
* @param bool
|
25 |
* @return Loco_fs_Directory
|
26 |
*/
|
27 |
public function setRecursive( $bool ){
|
34 |
* @return bool
|
35 |
*/
|
36 |
public function isRecursive(){
|
|
|
|
|
|
|
37 |
return $this->r;
|
38 |
}
|
39 |
|
40 |
|
|
|
41 |
/**
|
42 |
* Create this directory for real.
|
43 |
*
|
51 |
return $this;
|
52 |
}
|
53 |
|
|
|
54 |
}
|
src/fs/File.php
CHANGED
@@ -384,7 +384,9 @@ class Loco_fs_File {
|
|
384 |
|
385 |
|
386 |
/**
|
387 |
-
*
|
|
|
|
|
388 |
*/
|
389 |
private static function explode( $path, array $b ){
|
390 |
$a = explode( '/', $path );
|
@@ -410,7 +412,8 @@ class Loco_fs_File {
|
|
410 |
|
411 |
/**
|
412 |
* Get path relative to given location, unless path is already relative
|
413 |
-
* @
|
|
|
414 |
*/
|
415 |
public function getRelativePath( $base ){
|
416 |
$path = $this->normalize();
|
@@ -425,7 +428,7 @@ class Loco_fs_File {
|
|
425 |
if( isset($path{$length}) ){
|
426 |
return substr( $path, $length );
|
427 |
}
|
428 |
-
// else paths were
|
429 |
return '';
|
430 |
}
|
431 |
// else attempt to find nearest common root
|
@@ -446,7 +449,6 @@ class Loco_fs_File {
|
|
446 |
}
|
447 |
|
448 |
|
449 |
-
|
450 |
/**
|
451 |
* @return bool
|
452 |
*/
|
@@ -514,17 +516,18 @@ class Loco_fs_File {
|
|
514 |
|
515 |
|
516 |
/**
|
517 |
-
* @return Loco_fs_Directory
|
518 |
*/
|
519 |
public function getParent(){
|
|
|
520 |
$path = $this->dirname();
|
521 |
if( '.' !== $path && $this->path !== $path ){
|
522 |
$dir = new Loco_fs_Directory( $path );
|
523 |
$dir->cloneWriteContext( $this->w );
|
524 |
-
return $dir;
|
525 |
}
|
526 |
-
|
527 |
-
|
|
|
528 |
|
529 |
/**
|
530 |
* Copy this file for real
|
@@ -536,11 +539,23 @@ class Loco_fs_File {
|
|
536 |
$copy = clone $this;
|
537 |
$copy->path = $dest;
|
538 |
$copy->clearStat();
|
539 |
-
$this->getWriteContext()->copy(
|
540 |
return $copy;
|
541 |
}
|
542 |
|
543 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
544 |
/**
|
545 |
* Delete this file for real
|
546 |
* @throws Loco_error_WriteException
|
384 |
|
385 |
|
386 |
/**
|
387 |
+
* @param string
|
388 |
+
* @param string[]
|
389 |
+
* @return array
|
390 |
*/
|
391 |
private static function explode( $path, array $b ){
|
392 |
$a = explode( '/', $path );
|
412 |
|
413 |
/**
|
414 |
* Get path relative to given location, unless path is already relative
|
415 |
+
* @param string base path
|
416 |
+
* @return string path relative to given base
|
417 |
*/
|
418 |
public function getRelativePath( $base ){
|
419 |
$path = $this->normalize();
|
428 |
if( isset($path{$length}) ){
|
429 |
return substr( $path, $length );
|
430 |
}
|
431 |
+
// else paths were identical
|
432 |
return '';
|
433 |
}
|
434 |
// else attempt to find nearest common root
|
449 |
}
|
450 |
|
451 |
|
|
|
452 |
/**
|
453 |
* @return bool
|
454 |
*/
|
516 |
|
517 |
|
518 |
/**
|
519 |
+
* @return Loco_fs_Directory|null
|
520 |
*/
|
521 |
public function getParent(){
|
522 |
+
$dir = null;
|
523 |
$path = $this->dirname();
|
524 |
if( '.' !== $path && $this->path !== $path ){
|
525 |
$dir = new Loco_fs_Directory( $path );
|
526 |
$dir->cloneWriteContext( $this->w );
|
|
|
527 |
}
|
528 |
+
return $dir;
|
529 |
+
}
|
530 |
+
|
531 |
|
532 |
/**
|
533 |
* Copy this file for real
|
539 |
$copy = clone $this;
|
540 |
$copy->path = $dest;
|
541 |
$copy->clearStat();
|
542 |
+
$this->getWriteContext()->copy($copy);
|
543 |
return $copy;
|
544 |
}
|
545 |
|
546 |
|
547 |
+
/**
|
548 |
+
* Move/rename this file for real
|
549 |
+
* @param Loco_fs_File target file with new path
|
550 |
+
* @throws Loco_error_WriteException
|
551 |
+
* @return Loco_fs_File original file that should no longer exist
|
552 |
+
*/
|
553 |
+
public function move( Loco_fs_File $dest ){
|
554 |
+
$this->getWriteContext()->move($dest);
|
555 |
+
return $this->clearStat();
|
556 |
+
}
|
557 |
+
|
558 |
+
|
559 |
/**
|
560 |
* Delete this file for real
|
561 |
* @throws Loco_error_WriteException
|
src/fs/FileFinder.php
CHANGED
@@ -17,8 +17,8 @@ class Loco_fs_FileFinder implements Iterator, Countable, Loco_fs_FileListInterfa
|
|
17 |
private $subdir;
|
18 |
|
19 |
/**
|
20 |
-
*
|
21 |
-
* @var
|
22 |
*/
|
23 |
private $cached;
|
24 |
|
@@ -29,19 +29,19 @@ class Loco_fs_FileFinder implements Iterator, Countable, Loco_fs_FileListInterfa
|
|
29 |
private $cache;
|
30 |
|
31 |
/**
|
32 |
-
*
|
33 |
* @var int
|
34 |
*/
|
35 |
private $i;
|
36 |
|
37 |
/**
|
38 |
-
*
|
39 |
* @var int
|
40 |
*/
|
41 |
private $d;
|
42 |
|
43 |
/**
|
44 |
-
*
|
45 |
* @var resource
|
46 |
*/
|
47 |
private $dir;
|
@@ -73,7 +73,7 @@ class Loco_fs_FileFinder implements Iterator, Countable, Loco_fs_FileListInterfa
|
|
73 |
private $symlinks = true;
|
74 |
|
75 |
/**
|
76 |
-
* Registry of followed links by their
|
77 |
* @var Loco_fs_FileList
|
78 |
*/
|
79 |
private $linked;
|
@@ -367,9 +367,8 @@ class Loco_fs_FileFinder implements Iterator, Countable, Loco_fs_FileListInterfa
|
|
367 |
continue;
|
368 |
}
|
369 |
// file represented as object containing original path
|
370 |
-
$file = new Loco_fs_File(
|
371 |
$this->add( $file );
|
372 |
-
$this->i++;
|
373 |
return $file;
|
374 |
}
|
375 |
$this->close();
|
@@ -387,23 +386,24 @@ class Loco_fs_FileFinder implements Iterator, Countable, Loco_fs_FileListInterfa
|
|
387 |
}
|
388 |
|
389 |
|
390 |
-
|
391 |
/**
|
392 |
-
*
|
393 |
-
* @param Loco_fs_File
|
394 |
*/
|
395 |
public function add( Loco_fs_File $file ){
|
396 |
if( $this->exts ){
|
397 |
$ext = $file->extension();
|
398 |
if( ! isset($this->exts[$ext]) ){
|
399 |
-
return;
|
400 |
}
|
401 |
-
$this->exts[$ext]->add(
|
|
|
|
|
|
|
|
|
402 |
}
|
403 |
-
|
404 |
}
|
405 |
|
406 |
-
|
407 |
|
408 |
/**
|
409 |
* @return int
|
@@ -447,12 +447,17 @@ class Loco_fs_FileFinder implements Iterator, Countable, Loco_fs_FileListInterfa
|
|
447 |
}
|
448 |
|
449 |
|
450 |
-
|
|
|
|
|
451 |
public function key(){
|
452 |
return $this->i;
|
453 |
}
|
454 |
|
455 |
|
|
|
|
|
|
|
456 |
public function valid(){
|
457 |
// may be in lazy state after rewind
|
458 |
// must do initial read now in case list is empty
|
17 |
private $subdir;
|
18 |
|
19 |
/**
|
20 |
+
* Whether directories all read into memory
|
21 |
+
* @var bool
|
22 |
*/
|
23 |
private $cached;
|
24 |
|
29 |
private $cache;
|
30 |
|
31 |
/**
|
32 |
+
* Internal array pointer for whole list of paths
|
33 |
* @var int
|
34 |
*/
|
35 |
private $i;
|
36 |
|
37 |
/**
|
38 |
+
* Internal pointer for directory being read
|
39 |
* @var int
|
40 |
*/
|
41 |
private $d;
|
42 |
|
43 |
/**
|
44 |
+
* Current directory being read
|
45 |
* @var resource
|
46 |
*/
|
47 |
private $dir;
|
73 |
private $symlinks = true;
|
74 |
|
75 |
/**
|
76 |
+
* Registry of followed links by their original path
|
77 |
* @var Loco_fs_FileList
|
78 |
*/
|
79 |
private $linked;
|
367 |
continue;
|
368 |
}
|
369 |
// file represented as object containing original path
|
370 |
+
$file = new Loco_fs_File($path);
|
371 |
$this->add( $file );
|
|
|
372 |
return $file;
|
373 |
}
|
374 |
$this->close();
|
386 |
}
|
387 |
|
388 |
|
|
|
389 |
/**
|
390 |
+
* {@inheritDoc}
|
|
|
391 |
*/
|
392 |
public function add( Loco_fs_File $file ){
|
393 |
if( $this->exts ){
|
394 |
$ext = $file->extension();
|
395 |
if( ! isset($this->exts[$ext]) ){
|
396 |
+
return false;
|
397 |
}
|
398 |
+
$this->exts[$ext]->add($file);
|
399 |
+
}
|
400 |
+
if( $this->cache->add($file) ){
|
401 |
+
$this->i++;
|
402 |
+
return true;
|
403 |
}
|
404 |
+
return false;
|
405 |
}
|
406 |
|
|
|
407 |
|
408 |
/**
|
409 |
* @return int
|
447 |
}
|
448 |
|
449 |
|
450 |
+
/**
|
451 |
+
* @return int
|
452 |
+
*/
|
453 |
public function key(){
|
454 |
return $this->i;
|
455 |
}
|
456 |
|
457 |
|
458 |
+
/**
|
459 |
+
* @return bool
|
460 |
+
*/
|
461 |
public function valid(){
|
462 |
// may be in lazy state after rewind
|
463 |
// must do initial read now in case list is empty
|
src/fs/FileList.php
CHANGED
@@ -11,7 +11,8 @@ class Loco_fs_FileList extends ArrayIterator implements Loco_fs_FileListInterfac
|
|
11 |
private $unique = array();
|
12 |
|
13 |
/**
|
14 |
-
*
|
|
|
15 |
*/
|
16 |
public function __construct( $a = array() ){
|
17 |
parent::__construct( array() );
|
@@ -36,6 +37,7 @@ class Loco_fs_FileList extends ArrayIterator implements Loco_fs_FileListInterfac
|
|
36 |
|
37 |
/**
|
38 |
* @internal
|
|
|
39 |
*/
|
40 |
public function __toString(){
|
41 |
return implode( "\n", $this->getArrayCopy() );
|
@@ -44,6 +46,7 @@ class Loco_fs_FileList extends ArrayIterator implements Loco_fs_FileListInterfac
|
|
44 |
|
45 |
/**
|
46 |
* Generate a unique key for file
|
|
|
47 |
* @return string
|
48 |
*/
|
49 |
private function hash( Loco_fs_File $file ){
|
@@ -57,7 +60,7 @@ class Loco_fs_FileList extends ArrayIterator implements Loco_fs_FileListInterfac
|
|
57 |
|
58 |
|
59 |
/**
|
60 |
-
* @
|
61 |
*/
|
62 |
public function offsetSet( $index, $value ){
|
63 |
throw new Exception('Use Loco_fs_FileList::add');
|
@@ -65,22 +68,22 @@ class Loco_fs_FileList extends ArrayIterator implements Loco_fs_FileListInterfac
|
|
65 |
|
66 |
|
67 |
/**
|
68 |
-
*
|
69 |
-
* @return Loco_fs_FileList
|
70 |
*/
|
71 |
public function add( Loco_fs_File $file ){
|
72 |
$hash = $this->hash( $file );
|
73 |
-
if(
|
74 |
-
|
75 |
-
parent::offsetSet( null, $file );
|
76 |
}
|
77 |
-
|
78 |
-
|
|
|
79 |
}
|
80 |
|
81 |
|
82 |
/**
|
83 |
* Check if given file is already in list
|
|
|
84 |
* @return bool
|
85 |
*/
|
86 |
public function has( Loco_fs_File $file ){
|
@@ -91,6 +94,7 @@ class Loco_fs_FileList extends ArrayIterator implements Loco_fs_FileListInterfac
|
|
91 |
|
92 |
/**
|
93 |
* Get a copy of list with only files not contained in passed list
|
|
|
94 |
* @return Loco_fs_FileList
|
95 |
*/
|
96 |
public function diff( Loco_fs_FileList $not_in ){
|
@@ -105,6 +109,7 @@ class Loco_fs_FileList extends ArrayIterator implements Loco_fs_FileListInterfac
|
|
105 |
|
106 |
/**
|
107 |
* Merge another list of the SAME TYPE uniquely on top of current one
|
|
|
108 |
* @return Loco_fs_FileList
|
109 |
*/
|
110 |
public function augment( loco_fs_FileList $list ){
|
11 |
private $unique = array();
|
12 |
|
13 |
/**
|
14 |
+
* Construct with initial list if files
|
15 |
+
* @param Loco_fs_File[]
|
16 |
*/
|
17 |
public function __construct( $a = array() ){
|
18 |
parent::__construct( array() );
|
37 |
|
38 |
/**
|
39 |
* @internal
|
40 |
+
* @return string
|
41 |
*/
|
42 |
public function __toString(){
|
43 |
return implode( "\n", $this->getArrayCopy() );
|
46 |
|
47 |
/**
|
48 |
* Generate a unique key for file
|
49 |
+
* @param Loco_fs_File
|
50 |
* @return string
|
51 |
*/
|
52 |
private function hash( Loco_fs_File $file ){
|
60 |
|
61 |
|
62 |
/**
|
63 |
+
* {@inheritDoc}
|
64 |
*/
|
65 |
public function offsetSet( $index, $value ){
|
66 |
throw new Exception('Use Loco_fs_FileList::add');
|
68 |
|
69 |
|
70 |
/**
|
71 |
+
* {@inheritDoc}
|
|
|
72 |
*/
|
73 |
public function add( Loco_fs_File $file ){
|
74 |
$hash = $this->hash( $file );
|
75 |
+
if( isset($this->unique[$hash]) ){
|
76 |
+
return false;
|
|
|
77 |
}
|
78 |
+
$this->unique[$hash] = true;
|
79 |
+
parent::offsetSet( null, $file );
|
80 |
+
return true;
|
81 |
}
|
82 |
|
83 |
|
84 |
/**
|
85 |
* Check if given file is already in list
|
86 |
+
* @param Loco_fs_File
|
87 |
* @return bool
|
88 |
*/
|
89 |
public function has( Loco_fs_File $file ){
|
94 |
|
95 |
/**
|
96 |
* Get a copy of list with only files not contained in passed list
|
97 |
+
* @param Loco_fs_FileList
|
98 |
* @return Loco_fs_FileList
|
99 |
*/
|
100 |
public function diff( Loco_fs_FileList $not_in ){
|
109 |
|
110 |
/**
|
111 |
* Merge another list of the SAME TYPE uniquely on top of current one
|
112 |
+
* @param Loco_fs_FileList
|
113 |
* @return Loco_fs_FileList
|
114 |
*/
|
115 |
public function augment( loco_fs_FileList $list ){
|
src/fs/FileListInterface.php
CHANGED
@@ -1,7 +1,12 @@
|
|
1 |
<?php
|
2 |
|
3 |
interface Loco_fs_FileListInterface extends Countable, Iterator {
|
4 |
-
|
|
|
|
|
|
|
|
|
|
|
5 |
public function add( Loco_fs_File $file );
|
6 |
|
7 |
}
|
1 |
<?php
|
2 |
|
3 |
interface Loco_fs_FileListInterface extends Countable, Iterator {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Add a file uniquely
|
7 |
+
* @param Loco_fs_File
|
8 |
+
* @return bool whether file was added (and didn't already exist)
|
9 |
+
*/
|
10 |
public function add( Loco_fs_File $file );
|
11 |
|
12 |
}
|
src/fs/FileWriter.php
CHANGED
@@ -10,7 +10,7 @@ class Loco_fs_FileWriter {
|
|
10 |
private $file;
|
11 |
|
12 |
/**
|
13 |
-
* @var
|
14 |
*/
|
15 |
private $fs;
|
16 |
|
@@ -144,11 +144,19 @@ class Loco_fs_FileWriter {
|
|
144 |
$this->authorize();
|
145 |
$source = $this->getPath();
|
146 |
$target = $this->mapPath( $copy->getPath() );
|
147 |
-
// bugs in WP file system "exists" methods
|
148 |
if( $copy->exists() ){
|
|
|
149 |
throw new Loco_error_WriteException( __('Refusing to copy over an existing file','loco-translate') );
|
150 |
}
|
151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
throw new Loco_error_WriteException( sprintf( __('Failed to copy %s to %s','loco-translate'), basename($source), basename($target) ) );
|
153 |
}
|
154 |
|
@@ -156,6 +164,28 @@ class Loco_fs_FileWriter {
|
|
156 |
}
|
157 |
|
158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
|
160 |
/**
|
161 |
* @param bool
|
@@ -183,6 +213,11 @@ class Loco_fs_FileWriter {
|
|
183 |
if( $file->isDirectory() ){
|
184 |
throw new Loco_error_WriteException( sprintf( __('"%s" is a directory, not a file','loco-translate'), $file->basename() ) );
|
185 |
}
|
|
|
|
|
|
|
|
|
|
|
186 |
// avoid chmod of existing file
|
187 |
if( $file->exists() ){
|
188 |
$mode = $file->mode();
|
@@ -190,21 +225,27 @@ class Loco_fs_FileWriter {
|
|
190 |
// may have bypassed definition of FS_CHMOD_FILE
|
191 |
else {
|
192 |
$mode = defined('FS_CHMOD_FILE') ? FS_CHMOD_FILE : 0644;
|
|
|
|
|
|
|
|
|
193 |
}
|
|
|
194 |
$path = $this->getPath();
|
195 |
-
|
196 |
// provide useful reason for failure if possible
|
197 |
-
if( $file->exists() && ! $
|
198 |
-
Loco_error_AdminNotices::debug( sprintf('File not writable,
|
199 |
throw new Loco_error_WriteException( __("Permission denied to update file",'loco-translate') );
|
200 |
}
|
201 |
-
//
|
202 |
-
|
203 |
-
|
204 |
-
Loco_error_AdminNotices::debug( sprintf('Directory not
|
205 |
-
throw new Loco_error_WriteException( __("Parent directory
|
206 |
}
|
207 |
// else reason for failure is not established
|
|
|
208 |
throw new Loco_error_WriteException( __('Failed to save file','loco-translate').': '.$file->basename() );
|
209 |
}
|
210 |
|
@@ -212,26 +253,30 @@ class Loco_fs_FileWriter {
|
|
212 |
}
|
213 |
|
214 |
|
215 |
-
|
216 |
/**
|
|
|
|
|
217 |
* @return bool
|
218 |
* @throws Loco_error_WriteException
|
219 |
*/
|
220 |
-
public function mkdir(){
|
|
|
|
|
|
|
221 |
$this->authorize();
|
222 |
$fs = $this->fs;
|
223 |
// may have bypassed definition of FS_CHMOD_DIR
|
224 |
$mode = defined('FS_CHMOD_DIR') ? FS_CHMOD_DIR : 0755;
|
225 |
// find first ancestor that exists while building tree
|
226 |
$stack = array();
|
227 |
-
$here = $this->file;
|
228 |
/* @var $parent Loco_fs_Directory */
|
229 |
while( $parent = $here->getParent() ){
|
230 |
array_unshift( $stack, $this->mapPath( $here->getPath() ) );
|
231 |
if( $parent->exists() ){
|
232 |
// have existent directory, now build full path
|
233 |
foreach( $stack as $path ){
|
234 |
-
if( ! $fs->mkdir(
|
|
|
235 |
throw new Loco_error_WriteException( __('Failed to create directory','loco-translate') );
|
236 |
}
|
237 |
}
|
@@ -239,11 +284,11 @@ class Loco_fs_FileWriter {
|
|
239 |
}
|
240 |
$here = $parent;
|
241 |
}
|
|
|
242 |
throw new Loco_error_WriteException( __('Failed to build directory path','loco-translate') );
|
243 |
}
|
244 |
|
245 |
|
246 |
-
|
247 |
/**
|
248 |
* Check whether write operations are permitted, or throw
|
249 |
* @throws Loco_error_WriteException
|
@@ -261,7 +306,6 @@ class Loco_fs_FileWriter {
|
|
261 |
}
|
262 |
|
263 |
|
264 |
-
|
265 |
/**
|
266 |
* Check if file system modification is banned at WordPress level
|
267 |
* @return bool
|
10 |
private $file;
|
11 |
|
12 |
/**
|
13 |
+
* @var WP_Filesystem_Base
|
14 |
*/
|
15 |
private $fs;
|
16 |
|
144 |
$this->authorize();
|
145 |
$source = $this->getPath();
|
146 |
$target = $this->mapPath( $copy->getPath() );
|
147 |
+
// bugs in WP file system "exists" methods means we must force $overwrite=true; so checking file existence first
|
148 |
if( $copy->exists() ){
|
149 |
+
Loco_error_AdminNotices::debug(sprintf('Cannot copy %s to %s (target already exists)',$source,$target));
|
150 |
throw new Loco_error_WriteException( __('Refusing to copy over an existing file','loco-translate') );
|
151 |
}
|
152 |
+
// ensure target directory exists, although in most cases copy will be in situ
|
153 |
+
$parent = $copy->getParent();
|
154 |
+
if( $parent && ! $parent->exists() ){
|
155 |
+
$this->mkdir($parent);
|
156 |
+
}
|
157 |
+
// perform WP file system copy method
|
158 |
+
if( ! $this->fs->copy($source,$target,true) ){
|
159 |
+
Loco_error_AdminNotices::debug(sprintf('Failed to copy %s to %s via "%s" method',$source,$target,$this->fs->method));
|
160 |
throw new Loco_error_WriteException( sprintf( __('Failed to copy %s to %s','loco-translate'), basename($source), basename($target) ) );
|
161 |
}
|
162 |
|
164 |
}
|
165 |
|
166 |
|
167 |
+
/**
|
168 |
+
* @param Loco_fs_File target file with new path
|
169 |
+
* @return Loco_fs_FileWriter
|
170 |
+
* @throws Loco_error_WriteException
|
171 |
+
*/
|
172 |
+
public function move( Loco_fs_File $dest ){
|
173 |
+
$orig = $this->file;
|
174 |
+
try {
|
175 |
+
// target should have been authorized to create the new file
|
176 |
+
$context = clone $dest->getWriteContext();
|
177 |
+
$context->setFile($orig);
|
178 |
+
$context->copy($dest);
|
179 |
+
// source should have been authorized to delete the original file
|
180 |
+
$this->delete(false);
|
181 |
+
return $this;
|
182 |
+
}
|
183 |
+
catch( Loco_error_WriteException $e ){
|
184 |
+
Loco_error_AdminNotices::debug('copy/delete failure: '.$e->getMessage() );
|
185 |
+
throw new Loco_error_WriteException( sprintf( 'Failed to move %s', $orig->basename() ) );
|
186 |
+
}
|
187 |
+
}
|
188 |
+
|
189 |
|
190 |
/**
|
191 |
* @param bool
|
213 |
if( $file->isDirectory() ){
|
214 |
throw new Loco_error_WriteException( sprintf( __('"%s" is a directory, not a file','loco-translate'), $file->basename() ) );
|
215 |
}
|
216 |
+
// file having no parent directory is likely an error, like a relative path.
|
217 |
+
$dir = $file->getParent();
|
218 |
+
if( ! $dir ){
|
219 |
+
throw new Loco_error_WriteException( sprintf('Bad file path "%s"',$file) );
|
220 |
+
}
|
221 |
// avoid chmod of existing file
|
222 |
if( $file->exists() ){
|
223 |
$mode = $file->mode();
|
225 |
// may have bypassed definition of FS_CHMOD_FILE
|
226 |
else {
|
227 |
$mode = defined('FS_CHMOD_FILE') ? FS_CHMOD_FILE : 0644;
|
228 |
+
// new file may also require directory path building
|
229 |
+
if( ! $dir->exists() ){
|
230 |
+
$this->mkdir($dir);
|
231 |
+
}
|
232 |
}
|
233 |
+
$fs = $this->fs;
|
234 |
$path = $this->getPath();
|
235 |
+
if( ! $fs->put_contents($path,$data,$mode) ){
|
236 |
// provide useful reason for failure if possible
|
237 |
+
if( $file->exists() && ! $file->writable() ){
|
238 |
+
Loco_error_AdminNotices::debug( sprintf('File not writable via "%s" method, check permissions on %s',$fs->method,$path) );
|
239 |
throw new Loco_error_WriteException( __("Permission denied to update file",'loco-translate') );
|
240 |
}
|
241 |
+
// directory path should exist or have thrown error earlier.
|
242 |
+
// directory path may not be writable by same fs context
|
243 |
+
if( ! $dir->writable() ){
|
244 |
+
Loco_error_AdminNotices::debug( sprintf('Directory not writable via "%s" method; check permissions for %s',$fs->method,$dir) );
|
245 |
+
throw new Loco_error_WriteException( __("Parent directory isn't writable",'loco-translate') );
|
246 |
}
|
247 |
// else reason for failure is not established
|
248 |
+
Loco_error_AdminNotices::debug( sprintf('Unknown write failure via "%s" method; check %s',$fs->method,$path) );
|
249 |
throw new Loco_error_WriteException( __('Failed to save file','loco-translate').': '.$file->basename() );
|
250 |
}
|
251 |
|
253 |
}
|
254 |
|
255 |
|
|
|
256 |
/**
|
257 |
+
* Create current directory context
|
258 |
+
* @param Loco_fs_File optional directory
|
259 |
* @return bool
|
260 |
* @throws Loco_error_WriteException
|
261 |
*/
|
262 |
+
public function mkdir( Loco_fs_File $here = null ) {
|
263 |
+
if( is_null($here) ){
|
264 |
+
$here = $this->file;
|
265 |
+
}
|
266 |
$this->authorize();
|
267 |
$fs = $this->fs;
|
268 |
// may have bypassed definition of FS_CHMOD_DIR
|
269 |
$mode = defined('FS_CHMOD_DIR') ? FS_CHMOD_DIR : 0755;
|
270 |
// find first ancestor that exists while building tree
|
271 |
$stack = array();
|
|
|
272 |
/* @var $parent Loco_fs_Directory */
|
273 |
while( $parent = $here->getParent() ){
|
274 |
array_unshift( $stack, $this->mapPath( $here->getPath() ) );
|
275 |
if( $parent->exists() ){
|
276 |
// have existent directory, now build full path
|
277 |
foreach( $stack as $path ){
|
278 |
+
if( ! $fs->mkdir($path,$mode) ){
|
279 |
+
Loco_error_AdminNotices::debug( sprintf('mkdir(%s,%03o) failed via "%s" method;',var_export($path,1),$mode,$fs->method) );
|
280 |
throw new Loco_error_WriteException( __('Failed to create directory','loco-translate') );
|
281 |
}
|
282 |
}
|
284 |
}
|
285 |
$here = $parent;
|
286 |
}
|
287 |
+
// refusing to create directory when the entire path is missing. e.g. "/bad"
|
288 |
throw new Loco_error_WriteException( __('Failed to build directory path','loco-translate') );
|
289 |
}
|
290 |
|
291 |
|
|
|
292 |
/**
|
293 |
* Check whether write operations are permitted, or throw
|
294 |
* @throws Loco_error_WriteException
|
306 |
}
|
307 |
|
308 |
|
|
|
309 |
/**
|
310 |
* Check if file system modification is banned at WordPress level
|
311 |
* @return bool
|
src/fs/LocaleDirectory.php
CHANGED
@@ -52,6 +52,7 @@ class Loco_fs_LocaleDirectory extends Loco_fs_Directory {
|
|
52 |
|
53 |
/**
|
54 |
* Get translated version of getTypeId
|
|
|
55 |
* @return string
|
56 |
*/
|
57 |
public function getTypeLabel( $id ){
|
52 |
|
53 |
/**
|
54 |
* Get translated version of getTypeId
|
55 |
+
* @param string id
|
56 |
* @return string
|
57 |
*/
|
58 |
public function getTypeLabel( $id ){
|
src/fs/LocaleFile.php
CHANGED
@@ -31,7 +31,7 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
|
|
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
|
35 |
if( ! $this->prefix && ! $this->getLocale()->isValid() ){
|
36 |
$this->prefix = $this->suffix;
|
37 |
$this->suffix = '';
|
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
|
35 |
if( ! $this->prefix && ! $this->getLocale()->isValid() ){
|
36 |
$this->prefix = $this->suffix;
|
37 |
$this->suffix = '';
|
src/fs/Locations.php
CHANGED
@@ -133,13 +133,10 @@ class Loco_fs_Locations extends ArrayObject {
|
|
133 |
* @return Loco_fs_Locations
|
134 |
*/
|
135 |
public function add( $path ){
|
136 |
-
$path
|
137 |
-
|
138 |
-
|
139 |
}
|
140 |
-
// path must have trailing slash, otherwise "/plugins/foobar" would match "/plugins/foo/"
|
141 |
-
$path = trailingslashit($path);
|
142 |
-
$this[$path] = strlen($path);
|
143 |
return $this;
|
144 |
}
|
145 |
|
@@ -150,10 +147,11 @@ class Loco_fs_Locations extends ArrayObject {
|
|
150 |
* @return bool whether path matched
|
151 |
*/
|
152 |
public function check( $path ){
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
|
|
157 |
}
|
158 |
}
|
159 |
return false;
|
@@ -167,15 +165,37 @@ class Loco_fs_Locations extends ArrayObject {
|
|
167 |
* @return string | null
|
168 |
*/
|
169 |
public function rel( $path ){
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
|
|
177 |
}
|
178 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
}
|
180 |
|
|
|
181 |
}
|
133 |
* @return Loco_fs_Locations
|
134 |
*/
|
135 |
public function add( $path ){
|
136 |
+
foreach( $this->expand($path) as $path ){
|
137 |
+
// path must have trailing slash, otherwise "/plugins/foobar" would match "/plugins/foo/"
|
138 |
+
$this[$path] = strlen($path);
|
139 |
}
|
|
|
|
|
|
|
140 |
return $this;
|
141 |
}
|
142 |
|
147 |
* @return bool whether path matched
|
148 |
*/
|
149 |
public function check( $path ){
|
150 |
+
foreach( $this->expand($path) as $path ){
|
151 |
+
foreach( $this as $prefix => $length ){
|
152 |
+
if( $prefix === $path || substr($path,0,$length) === $prefix ){
|
153 |
+
return true;
|
154 |
+
}
|
155 |
}
|
156 |
}
|
157 |
return false;
|
165 |
* @return string | null
|
166 |
*/
|
167 |
public function rel( $path ){
|
168 |
+
foreach( $this->expand($path) as $path ){
|
169 |
+
foreach( $this as $prefix => $length ){
|
170 |
+
if( $prefix === $path ){
|
171 |
+
return '.';
|
172 |
+
}
|
173 |
+
if( substr($path,0,$length) === $prefix ){
|
174 |
+
return untrailingslashit( substr($path,$length) );
|
175 |
+
}
|
176 |
}
|
177 |
}
|
178 |
+
return null;
|
179 |
+
}
|
180 |
+
|
181 |
+
|
182 |
+
/**
|
183 |
+
* @param string
|
184 |
+
* @return string[]
|
185 |
+
*/
|
186 |
+
private function expand( $path ){
|
187 |
+
$path = Loco_fs_File::abs($path);
|
188 |
+
if( ! $path ){
|
189 |
+
throw new InvalidArgumentException('Expected absolute path');
|
190 |
+
}
|
191 |
+
$paths = array( trailingslashit($path) );
|
192 |
+
// add real path if differs
|
193 |
+
$real = realpath($path);
|
194 |
+
if( $real && $real !== $path ){
|
195 |
+
$paths[] = trailingslashit($real);
|
196 |
+
}
|
197 |
+
return $paths;
|
198 |
}
|
199 |
|
200 |
+
|
201 |
}
|
src/fs/Revisions.php
CHANGED
@@ -37,6 +37,7 @@ class Loco_fs_Revisions implements Countable/*, IteratorAggregate*/ {
|
|
37 |
|
38 |
/**
|
39 |
* Construct from master file (current version)
|
|
|
40 |
*/
|
41 |
public function __construct( Loco_fs_File $file ){
|
42 |
$this->master = $file;
|
@@ -148,6 +149,7 @@ class Loco_fs_Revisions implements Countable/*, IteratorAggregate*/ {
|
|
148 |
$this->paths = array();
|
149 |
$regex = $this->getRegExp();
|
150 |
$finder = new Loco_fs_FileFinder( $this->master->dirname() );
|
|
|
151 |
/* @var $file Loco_fs_File */
|
152 |
foreach( $finder as $file ){
|
153 |
if( preg_match( $regex, $file->basename(), $r ) ){
|
@@ -164,6 +166,7 @@ class Loco_fs_Revisions implements Countable/*, IteratorAggregate*/ {
|
|
164 |
|
165 |
/**
|
166 |
* Parse a file path into a timestamp
|
|
|
167 |
* @return int
|
168 |
*/
|
169 |
public function getTimestamp( $path ){
|
@@ -193,6 +196,7 @@ class Loco_fs_Revisions implements Countable/*, IteratorAggregate*/ {
|
|
193 |
/**
|
194 |
* Delete file when object removed from memory.
|
195 |
* Previously unlinked on shutdown, but doesn't work with WordPress file system abstraction
|
|
|
196 |
* @return void
|
197 |
*/
|
198 |
public function unlinkLater($path){
|
37 |
|
38 |
/**
|
39 |
* Construct from master file (current version)
|
40 |
+
* @param Loco_fs_File
|
41 |
*/
|
42 |
public function __construct( Loco_fs_File $file ){
|
43 |
$this->master = $file;
|
149 |
$this->paths = array();
|
150 |
$regex = $this->getRegExp();
|
151 |
$finder = new Loco_fs_FileFinder( $this->master->dirname() );
|
152 |
+
$finder->setRecursive(false);
|
153 |
/* @var $file Loco_fs_File */
|
154 |
foreach( $finder as $file ){
|
155 |
if( preg_match( $regex, $file->basename(), $r ) ){
|
166 |
|
167 |
/**
|
168 |
* Parse a file path into a timestamp
|
169 |
+
* @param string
|
170 |
* @return int
|
171 |
*/
|
172 |
public function getTimestamp( $path ){
|
196 |
/**
|
197 |
* Delete file when object removed from memory.
|
198 |
* Previously unlinked on shutdown, but doesn't work with WordPress file system abstraction
|
199 |
+
* @param string
|
200 |
* @return void
|
201 |
*/
|
202 |
public function unlinkLater($path){
|
src/fs/Siblings.php
CHANGED
@@ -34,10 +34,9 @@ class Loco_fs_Siblings {
|
|
34 |
}
|
35 |
|
36 |
|
37 |
-
|
38 |
/**
|
39 |
* Get all dependant files (including self) that actually exist on disk
|
40 |
-
* @return
|
41 |
*/
|
42 |
public function expand(){
|
43 |
$siblings = array();
|
@@ -72,7 +71,6 @@ class Loco_fs_Siblings {
|
|
72 |
}
|
73 |
|
74 |
|
75 |
-
|
76 |
/**
|
77 |
* @return Loco_fs_File
|
78 |
*/
|
34 |
}
|
35 |
|
36 |
|
|
|
37 |
/**
|
38 |
* Get all dependant files (including self) that actually exist on disk
|
39 |
+
* @return Loco_fs_File[]
|
40 |
*/
|
41 |
public function expand(){
|
42 |
$siblings = array();
|
71 |
}
|
72 |
|
73 |
|
|
|
74 |
/**
|
75 |
* @return Loco_fs_File
|
76 |
*/
|
src/mvc/AdminRouter.php
CHANGED
@@ -82,9 +82,10 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
82 |
}
|
83 |
|
84 |
|
85 |
-
|
86 |
/**
|
87 |
* Early hook as soon as we know what screen will be rendered
|
|
|
|
|
88 |
*/
|
89 |
public function on_current_screen( WP_Screen $screen ){
|
90 |
$action = isset($_GET['action']) ? $_GET['action'] : null;
|
@@ -92,12 +93,13 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
92 |
}
|
93 |
|
94 |
|
95 |
-
|
96 |
/**
|
97 |
* Instantiate admin page controller from current screen.
|
98 |
* This is called early (before renderPage) so controller can listen on other hooks.
|
99 |
*
|
100 |
-
* @
|
|
|
|
|
101 |
*/
|
102 |
public function initPage( WP_Screen $screen, $action = '' ){
|
103 |
$class = null;
|
@@ -109,7 +111,7 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
109 |
}
|
110 |
if( is_null($class) ){
|
111 |
$this->ctrl = null;
|
112 |
-
return;
|
113 |
}
|
114 |
// class should exist, so throw fatal if it doesn't
|
115 |
$this->ctrl = new $class;
|
@@ -147,10 +149,10 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
147 |
}
|
148 |
|
149 |
|
150 |
-
|
151 |
/**
|
152 |
* Convert WordPress internal WPScreen $id into route prefix for an admin page controller
|
153 |
-
* @
|
|
|
154 |
*/
|
155 |
private static function screenToPage( WP_Screen $screen ){
|
156 |
// Hooked menu slug is either "toplevel_page_loco" or "{title}_page_loco-{page}"
|
@@ -163,14 +165,17 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
163 |
$page = substr( $id, $start+11 ) or $page = '';
|
164 |
return $page;
|
165 |
}
|
|
|
166 |
}
|
167 |
|
168 |
|
169 |
-
|
170 |
/**
|
171 |
* Get unvalidated controller class for given route parameters
|
172 |
* Abstracted from initPage so we can validate routes in self::generate
|
173 |
-
* @
|
|
|
|
|
|
|
174 |
*/
|
175 |
private static function pageToClass( $page, $action, array &$args ){
|
176 |
$routes = array (
|
@@ -200,6 +205,7 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
200 |
'{type}-file-edit' => 'file_Edit',
|
201 |
'{type}-file-info' => 'file_Info',
|
202 |
'{type}-file-diff' => 'file_Diff',
|
|
|
203 |
'{type}-file-delete' => 'file_Delete',
|
204 |
// test routes that don't actually exist
|
205 |
'test-no-class' => 'test_NonExistantClass',
|
@@ -221,12 +227,14 @@ class Loco_mvc_AdminRouter extends Loco_hooks_Hookable {
|
|
221 |
}
|
222 |
// debug routing failures:
|
223 |
// throw new Exception( sprintf('Failed to get page class from $page=%s',$page) );
|
|
|
224 |
}
|
225 |
|
226 |
|
227 |
|
228 |
/**
|
229 |
* Main entry point for admin menu callback, establishes page and hands off to controller
|
|
|
230 |
*/
|
231 |
public function renderPage(){
|
232 |
try {
|
82 |
}
|
83 |
|
84 |
|
|
|
85 |
/**
|
86 |
* Early hook as soon as we know what screen will be rendered
|
87 |
+
* @param WP_Screen
|
88 |
+
* @return void
|
89 |
*/
|
90 |
public function on_current_screen( WP_Screen $screen ){
|
91 |
$action = isset($_GET['action']) ? $_GET['action'] : null;
|
93 |
}
|
94 |
|
95 |
|
|
|
96 |
/**
|
97 |
* Instantiate admin page controller from current screen.
|
98 |
* This is called early (before renderPage) so controller can listen on other hooks.
|
99 |
*
|
100 |
+
* @param WP_Screen
|
101 |
+
* @param string
|
102 |
+
* @return Loco_mvc_AdminController|null
|
103 |
*/
|
104 |
public function initPage( WP_Screen $screen, $action = '' ){
|
105 |
$class = null;
|
111 |
}
|
112 |
if( is_null($class) ){
|
113 |
$this->ctrl = null;
|
114 |
+
return null;
|
115 |
}
|
116 |
// class should exist, so throw fatal if it doesn't
|
117 |
$this->ctrl = new $class;
|
149 |
}
|
150 |
|
151 |
|
|
|
152 |
/**
|
153 |
* Convert WordPress internal WPScreen $id into route prefix for an admin page controller
|
154 |
+
* @param WP_Screen
|
155 |
+
* @return string|null
|
156 |
*/
|
157 |
private static function screenToPage( WP_Screen $screen ){
|
158 |
// Hooked menu slug is either "toplevel_page_loco" or "{title}_page_loco-{page}"
|
165 |
$page = substr( $id, $start+11 ) or $page = '';
|
166 |
return $page;
|
167 |
}
|
168 |
+
return null;
|
169 |
}
|
170 |
|
171 |
|
|
|
172 |
/**
|
173 |
* Get unvalidated controller class for given route parameters
|
174 |
* Abstracted from initPage so we can validate routes in self::generate
|
175 |
+
* @param string
|
176 |
+
* @param string
|
177 |
+
* @param array reference
|
178 |
+
* @return string|null
|
179 |
*/
|
180 |
private static function pageToClass( $page, $action, array &$args ){
|
181 |
$routes = array (
|
205 |
'{type}-file-edit' => 'file_Edit',
|
206 |
'{type}-file-info' => 'file_Info',
|
207 |
'{type}-file-diff' => 'file_Diff',
|
208 |
+
'{type}-file-move' => 'file_Move',
|
209 |
'{type}-file-delete' => 'file_Delete',
|
210 |
// test routes that don't actually exist
|
211 |
'test-no-class' => 'test_NonExistantClass',
|
227 |
}
|
228 |
// debug routing failures:
|
229 |
// throw new Exception( sprintf('Failed to get page class from $page=%s',$page) );
|
230 |
+
return null;
|
231 |
}
|
232 |
|
233 |
|
234 |
|
235 |
/**
|
236 |
* Main entry point for admin menu callback, establishes page and hands off to controller
|
237 |
+
* @return void
|
238 |
*/
|
239 |
public function renderPage(){
|
240 |
try {
|
src/mvc/Controller.php
CHANGED
@@ -66,6 +66,7 @@ abstract class Loco_mvc_Controller extends Loco_hooks_Hookable {
|
|
66 |
* Check if a valid nonce has been sent in current request.
|
67 |
* Fails if nonce is invalid, but returns false if not sent so scripts can exit accordingly.
|
68 |
* @throws Loco_error_Exception
|
|
|
69 |
* @return bool true if data has been posted and nonce is valid
|
70 |
*/
|
71 |
public function checkNonce( $action ){
|
@@ -85,7 +86,7 @@ abstract class Loco_mvc_Controller extends Loco_hooks_Hookable {
|
|
85 |
|
86 |
|
87 |
/**
|
88 |
-
* Filter
|
89 |
* Ensures silent failure of translations_api when network disabled, see $this->getAvailableCore
|
90 |
*/
|
91 |
public function filter_translations_api( $value = false ){
|
66 |
* Check if a valid nonce has been sent in current request.
|
67 |
* Fails if nonce is invalid, but returns false if not sent so scripts can exit accordingly.
|
68 |
* @throws Loco_error_Exception
|
69 |
+
* @param string action for passing to wp_verify_nonce
|
70 |
* @return bool true if data has been posted and nonce is valid
|
71 |
*/
|
72 |
public function checkNonce( $action ){
|
86 |
|
87 |
|
88 |
/**
|
89 |
+
* Filter callback for `translations_api'
|
90 |
* Ensures silent failure of translations_api when network disabled, see $this->getAvailableCore
|
91 |
*/
|
92 |
public function filter_translations_api( $value = false ){
|
src/mvc/FileParams.php
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
/**
|
3 |
* Abstracts information about a file into a view parameter object.
|
4 |
*
|
5 |
-
* @property string $name
|
6 |
-
* @property string $path
|
7 |
-
* @property string $relpath
|
8 |
*/
|
9 |
class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
10 |
|
@@ -17,6 +17,8 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
17 |
|
18 |
/**
|
19 |
* Print property as a number of bytes in larger denominations
|
|
|
|
|
20 |
*/
|
21 |
public static function renderBytes( $n ){
|
22 |
$i = 0;
|
@@ -41,6 +43,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
41 |
|
42 |
|
43 |
/**
|
|
|
44 |
* @return Loco_mvc_FileParams
|
45 |
*/
|
46 |
public static function create( Loco_fs_File $file ) {
|
@@ -50,8 +53,10 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
50 |
|
51 |
/**
|
52 |
* Override does lazy property initialization
|
|
|
|
|
53 |
*/
|
54 |
-
public function __construct( array $props
|
55 |
parent::__construct( array (
|
56 |
'name' => '',
|
57 |
'path' => '',
|
@@ -68,7 +73,6 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
68 |
}
|
69 |
|
70 |
|
71 |
-
|
72 |
/**
|
73 |
* {@inheritdoc}
|
74 |
* Override to get live information from file object
|
@@ -82,7 +86,6 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
82 |
}
|
83 |
|
84 |
|
85 |
-
|
86 |
/**
|
87 |
* {@inheritdoc}
|
88 |
* Override to ensure all properties populated
|
@@ -96,8 +99,8 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
96 |
}
|
97 |
|
98 |
|
99 |
-
|
100 |
/**
|
|
|
101 |
* @return string
|
102 |
*/
|
103 |
private function _get_name(){
|
@@ -106,6 +109,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
106 |
|
107 |
|
108 |
/**
|
|
|
109 |
* @return string
|
110 |
*/
|
111 |
private function _get_path(){
|
@@ -114,11 +118,11 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
114 |
|
115 |
|
116 |
/**
|
|
|
117 |
* @return string
|
118 |
*/
|
119 |
private function _get_relpath(){
|
120 |
-
$
|
121 |
-
return $this->file->getRelativePath($base);
|
122 |
}
|
123 |
|
124 |
|
@@ -126,6 +130,8 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
126 |
* Using slightly modified version of WordPress's Human time differencing
|
127 |
* + Added "Just now" when in the last 30 seconds
|
128 |
* TODO possibly replace with custom function that includes "Yesterday" etc..
|
|
|
|
|
129 |
*/
|
130 |
private function _get_reltime(){
|
131 |
$time = $this->has('mtime') ? $this['mtime'] : $this->file->modified();
|
@@ -142,8 +148,8 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
142 |
}
|
143 |
|
144 |
|
145 |
-
|
146 |
/**
|
|
|
147 |
* @return int
|
148 |
*/
|
149 |
private function _get_bytes(){
|
@@ -152,6 +158,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
152 |
|
153 |
|
154 |
/**
|
|
|
155 |
* @return string
|
156 |
*/
|
157 |
private function _get_size(){
|
@@ -161,6 +168,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
161 |
|
162 |
/**
|
163 |
* Get octal file mode
|
|
|
164 |
* @return string
|
165 |
*/
|
166 |
private function _get_imode(){
|
@@ -171,6 +179,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
171 |
|
172 |
/**
|
173 |
* Get rwx file mode
|
|
|
174 |
* @return string
|
175 |
*/
|
176 |
private function _get_smode(){
|
@@ -181,6 +190,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
181 |
|
182 |
/**
|
183 |
* Get file owner name
|
|
|
184 |
* @return string
|
185 |
*/
|
186 |
private function _get_owner(){
|
@@ -193,6 +203,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
193 |
|
194 |
/**
|
195 |
* Get group owner name
|
|
|
196 |
* @return string
|
197 |
*/
|
198 |
private function _get_group(){
|
@@ -205,6 +216,7 @@ class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
|
205 |
|
206 |
/**
|
207 |
* Print pseudo console line
|
|
|
208 |
*/
|
209 |
public function ls(){
|
210 |
$this->e('smode');
|
2 |
/**
|
3 |
* Abstracts information about a file into a view parameter object.
|
4 |
*
|
5 |
+
* @property-read string $name
|
6 |
+
* @property-read string $path
|
7 |
+
* @property-read string $relpath
|
8 |
*/
|
9 |
class Loco_mvc_FileParams extends Loco_mvc_ViewParams {
|
10 |
|
17 |
|
18 |
/**
|
19 |
* Print property as a number of bytes in larger denominations
|
20 |
+
* @param int
|
21 |
+
* @return string
|
22 |
*/
|
23 |
public static function renderBytes( $n ){
|
24 |
$i = 0;
|
43 |
|
44 |
|
45 |
/**
|
46 |
+
* @param Loco_fs_File
|
47 |
* @return Loco_mvc_FileParams
|
48 |
*/
|
49 |
public static function create( Loco_fs_File $file ) {
|
53 |
|
54 |
/**
|
55 |
* Override does lazy property initialization
|
56 |
+
* @param array initial extra properties
|
57 |
+
* @param Loco_fs_File
|
58 |
*/
|
59 |
+
public function __construct( array $props, Loco_fs_File $file ){
|
60 |
parent::__construct( array (
|
61 |
'name' => '',
|
62 |
'path' => '',
|
73 |
}
|
74 |
|
75 |
|
|
|
76 |
/**
|
77 |
* {@inheritdoc}
|
78 |
* Override to get live information from file object
|
86 |
}
|
87 |
|
88 |
|
|
|
89 |
/**
|
90 |
* {@inheritdoc}
|
91 |
* Override to ensure all properties populated
|
99 |
}
|
100 |
|
101 |
|
|
|
102 |
/**
|
103 |
+
* @internal
|
104 |
* @return string
|
105 |
*/
|
106 |
private function _get_name(){
|
109 |
|
110 |
|
111 |
/**
|
112 |
+
* @internal
|
113 |
* @return string
|
114 |
*/
|
115 |
private function _get_path(){
|
118 |
|
119 |
|
120 |
/**
|
121 |
+
* @internal
|
122 |
* @return string
|
123 |
*/
|
124 |
private function _get_relpath(){
|
125 |
+
return $this->file->getRelativePath( loco_constant('WP_CONTENT_DIR') );
|
|
|
126 |
}
|
127 |
|
128 |
|
130 |
* Using slightly modified version of WordPress's Human time differencing
|
131 |
* + Added "Just now" when in the last 30 seconds
|
132 |
* TODO possibly replace with custom function that includes "Yesterday" etc..
|
133 |
+
* @internal
|
134 |
+
* @return string
|
135 |
*/
|
136 |
private function _get_reltime(){
|
137 |
$time = $this->has('mtime') ? $this['mtime'] : $this->file->modified();
|
148 |
}
|
149 |
|
150 |
|
|
|
151 |
/**
|
152 |
+
* @internal
|
153 |
* @return int
|
154 |
*/
|
155 |
private function _get_bytes(){
|
158 |
|
159 |
|
160 |
/**
|
161 |
+
* @internal
|
162 |
* @return string
|
163 |
*/
|
164 |
private function _get_size(){
|
168 |
|
169 |
/**
|
170 |
* Get octal file mode
|
171 |
+
* @internal
|
172 |
* @return string
|
173 |
*/
|
174 |
private function _get_imode(){
|
179 |
|
180 |
/**
|
181 |
* Get rwx file mode
|
182 |
+
* @internal
|
183 |
* @return string
|
184 |
*/
|
185 |
private function _get_smode(){
|
190 |
|
191 |
/**
|
192 |
* Get file owner name
|
193 |
+
* @internal
|
194 |
* @return string
|
195 |
*/
|
196 |
private function _get_owner(){
|
203 |
|
204 |
/**
|
205 |
* Get group owner name
|
206 |
+
* @internal
|
207 |
* @return string
|
208 |
*/
|
209 |
private function _get_group(){
|
216 |
|
217 |
/**
|
218 |
* Print pseudo console line
|
219 |
+
* @return string;
|
220 |
*/
|
221 |
public function ls(){
|
222 |
$this->e('smode');
|
src/mvc/HiddenFields.php
CHANGED
@@ -19,6 +19,7 @@ class Loco_mvc_HiddenFields extends Loco_mvc_ViewParams {
|
|
19 |
|
20 |
/**
|
21 |
* Add a nonce field
|
|
|
22 |
* @return Loco_mvc_HiddenFields
|
23 |
*/
|
24 |
public function setNonce( $action ){
|
@@ -29,6 +30,7 @@ class Loco_mvc_HiddenFields extends Loco_mvc_ViewParams {
|
|
29 |
|
30 |
/**
|
31 |
* Load postdata fields
|
|
|
32 |
* @return Loco_mvc_HiddenFields
|
33 |
*/
|
34 |
public function addPost( Loco_mvc_PostParams $post ){
|
19 |
|
20 |
/**
|
21 |
* Add a nonce field
|
22 |
+
* @param string action passed to wp_create_nonce
|
23 |
* @return Loco_mvc_HiddenFields
|
24 |
*/
|
25 |
public function setNonce( $action ){
|
30 |
|
31 |
/**
|
32 |
* Load postdata fields
|
33 |
+
* @param Loco_mvc_PostParams post data
|
34 |
* @return Loco_mvc_HiddenFields
|
35 |
*/
|
36 |
public function addPost( Loco_mvc_PostParams $post ){
|
src/mvc/PostParams.php
CHANGED
@@ -50,11 +50,11 @@ class Loco_mvc_PostParams extends Loco_mvc_ViewParams {
|
|
50 |
}
|
51 |
|
52 |
|
53 |
-
|
54 |
/**
|
55 |
* Construct postdata from a series of value pairs.
|
56 |
* This is used in tests to simulate how a form is serialized and posted
|
57 |
*
|
|
|
58 |
* @return Loco_mvc_PostParams
|
59 |
*/
|
60 |
public static function fromSerial( array $serial ){
|
@@ -67,7 +67,6 @@ class Loco_mvc_PostParams extends Loco_mvc_ViewParams {
|
|
67 |
}
|
68 |
|
69 |
|
70 |
-
|
71 |
/**
|
72 |
* Collapse nested array down to series of scalar forms
|
73 |
* @return array
|
50 |
}
|
51 |
|
52 |
|
|
|
53 |
/**
|
54 |
* Construct postdata from a series of value pairs.
|
55 |
* This is used in tests to simulate how a form is serialized and posted
|
56 |
*
|
57 |
+
* @param array
|
58 |
* @return Loco_mvc_PostParams
|
59 |
*/
|
60 |
public static function fromSerial( array $serial ){
|
67 |
}
|
68 |
|
69 |
|
|
|
70 |
/**
|
71 |
* Collapse nested array down to series of scalar forms
|
72 |
* @return array
|
tpl/admin/bundle/inc-po-table.php
CHANGED
@@ -2,6 +2,8 @@
|
|
2 |
/**
|
3 |
* Table of localised file pairs in a project
|
4 |
*/
|
|
|
|
|
5 |
if( $pairs ):?>
|
6 |
|
7 |
<table class="wp-list-table widefat fixed striped">
|
@@ -28,7 +30,6 @@
|
|
28 |
</tr>
|
29 |
</thead>
|
30 |
<tbody><?php
|
31 |
-
/* @var $po Loco_pages_ViewParams */
|
32 |
foreach( $pairs as $po ): $ispo = (bool) $po->lcode;?>
|
33 |
<tr>
|
34 |
<td class="has-row-actions" data-sort-value="<?php $po->e('lname')?>">
|
@@ -50,10 +51,10 @@
|
|
50 |
<a href="<?php $po->e('view')?>"><?php esc_html_e('View','loco-translate')?></a> |
|
51 |
</span>
|
52 |
<span>
|
53 |
-
<a href="<?php $po->e('
|
54 |
</span>
|
55 |
<span>
|
56 |
-
<a href="<?php $po->e('
|
57 |
</span>
|
58 |
<span class="trash">
|
59 |
<a href="<?php $po->e('delete')?>"><?php esc_html_e('Delete','loco-translate')?></a>
|
2 |
/**
|
3 |
* Table of localised file pairs in a project
|
4 |
*/
|
5 |
+
|
6 |
+
/* @var Loco_mvc_ViewParams[] $pairs */
|
7 |
if( $pairs ):?>
|
8 |
|
9 |
<table class="wp-list-table widefat fixed striped">
|
30 |
</tr>
|
31 |
</thead>
|
32 |
<tbody><?php
|
|
|
33 |
foreach( $pairs as $po ): $ispo = (bool) $po->lcode;?>
|
34 |
<tr>
|
35 |
<td class="has-row-actions" data-sort-value="<?php $po->e('lname')?>">
|
51 |
<a href="<?php $po->e('view')?>"><?php esc_html_e('View','loco-translate')?></a> |
|
52 |
</span>
|
53 |
<span>
|
54 |
+
<a href="<?php $po->e('info')?>"><?php esc_html_e('Info','loco-translate')?></a> |
|
55 |
</span>
|
56 |
<span>
|
57 |
+
<a href="<?php $po->e('copy')?>"><?php esc_html_e('Copy','loco-translate')?></a> |
|
58 |
</span>
|
59 |
<span class="trash">
|
60 |
<a href="<?php $po->e('delete')?>"><?php esc_html_e('Delete','loco-translate')?></a>
|
tpl/admin/bundle/locale.php
CHANGED
@@ -51,7 +51,7 @@ $this->extend('../layout');
|
|
51 |
</tr>
|
52 |
</thead>
|
53 |
<tbody><?php
|
54 |
-
/* @var $po
|
55 |
foreach( $group as $po ): ?>
|
56 |
<tr>
|
57 |
<td class="has-row-actions" data-sort-value="<?php $po->e('lname')?>">
|
@@ -66,10 +66,10 @@ $this->extend('../layout');
|
|
66 |
<a href="<?php $po->e('view')?>"><?php esc_html_e('View','loco-translate')?></a> |
|
67 |
</span>
|
68 |
<span>
|
69 |
-
<a href="<?php $po->e('
|
70 |
</span>
|
71 |
<span>
|
72 |
-
<a href="<?php $po->e('
|
73 |
</span>
|
74 |
<span class="trash">
|
75 |
<a href="<?php $po->e('delete')?>"><?php esc_html_e('Delete','loco-translate')?></a>
|
51 |
</tr>
|
52 |
</thead>
|
53 |
<tbody><?php
|
54 |
+
/* @var Loco_mvc_ViewParams $po */
|
55 |
foreach( $group as $po ): ?>
|
56 |
<tr>
|
57 |
<td class="has-row-actions" data-sort-value="<?php $po->e('lname')?>">
|
66 |
<a href="<?php $po->e('view')?>"><?php esc_html_e('View','loco-translate')?></a> |
|
67 |
</span>
|
68 |
<span>
|
69 |
+
<a href="<?php $po->e('info')?>"><?php esc_html_e('Info','loco-translate')?></a> |
|
70 |
</span>
|
71 |
<span>
|
72 |
+
<a href="<?php $po->e('copy')?>"><?php esc_html_e('Copy','loco-translate')?></a> |
|
73 |
</span>
|
74 |
<span class="trash">
|
75 |
<a href="<?php $po->e('delete')?>"><?php esc_html_e('Delete','loco-translate')?></a>
|
tpl/admin/common/inc-fsconn.php
CHANGED
@@ -31,42 +31,35 @@
|
|
31 |
|
32 |
|
33 |
// else render remote connection form
|
34 |
-
else
|
35 |
-
|
36 |
-
if( $params->has('fsWarning') ):?>
|
37 |
<div id="loco-fs-warn" class="has-nav notice inline notice-info jshide">
|
38 |
<p>
|
39 |
<strong class="has-icon"><?php esc_html_e('Notice','loco-translate')?>:</strong>
|
40 |
-
<span
|
41 |
</p>
|
42 |
<nav>
|
43 |
<a href="<?php echo $help?>#wp" target="_blank"><?php esc_html_e('Documentation','loco-translate')?></a>
|
44 |
<span>|</span>
|
45 |
<a href="<?php $this->route('config')->e('href')?>#loco--fs-protect"><?php esc_html_e('Settings','loco-translate')?></a>
|
46 |
</nav>
|
47 |
-
</div
|
48 |
-
endif?>
|
49 |
-
|
50 |
<form id="loco-fs" class="has-nav notice inline notice-locked jshide jsonly">
|
51 |
<p>
|
52 |
<strong class="has-icon"><?php
|
53 |
// Translators: When a file or folder cannot be modified due to filesystem permissions
|
54 |
esc_html_e('Write protected','loco-translate')?>:
|
55 |
</strong>
|
56 |
-
<span
|
57 |
-
|
58 |
</span>
|
59 |
<span><?php
|
60 |
-
esc_html_e('Click "Connect" to authenticate with the server','loco-translate')
|
61 |
-
|
62 |
-
|
63 |
-
if( ! $fsFields->has('connection_type') ):?>
|
64 |
<nav>
|
65 |
<button type="button" class="button button-small button-primary"><?php esc_html_e('Connect','loco-translate')?></button>
|
66 |
<a class="button button-small" href="<?php echo $help?>#remote" target="_blank"> ? </a>
|
67 |
</nav><?php
|
68 |
-
// else form will remain hidden
|
69 |
-
endif;
|
70 |
$fsFields->_e();?>
|
71 |
</form><?php
|
72 |
endif;
|
31 |
|
32 |
|
33 |
// else render remote connection form
|
34 |
+
else:?>
|
|
|
|
|
35 |
<div id="loco-fs-warn" class="has-nav notice inline notice-info jshide">
|
36 |
<p>
|
37 |
<strong class="has-icon"><?php esc_html_e('Notice','loco-translate')?>:</strong>
|
38 |
+
<span class="loco-msg"><!-- warning to be loaded by ajax --></span>
|
39 |
</p>
|
40 |
<nav>
|
41 |
<a href="<?php echo $help?>#wp" target="_blank"><?php esc_html_e('Documentation','loco-translate')?></a>
|
42 |
<span>|</span>
|
43 |
<a href="<?php $this->route('config')->e('href')?>#loco--fs-protect"><?php esc_html_e('Settings','loco-translate')?></a>
|
44 |
</nav>
|
45 |
+
</div>
|
|
|
|
|
46 |
<form id="loco-fs" class="has-nav notice inline notice-locked jshide jsonly">
|
47 |
<p>
|
48 |
<strong class="has-icon"><?php
|
49 |
// Translators: When a file or folder cannot be modified due to filesystem permissions
|
50 |
esc_html_e('Write protected','loco-translate')?>:
|
51 |
</strong>
|
52 |
+
<span class="loco-msg">
|
53 |
+
<!-- specific reason to be loaded by ajax -->
|
54 |
</span>
|
55 |
<span><?php
|
56 |
+
esc_html_e('Click "Connect" to authenticate with the server','loco-translate')?>.
|
57 |
+
</span>
|
58 |
+
</p>
|
|
|
59 |
<nav>
|
60 |
<button type="button" class="button button-small button-primary"><?php esc_html_e('Connect','loco-translate')?></button>
|
61 |
<a class="button button-small" href="<?php echo $help?>#remote" target="_blank"> ? </a>
|
62 |
</nav><?php
|
|
|
|
|
63 |
$fsFields->_e();?>
|
64 |
</form><?php
|
65 |
endif;
|
tpl/admin/config/settings.php
CHANGED
@@ -83,7 +83,13 @@ $fs_help = esc_url( apply_filters('loco_external','https://localise.biz/wordpres
|
|
83 |
<p>
|
84 |
<label for="loco--po-utf8-bom">
|
85 |
<input type="checkbox" name="opts[po_utf8_bom]" value="1" id="loco--po-utf8-bom"<?php echo $opts->po_utf8_bom?' checked':''?> />
|
86 |
-
<?php esc_html_e('Add UTF-8 byte order mark','loco-translate')?> (<?php esc_html_e('Not recommended','loco-translate')?>)
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
</label>
|
88 |
</p>
|
89 |
</fieldset>
|
83 |
<p>
|
84 |
<label for="loco--po-utf8-bom">
|
85 |
<input type="checkbox" name="opts[po_utf8_bom]" value="1" id="loco--po-utf8-bom"<?php echo $opts->po_utf8_bom?' checked':''?> />
|
86 |
+
<?php esc_html_e('Add UTF-8 byte order mark','loco-translate')?> (<?php esc_html_e('Not recommended','loco-translate')?>)
|
87 |
+
</label>
|
88 |
+
</p>
|
89 |
+
<p>
|
90 |
+
<label for="loco--ajax-files">
|
91 |
+
<input type="checkbox" name="opts[ajax_files]" value="1" id="loco--ajax-files"<?php echo $opts->ajax_files?' checked':''?> />
|
92 |
+
Submit PO data as multipart file uploads (Experimental)
|
93 |
</label>
|
94 |
</p>
|
95 |
</fieldset>
|
tpl/admin/file/delete.php
CHANGED
@@ -31,6 +31,6 @@ $this->extend('../layout');
|
|
31 |
</p>
|
32 |
</div>
|
33 |
<?php
|
34 |
-
/* @var $hidden
|
35 |
$hidden->_e();?>
|
36 |
</form>
|
31 |
</p>
|
32 |
</div>
|
33 |
<?php
|
34 |
+
/* @var Loco_mvc_HiddenFields $hidden */
|
35 |
$hidden->_e();?>
|
36 |
</form>
|
tpl/admin/file/move-po.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Confirmation form for moving localized files to a new location.
|
4 |
+
*/
|
5 |
+
$this->extend('move');
|
6 |
+
$this->start('source');
|
7 |
+
|
8 |
+
/* @var Loco_mvc_ViewParams $current */
|
9 |
+
/* @var Loco_mvc_ViewParams[] $locations */
|
10 |
+
?>
|
11 |
+
|
12 |
+
<div class="notice inline notice-generic">
|
13 |
+
<h2>
|
14 |
+
Choose a new location for these translations
|
15 |
+
</h2>
|
16 |
+
<table class="form-table">
|
17 |
+
<tbody class="loco-paths"><?php
|
18 |
+
foreach( $locations as $typeId => $location ):?>
|
19 |
+
<tr class="compact">
|
20 |
+
<td>
|
21 |
+
<p class="description"><?php $location->e('label')?>:</p>
|
22 |
+
</td>
|
23 |
+
<td><?php
|
24 |
+
/* @var Loco_mvc_FileParams $choice */
|
25 |
+
foreach( $location['paths'] as $choice ):?>
|
26 |
+
<p><?php
|
27 |
+
if( $choice->active ):?>
|
28 |
+
<label>
|
29 |
+
<input type="radio" name="dest" value="" disabled checked /><?php
|
30 |
+
else:?>
|
31 |
+
<label>
|
32 |
+
<input type="radio" name="dest" value="<?php $choice->e('path')?>" /><?php
|
33 |
+
endif?>
|
34 |
+
<code class="path"><?php $choice->e('path')?></code>
|
35 |
+
</label>
|
36 |
+
</p><?php
|
37 |
+
endforeach?>
|
38 |
+
</td>
|
39 |
+
</tr><?php
|
40 |
+
endforeach?>
|
41 |
+
</tbody>
|
42 |
+
</table>
|
43 |
+
</div>
|
tpl/admin/file/move-pot.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Confirmation form for moving file or group of files to an exact/custom location.
|
4 |
+
* Use for moving POT file, but also moving PO siblings when locale or text domain is unknown
|
5 |
+
*/
|
6 |
+
$this->extend('move');
|
7 |
+
$this->start('source');
|
8 |
+
|
9 |
+
/* @var Loco_mvc_FileParams $file */
|
10 |
+
/* @var Loco_mvc_ViewParams $current */
|
11 |
+
?>
|
12 |
+
<div class="notice inline notice-generic">
|
13 |
+
<h2>
|
14 |
+
Enter a new location for this file
|
15 |
+
</h2>
|
16 |
+
<p>
|
17 |
+
<input type="text" name="dest" value="<?php $file->e('relpath')?>" class="large-text" />
|
18 |
+
</p>
|
19 |
+
</div>
|
tpl/admin/file/move.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Confirmation form for moving any file or group of file siblings.
|
4 |
+
*/
|
5 |
+
$this->extend('../layout');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<form action="" method="post" enctype="application/x-www-form-urlencoded" id="loco-move"><?php
|
9 |
+
/* @var Loco_mvc_HiddenFields $hidden */
|
10 |
+
$hidden->_e();
|
11 |
+
echo $source?>
|
12 |
+
<div class="notice inline notice-info">
|
13 |
+
<h2>
|
14 |
+
Confirm relocation
|
15 |
+
</h2>
|
16 |
+
<p>
|
17 |
+
The following files will be moved/renamed to the new location:<?php
|
18 |
+
/* @var Loco_fs_File[] $files */
|
19 |
+
foreach( $files as $file ):
|
20 |
+
echo '<div>',$params->escape( $file->basename() ),'</div>';
|
21 |
+
endforeach?>
|
22 |
+
</p>
|
23 |
+
<p class="submit">
|
24 |
+
<button type="submit" class="button button-primary" disabled><?php esc_html_e('Move files','loco-translate')?></button><?php
|
25 |
+
if( $params->has('advanced') ):?>
|
26 |
+
<a href="<?php $params->e('advanced')?>" class="button button-link">Advanced</a><?php
|
27 |
+
endif?>
|
28 |
+
</p>
|
29 |
+
</div>
|
30 |
+
</form>
|
31 |
+
|
tpl/admin/init/init-po.php
CHANGED
@@ -38,11 +38,8 @@ $this->extend('../layout');
|
|
38 |
<p><?php $params->e('summary')?></p>
|
39 |
|
40 |
<form action="" method="post" enctype="application/x-www-form-urlencoded" id="loco-poinit"><?php
|
41 |
-
/* @var
|
42 |
-
|
43 |
-
<input type="hidden" name="<?php echo $name?>" value="<?php $hidden->e($name)?>" /><?php
|
44 |
-
endforeach;?>
|
45 |
-
|
46 |
<table class="form-table">
|
47 |
<tbody class="loco-locales">
|
48 |
<tr valign="top">
|
@@ -105,9 +102,7 @@ $this->extend('../layout');
|
|
105 |
foreach( $locations as $typeId => $location ):?>
|
106 |
<tr class="compact">
|
107 |
<td>
|
108 |
-
<p class="description">
|
109 |
-
<?php $location->e('label')?>:
|
110 |
-
</p>
|
111 |
</td>
|
112 |
<td><?php
|
113 |
/* @var Loco_mvc_FileParams $choice */
|
38 |
<p><?php $params->e('summary')?></p>
|
39 |
|
40 |
<form action="" method="post" enctype="application/x-www-form-urlencoded" id="loco-poinit"><?php
|
41 |
+
/* @var Loco_mvc_HiddenFields $hidden */
|
42 |
+
$hidden->_e();?>
|
|
|
|
|
|
|
43 |
<table class="form-table">
|
44 |
<tbody class="loco-locales">
|
45 |
<tr valign="top">
|
102 |
foreach( $locations as $typeId => $location ):?>
|
103 |
<tr class="compact">
|
104 |
<td>
|
105 |
+
<p class="description"><?php $location->e('label')?>:</p>
|
|
|
|
|
106 |
</td>
|
107 |
<td><?php
|
108 |
/* @var Loco_mvc_FileParams $choice */
|