Version Description
- Fixed bug in plural forms comparison
- Fixed bug generating author theme jsons
- Fixed errors in bundle debugger
- Extended cli type argument to filter specific bundle
- Bumped WordPress version to 6.0.3
Download this release
Release Info
Developer | timwhitlock |
Plugin | Loco Translate |
Version | 2.6.3 |
Comparing to | |
See all releases |
Code changes from version 2.6.2 to 2.6.3
- languages/loco-translate.pot +38 -38
- lib/compiled/gettext.php +4 -4
- lib/compiled/locales.php +1 -1
- lib/compiled/phpunit.php +1 -1
- lib/data/locales.php +1 -1
- loco.php +14 -18
- pub/css/admin.css +1 -1
- pub/css/editor.css +1 -1
- pub/css/podiff.css +1 -1
- pub/css/poview.css +1 -1
- pub/css/skins/blue.css +1 -1
- pub/css/skins/coffee.css +1 -1
- pub/css/skins/ectoplasm.css +1 -1
- pub/css/skins/light.css +1 -1
- pub/css/skins/midnight.css +1 -1
- pub/css/skins/modern.css +1 -1
- pub/css/skins/ocean.css +1 -1
- pub/css/skins/sunrise.css +1 -1
- pub/js/min/admin.js +16 -9
- readme.txt +10 -3
- src/Locale.php +19 -18
- src/admin/bundle/BaseController.php +13 -0
- src/admin/file/DeleteController.php +2 -1
- src/admin/file/MoveController.php +4 -1
- src/ajax/MsginitController.php +1 -1
- src/ajax/SyncController.php +2 -2
- src/cli/Commands.php +9 -10
- src/cli/SyncCommand.php +2 -2
- src/cli/Utils.php +32 -15
- src/config/ArrayModel.php +46 -19
- src/config/BundleReader.php +0 -1
- src/config/BundleWriter.php +9 -5
- src/config/FormModel.php +10 -7
- src/config/Model.php +20 -28
- src/config/XMLModel.php +23 -10
- src/error/AdminNotices.php +6 -6
- src/error/Exception.php +6 -7
- src/fs/File.php +3 -21
- src/fs/LocaleFile.php +3 -4
- src/fs/Locations.php +5 -5
- src/fs/Siblings.php +26 -3
- src/gettext/Compiler.php +40 -21
- src/gettext/Data.php +10 -17
- src/package/Bundle.php +0 -4
- src/package/Debugger.php +128 -143
- src/package/Project.php +15 -17
- tpl/admin/bundle/debug.php +2 -2
languages/loco-translate.pot
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
-
"Project-Id-Version: Loco Translate 2.6.
|
5 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/loco-translate/\n"
|
6 |
-
"POT-Creation-Date: 2022-
|
7 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
8 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
"Language-Team: \n"
|
@@ -13,7 +13,7 @@ msgstr ""
|
|
13 |
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
"Content-Transfer-Encoding: 8bit\n"
|
15 |
"X-Generator: Loco https://localise.biz/\n"
|
16 |
-
"X-Loco-Version: 2.6.
|
17 |
"X-Domain: loco-translate"
|
18 |
|
19 |
#: src/fs/FileWriter.php:214
|
@@ -38,7 +38,7 @@ msgstr[0] ""
|
|
38 |
msgstr[1] ""
|
39 |
|
40 |
#. 1: Number of strings; 2: Text Domain; e.g. 100 strings extracted from source code for "loco-translate"
|
41 |
-
#: src/package/Debugger.php:
|
42 |
#, php-format
|
43 |
msgid "%1$s string extracted from source code for \"%2$s\""
|
44 |
msgid_plural "%1$s strings extracted from source code for \"%2$s\""
|
@@ -72,7 +72,7 @@ msgstr ""
|
|
72 |
msgid "%s characters will be sent for translation."
|
73 |
msgstr ""
|
74 |
|
75 |
-
#: src/admin/file/DeleteController.php:
|
76 |
#, php-format
|
77 |
msgid "%s dependent file will also be deleted"
|
78 |
msgid_plural "%s dependent files will also be deleted"
|
@@ -86,7 +86,7 @@ msgid_plural "%s files can't be matched to a known set of strings"
|
|
86 |
msgstr[0] ""
|
87 |
msgstr[1] ""
|
88 |
|
89 |
-
#: src/admin/file/MoveController.php:
|
90 |
#, php-format
|
91 |
msgid "%s file could not be moved"
|
92 |
msgid_plural "%s files could not be moved"
|
@@ -99,7 +99,7 @@ msgstr[1] ""
|
|
99 |
msgid "%s file is writeable"
|
100 |
msgstr ""
|
101 |
|
102 |
-
#: src/admin/file/MoveController.php:
|
103 |
#, php-format
|
104 |
msgid "%s file moved"
|
105 |
msgid_plural "%s files moved"
|
@@ -107,7 +107,7 @@ msgstr[0] ""
|
|
107 |
msgstr[1] ""
|
108 |
|
109 |
#. Where %s is either PO or POT
|
110 |
-
#: src/gettext/Compiler.php:
|
111 |
#, php-format
|
112 |
msgid "%s file saved"
|
113 |
msgstr ""
|
@@ -119,7 +119,7 @@ msgid "%s fuzzy"
|
|
119 |
msgstr ""
|
120 |
|
121 |
#. Error thrown when attempting to parse a file that is not PO, POT or MO
|
122 |
-
#: src/gettext/Data.php:
|
123 |
#, php-format
|
124 |
msgid "%s is not a Gettext file"
|
125 |
msgstr ""
|
@@ -253,7 +253,7 @@ msgid ""
|
|
253 |
"privacy notice</a>."
|
254 |
msgstr ""
|
255 |
|
256 |
-
#: src/admin/bundle/BaseController.php:
|
257 |
#: tpl/admin/file/move.php:26
|
258 |
msgid "Advanced"
|
259 |
msgstr ""
|
@@ -428,11 +428,11 @@ msgstr ""
|
|
428 |
msgid "Compiling MO files"
|
429 |
msgstr ""
|
430 |
|
431 |
-
#: src/admin/bundle/BaseController.php:
|
432 |
msgid "Configuration reset"
|
433 |
msgstr ""
|
434 |
|
435 |
-
#: src/admin/bundle/BaseController.php:
|
436 |
msgid "Configuration saved"
|
437 |
msgstr ""
|
438 |
|
@@ -442,7 +442,7 @@ msgstr ""
|
|
442 |
msgid "Configure %s"
|
443 |
msgstr ""
|
444 |
|
445 |
-
#: src/package/Debugger.php:
|
446 |
#, php-format
|
447 |
msgid "Configured domain has no extractable strings"
|
448 |
msgid_plural "%u configured domains have no extractable strings"
|
@@ -498,7 +498,7 @@ msgstr ""
|
|
498 |
|
499 |
#: src/error/Debug.php:19 src/admin/config/BaseController.php:24
|
500 |
#: src/admin/config/DebugController.php:12
|
501 |
-
#: src/admin/bundle/BaseController.php:
|
502 |
msgid "Debug"
|
503 |
msgstr ""
|
504 |
|
@@ -507,8 +507,8 @@ msgstr ""
|
|
507 |
msgid "Delete"
|
508 |
msgstr ""
|
509 |
|
510 |
-
#: src/admin/file/DeleteController.php:
|
511 |
-
#: src/admin/file/DeleteController.php:
|
512 |
#, php-format
|
513 |
msgid "Delete %s"
|
514 |
msgstr ""
|
@@ -632,7 +632,7 @@ msgid "Download"
|
|
632 |
msgstr ""
|
633 |
|
634 |
#. Label for the plural form of the original English text
|
635 |
-
#: src/Locale.php:
|
636 |
msgctxt "Editor"
|
637 |
msgid "Plural"
|
638 |
msgstr ""
|
@@ -656,7 +656,7 @@ msgid "Save"
|
|
656 |
msgstr ""
|
657 |
|
658 |
#. Label for the singular form of the original English text
|
659 |
-
#: src/Locale.php:
|
660 |
msgctxt "Editor"
|
661 |
msgid "Single"
|
662 |
msgstr ""
|
@@ -738,7 +738,7 @@ msgstr ""
|
|
738 |
msgid "Enter a new location for this file"
|
739 |
msgstr ""
|
740 |
|
741 |
-
#: src/js/Strings.php:102 src/error/Exception.php:
|
742 |
msgid "Error"
|
743 |
msgstr ""
|
744 |
|
@@ -810,7 +810,7 @@ msgstr ""
|
|
810 |
msgid "File backups are disabled in your plugin settings"
|
811 |
msgstr ""
|
812 |
|
813 |
-
#: src/admin/file/DeleteController.php:
|
814 |
#, php-format
|
815 |
msgid "File deleted"
|
816 |
msgid_plural "%u files deleted"
|
@@ -1045,7 +1045,7 @@ msgstr ""
|
|
1045 |
msgid "Installed languages"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
-
#: src/Locale.php:
|
1049 |
msgid "Invalid locale"
|
1050 |
msgstr ""
|
1051 |
|
@@ -1053,7 +1053,7 @@ msgstr ""
|
|
1053 |
msgid "It needs configuring before you can do any translations"
|
1054 |
msgstr ""
|
1055 |
|
1056 |
-
#: src/gettext/Compiler.php:
|
1057 |
#, php-format
|
1058 |
msgid "JSON compilation failed for %s"
|
1059 |
msgstr ""
|
@@ -1156,7 +1156,7 @@ msgstr ""
|
|
1156 |
msgid "Loco Translate is powered by"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: loco.php:
|
1160 |
#, php-format
|
1161 |
msgid ""
|
1162 |
"Loco Translate requires the \"%s\" PHP extension. Ask your hosting provider "
|
@@ -1231,7 +1231,7 @@ msgstr ""
|
|
1231 |
msgid "Move"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
-
#: src/admin/file/MoveController.php:
|
1235 |
#, php-format
|
1236 |
msgid "Move %s"
|
1237 |
msgstr ""
|
@@ -1341,7 +1341,7 @@ msgstr ""
|
|
1341 |
msgid "Out of sync with template"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
-
#: src/admin/bundle/BaseController.php:
|
1345 |
msgid "Overview"
|
1346 |
msgstr ""
|
1347 |
|
@@ -1406,43 +1406,43 @@ msgid "Plugins"
|
|
1406 |
msgstr ""
|
1407 |
|
1408 |
#. Plural category used in some multi-plural languages
|
1409 |
-
#: src/Locale.php:
|
1410 |
msgctxt "Plural category"
|
1411 |
msgid "Few"
|
1412 |
msgstr ""
|
1413 |
|
1414 |
#. Plural category used in some multi-plural languages
|
1415 |
-
#: src/Locale.php:
|
1416 |
msgctxt "Plural category"
|
1417 |
msgid "Many"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
#. Plural category for singular quantity
|
1421 |
-
#: src/Locale.php:
|
1422 |
msgctxt "Plural category"
|
1423 |
msgid "One"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
#. General plural category not covered by other forms
|
1427 |
-
#: src/Locale.php:
|
1428 |
msgctxt "Plural category"
|
1429 |
msgid "Other"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
#. Plural category used in some multi-plural languages
|
1433 |
-
#: src/Locale.php:
|
1434 |
msgctxt "Plural category"
|
1435 |
msgid "Two"
|
1436 |
msgstr ""
|
1437 |
|
1438 |
#. Plural category for zero quantity
|
1439 |
-
#: src/Locale.php:
|
1440 |
msgctxt "Plural category"
|
1441 |
msgid "Zero"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
#. Shown when a PO file's Plural-Forms header has a different formula from the Unicode CLDR rules
|
1445 |
-
#: src/Locale.php:
|
1446 |
msgid ""
|
1447 |
"Plural forms differ from Loco Translate's built in rules for this language"
|
1448 |
msgstr ""
|
@@ -1465,15 +1465,15 @@ msgstr ""
|
|
1465 |
msgid "PO file missing"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
-
#: src/gettext/Compiler.php:
|
1469 |
msgid "PO file saved and MO file compiled"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
-
#: src/gettext/Compiler.php:
|
1473 |
msgid "PO file saved and MO/JSON files compiled"
|
1474 |
msgstr ""
|
1475 |
|
1476 |
-
#: src/gettext/Compiler.php:
|
1477 |
msgid "PO file saved, but MO file compilation failed"
|
1478 |
msgstr ""
|
1479 |
|
@@ -1630,7 +1630,7 @@ msgstr ""
|
|
1630 |
msgid "Settings saved"
|
1631 |
msgstr ""
|
1632 |
|
1633 |
-
#: src/admin/bundle/BaseController.php:
|
1634 |
msgid "Setup"
|
1635 |
msgstr ""
|
1636 |
|
@@ -1741,7 +1741,7 @@ msgstr ""
|
|
1741 |
msgid "Text domain"
|
1742 |
msgstr ""
|
1743 |
|
1744 |
-
#: src/config/FormModel.php:
|
1745 |
msgid "Text Domain cannot be empty"
|
1746 |
msgstr ""
|
1747 |
|
@@ -2147,7 +2147,7 @@ msgstr ""
|
|
2147 |
msgid "XML setup"
|
2148 |
msgstr ""
|
2149 |
|
2150 |
-
#: src/config/XMLModel.php:
|
2151 |
msgid "XML supplied is empty"
|
2152 |
msgstr ""
|
2153 |
|
1 |
#, fuzzy
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
+
"Project-Id-Version: Loco Translate 2.6.3\n"
|
5 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/loco-translate/\n"
|
6 |
+
"POT-Creation-Date: 2022-10-25 19:47+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.6.3; wp-6.0.3\n"
|
17 |
"X-Domain: loco-translate"
|
18 |
|
19 |
#: src/fs/FileWriter.php:214
|
38 |
msgstr[1] ""
|
39 |
|
40 |
#. 1: Number of strings; 2: Text Domain; e.g. 100 strings extracted from source code for "loco-translate"
|
41 |
+
#: src/package/Debugger.php:177
|
42 |
#, php-format
|
43 |
msgid "%1$s string extracted from source code for \"%2$s\""
|
44 |
msgid_plural "%1$s strings extracted from source code for \"%2$s\""
|
72 |
msgid "%s characters will be sent for translation."
|
73 |
msgstr ""
|
74 |
|
75 |
+
#: src/admin/file/DeleteController.php:100
|
76 |
#, php-format
|
77 |
msgid "%s dependent file will also be deleted"
|
78 |
msgid_plural "%s dependent files will also be deleted"
|
86 |
msgstr[0] ""
|
87 |
msgstr[1] ""
|
88 |
|
89 |
+
#: src/admin/file/MoveController.php:90
|
90 |
#, php-format
|
91 |
msgid "%s file could not be moved"
|
92 |
msgid_plural "%s files could not be moved"
|
99 |
msgid "%s file is writeable"
|
100 |
msgstr ""
|
101 |
|
102 |
+
#: src/admin/file/MoveController.php:86
|
103 |
#, php-format
|
104 |
msgid "%s file moved"
|
105 |
msgid_plural "%s files moved"
|
107 |
msgstr[1] ""
|
108 |
|
109 |
#. Where %s is either PO or POT
|
110 |
+
#: src/gettext/Compiler.php:258 src/admin/file/HeadController.php:80
|
111 |
#, php-format
|
112 |
msgid "%s file saved"
|
113 |
msgstr ""
|
119 |
msgstr ""
|
120 |
|
121 |
#. Error thrown when attempting to parse a file that is not PO, POT or MO
|
122 |
+
#: src/gettext/Data.php:22
|
123 |
#, php-format
|
124 |
msgid "%s is not a Gettext file"
|
125 |
msgstr ""
|
253 |
"privacy notice</a>."
|
254 |
msgstr ""
|
255 |
|
256 |
+
#: src/admin/bundle/BaseController.php:123 tpl/admin/file/conf.php:58
|
257 |
#: tpl/admin/file/move.php:26
|
258 |
msgid "Advanced"
|
259 |
msgstr ""
|
428 |
msgid "Compiling MO files"
|
429 |
msgstr ""
|
430 |
|
431 |
+
#: src/admin/bundle/BaseController.php:66
|
432 |
msgid "Configuration reset"
|
433 |
msgstr ""
|
434 |
|
435 |
+
#: src/admin/bundle/BaseController.php:51
|
436 |
msgid "Configuration saved"
|
437 |
msgstr ""
|
438 |
|
442 |
msgid "Configure %s"
|
443 |
msgstr ""
|
444 |
|
445 |
+
#: src/package/Debugger.php:195
|
446 |
#, php-format
|
447 |
msgid "Configured domain has no extractable strings"
|
448 |
msgid_plural "%u configured domains have no extractable strings"
|
498 |
|
499 |
#: src/error/Debug.php:19 src/admin/config/BaseController.php:24
|
500 |
#: src/admin/config/DebugController.php:12
|
501 |
+
#: src/admin/bundle/BaseController.php:126
|
502 |
msgid "Debug"
|
503 |
msgstr ""
|
504 |
|
507 |
msgid "Delete"
|
508 |
msgstr ""
|
509 |
|
510 |
+
#: src/admin/file/DeleteController.php:77
|
511 |
+
#: src/admin/file/DeleteController.php:95
|
512 |
#, php-format
|
513 |
msgid "Delete %s"
|
514 |
msgstr ""
|
632 |
msgstr ""
|
633 |
|
634 |
#. Label for the plural form of the original English text
|
635 |
+
#: src/Locale.php:402 src/js/Strings.php:143
|
636 |
msgctxt "Editor"
|
637 |
msgid "Plural"
|
638 |
msgstr ""
|
656 |
msgstr ""
|
657 |
|
658 |
#. Label for the singular form of the original English text
|
659 |
+
#: src/Locale.php:401 src/js/Strings.php:140
|
660 |
msgctxt "Editor"
|
661 |
msgid "Single"
|
662 |
msgstr ""
|
738 |
msgid "Enter a new location for this file"
|
739 |
msgstr ""
|
740 |
|
741 |
+
#: src/js/Strings.php:102 src/error/Exception.php:163
|
742 |
msgid "Error"
|
743 |
msgstr ""
|
744 |
|
810 |
msgid "File backups are disabled in your plugin settings"
|
811 |
msgstr ""
|
812 |
|
813 |
+
#: src/admin/file/DeleteController.php:58 src/admin/file/DiffController.php:45
|
814 |
#, php-format
|
815 |
msgid "File deleted"
|
816 |
msgid_plural "%u files deleted"
|
1045 |
msgid "Installed languages"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
+
#: src/Locale.php:329
|
1049 |
msgid "Invalid locale"
|
1050 |
msgstr ""
|
1051 |
|
1053 |
msgid "It needs configuring before you can do any translations"
|
1054 |
msgstr ""
|
1055 |
|
1056 |
+
#: src/gettext/Compiler.php:132 src/gettext/Compiler.php:191
|
1057 |
#, php-format
|
1058 |
msgid "JSON compilation failed for %s"
|
1059 |
msgstr ""
|
1156 |
msgid "Loco Translate is powered by"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
+
#: loco.php:137
|
1160 |
#, php-format
|
1161 |
msgid ""
|
1162 |
"Loco Translate requires the \"%s\" PHP extension. Ask your hosting provider "
|
1231 |
msgid "Move"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
+
#: src/admin/file/MoveController.php:108 src/admin/file/MoveController.php:136
|
1235 |
#, php-format
|
1236 |
msgid "Move %s"
|
1237 |
msgstr ""
|
1341 |
msgid "Out of sync with template"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
+
#: src/admin/bundle/BaseController.php:121
|
1345 |
msgid "Overview"
|
1346 |
msgstr ""
|
1347 |
|
1406 |
msgstr ""
|
1407 |
|
1408 |
#. Plural category used in some multi-plural languages
|
1409 |
+
#: src/Locale.php:416
|
1410 |
msgctxt "Plural category"
|
1411 |
msgid "Few"
|
1412 |
msgstr ""
|
1413 |
|
1414 |
#. Plural category used in some multi-plural languages
|
1415 |
+
#: src/Locale.php:418
|
1416 |
msgctxt "Plural category"
|
1417 |
msgid "Many"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
#. Plural category for singular quantity
|
1421 |
+
#: src/Locale.php:412
|
1422 |
msgctxt "Plural category"
|
1423 |
msgid "One"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
#. General plural category not covered by other forms
|
1427 |
+
#: src/Locale.php:420
|
1428 |
msgctxt "Plural category"
|
1429 |
msgid "Other"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
#. Plural category used in some multi-plural languages
|
1433 |
+
#: src/Locale.php:414
|
1434 |
msgctxt "Plural category"
|
1435 |
msgid "Two"
|
1436 |
msgstr ""
|
1437 |
|
1438 |
#. Plural category for zero quantity
|
1439 |
+
#: src/Locale.php:410
|
1440 |
msgctxt "Plural category"
|
1441 |
msgid "Zero"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
#. Shown when a PO file's Plural-Forms header has a different formula from the Unicode CLDR rules
|
1445 |
+
#: src/Locale.php:528
|
1446 |
msgid ""
|
1447 |
"Plural forms differ from Loco Translate's built in rules for this language"
|
1448 |
msgstr ""
|
1465 |
msgid "PO file missing"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
+
#: src/gettext/Compiler.php:254
|
1469 |
msgid "PO file saved and MO file compiled"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
+
#: src/gettext/Compiler.php:251
|
1473 |
msgid "PO file saved and MO/JSON files compiled"
|
1474 |
msgstr ""
|
1475 |
|
1476 |
+
#: src/gettext/Compiler.php:103
|
1477 |
msgid "PO file saved, but MO file compilation failed"
|
1478 |
msgstr ""
|
1479 |
|
1630 |
msgid "Settings saved"
|
1631 |
msgstr ""
|
1632 |
|
1633 |
+
#: src/admin/bundle/BaseController.php:122
|
1634 |
msgid "Setup"
|
1635 |
msgstr ""
|
1636 |
|
1741 |
msgid "Text domain"
|
1742 |
msgstr ""
|
1743 |
|
1744 |
+
#: src/config/FormModel.php:147
|
1745 |
msgid "Text Domain cannot be empty"
|
1746 |
msgstr ""
|
1747 |
|
2147 |
msgid "XML setup"
|
2148 |
msgstr ""
|
2149 |
|
2150 |
+
#: src/config/XMLModel.php:54
|
2151 |
msgid "XML supplied is empty"
|
2152 |
msgstr ""
|
2153 |
|
lib/compiled/gettext.php
CHANGED
@@ -25,10 +25,10 @@ public function offsetSet($key, $v ){ $k = strtolower($key); if( isset($this->ma
|
|
25 |
public function offsetUnset($key ){ $k = strtolower($key); if( isset($this->map[$k]) ){ parent::offsetUnset( $this->map[$k] ); unset( $this->map[$k] ); } }
|
26 |
#[ReturnTypeWillChange]
|
27 |
public function jsonSerialize(){ return $this->getArrayCopy(); } }
|
28 |
-
function loco_normalize_charset( $cs ) { if( preg_match('/^UTF-?8$/i',$cs) ){ return 'UTF-8'; } try { $aliases = @mb_encoding_aliases($cs); } catch(
|
29 |
class LocoPoHeaders extends LocoHeaders {
|
30 |
private $cs = null;
|
31 |
-
public function getCharset(){ $cs = $this->cs; if( is_null($cs) ){ $cs = ''; $raw = $this->offsetGet('content-type'); if( $raw && preg_match('!\\bcharset[= ]+([-\\w]+)!',$raw,$r) ){ try { $cs = loco_normalize_charset($r[1]); } catch( InvalidArgumentException $e ){ $cs = null; } catch(
|
32 |
public function setCharset( $to ){ $to = loco_normalize_charset($to); $from = $this->getCharset(); $this->cs = $to; $this['Content-Type'] = 'text/plain; charset='.$to; if( $from && $from !== $to ){ foreach( $this as $key => $val ){ $this[$key] = mb_convert_encoding($val,$to,$from); } } return $to; }
|
33 |
public static function fromMsgstr( $str ){ $headers = new LocoPoHeaders; $key = ''; foreach( preg_split('/[\\r\\n]+/',$str) as $line ){ $i = strpos($line,':'); if( is_int($i) ){ $key = trim( substr($line,0,$i), " \t" ); $headers->offsetSet( $key, ltrim( substr($line,++$i)," \t" ) ); } else if( '' !== $key ){ $headers->offsetSet( $key, $headers->offsetGet($key)."\n".$line ); } } $cs = $headers->getCharset(); if( $cs && 'UTF-8' !== $cs && 'UTF-8' !== mb_detect_encoding($str,['UTF-8',$cs],true) ){ foreach( $headers as $key => $val ){ $headers[$key] = mb_convert_encoding($val,'UTF-8',[$cs]); } } return $headers; }
|
34 |
public static function fromSource( $raw ){ $po = new LocoPoParser($raw); $po->parse(0); return $po->getHeader(); } }
|
@@ -295,7 +295,7 @@ protected function stripSlashes( $s ) { return preg_replace_callback('/\\\\(x[0
|
|
295 |
function loco_unescape_php_string( $s ){ static $l; if( is_null($l) ) { $l = new LocoPHPEscapeParser; } return $l->unescape($s); }
|
296 |
function loco_decapse_php_string( $s ){ if( ! $s ){ return (string) $s; } $q = $s[0]; if( "'" === $q ){ return str_replace( ['\\'.$q, '\\\\'], [$q, '\\'], substr( $s, 1, -1 ) ); } if( '"' !== $q ){ return $s; } return loco_unescape_php_string( substr($s,1,-1) ); }
|
297 |
function loco_parse_php_comment($comment){ $comment = trim( $comment,"/ \n\r\t" ); if( '' !== $comment && '*' === $comment[0] ){ $lines = []; $junk = "\r\t/ *"; foreach( explode("\n",$comment) as $line ){ $line = trim($line,$junk); if( '' !== $line ){ $lines[] = $line; } } $comment = implode("\n", $lines); } return $comment; }
|
298 |
-
function loco_parse_wp_comment(
|
299 |
function loco_sniff_printf( $s, $p, $limit = 0, $offset = 0 ){ $n = 0; while( is_string($s) && '' !== $s && false !== ( $i = strpos($s,'%',$offset) ) ){ if( 0 !== $i ){ $s = substr( $s, $i ); } if( preg_match( $p, $s, $r ) ){ $match = $r[0]; if( 0 < $n && isset($r[1]) && '' === $r[1] && '%' !== substr($match,-1) ){ return 0; } if( ++$n === $limit ){ break; } $offset = strlen($match); } else { return 0; } } return $n; }
|
300 |
function loco_sniff_php_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:[1-9]\\d*\\$)?(?:\'.|[-+0 ])*\\d*(?:\\.\\d+)?[suxXbcdeEfFgGo%]/', $limit ); }
|
301 |
class LocoPHPExtractor extends LocoExtractor {
|
@@ -313,7 +313,7 @@ public function fsniff( $str ){ return loco_sniff_js_printf($str) ? 'javascript'
|
|
313 |
public function decapse( $encapsed ){ return LocoJsTokens::decapse($encapsed); } }
|
314 |
class LocoTwigExtractor extends LocoPHPExtractor {
|
315 |
public function tokenize( $src ){ $src = '<?php '.preg_replace('/{#([^#]+)#}/su','/*\\1*/',$src); return parent::tokenize($src); } }
|
316 |
-
function loco_wp_extractor( $type = 'php' ){ static $rules = [ '__' => 'sd', '_e' => 'sd', '_c' => 'sd', '_n' => 'sp_d', '_n_noop' => 'spd', '_nc' => 'sp_d', '__ngettext' => 'spd', '__ngettext_noop' => 'spd', '_x' => 'scd', '_ex' => 'scd', '_nx' => 'sp_cd', '_nx_noop' => 'spcd', 'esc_attr__' => 'sd', 'esc_html__' => 'sd', 'esc_attr_e' => 'sd', 'esc_html_e' => 'sd', 'esc_attr_x' => 'scd', 'esc_html_x' => 'scd', ]; if( 'php' === $type ){ $extr = new LocoPHPExtractor($rules); } else if( 'twig' === $type ){ $extr = new LocoTwigExtractor($rules); } else if( 'js' === $type ){ $extr = new LocoJsExtractor($rules); } else { throw new InvalidArgumentException('No string extractor for '.$type); } return $extr; }
|
317 |
function loco_string_percent( $n, $t ) { if( ! $t || ! $n ){ $s = '0'; } else if( $t === $n ){ $s = '100'; } else { $dp = 0; $n = 100 * $n / $t; if( $n > 99 ){ $s = number_format( min( $n, 99.9 ), ++$dp ); } else if( $n < 0.5 ){ $n = max( $n, 0.0001 ); do { $s = number_format( $n, ++$dp ); } while( preg_match('/^0\\.0+$/',$s) && $dp < 4 ); $s = substr($s,1); } else { $s = number_format( $n, $dp ); } } return $s; }
|
318 |
function loco_print_progress( $translated, $untranslated, $flagged ) { $total = $translated + $untranslated; $complete = loco_string_percent( $translated - $flagged, $total ); $class = 'progress'; if( ! $translated && ! $flagged ){ $class .= ' empty'; } else if( '100' === $complete ){ $class .= ' done'; } echo '<div class="',$class,'"><div class="t">'; if( $flagged ){ $s = loco_string_percent( $flagged, $total ); echo '<div class="bar f" style="width:',$s,'%"> </div>'; } if( '0' === $complete ){ echo ' '; } else { $class = 'bar p'; $p = (int) $complete; $class .= sprintf(' p-%u', 10*floor($p/10) ); $style = 'width:'.$complete.'%'; if( $flagged ){ $remain = 100.0 - (float) $s; $style .= '; max-width: '.sprintf('%s',$remain).'%'; } echo '<div class="',$class,'" style="'.$style.'"> </div>'; } echo '</div><div class="l">',$complete,'%</div></div>'; }
|
319 |
class LocoFuzzyMatcher implements Countable {
|
25 |
public function offsetUnset($key ){ $k = strtolower($key); if( isset($this->map[$k]) ){ parent::offsetUnset( $this->map[$k] ); unset( $this->map[$k] ); } }
|
26 |
#[ReturnTypeWillChange]
|
27 |
public function jsonSerialize(){ return $this->getArrayCopy(); } }
|
28 |
+
function loco_normalize_charset( $cs ) { if( preg_match('/^UTF-?8$/i',$cs) ){ return 'UTF-8'; } try { $aliases = @mb_encoding_aliases($cs); } catch( ValueError $e ){ $aliases = false; } if( false === $aliases ){ throw new InvalidArgumentException('Unsupported character encoding: '.$cs ); } if( preg_grep('/^ISO[-_]\\d+[-_]\\d+$/i',$aliases) ){ $cs = current($aliases); $cs = strtr( strtoupper($cs), '_', '-' ); } else if( in_array('US-ASCII',$aliases,true) ){ $cs = 'US-ASCII'; } return $cs; }
|
29 |
class LocoPoHeaders extends LocoHeaders {
|
30 |
private $cs = null;
|
31 |
+
public function getCharset(){ $cs = $this->cs; if( is_null($cs) ){ $cs = ''; $raw = $this->offsetGet('content-type'); if( $raw && preg_match('!\\bcharset[= ]+([-\\w]+)!',$raw,$r) ){ try { $cs = loco_normalize_charset($r[1]); } catch( InvalidArgumentException $e ){ $cs = null; } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_NOTICE ); $cs = null; } } $this->cs = $cs; } return $cs; }
|
32 |
public function setCharset( $to ){ $to = loco_normalize_charset($to); $from = $this->getCharset(); $this->cs = $to; $this['Content-Type'] = 'text/plain; charset='.$to; if( $from && $from !== $to ){ foreach( $this as $key => $val ){ $this[$key] = mb_convert_encoding($val,$to,$from); } } return $to; }
|
33 |
public static function fromMsgstr( $str ){ $headers = new LocoPoHeaders; $key = ''; foreach( preg_split('/[\\r\\n]+/',$str) as $line ){ $i = strpos($line,':'); if( is_int($i) ){ $key = trim( substr($line,0,$i), " \t" ); $headers->offsetSet( $key, ltrim( substr($line,++$i)," \t" ) ); } else if( '' !== $key ){ $headers->offsetSet( $key, $headers->offsetGet($key)."\n".$line ); } } $cs = $headers->getCharset(); if( $cs && 'UTF-8' !== $cs && 'UTF-8' !== mb_detect_encoding($str,['UTF-8',$cs],true) ){ foreach( $headers as $key => $val ){ $headers[$key] = mb_convert_encoding($val,'UTF-8',[$cs]); } } return $headers; }
|
34 |
public static function fromSource( $raw ){ $po = new LocoPoParser($raw); $po->parse(0); return $po->getHeader(); } }
|
295 |
function loco_unescape_php_string( $s ){ static $l; if( is_null($l) ) { $l = new LocoPHPEscapeParser; } return $l->unescape($s); }
|
296 |
function loco_decapse_php_string( $s ){ if( ! $s ){ return (string) $s; } $q = $s[0]; if( "'" === $q ){ return str_replace( ['\\'.$q, '\\\\'], [$q, '\\'], substr( $s, 1, -1 ) ); } if( '"' !== $q ){ return $s; } return loco_unescape_php_string( substr($s,1,-1) ); }
|
297 |
function loco_parse_php_comment($comment){ $comment = trim( $comment,"/ \n\r\t" ); if( '' !== $comment && '*' === $comment[0] ){ $lines = []; $junk = "\r\t/ *"; foreach( explode("\n",$comment) as $line ){ $line = trim($line,$junk); if( '' !== $line ){ $lines[] = $line; } } $comment = implode("\n", $lines); } return $comment; }
|
298 |
+
function loco_parse_wp_comment( $block ) { $header = []; if( '/*' === substr($block,0,2) ){ $junk = "\r\t/ *"; foreach( explode("\n", $block) as $line ){ if( false !== ( $i = strpos($line,':') ) ){ $key = substr($line,0,$i); $val = substr($line,++$i); $header[ trim($key,$junk) ] = trim($val,$junk); } } } return $header; }
|
299 |
function loco_sniff_printf( $s, $p, $limit = 0, $offset = 0 ){ $n = 0; while( is_string($s) && '' !== $s && false !== ( $i = strpos($s,'%',$offset) ) ){ if( 0 !== $i ){ $s = substr( $s, $i ); } if( preg_match( $p, $s, $r ) ){ $match = $r[0]; if( 0 < $n && isset($r[1]) && '' === $r[1] && '%' !== substr($match,-1) ){ return 0; } if( ++$n === $limit ){ break; } $offset = strlen($match); } else { return 0; } } return $n; }
|
300 |
function loco_sniff_php_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:[1-9]\\d*\\$)?(?:\'.|[-+0 ])*\\d*(?:\\.\\d+)?[suxXbcdeEfFgGo%]/', $limit ); }
|
301 |
class LocoPHPExtractor extends LocoExtractor {
|
313 |
public function decapse( $encapsed ){ return LocoJsTokens::decapse($encapsed); } }
|
314 |
class LocoTwigExtractor extends LocoPHPExtractor {
|
315 |
public function tokenize( $src ){ $src = '<?php '.preg_replace('/{#([^#]+)#}/su','/*\\1*/',$src); return parent::tokenize($src); } }
|
316 |
+
function loco_wp_extractor( $type = 'php' ) { static $rules = [ '__' => 'sd', '_e' => 'sd', '_c' => 'sd', '_n' => 'sp_d', '_n_noop' => 'spd', '_nc' => 'sp_d', '__ngettext' => 'spd', '__ngettext_noop' => 'spd', '_x' => 'scd', '_ex' => 'scd', '_nx' => 'sp_cd', '_nx_noop' => 'spcd', 'esc_attr__' => 'sd', 'esc_html__' => 'sd', 'esc_attr_e' => 'sd', 'esc_html_e' => 'sd', 'esc_attr_x' => 'scd', 'esc_html_x' => 'scd', ]; if( 'php' === $type ){ $extr = new LocoPHPExtractor($rules); } else if( 'twig' === $type ){ $extr = new LocoTwigExtractor($rules); } else if( 'js' === $type ){ $extr = new LocoJsExtractor($rules); } else { throw new InvalidArgumentException('No string extractor for '.$type); } return $extr; }
|
317 |
function loco_string_percent( $n, $t ) { if( ! $t || ! $n ){ $s = '0'; } else if( $t === $n ){ $s = '100'; } else { $dp = 0; $n = 100 * $n / $t; if( $n > 99 ){ $s = number_format( min( $n, 99.9 ), ++$dp ); } else if( $n < 0.5 ){ $n = max( $n, 0.0001 ); do { $s = number_format( $n, ++$dp ); } while( preg_match('/^0\\.0+$/',$s) && $dp < 4 ); $s = substr($s,1); } else { $s = number_format( $n, $dp ); } } return $s; }
|
318 |
function loco_print_progress( $translated, $untranslated, $flagged ) { $total = $translated + $untranslated; $complete = loco_string_percent( $translated - $flagged, $total ); $class = 'progress'; if( ! $translated && ! $flagged ){ $class .= ' empty'; } else if( '100' === $complete ){ $class .= ' done'; } echo '<div class="',$class,'"><div class="t">'; if( $flagged ){ $s = loco_string_percent( $flagged, $total ); echo '<div class="bar f" style="width:',$s,'%"> </div>'; } if( '0' === $complete ){ echo ' '; } else { $class = 'bar p'; $p = (int) $complete; $class .= sprintf(' p-%u', 10*floor($p/10) ); $style = 'width:'.$complete.'%'; if( $flagged ){ $remain = 100.0 - (float) $s; $style .= '; max-width: '.sprintf('%s',$remain).'%'; } echo '<div class="',$class,'" style="'.$style.'"> </div>'; } echo '</div><div class="l">',$complete,'%</div></div>'; }
|
319 |
class LocoFuzzyMatcher implements Countable {
|
lib/compiled/locales.php
CHANGED
@@ -3,4 +3,4 @@
|
|
3 |
* Downgraded for PHP 5.6 compatibility. Do not edit.
|
4 |
* @noinspection ALL
|
5 |
*/
|
6 |
-
function loco_parse_wp_locale(
|
3 |
* Downgraded for PHP 5.6 compatibility. Do not edit.
|
4 |
* @noinspection ALL
|
5 |
*/
|
6 |
+
function loco_parse_wp_locale( $tag ) { if( ! preg_match( '/^([a-z]{2,3})(?:[-_]([a-z]{2}))?(?:[-_]([a-z\\d]{3,8}))?$/i', $tag, $tags ) ){ throw new InvalidArgumentException('Invalid WordPress locale: '.json_encode($tag) ); } $data = [ 'lang' => strtolower( $tags[1] ), ]; if( array_key_exists(2,$tags) && $tags[2] ){ $data['region'] = strtoupper($tags[2]); } if( array_key_exists(3,$tags) && $tags[3] ){ $data['variant'] = strtolower($tags[3]); } return $data; }
|
lib/compiled/phpunit.php
CHANGED
@@ -10,7 +10,7 @@ public function __construct( $value ){ $id = '[-_a-z][-_a-z0-9]*'; if( ! preg_m
|
|
10 |
public function filter( DOMElement $el ) { if( '' !== $this->tag ){ $list = $el->getElementsByTagName($this->tag); $recursive = false; } else { $list = $el->childNodes; $recursive = true; } if( $this->attr ){ $list = $this->reduce( $list, new ArrayIterator, $recursive )->getArrayCopy(); } return $list; }
|
11 |
public function reduce( DOMNodeList $list, ArrayIterator $reduced, $recursive ) { foreach( $list as $node ){ if( $node instanceof DOMElement ){ $matched = false; foreach( $this->attr as $name => $value ){ if( ! $node->hasAttribute($name) ){ $matched = false; break; } $values = array_flip( explode(' ', $node->getAttribute($name) ) ); if( ! isset($values[$value]) ){ $matched = false; break; } $matched = true; } if( $matched ){ $reduced[] = $node; } if( $recursive && $node->hasChildNodes() ){ $this->reduce( $node->childNodes, $reduced, true ); } } } return $reduced; } }
|
12 |
class LocoDomQuery extends ArrayIterator {
|
13 |
-
public static function parse( $source ) { $dom = new DOMDocument('1.0', 'UTF-8' ); $
|
14 |
public function __construct( $value ){ if( $value instanceof DOMDocument ){ $value = [ $value->documentElement ]; } else if( $value instanceof DOMNode ){ $value = [ $value ]; } if( is_iterable($value) ){ $nodes = []; foreach( $value as $node ){ $nodes[] = $node; } } else if( is_string($value) || method_exists($value,'__toString') ){ $value = self::parse( $value ); $nodes = [ $value->documentElement ]; } else { $type = is_object($value) ? get_class($value) : gettype($value); throw new InvalidArgumentException('Cannot construct DOM from '.$type ); } parent::__construct( $nodes ); }
|
15 |
public function eq( $index ) { $q = new LocoDomQuery([]); if( $el = $this[$index] ){ $q[] = $el; } return $q; }
|
16 |
public function find( $value ) { $q = new LocoDomQuery( [] ); $f = new LocoDomQueryFilter($value); foreach( $this as $el ){ foreach( $f->filter($el) as $match ){ $q[] = $match; } } return $q; }
|
10 |
public function filter( DOMElement $el ) { if( '' !== $this->tag ){ $list = $el->getElementsByTagName($this->tag); $recursive = false; } else { $list = $el->childNodes; $recursive = true; } if( $this->attr ){ $list = $this->reduce( $list, new ArrayIterator, $recursive )->getArrayCopy(); } return $list; }
|
11 |
public function reduce( DOMNodeList $list, ArrayIterator $reduced, $recursive ) { foreach( $list as $node ){ if( $node instanceof DOMElement ){ $matched = false; foreach( $this->attr as $name => $value ){ if( ! $node->hasAttribute($name) ){ $matched = false; break; } $values = array_flip( explode(' ', $node->getAttribute($name) ) ); if( ! isset($values[$value]) ){ $matched = false; break; } $matched = true; } if( $matched ){ $reduced[] = $node; } if( $recursive && $node->hasChildNodes() ){ $this->reduce( $node->childNodes, $reduced, true ); } } } return $reduced; } }
|
12 |
class LocoDomQuery extends ArrayIterator {
|
13 |
+
public static function parse( $source ) { $dom = new DOMDocument('1.0', 'UTF-8' ); $source = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>'.$source.'</body></html>'; $used_errors = libxml_use_internal_errors(true); $opts = LIBXML_HTML_NODEFDTD; $parsed = $dom->loadHTML( $source, $opts ); $errors = libxml_get_errors(); $used_errors || libxml_use_internal_errors(false); libxml_clear_errors(); if( $errors || ! $parsed ){ $e = new Loco_error_ParseException('Unknown parse error'); foreach( $errors as $error ){ $e = new Loco_error_ParseException( trim($error->message) ); $e->setContext( $error->line, $error->column, $source ); if( LIBXML_ERR_FATAL === $error->level ){ throw $e; } } if( ! $parsed ){ throw $e; } } return $dom; }
|
14 |
public function __construct( $value ){ if( $value instanceof DOMDocument ){ $value = [ $value->documentElement ]; } else if( $value instanceof DOMNode ){ $value = [ $value ]; } if( is_iterable($value) ){ $nodes = []; foreach( $value as $node ){ $nodes[] = $node; } } else if( is_string($value) || method_exists($value,'__toString') ){ $value = self::parse( $value ); $nodes = [ $value->documentElement ]; } else { $type = is_object($value) ? get_class($value) : gettype($value); throw new InvalidArgumentException('Cannot construct DOM from '.$type ); } parent::__construct( $nodes ); }
|
15 |
public function eq( $index ) { $q = new LocoDomQuery([]); if( $el = $this[$index] ){ $q[] = $el; } return $q; }
|
16 |
public function find( $value ) { $q = new LocoDomQuery( [] ); $f = new LocoDomQueryFilter($value); foreach( $this as $el ){ foreach( $f->filter($el) as $match ){ $q[] = $match; } } return $q; }
|
lib/data/locales.php
CHANGED
@@ -2,4 +2,4 @@
|
|
2 |
/**
|
3 |
* Compiled data. Do not edit.
|
4 |
*/
|
5 |
-
return ['af'=>[0=>'Afrikaans',1=>'Afrikaans'],'am'=>[0=>'Amharic',1=>'አማርኛ'],'ar'=>[0=>'Arabic',1=>'العربية'],'ary'=>[0=>'Moroccan Arabic',1=>'العربية المغربية'],'as'=>[0=>'Assamese',1=>'অসমীয়া'],'azb'=>[0=>'South Azerbaijani',1=>'گؤنئی آذربایجان'],'az'=>[0=>'Azerbaijani',1=>'Azərbaycan dili'],'bel'=>[0=>'Belarusian',1=>'Беларуская мова'],'bg_BG'=>[0=>'Bulgarian',1=>'Български'],'bn_BD'=>[0=>'Bengali (Bangladesh)',1=>'বাংলা'],'bo'=>[0=>'Tibetan',1=>'བོད་ཡིག'],'bs_BA'=>[0=>'Bosnian',1=>'Bosanski'],'ca'=>[0=>'Catalan',1=>'Català'],'ceb'=>[0=>'Cebuano',1=>'Cebuano'],'cs_CZ'=>[0=>'Czech',1=>'Čeština'],'cy'=>[0=>'Welsh',1=>'Cymraeg'],'da_DK'=>[0=>'Danish',1=>'Dansk'],'
|
2 |
/**
|
3 |
* Compiled data. Do not edit.
|
4 |
*/
|
5 |
+
return ['af'=>[0=>'Afrikaans',1=>'Afrikaans'],'am'=>[0=>'Amharic',1=>'አማርኛ'],'arg'=>[0=>'Aragonese',1=>'Aragonés'],'ar'=>[0=>'Arabic',1=>'العربية'],'ary'=>[0=>'Moroccan Arabic',1=>'العربية المغربية'],'as'=>[0=>'Assamese',1=>'অসমীয়া'],'azb'=>[0=>'South Azerbaijani',1=>'گؤنئی آذربایجان'],'az'=>[0=>'Azerbaijani',1=>'Azərbaycan dili'],'bel'=>[0=>'Belarusian',1=>'Беларуская мова'],'bg_BG'=>[0=>'Bulgarian',1=>'Български'],'bn_BD'=>[0=>'Bengali (Bangladesh)',1=>'বাংলা'],'bo'=>[0=>'Tibetan',1=>'བོད་ཡིག'],'bs_BA'=>[0=>'Bosnian',1=>'Bosanski'],'ca'=>[0=>'Catalan',1=>'Català'],'ceb'=>[0=>'Cebuano',1=>'Cebuano'],'cs_CZ'=>[0=>'Czech',1=>'Čeština'],'cy'=>[0=>'Welsh',1=>'Cymraeg'],'da_DK'=>[0=>'Danish',1=>'Dansk'],'de_DE'=>[0=>'German',1=>'Deutsch'],'de_AT'=>[0=>'German (Austria)',1=>'Deutsch (Österreich)'],'de_CH_informal'=>[0=>'German (Switzerland, Informal)',1=>'Deutsch (Schweiz, Du)'],'de_CH'=>[0=>'German (Switzerland)',1=>'Deutsch (Schweiz)'],'de_DE_formal'=>[0=>'German (Formal)',1=>'Deutsch (Sie)'],'dsb'=>[0=>'Lower Sorbian',1=>'Dolnoserbšćina'],'dzo'=>[0=>'Dzongkha',1=>'རྫོང་ཁ'],'el'=>[0=>'Greek',1=>'Ελληνικά'],'en_ZA'=>[0=>'English (South Africa)',1=>'English (South Africa)'],'en_AU'=>[0=>'English (Australia)',1=>'English (Australia)'],'en_NZ'=>[0=>'English (New Zealand)',1=>'English (New Zealand)'],'en_CA'=>[0=>'English (Canada)',1=>'English (Canada)'],'en_GB'=>[0=>'English (UK)',1=>'English (UK)'],'eo'=>[0=>'Esperanto',1=>'Esperanto'],'es_AR'=>[0=>'Spanish (Argentina)',1=>'Español de Argentina'],'es_CR'=>[0=>'Spanish (Costa Rica)',1=>'Español de Costa Rica'],'es_EC'=>[0=>'Spanish (Ecuador)',1=>'Español de Ecuador'],'es_MX'=>[0=>'Spanish (Mexico)',1=>'Español de México'],'es_PE'=>[0=>'Spanish (Peru)',1=>'Español de Perú'],'es_DO'=>[0=>'Spanish (Dominican Republic)',1=>'Español de República Dominicana'],'es_CL'=>[0=>'Spanish (Chile)',1=>'Español de Chile'],'es_UY'=>[0=>'Spanish (Uruguay)',1=>'Español de Uruguay'],'es_PR'=>[0=>'Spanish (Puerto Rico)',1=>'Español de Puerto Rico'],'es_GT'=>[0=>'Spanish (Guatemala)',1=>'Español de Guatemala'],'es_CO'=>[0=>'Spanish (Colombia)',1=>'Español de Colombia'],'es_ES'=>[0=>'Spanish (Spain)',1=>'Español'],'es_VE'=>[0=>'Spanish (Venezuela)',1=>'Español de Venezuela'],'et'=>[0=>'Estonian',1=>'Eesti'],'eu'=>[0=>'Basque',1=>'Euskara'],'fa_AF'=>[0=>'Persian (Afghanistan)',1=>'(فارسی (افغانستان'],'fa_IR'=>[0=>'Persian',1=>'فارسی'],'fi'=>[0=>'Finnish',1=>'Suomi'],'fr_CA'=>[0=>'French (Canada)',1=>'Français du Canada'],'fr_FR'=>[0=>'French (France)',1=>'Français'],'fr_BE'=>[0=>'French (Belgium)',1=>'Français de Belgique'],'fur'=>[0=>'Friulian',1=>'Friulian'],'gd'=>[0=>'Scottish Gaelic',1=>'Gàidhlig'],'gl_ES'=>[0=>'Galician',1=>'Galego'],'gu'=>[0=>'Gujarati',1=>'ગુજરાતી'],'haz'=>[0=>'Hazaragi',1=>'هزاره گی'],'he_IL'=>[0=>'Hebrew',1=>'עִבְרִית'],'hi_IN'=>[0=>'Hindi',1=>'हिन्दी'],'hr'=>[0=>'Croatian',1=>'Hrvatski'],'hsb'=>[0=>'Upper Sorbian',1=>'Hornjoserbšćina'],'hu_HU'=>[0=>'Hungarian',1=>'Magyar'],'hy'=>[0=>'Armenian',1=>'Հայերեն'],'id_ID'=>[0=>'Indonesian',1=>'Bahasa Indonesia'],'is_IS'=>[0=>'Icelandic',1=>'Íslenska'],'it_IT'=>[0=>'Italian',1=>'Italiano'],'ja'=>[0=>'Japanese',1=>'日本語'],'jv_ID'=>[0=>'Javanese',1=>'Basa Jawa'],'ka_GE'=>[0=>'Georgian',1=>'ქართული'],'kab'=>[0=>'Kabyle',1=>'Taqbaylit'],'kk'=>[0=>'Kazakh',1=>'Қазақ тілі'],'km'=>[0=>'Khmer',1=>'ភាសាខ្មែរ'],'kn'=>[0=>'Kannada',1=>'ಕನ್ನಡ'],'ko_KR'=>[0=>'Korean',1=>'한국어'],'ckb'=>[0=>'Kurdish (Sorani)',1=>'كوردی'],'lo'=>[0=>'Lao',1=>'ພາສາລາວ'],'lt_LT'=>[0=>'Lithuanian',1=>'Lietuvių kalba'],'lv'=>[0=>'Latvian',1=>'Latviešu valoda'],'mk_MK'=>[0=>'Macedonian',1=>'Македонски јазик'],'ml_IN'=>[0=>'Malayalam',1=>'മലയാളം'],'mn'=>[0=>'Mongolian',1=>'Монгол'],'mr'=>[0=>'Marathi',1=>'मराठी'],'ms_MY'=>[0=>'Malay',1=>'Bahasa Melayu'],'my_MM'=>[0=>'Myanmar (Burmese)',1=>'ဗမာစာ'],'nb_NO'=>[0=>'Norwegian (Bokmål)',1=>'Norsk bokmål'],'ne_NP'=>[0=>'Nepali',1=>'नेपाली'],'nl_NL'=>[0=>'Dutch',1=>'Nederlands'],'nl_NL_formal'=>[0=>'Dutch (Formal)',1=>'Nederlands (Formeel)'],'nl_BE'=>[0=>'Dutch (Belgium)',1=>'Nederlands (België)'],'nn_NO'=>[0=>'Norwegian (Nynorsk)',1=>'Norsk nynorsk'],'oci'=>[0=>'Occitan',1=>'Occitan'],'pa_IN'=>[0=>'Panjabi (India)',1=>'ਪੰਜਾਬੀ'],'pl_PL'=>[0=>'Polish',1=>'Polski'],'ps'=>[0=>'Pashto',1=>'پښتو'],'pt_BR'=>[0=>'Portuguese (Brazil)',1=>'Português do Brasil'],'pt_PT'=>[0=>'Portuguese (Portugal)',1=>'Português'],'pt_PT_ao90'=>[0=>'Portuguese (Portugal, AO90)',1=>'Português (AO90)'],'pt_AO'=>[0=>'Portuguese (Angola)',1=>'Português de Angola'],'rhg'=>[0=>'Rohingya',1=>'Ruáinga'],'ro_RO'=>[0=>'Romanian',1=>'Română'],'ru_RU'=>[0=>'Russian',1=>'Русский'],'sah'=>[0=>'Sakha',1=>'Сахалыы'],'snd'=>[0=>'Sindhi',1=>'سنڌي'],'si_LK'=>[0=>'Sinhala',1=>'සිංහල'],'sk_SK'=>[0=>'Slovak',1=>'Slovenčina'],'skr'=>[0=>'Saraiki',1=>'سرائیکی'],'sl_SI'=>[0=>'Slovenian',1=>'Slovenščina'],'sq'=>[0=>'Albanian',1=>'Shqip'],'sr_RS'=>[0=>'Serbian',1=>'Српски језик'],'sv_SE'=>[0=>'Swedish',1=>'Svenska'],'sw'=>[0=>'Swahili',1=>'Kiswahili'],'szl'=>[0=>'Silesian',1=>'Ślōnskŏ gŏdka'],'ta_IN'=>[0=>'Tamil',1=>'தமிழ்'],'ta_LK'=>[0=>'Tamil (Sri Lanka)',1=>'தமிழ்'],'te'=>[0=>'Telugu',1=>'తెలుగు'],'th'=>[0=>'Thai',1=>'ไทย'],'tl'=>[0=>'Tagalog',1=>'Tagalog'],'tr_TR'=>[0=>'Turkish',1=>'Türkçe'],'tt_RU'=>[0=>'Tatar',1=>'Татар теле'],'tah'=>[0=>'Tahitian',1=>'Reo Tahiti'],'ug_CN'=>[0=>'Uighur',1=>'ئۇيغۇرچە'],'uk'=>[0=>'Ukrainian',1=>'Українська'],'ur'=>[0=>'Urdu',1=>'اردو'],'uz_UZ'=>[0=>'Uzbek',1=>'O‘zbekcha'],'vi'=>[0=>'Vietnamese',1=>'Tiếng Việt'],'zh_TW'=>[0=>'Chinese (Taiwan)',1=>'繁體中文'],'zh_CN'=>[0=>'Chinese (China)',1=>'简体中文'],'zh_HK'=>[0=>'Chinese (Hong Kong)',1=>'香港中文']];
|
loco.php
CHANGED
@@ -4,10 +4,10 @@ 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.6.
|
8 |
Requires at least: 5.2
|
9 |
Requires PHP: 5.6.20
|
10 |
-
Tested up to: 6.0.
|
11 |
Author URI: https://localise.biz/wordpress/plugin
|
12 |
Text Domain: loco-translate
|
13 |
Domain Path: /languages/
|
@@ -33,7 +33,7 @@ function loco_plugin_file(){
|
|
33 |
* @return string
|
34 |
*/
|
35 |
function loco_plugin_version(){
|
36 |
-
return '2.6.
|
37 |
}
|
38 |
|
39 |
|
@@ -77,23 +77,19 @@ function loco_doing_ajax(){
|
|
77 |
|
78 |
/**
|
79 |
* Evaluate a constant by name
|
80 |
-
* @param string
|
81 |
* @return mixed
|
82 |
*/
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
if( defined('LOCO_TEST') && LOCO_TEST ){
|
87 |
-
$value = apply_filters('loco_constant', $value, $name );
|
88 |
-
$value = apply_filters('loco_constant_'.$name, $value );
|
89 |
}
|
90 |
-
return $value;
|
91 |
}
|
92 |
|
93 |
|
94 |
/**
|
95 |
* Runtime inclusion of any file under plugin root
|
96 |
-
* @param string PHP file path relative to __DIR__
|
97 |
* @return mixed return value from included file
|
98 |
*/
|
99 |
function loco_include( $relpath ){
|
@@ -118,7 +114,7 @@ function loco_include( $relpath ){
|
|
118 |
|
119 |
/**
|
120 |
* Require dependant library once only
|
121 |
-
* @param string PHP file path relative to ./lib
|
122 |
* @return void
|
123 |
*/
|
124 |
function loco_require_lib( $path ){
|
@@ -128,7 +124,7 @@ function loco_require_lib( $path ){
|
|
128 |
|
129 |
/**
|
130 |
* Check PHP extension required by Loco and load polyfill if needed
|
131 |
-
* @param string
|
132 |
* @return bool
|
133 |
*/
|
134 |
function loco_check_extension( $name ) {
|
@@ -153,7 +149,7 @@ function loco_check_extension( $name ) {
|
|
153 |
* Also does autoload for polyfills under "src/compat" if $name < 20 chars
|
154 |
*
|
155 |
* @internal
|
156 |
-
* @param string
|
157 |
* @return void
|
158 |
*/
|
159 |
function loco_autoload( $name ){
|
@@ -171,7 +167,7 @@ function loco_autoload( $name ){
|
|
171 |
|
172 |
/**
|
173 |
* class_exists wrapper that fails silently.
|
174 |
-
* @param string class name
|
175 |
* @return bool
|
176 |
*/
|
177 |
function loco_class_exists( $class ){
|
@@ -210,8 +206,8 @@ try {
|
|
210 |
|
211 |
}
|
212 |
catch( Exception $e ){ // PHP5+
|
213 |
-
trigger_error(sprintf('[Loco.fatal] %s in %s:%u',$e->getMessage(), $e->getFile(), $e->getLine() )
|
214 |
}
|
215 |
catch( Throwable $e ){ // PHP7+
|
216 |
-
trigger_error(sprintf('[Loco.fatal] %s in %s:%u',$e->getMessage(), $e->getFile(), $e->getLine() )
|
217 |
}
|
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.6.3
|
8 |
Requires at least: 5.2
|
9 |
Requires PHP: 5.6.20
|
10 |
+
Tested up to: 6.0.3
|
11 |
Author URI: https://localise.biz/wordpress/plugin
|
12 |
Text Domain: loco-translate
|
13 |
Domain Path: /languages/
|
33 |
* @return string
|
34 |
*/
|
35 |
function loco_plugin_version(){
|
36 |
+
return '2.6.3';
|
37 |
}
|
38 |
|
39 |
|
77 |
|
78 |
/**
|
79 |
* Evaluate a constant by name
|
80 |
+
* @param string $name
|
81 |
* @return mixed
|
82 |
*/
|
83 |
+
if( ! function_exists('loco_constant') ) {
|
84 |
+
function loco_constant( $name ) {
|
85 |
+
return defined($name) ? constant($name) : null;
|
|
|
|
|
|
|
86 |
}
|
|
|
87 |
}
|
88 |
|
89 |
|
90 |
/**
|
91 |
* Runtime inclusion of any file under plugin root
|
92 |
+
* @param string $relpath PHP file path relative to __DIR__
|
93 |
* @return mixed return value from included file
|
94 |
*/
|
95 |
function loco_include( $relpath ){
|
114 |
|
115 |
/**
|
116 |
* Require dependant library once only
|
117 |
+
* @param string $path PHP file path relative to ./lib
|
118 |
* @return void
|
119 |
*/
|
120 |
function loco_require_lib( $path ){
|
124 |
|
125 |
/**
|
126 |
* Check PHP extension required by Loco and load polyfill if needed
|
127 |
+
* @param string $name
|
128 |
* @return bool
|
129 |
*/
|
130 |
function loco_check_extension( $name ) {
|
149 |
* Also does autoload for polyfills under "src/compat" if $name < 20 chars
|
150 |
*
|
151 |
* @internal
|
152 |
+
* @param $name string
|
153 |
* @return void
|
154 |
*/
|
155 |
function loco_autoload( $name ){
|
167 |
|
168 |
/**
|
169 |
* class_exists wrapper that fails silently.
|
170 |
+
* @param string $class Class name
|
171 |
* @return bool
|
172 |
*/
|
173 |
function loco_class_exists( $class ){
|
206 |
|
207 |
}
|
208 |
catch( Exception $e ){ // PHP5+
|
209 |
+
trigger_error(sprintf('[Loco.fatal] %s in %s:%u',$e->getMessage(), $e->getFile(), $e->getLine() ) );
|
210 |
}
|
211 |
catch( Throwable $e ){ // PHP7+
|
212 |
+
trigger_error(sprintf('[Loco.fatal] %s in %s:%u',$e->getMessage(), $e->getFile(), $e->getLine() ) );
|
213 |
}
|
pub/css/admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.6.2);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.2) 0 0 no-repeat;min-height:75px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.2);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.2);background-size:16px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.2);background-size:16px}}._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}.loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:"loco";src:url("../font/loco.eot?v=2.6.2");src:url("../font/loco.eot?v=2.6.2?#iefix") format("embedded-opentype"),url("../font/loco.woff?v=2.6.2") format("woff"),url("../font/loco.ttf?v=2.6.2") format("truetype"),url("../font/loco.svg?v=2.6.2#loco") format("svg");font-weight:normal;font-style:normal}.tipsy{font-size:11px;position:absolute;padding:5px;z-index:500001;opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.tipsy.in{opacity:1}.tipsy-inner{background-color:#000;color:#fff;white-space:nowrap;padding:6px 8px;line-height:1.3em;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-n .tipsy-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-nw .tipsy-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-se .tipsy-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-e .tipsy-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.tipsy-w .tipsy-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}#loco-admin.wrap .selector li,#loco-admin.wrap .selector .handle,#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selectorsep:before,#loco-admin.wrap .selectorsep span{padding:.3em .75em}#loco-admin.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selector .handle{cursor:default;display:block;position:relative;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666;height:1.3em;overflow:hidden;white-space:normal}#loco-admin.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco-admin.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco-admin.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco-admin.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco-admin.wrap .selector .handle .prefix{padding-right:.6ex}#loco-admin.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:.25em;right:.6em;content:"▼"}#loco-admin.wrap .selector .handle:focus:after,#loco-admin.wrap .selector .handle:hover:after{color:#666}#loco-admin.wrap .selector.no-caret .handle{padding-right:.75em}#loco-admin.wrap .selector.no-caret .handle:after{display:none}#loco-admin.wrap .selector.no-title .handle{padding-left:.5em;padding-right:.5em}#loco-admin.wrap .selector.no-title .handle .label{display:none}#loco-admin.wrap .selector.no-title .handle .icon{margin-right:0px}#loco-admin.wrap .selector.dummy .handle{border-color:transparent}#loco-admin.wrap .selector.dummy .handle:after{display:none}#loco-admin.wrap .selectoradd{position:relative}#loco-admin.wrap .selectoradd>*{display:block;float:left;clear:none}#loco-admin.wrap .selectoradd>a.has-icon{width:1.3em}#loco-admin.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco-admin.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco-admin.wrap .selectorsep{display:inline-block}#loco-admin.wrap .selectorsep span{color:#666;height:1.3em}#loco-admin.wrap .selector ul{padding:0}#loco-admin.wrap .selector ul,#loco-admin.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco-admin.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,.2);border:solid 1px #ccc;overflow:auto}#loco-admin.wrap .selector.up ul{margin-top:0}#loco-admin.wrap .selector.multi li input{display:none}#loco-admin.wrap .selector.multi li.checked{background:#e5e5e5}#loco-admin.wrap .selector li.active{background:#e5e5e5 !important}#loco-admin.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco-admin.wrap .selector li.over .label{color:#fff}#loco-admin.wrap .selector .label{font:inherit;color:inherit}#loco-admin.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco-admin.wrap .selector .icon.no-icon{display:none}#loco-admin.wrap .selector .icon:before{color:#666}#loco-admin.wrap .selector .avtr{width:18px;height:18px;background-size:18px;background-repeat:no-repeat}#loco-admin.wrap .selector .label{line-height:1}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .icon-16{vertical-align:bottom}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .lang,#loco-admin.wrap .selector .icon-16{margin-right:5px}#loco-admin.wrap .selector .region,#loco-admin.wrap .selector .variant-wales,#loco-admin.wrap .selector .region-gb.lang-cy,#loco-admin.wrap .selector .variant-scotland,#loco-admin.wrap .selector .region-gb.lang-gd,#loco-admin.wrap .selector .variant-valencia,#loco-admin.wrap .selector .region-es.variant-valencia,#loco-admin.wrap .selector .lang-ca,#loco-admin.wrap .selector .region-es.lang-ca,#loco-admin.wrap .selector .lang-eo,#loco-admin.wrap .selector .lang-eu{margin-left:2px;margin-right:7px}#loco-admin.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco-admin.wrap .selector.ticked .active .icon.no-icon:before{content:"✓"}#loco-admin.wrap .selectoradd a:hover,#loco-admin.wrap .selector a.handle:focus,#loco-admin.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco-admin.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco-admin.wrap .selector.active .handle:after{color:#999;content:"▲"}#loco-admin.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco-admin.wrap .selector.disabled .handle{pointer-events:none;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#999;padding-right:1em}#loco-admin.wrap .selector.disabled .handle:after{display:none}#loco-admin.wrap .selector.disabled .handle span.icon{color:#999 !important}#loco-admin.wrap .selector li.disabled,#loco-admin.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco-admin.wrap .selector li.disabled *{cursor:text}#loco-admin.wrap .selector li.disabled .icon:before{color:#aaa}#loco-admin.wrap .selector li.disabled .flag,#loco-admin.wrap .selector li.disabled .icon-16{opacity:.4}#loco-admin.wrap .selector.lefty ul{left:auto;right:0}#loco-admin.wrap .selector.lefty ul .icon,#loco-admin.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco-admin.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco-admin.wrap .selector ul>form{margin:0;display:block}#loco-admin.wrap .selector ul>form input{margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-admin.wrap .selector ul>form input:focus{-webkit-box-shadow:inset 0 0 5px 0 #3db63d;-moz-box-shadow:inset 0 0 5px 0 #3db63d;box-shadow:inset 0 0 5px 0 #3db63d}#loco-admin.wrap .selector ul>form input.error{border-color:#c00;-webkit-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);-moz-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5)}#loco-admin.wrap .selector ul>form a.clear{margin:0;border:none}#loco-admin.wrap .selector ul>form ::placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form ::-webkit-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form :-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form ::-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form :-ms-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form .ielt10 .placeheld{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap div.auto-comp-wrap{width:100%}#loco-admin.wrap div.auto-comp-wrap input{display:inline-block}#loco-admin.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif?v=2.6.2) right 2px no-repeat}#loco-admin.wrap div.auto-comp-drop{color:#333;background:#fff;border-top:none;position:absolute;width:auto;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,.4);box-shadow:0 5px 5px rgba(0,0,0,.4)}#loco-admin.wrap div.auto-comp-result{padding:5px 10px;cursor:pointer;background:#f0f0f0;border-top:solid 1px #fff;border-bottom:solid 1px #ddd;white-space:nowrap}#loco-admin.wrap div.auto-comp-result:first-child{border-top:solid 1px #ddd}#loco-admin.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco-admin.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco-admin.wrap div.auto-comp-result:hover{background:#a8a8a8;color:#fff;border-top-color:#a8a8a8;border-bottom-color:#999}#loco-admin.wrap div.auto-comp-result.selected{background:#666 !important;color:#fff;border-top-color:#666;border-bottom-color:#666}#loco-admin.wrap div.auto-comp-result .lang,#loco-admin.wrap div.auto-comp-result .region,#loco-admin.wrap div.auto-comp-result .variant-wales,#loco-admin.wrap div.auto-comp-result .region-gb.lang-cy,#loco-admin.wrap div.auto-comp-result .variant-scotland,#loco-admin.wrap div.auto-comp-result .region-gb.lang-gd,#loco-admin.wrap div.auto-comp-result .variant-valencia,#loco-admin.wrap div.auto-comp-result .region-es.variant-valencia,#loco-admin.wrap div.auto-comp-result .lang-ca,#loco-admin.wrap div.auto-comp-result .region-es.lang-ca,#loco-admin.wrap div.auto-comp-result .lang-eo,#loco-admin.wrap div.auto-comp-result .lang-eu,#loco-admin.wrap div.auto-comp-result .avtr{margin-right:5px}#loco-admin.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#c00;opacity:1}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]{border-color:#c00;color:#c00}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]:focus{-webkit-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);-moz-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);box-shadow:0 0 .5em 0 rgba(153,0,0,.5)}#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.6.2);background-repeat:no-repeat;min-height:16px}#loco-admin.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.2) 0 0 no-repeat;min-height:75px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.2);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.2);background-size:16px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.2);background-size:16px}}#loco-admin.wrap ._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-admin.wrap ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-admin.wrap .loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .has-icon:before{display:inline-block;padding-right:.3em}#loco-admin.wrap a.icon-help{cursor:help}#loco-admin.wrap a.icon-help span{display:none}#loco-admin.wrap .icon-share:before{content:"↑"}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-magnify:before{content:"🔍"}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-calendar:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon-status.is-translated:before,#loco-admin.wrap .is-translated>header>.icon-status:before{color:#2e892e;content:"✓";text-align:center}#loco-admin.wrap .icon-status.is-untranslated:before,#loco-admin.wrap .is-untranslated>header>.icon-status:before{color:#aaa;content:"×";text-align:center;font-size:1.1em}#loco-admin.wrap .icon-status.is-flagged:before,#loco-admin.wrap .is-flagged>header>.icon-status:before{color:#bd2c00;content:"";text-align:center}#loco-admin.wrap .icon-status.is-translated.is-blank:before,#loco-admin.wrap .icon-status.is-translated.is-inherit:before,#loco-admin.wrap .is-translated.is-blank>header>.icon-status:before,#loco-admin.wrap .is-translated.is-inherit>header>.icon-status:before{content:"🗌"}#loco-admin.wrap .icon-status.is-fuzzy:before,#loco-admin.wrap .is-fuzzy>header>.icon-status:before{color:#666;content:""}#loco-admin.wrap .lang,#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{color:#fff;background:#2e892e;display:inline-block;text-transform:uppercase;overflow:hidden;font-family:Verdana,Arial,sans-serif;font-size:9px;font-weight:normal;font-style:normal;line-height:12px;text-align:center;white-space:normal;text-shadow:none}#loco-admin.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco-admin.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco-admin.wrap .no-lang{width:18px;height:10px;border:solid 1px #2e892e;background:transparent}#loco-admin.wrap .lang-el{background-color:#1d48a3}#loco-admin.wrap .lang-el:before{content:"Ελ"}#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png?v=2.6.2);background-repeat:no-repeat;background-color:transparent}#loco-admin.wrap .region:before,#loco-admin.wrap .variant-wales:before,#loco-admin.wrap .region-gb.lang-cy:before,#loco-admin.wrap .variant-scotland:before,#loco-admin.wrap .region-gb.lang-gd:before,#loco-admin.wrap .variant-valencia:before,#loco-admin.wrap .region-es.variant-valencia:before,#loco-admin.wrap .lang-ca:before,#loco-admin.wrap .region-es.lang-ca:before,#loco-admin.wrap .lang-eo:before,#loco-admin.wrap .lang-eu:before{visibility:hidden}#loco-admin.wrap .lang-zh{background-color:#b90000}#loco-admin.wrap .lang-zh.script-hans:before{content:"中国"}#loco-admin.wrap .lang-zh.script-hant:before{content:"中國"}#loco-admin.wrap .__{background-position:0 0}#loco-admin.wrap .lang-eo{background-position:0 -12px}#loco-admin.wrap .lang-eu{background-position:0 -24px}#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca{background-position:0 -36px}#loco-admin.wrap .region-tg{background-position:0 -48px}#loco-admin.wrap .region-me{background-position:0 -60px}#loco-admin.wrap .region-la{background-position:0 -73px}#loco-admin.wrap .region-mr{background-position:0 -85px}#loco-admin.wrap .region-ni{background-position:0 -97px}#loco-admin.wrap .region-lv{background-position:0 -109px}#loco-admin.wrap .region-om{background-position:0 -121px}#loco-admin.wrap .region-af{background-position:0 -133px}#loco-admin.wrap .region-cy{background-position:0 -145px}#loco-admin.wrap .region-bj{background-position:0 -157px}#loco-admin.wrap .region-aq{background-position:0 -169px}#loco-admin.wrap .region-cn{background-position:0 -186px}#loco-admin.wrap .region-co{background-position:0 -198px}#loco-admin.wrap .region-cx{background-position:0 -210px}#loco-admin.wrap .region-ag{background-position:0 -222px}#loco-admin.wrap .region-ms{background-position:0 -234px}#loco-admin.wrap .region-md{background-position:0 -246px}#loco-admin.wrap .region-zm{background-position:0 -258px}#loco-admin.wrap .region-vn{background-position:0 -270px}#loco-admin.wrap .region-tf{background-position:0 -282px}#loco-admin.wrap .region-td{background-position:0 -294px}#loco-admin.wrap .region-yt{background-position:0 -306px}#loco-admin.wrap .region-lb{background-position:0 -318px}#loco-admin.wrap .region-mf{background-position:0 -330px}#loco-admin.wrap .region-lu{background-position:0 -347px}#loco-admin.wrap .region-mq{background-position:0 -359px}#loco-admin.wrap .region-cz{background-position:0 -371px}#loco-admin.wrap .region-ae{background-position:0 -383px}#loco-admin.wrap .region-cm{background-position:0 -395px}#loco-admin.wrap .region-bi{background-position:0 -407px}#loco-admin.wrap .region-ar{background-position:0 -419px}#loco-admin.wrap .region-as{background-position:0 -431px}#loco-admin.wrap .region-bh{background-position:0 -443px}#loco-admin.wrap .region-cl{background-position:0 -455px}#loco-admin.wrap .region-ad{background-position:0 -467px}#loco-admin.wrap .region-mp{background-position:0 -479px}#loco-admin.wrap .region-lt{background-position:0 -491px}#loco-admin.wrap .region-mg{background-position:0 -503px}#loco-admin.wrap .region-lc{background-position:0 -515px}#loco-admin.wrap .region-tr{background-position:0 -527px}#loco-admin.wrap .region-ua{background-position:0 -539px}#loco-admin.wrap .region-tv{background-position:0 -551px}#loco-admin.wrap .region-vi{background-position:0 -563px}#loco-admin.wrap .region-mt{background-position:0 -575px}#loco-admin.wrap .region-no{background-position:0 -587px}#loco-admin.wrap .region-mc{background-position:0 -599px}#loco-admin.wrap .region-ch{background-position:0 -611px}#loco-admin.wrap .region-bl{background-position:0 -623px}#loco-admin.wrap .region-aw{background-position:0 -640px}#loco-admin.wrap .region-bz{background-position:0 -652px}#loco-admin.wrap .region-bm{background-position:0 -664px}#loco-admin.wrap .region-ci{background-position:0 -676px}#loco-admin.wrap .region-mu{background-position:0 -688px}#loco-admin.wrap .region-us{background-position:0 -700px}#loco-admin.wrap .region-tw{background-position:0 -712px}#loco-admin.wrap .region-ye{background-position:0 -724px}#loco-admin.wrap .region-mw{background-position:0 -736px}#loco-admin.wrap .region-nl{background-position:0 -748px}#loco-admin.wrap .region-ls{background-position:0 -760px}#loco-admin.wrap .region-bo{background-position:0 -772px}#loco-admin.wrap .region-at{background-position:0 -784px}#loco-admin.wrap .region-ck{background-position:0 -796px}#loco-admin.wrap .region-by{background-position:0 -808px}#loco-admin.wrap .region-au{background-position:0 -820px}#loco-admin.wrap .region-bn{background-position:0 -832px}#loco-admin.wrap .region-ma{background-position:0 -844px}#loco-admin.wrap .region-nz{background-position:0 -856px}#loco-admin.wrap .region-lr{background-position:0 -868px}#loco-admin.wrap .region-mv{background-position:0 -880px}#loco-admin.wrap .region-tc{background-position:0 -892px}#loco-admin.wrap .region-ug{background-position:0 -904px}#loco-admin.wrap .region-tt{background-position:0 -916px}#loco-admin.wrap .region-pl{background-position:0 -928px}#loco-admin.wrap .region-rs{background-position:0 -940px}#loco-admin.wrap .region-in{background-position:0 -952px}#loco-admin.wrap .region-ge{background-position:0 -964px}#loco-admin.wrap .region-gr{background-position:0 -976px}#loco-admin.wrap .region-gs{background-position:0 -988px}#loco-admin.wrap .region-gd{background-position:0 -1000px}#loco-admin.wrap .region-io{background-position:0 -1012px}#loco-admin.wrap .region-hk{background-position:0 -1024px}#loco-admin.wrap .region-kp{background-position:0 -1036px}#loco-admin.wrap .region-kg{background-position:0 -1048px}#loco-admin.wrap .region-pm{background-position:0 -1060px}#loco-admin.wrap .region-sv{background-position:0 -1072px}#loco-admin.wrap .region-re{background-position:0 -1084px}#loco-admin.wrap .region-sa{background-position:0 -1096px}#loco-admin.wrap .region-sc{background-position:0 -1108px}#loco-admin.wrap .region-st{background-position:0 -1120px}#loco-admin.wrap .region-ke{background-position:0 -1132px}#loco-admin.wrap .region-im{background-position:0 -1144px}#loco-admin.wrap .region-kr{background-position:0 -1161px}#loco-admin.wrap .region-gf{background-position:0 -1173px}#loco-admin.wrap .region-dj{background-position:0 -1185px}#loco-admin.wrap .region-gq{background-position:0 -1197px}#loco-admin.wrap .region-gp{background-position:0 -1209px}#loco-admin.wrap .region-dk{background-position:0 -1221px}#loco-admin.wrap .region-gg{background-position:0 -1233px}#loco-admin.wrap .region-il{background-position:0 -1250px}#loco-admin.wrap .region-pn{background-position:0 -1262px}#loco-admin.wrap .region-sb{background-position:0 -1274px}#loco-admin.wrap .region-py{background-position:0 -1286px}#loco-admin.wrap .region-ru{background-position:0 -1298px}#loco-admin.wrap .region-kw{background-position:0 -1310px}#loco-admin.wrap .region-do{background-position:0 -1322px}#loco-admin.wrap .region-gt{background-position:0 -1334px}#loco-admin.wrap .region-gb{background-position:0 -1346px}#loco-admin.wrap .region-gu{background-position:0 -1358px}#loco-admin.wrap .region-je{background-position:0 -1370px}#loco-admin.wrap .region-hm{background-position:0 -1387px}#loco-admin.wrap .region-sg{background-position:0 -1399px}#loco-admin.wrap .region-pk{background-position:0 -1411px}#loco-admin.wrap .region-sr{background-position:0 -1423px}#loco-admin.wrap .region-se{background-position:0 -1435px}#loco-admin.wrap .region-jp{background-position:0 -1447px}#loco-admin.wrap .region-gw{background-position:0 -1459px}#loco-admin.wrap .region-eh{background-position:0 -1471px}#loco-admin.wrap .region-dz{background-position:0 -1483px}#loco-admin.wrap .region-ga{background-position:0 -1495px}#loco-admin.wrap .region-fr{background-position:0 -1507px}#loco-admin.wrap .region-dm{background-position:0 -1519px}#loco-admin.wrap .region-hn{background-position:0 -1531px}#loco-admin.wrap .region-sd{background-position:0 -1543px}#loco-admin.wrap .region-rw{background-position:0 -1555px}#loco-admin.wrap .region-ph{background-position:0 -1567px}#loco-admin.wrap .region-ss{background-position:0 -1579px}#loco-admin.wrap .region-qa{background-position:0 -1596px}#loco-admin.wrap .region-pe{background-position:0 -1608px}#loco-admin.wrap .region-pr{background-position:0 -1620px}#loco-admin.wrap .region-si{background-position:0 -1632px}#loco-admin.wrap .region-ht{background-position:0 -1644px}#loco-admin.wrap .region-es{background-position:0 -1656px}#loco-admin.wrap .region-gl{background-position:0 -1668px}#loco-admin.wrap .region-gm{background-position:0 -1680px}#loco-admin.wrap .region-er{background-position:0 -1692px}#loco-admin.wrap .region-fi{background-position:0 -1704px}#loco-admin.wrap .region-ee{background-position:0 -1716px}#loco-admin.wrap .region-kn{background-position:0 -1728px}#loco-admin.wrap .region-hu{background-position:0 -1740px}#loco-admin.wrap .region-iq{background-position:0 -1752px}#loco-admin.wrap .region-ky{background-position:0 -1764px}#loco-admin.wrap .region-sh{background-position:0 -1776px}#loco-admin.wrap .region-ps{background-position:0 -1788px}#loco-admin.wrap .region-pf{background-position:0 -1800px}#loco-admin.wrap .region-sj{background-position:0 -1812px}#loco-admin.wrap .region-id{background-position:0 -1824px}#loco-admin.wrap .region-is{background-position:0 -1836px}#loco-admin.wrap .region-eg{background-position:0 -1848px}#loco-admin.wrap .region-fk{background-position:0 -1860px}#loco-admin.wrap .region-fj{background-position:0 -1872px}#loco-admin.wrap .region-gn{background-position:0 -1884px}#loco-admin.wrap .region-gy{background-position:0 -1896px}#loco-admin.wrap .region-ir{background-position:0 -1908px}#loco-admin.wrap .region-km{background-position:0 -1920px}#loco-admin.wrap .region-ie{background-position:0 -1932px}#loco-admin.wrap .region-kz{background-position:0 -1944px}#loco-admin.wrap .region-ro{background-position:0 -1956px}#loco-admin.wrap .region-sk{background-position:0 -1968px}#loco-admin.wrap .region-pg{background-position:0 -1980px}#loco-admin.wrap .region-pt{background-position:0 -1992px}#loco-admin.wrap .region-so{background-position:0 -2004px}#loco-admin.wrap .region-sx{background-position:0 -2016px}#loco-admin.wrap .region-hr{background-position:0 -2033px}#loco-admin.wrap .region-ki{background-position:0 -2045px}#loco-admin.wrap .region-jm{background-position:0 -2057px}#loco-admin.wrap .region-ec{background-position:0 -2069px}#loco-admin.wrap .region-et{background-position:0 -2081px}#loco-admin.wrap .region-fo{background-position:0 -2093px}#loco-admin.wrap .region-kh{background-position:0 -2105px}#loco-admin.wrap .region-sy{background-position:0 -2117px}#loco-admin.wrap .region-sn{background-position:0 -2129px}#loco-admin.wrap .region-pw{background-position:0 -2141px}#loco-admin.wrap .region-sl{background-position:0 -2153px}#loco-admin.wrap .region-fm{background-position:0 -2165px}#loco-admin.wrap .region-gi{background-position:0 -2177px}#loco-admin.wrap .region-de{background-position:0 -2189px}#loco-admin.wrap .region-gh{background-position:0 -2201px}#loco-admin.wrap .region-jo{background-position:0 -2213px}#loco-admin.wrap .region-it{background-position:0 -2225px}#loco-admin.wrap .region-pa{background-position:0 -2237px}#loco-admin.wrap .region-sz{background-position:0 -2249px}#loco-admin.wrap .region-sm{background-position:0 -2261px}#loco-admin.wrap .region-tn{background-position:0 -2273px}#loco-admin.wrap .region-ml{background-position:0 -2285px}#loco-admin.wrap .region-cg{background-position:0 -2297px}#loco-admin.wrap .region-ax{background-position:0 -2309px}#loco-admin.wrap .region-ao{background-position:0 -2321px}#loco-admin.wrap .region-bt{background-position:0 -2333px}#loco-admin.wrap .region-an{background-position:0 -2345px}#loco-admin.wrap .region-bb{background-position:0 -2357px}#loco-admin.wrap .region-cf{background-position:0 -2369px}#loco-admin.wrap .region-mm{background-position:0 -2381px}#loco-admin.wrap .region-li{background-position:0 -2393px}#loco-admin.wrap .region-na{background-position:0 -2405px}#loco-admin.wrap .region-mz{background-position:0 -2417px}#loco-admin.wrap .region-to{background-position:0 -2429px}#loco-admin.wrap .region-vg{background-position:0 -2441px}#loco-admin.wrap .region-ve{background-position:0 -2453px}#loco-admin.wrap .region-tz{background-position:0 -2465px}#loco-admin.wrap .region-tm{background-position:0 -2477px}#loco-admin.wrap .region-mx{background-position:0 -2489px}#loco-admin.wrap .region-nc{background-position:0 -2501px}#loco-admin.wrap .region-mo{background-position:0 -2513px}#loco-admin.wrap .region-lk{background-position:0 -2525px}#loco-admin.wrap .region-cd{background-position:0 -2537px}#loco-admin.wrap .region-al{background-position:0 -2549px}#loco-admin.wrap .region-bw{background-position:0 -2561px}#loco-admin.wrap .region-cs{background-position:0 -2573px}#loco-admin.wrap .region-cr{background-position:0 -2585px}#loco-admin.wrap .region-bv{background-position:0 -2597px}#loco-admin.wrap .region-am{background-position:0 -2609px}#loco-admin.wrap .region-az{background-position:0 -2621px}#loco-admin.wrap .region-ba{background-position:0 -2633px}#loco-admin.wrap .region-mn{background-position:0 -2645px}#loco-admin.wrap .region-nu{background-position:0 -2657px}#loco-admin.wrap .region-my{background-position:0 -2669px}#loco-admin.wrap .region-tl{background-position:0 -2681px}#loco-admin.wrap .region-ws{background-position:0 -2693px}#loco-admin.wrap .region-th{background-position:0 -2705px}#loco-admin.wrap .region-nf{background-position:0 -2717px}#loco-admin.wrap .region-ly{background-position:0 -2729px}#loco-admin.wrap .region-ai{background-position:0 -2741px}#loco-admin.wrap .region-br{background-position:0 -2753px}#loco-admin.wrap .region-cv{background-position:0 -2765px}#loco-admin.wrap .region-be{background-position:0 -2777px}#loco-admin.wrap .region-ca{background-position:0 -2789px}#loco-admin.wrap .region-bd{background-position:0 -2801px}#loco-admin.wrap .region-cw{background-position:0 -2813px}#loco-admin.wrap .region-bs{background-position:0 -2830px}#loco-admin.wrap .region-ng{background-position:0 -2842px}#loco-admin.wrap .region-mk{background-position:0 -2854px}#loco-admin.wrap .region-np{background-position:0 -2866px}#loco-admin.wrap .region-va{background-position:0 -2878px}#loco-admin.wrap .region-uz{background-position:0 -2890px}#loco-admin.wrap .region-um{background-position:0 -2902px}#loco-admin.wrap .region-tk{background-position:0 -2914px}#loco-admin.wrap .region-vc{background-position:0 -2926px}#loco-admin.wrap .region-zw{background-position:0 -2938px}#loco-admin.wrap .region-nr{background-position:0 -2950px}#loco-admin.wrap .region-ne{background-position:0 -2962px}#loco-admin.wrap .region-cu{background-position:0 -2974px}#loco-admin.wrap .region-bq{background-position:0 -2986px}#loco-admin.wrap .region-bf{background-position:0 -2998px}#loco-admin.wrap .region-bg{background-position:0 -3010px}#loco-admin.wrap .region-cc{background-position:0 -3022px}#loco-admin.wrap .region-mh{background-position:0 -3034px}#loco-admin.wrap .region-za{background-position:0 -3046px}#loco-admin.wrap .region-uy{background-position:0 -3058px}#loco-admin.wrap .region-wf{background-position:0 -3070px}#loco-admin.wrap .region-vu{background-position:0 -3082px}#loco-admin.wrap .region-tj{background-position:0 -3094px}#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia{background-position:0 -3118px}#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco-admin.wrap .x-eu{background-position:0 -3142px}#loco-admin.wrap span.lang code{display:none}#loco-admin.wrap .icon-share:before{content:"↑"}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-magnify:before{content:"🔍"}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-calendar:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before{speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco"}#loco-admin.wrap .has-dashicon:before{font-family:"dashicons";font-size:1.4em}#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before,#loco-admin.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco-admin.wrap .only-icon{text-align:center}#loco-admin.wrap .only-icon:before{text-align:center;padding:0}#loco-admin.wrap .only-icon span{display:none}#loco-admin.wrap a,#loco-admin.wrap .wp-core-ui .button-link{text-decoration:none}#loco-admin.wrap h3:hover>a.loco-anchor{color:#ccc}#loco-admin.wrap h3:hover>a.loco-anchor:before{content:"¶"}#loco-admin.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco-admin.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco-admin.wrap h1 ul,#loco-admin.wrap h1 li{margin:0;padding:0}#loco-admin.wrap h1 li{display:inline-block}#loco-admin.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco-admin.wrap h1 li:last-child:after{content:""}#loco-admin.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco-admin.wrap h2 span{color:#999;font-weight:normal}#loco-admin.wrap h2 .loco-meta,#loco-admin.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco-admin.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco-admin.wrap .wp-list-table td{white-space:nowrap}#loco-admin.wrap .wp-list-table td>a,#loco-admin.wrap .wp-list-table td>time{display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis}#loco-admin.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco-admin.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"▼"}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"▲"}#loco-admin.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco-admin.wrap form.loco-filter{display:block;margin-bottom:5px}#loco-admin.wrap form.loco-filter .icon-filter{color:#999}#loco-admin.wrap nav.above-list-table{margin-bottom:1em}#loco-admin.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco-admin.wrap .wp-core-ui button.inverted,#loco-admin.wrap .wp-core-ui button.inverted:hover,#loco-admin.wrap .po-fuzzy button.icon-cloud{background:-moz-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:-webkit-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:linear-gradient(to bottom, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:gray}#loco-admin.wrap .wp-core-ui button:active,#loco-admin.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco-admin.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco-admin.wrap .loco-clearable a.clear,#loco-admin.wrap .auto-comp-wrap a.clear{top:0;right:0;outline:none;margin:0;border:solid 1px transparent;padding:5px 5px;position:absolute;font-size:1em;line-height:normal}#loco-admin.wrap .loco-clearable a.clear:before,#loco-admin.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco-admin.wrap .loco-clearable a.clear:hover:before,#loco-admin.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco-admin.wrap .loco-clearable a.clear span,#loco-admin.wrap .auto-comp-wrap a.clear span{display:none}#loco-admin.wrap .loco-clearable ::-ms-clear,#loco-admin.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco-admin.wrap div.progress{color:#000;background:transparent !important}#loco-admin.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco-admin.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco-admin.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco-admin.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco-admin.wrap div.progress .l{display:block}#loco-admin.wrap td div.progress .t{border:none}#loco-admin.wrap td div.progress .l{display:none}#loco-admin.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco-admin.wrap .loco-danger{color:#d54e21}#loco-admin.wrap .notice,#loco-admin.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco-admin.wrap .notice-generic{border-color:#ddd}#loco-admin.wrap .notice-success>.has-icon,#loco-admin.wrap .notice-success p>strong.has-icon{color:#000}#loco-admin.wrap .notice-warning{border-color:orange}#loco-admin.wrap .notice-error{border-color:#dc3232}#loco-admin.wrap .notice-debug{border-color:#00a0d2}#loco-admin.wrap .notice-danger{border-color:#dc3232}#loco-admin.wrap .notice-locked{border-color:orange}#loco-admin.wrap .notice>.has-icon:before,#loco-admin.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco-admin.wrap .notice>p>a.button.has-icon:before{width:1.2em}#loco-admin.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco-admin.wrap .notice>p>em a{color:inherit}#loco-admin.wrap .notice>p a:hover,#loco-admin.wrap .notice>nav a:hover{text-decoration:underline}#loco-admin.wrap .notice>p a.button,#loco-admin.wrap .notice>nav a.button{text-decoration:inherit}#loco-admin.wrap .notice.has-nav{display:flex;flex-direction:row}#loco-admin.wrap .notice.has-nav p,#loco-admin.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco-admin.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco-admin.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco-admin.wrap .notice.has-nav a{white-space:nowrap}#loco-admin.wrap .notice.has-nav nav>span{color:#666}#loco-admin.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco-admin.wrap ul.problems li{font-style:italic}#loco-admin.wrap label{position:relative}#loco-admin.wrap label.for-disabled,#loco-admin.wrap label.for-disabled>input{cursor:default !important}#loco-admin.wrap input.regular-text,#loco-admin.wrap textarea.regular-text{width:25em}#loco-admin.wrap .button-link{padding:0 10px 1px}#loco-admin.wrap .button-danger{background:#ba0000;border-color:#900 #600 #600;-webkit-box-shadow:0 1px 0 #600;-moz-box-shadow:0 1px 0 #600;box-shadow:0 1px 0 #600;color:#fff;text-shadow:0 -1px 1px #600,1px 0 1px #600,0 1px 1px #600,-1px 0 1px #600}#loco-admin.wrap .button-success{background:#00b500;border-color:#090 #2e892e #2e892e;-webkit-box-shadow:0 1px 0 #2e892e;-moz-box-shadow:0 1px 0 #2e892e;box-shadow:0 1px 0 #2e892e;color:#fff;text-shadow:0 -1px 1px #2e892e,1px 0 1px #2e892e,0 1px 1px #2e892e,-1px 0 1px #2e892e}#loco-admin.wrap .button-success:hover{background:#3db63d}#loco-admin.wrap .button-danger[disabled],#loco-admin.wrap .button-success[disabled]{text-shadow:none !important}#loco-admin.wrap form button.loco-loading.button-large{padding-left:0}#loco-admin.wrap form button.loco-loading.button-large:before{width:16px;height:16px;margin:0 4px;content:" ";font-size:16px;line-height:1;display:inline-block;vertical-align:sub}#loco-admin.wrap ::placeholder{color:#ccc}#loco-admin.wrap ::-webkit-input-placeholder{color:#ccc}#loco-admin.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap :-ms-input-placeholder{color:#ccc}#loco-admin.wrap .ielt10 .placeheld{color:#ccc}#loco-admin.wrap a.has-raquo:after{content:" »"}#loco-admin.wrap a.has-laquo:before{content:"« "}#loco-admin.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif?v=2.6.2) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco-admin.wrap .jshide,.no-js #loco-admin.wrap .jsonly{display:none !important}#loco-admin.wrap .invis{visibility:hidden}.form-table tr td{vertical-align:top}.form-table tr.compact td{padding-top:0}.form-table tr th a.icon-help{display:none}.loco-modal{min-width:50%;min-height:100px}.loco-modal-wide{min-width:90% !important}.loco-modal-no-close .ui-dialog-titlebar-close{display:none}.loco-modal .ui-dialog-titlebar-close{overflow:hidden}.loco-modal.request-filesystem-credentials-dialog{top:15% !important;max-height:85% !important}.loco-modal.request-filesystem-credentials-dialog>.ui-dialog-content{background:inherit}.loco-modal.request-filesystem-credentials-dialog .ftp-password>label>em:last-child{display:none}.ui-dialog-content>div.loco-loading{height:100%;background:transparent url(../img/spin-modal.gif?v=2.6.2) center 20px no-repeat}#loco-po-ref ol li{color:#aaa;margin:0;white-space:pre;padding:0 0 0 1em;font:normal 12px/17px Consolas,Monaco,monospace;background:transparent;border-left:1px solid #eee}#loco-po-ref ol li code{margin:0;padding:0;display:inline;background:inherit}#loco-po-ref ol li.highlighted{color:#666;background-color:#f8eec7}#loco-po-ref ol li.highlighted code.T_CONSTANT_ENCAPSED_STRING{color:#c931c7}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif?v=2.6.2) 0 0 no-repeat;height:30px;width:100px;text-indent:200px;-webkit-transition-duration:0s;transition-duration:0s}#loco-credit>a:hover{background-position:0 -35px}#loco-content{position:relative}#footer-upgrade span:before{color:#ccc;content:" | ";display:inline;padding-left:.5em;padding-right:.5em}#footer-upgrade span:first-child:before{content:"";display:none}.loco-clearfix:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}dl.debug dt{font-weight:bold}dl.debug dt,dl.debug dd{white-space:pre}.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(0,115,170,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#0073aa}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#66c6e4 !important;background:#008ec2 !important;border-color:#008ec2 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif?v=2.6.2) 0 0 no-repeat !important}
|
1 |
+
._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.6.3);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.3) 0 0 no-repeat;min-height:75px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.3);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.3);background-size:16px}._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.3);background-size:16px}}._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}.loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:"loco";src:url("../font/loco.eot?v=2.6.3");src:url("../font/loco.eot?v=2.6.3?#iefix") format("embedded-opentype"),url("../font/loco.woff?v=2.6.3") format("woff"),url("../font/loco.ttf?v=2.6.3") format("truetype"),url("../font/loco.svg?v=2.6.3#loco") format("svg");font-weight:normal;font-style:normal}.tipsy{font-size:11px;position:absolute;padding:5px;z-index:500001;opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.tipsy.in{opacity:1}.tipsy-inner{background-color:#000;color:#fff;white-space:nowrap;padding:6px 8px;line-height:1.3em;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-n .tipsy-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-nw .tipsy-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-se .tipsy-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-e .tipsy-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.tipsy-w .tipsy-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}#loco-admin.wrap .selector li,#loco-admin.wrap .selector .handle,#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selectorsep:before,#loco-admin.wrap .selectorsep span{padding:.3em .75em}#loco-admin.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco-admin.wrap .selectoradd a,#loco-admin.wrap .selector .handle{cursor:default;display:block;position:relative;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666;height:1.3em;overflow:hidden;white-space:normal}#loco-admin.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco-admin.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco-admin.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco-admin.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco-admin.wrap .selector .handle .prefix{padding-right:.6ex}#loco-admin.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:.25em;right:.6em;content:"▼"}#loco-admin.wrap .selector .handle:focus:after,#loco-admin.wrap .selector .handle:hover:after{color:#666}#loco-admin.wrap .selector.no-caret .handle{padding-right:.75em}#loco-admin.wrap .selector.no-caret .handle:after{display:none}#loco-admin.wrap .selector.no-title .handle{padding-left:.5em;padding-right:.5em}#loco-admin.wrap .selector.no-title .handle .label{display:none}#loco-admin.wrap .selector.no-title .handle .icon{margin-right:0px}#loco-admin.wrap .selector.dummy .handle{border-color:transparent}#loco-admin.wrap .selector.dummy .handle:after{display:none}#loco-admin.wrap .selectoradd{position:relative}#loco-admin.wrap .selectoradd>*{display:block;float:left;clear:none}#loco-admin.wrap .selectoradd>a.has-icon{width:1.3em}#loco-admin.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco-admin.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco-admin.wrap .selectorsep{display:inline-block}#loco-admin.wrap .selectorsep span{color:#666;height:1.3em}#loco-admin.wrap .selector ul{padding:0}#loco-admin.wrap .selector ul,#loco-admin.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco-admin.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,.2);border:solid 1px #ccc;overflow:auto}#loco-admin.wrap .selector.up ul{margin-top:0}#loco-admin.wrap .selector.multi li input{display:none}#loco-admin.wrap .selector.multi li.checked{background:#e5e5e5}#loco-admin.wrap .selector li.active{background:#e5e5e5 !important}#loco-admin.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco-admin.wrap .selector li.over .label{color:#fff}#loco-admin.wrap .selector .label{font:inherit;color:inherit}#loco-admin.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco-admin.wrap .selector .icon.no-icon{display:none}#loco-admin.wrap .selector .icon:before{color:#666}#loco-admin.wrap .selector .avtr{width:18px;height:18px;background-size:18px;background-repeat:no-repeat}#loco-admin.wrap .selector .label{line-height:1}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .icon-16{vertical-align:bottom}#loco-admin.wrap .selector .icon,#loco-admin.wrap .selector .lang,#loco-admin.wrap .selector .icon-16{margin-right:5px}#loco-admin.wrap .selector .region,#loco-admin.wrap .selector .variant-wales,#loco-admin.wrap .selector .region-gb.lang-cy,#loco-admin.wrap .selector .variant-scotland,#loco-admin.wrap .selector .region-gb.lang-gd,#loco-admin.wrap .selector .variant-valencia,#loco-admin.wrap .selector .region-es.variant-valencia,#loco-admin.wrap .selector .lang-ca,#loco-admin.wrap .selector .region-es.lang-ca,#loco-admin.wrap .selector .lang-eo,#loco-admin.wrap .selector .lang-eu{margin-left:2px;margin-right:7px}#loco-admin.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco-admin.wrap .selector.ticked .active .icon.no-icon:before{content:"✓"}#loco-admin.wrap .selectoradd a:hover,#loco-admin.wrap .selector a.handle:focus,#loco-admin.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco-admin.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco-admin.wrap .selector.active .handle:after{color:#999;content:"▲"}#loco-admin.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco-admin.wrap .selector.disabled .handle{pointer-events:none;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#999;padding-right:1em}#loco-admin.wrap .selector.disabled .handle:after{display:none}#loco-admin.wrap .selector.disabled .handle span.icon{color:#999 !important}#loco-admin.wrap .selector li.disabled,#loco-admin.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco-admin.wrap .selector li.disabled *{cursor:text}#loco-admin.wrap .selector li.disabled .icon:before{color:#aaa}#loco-admin.wrap .selector li.disabled .flag,#loco-admin.wrap .selector li.disabled .icon-16{opacity:.4}#loco-admin.wrap .selector.lefty ul{left:auto;right:0}#loco-admin.wrap .selector.lefty ul .icon,#loco-admin.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco-admin.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco-admin.wrap .selector ul>form{margin:0;display:block}#loco-admin.wrap .selector ul>form input{margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-admin.wrap .selector ul>form input:focus{-webkit-box-shadow:inset 0 0 5px 0 #3db63d;-moz-box-shadow:inset 0 0 5px 0 #3db63d;box-shadow:inset 0 0 5px 0 #3db63d}#loco-admin.wrap .selector ul>form input.error{border-color:#c00;-webkit-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);-moz-box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5);box-shadow:inset 0 0 5px 0 rgba(153,0,0,.5)}#loco-admin.wrap .selector ul>form a.clear{margin:0;border:none}#loco-admin.wrap .selector ul>form ::placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form ::-webkit-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form :-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form ::-moz-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block;opacity:1}#loco-admin.wrap .selector ul>form :-ms-input-placeholder{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap .selector ul>form .ielt10 .placeheld{color:gray;font-size:16px;font-family:"loco";text-align:right;display:block}#loco-admin.wrap div.auto-comp-wrap{width:100%}#loco-admin.wrap div.auto-comp-wrap input{display:inline-block}#loco-admin.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif?v=2.6.3) right 2px no-repeat}#loco-admin.wrap div.auto-comp-drop{color:#333;background:#fff;border-top:none;position:absolute;width:auto;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,.4);box-shadow:0 5px 5px rgba(0,0,0,.4)}#loco-admin.wrap div.auto-comp-result{padding:5px 10px;cursor:pointer;background:#f0f0f0;border-top:solid 1px #fff;border-bottom:solid 1px #ddd;white-space:nowrap}#loco-admin.wrap div.auto-comp-result:first-child{border-top:solid 1px #ddd}#loco-admin.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco-admin.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco-admin.wrap div.auto-comp-result:hover{background:#a8a8a8;color:#fff;border-top-color:#a8a8a8;border-bottom-color:#999}#loco-admin.wrap div.auto-comp-result.selected{background:#666 !important;color:#fff;border-top-color:#666;border-bottom-color:#666}#loco-admin.wrap div.auto-comp-result .lang,#loco-admin.wrap div.auto-comp-result .region,#loco-admin.wrap div.auto-comp-result .variant-wales,#loco-admin.wrap div.auto-comp-result .region-gb.lang-cy,#loco-admin.wrap div.auto-comp-result .variant-scotland,#loco-admin.wrap div.auto-comp-result .region-gb.lang-gd,#loco-admin.wrap div.auto-comp-result .variant-valencia,#loco-admin.wrap div.auto-comp-result .region-es.variant-valencia,#loco-admin.wrap div.auto-comp-result .lang-ca,#loco-admin.wrap div.auto-comp-result .region-es.lang-ca,#loco-admin.wrap div.auto-comp-result .lang-eo,#loco-admin.wrap div.auto-comp-result .lang-eu,#loco-admin.wrap div.auto-comp-result .avtr{margin-right:5px}#loco-admin.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#c00;opacity:1}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]{border-color:#c00;color:#c00}#loco-admin.wrap div.auto-comp-wrap.error input[type=text]:focus{-webkit-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);-moz-box-shadow:0 0 .5em 0 rgba(153,0,0,.5);box-shadow:0 0 .5em 0 rgba(153,0,0,.5)}#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.6.3);background-repeat:no-repeat;min-height:16px}#loco-admin.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.3) 0 0 no-repeat;min-height:75px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.3);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-admin.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.3);background-size:16px}#loco-admin.wrap ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.3);background-size:16px}}#loco-admin.wrap ._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-admin.wrap ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-admin.wrap .loco-font,#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after,#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .has-icon:before{display:inline-block;padding-right:.3em}#loco-admin.wrap a.icon-help{cursor:help}#loco-admin.wrap a.icon-help span{display:none}#loco-admin.wrap .icon-share:before{content:"↑"}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-magnify:before{content:"🔍"}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-calendar:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon-status.is-translated:before,#loco-admin.wrap .is-translated>header>.icon-status:before{color:#2e892e;content:"✓";text-align:center}#loco-admin.wrap .icon-status.is-untranslated:before,#loco-admin.wrap .is-untranslated>header>.icon-status:before{color:#aaa;content:"×";text-align:center;font-size:1.1em}#loco-admin.wrap .icon-status.is-flagged:before,#loco-admin.wrap .is-flagged>header>.icon-status:before{color:#bd2c00;content:"";text-align:center}#loco-admin.wrap .icon-status.is-translated.is-blank:before,#loco-admin.wrap .icon-status.is-translated.is-inherit:before,#loco-admin.wrap .is-translated.is-blank>header>.icon-status:before,#loco-admin.wrap .is-translated.is-inherit>header>.icon-status:before{content:"🗌"}#loco-admin.wrap .icon-status.is-fuzzy:before,#loco-admin.wrap .is-fuzzy>header>.icon-status:before{color:#666;content:""}#loco-admin.wrap .lang,#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{color:#fff;background:#2e892e;display:inline-block;text-transform:uppercase;overflow:hidden;font-family:Verdana,Arial,sans-serif;font-size:9px;font-weight:normal;font-style:normal;line-height:12px;text-align:center;white-space:normal;text-shadow:none}#loco-admin.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco-admin.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco-admin.wrap .no-lang{width:18px;height:10px;border:solid 1px #2e892e;background:transparent}#loco-admin.wrap .lang-el{background-color:#1d48a3}#loco-admin.wrap .lang-el:before{content:"Ελ"}#loco-admin.wrap .region,#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy,#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd,#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia,#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca,#loco-admin.wrap .lang-eo,#loco-admin.wrap .lang-eu{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png?v=2.6.3);background-repeat:no-repeat;background-color:transparent}#loco-admin.wrap .region:before,#loco-admin.wrap .variant-wales:before,#loco-admin.wrap .region-gb.lang-cy:before,#loco-admin.wrap .variant-scotland:before,#loco-admin.wrap .region-gb.lang-gd:before,#loco-admin.wrap .variant-valencia:before,#loco-admin.wrap .region-es.variant-valencia:before,#loco-admin.wrap .lang-ca:before,#loco-admin.wrap .region-es.lang-ca:before,#loco-admin.wrap .lang-eo:before,#loco-admin.wrap .lang-eu:before{visibility:hidden}#loco-admin.wrap .lang-zh{background-color:#b90000}#loco-admin.wrap .lang-zh.script-hans:before{content:"中国"}#loco-admin.wrap .lang-zh.script-hant:before{content:"中國"}#loco-admin.wrap .__{background-position:0 0}#loco-admin.wrap .lang-eo{background-position:0 -12px}#loco-admin.wrap .lang-eu{background-position:0 -24px}#loco-admin.wrap .lang-ca,#loco-admin.wrap .region-es.lang-ca{background-position:0 -36px}#loco-admin.wrap .region-tg{background-position:0 -48px}#loco-admin.wrap .region-me{background-position:0 -60px}#loco-admin.wrap .region-la{background-position:0 -73px}#loco-admin.wrap .region-mr{background-position:0 -85px}#loco-admin.wrap .region-ni{background-position:0 -97px}#loco-admin.wrap .region-lv{background-position:0 -109px}#loco-admin.wrap .region-om{background-position:0 -121px}#loco-admin.wrap .region-af{background-position:0 -133px}#loco-admin.wrap .region-cy{background-position:0 -145px}#loco-admin.wrap .region-bj{background-position:0 -157px}#loco-admin.wrap .region-aq{background-position:0 -169px}#loco-admin.wrap .region-cn{background-position:0 -186px}#loco-admin.wrap .region-co{background-position:0 -198px}#loco-admin.wrap .region-cx{background-position:0 -210px}#loco-admin.wrap .region-ag{background-position:0 -222px}#loco-admin.wrap .region-ms{background-position:0 -234px}#loco-admin.wrap .region-md{background-position:0 -246px}#loco-admin.wrap .region-zm{background-position:0 -258px}#loco-admin.wrap .region-vn{background-position:0 -270px}#loco-admin.wrap .region-tf{background-position:0 -282px}#loco-admin.wrap .region-td{background-position:0 -294px}#loco-admin.wrap .region-yt{background-position:0 -306px}#loco-admin.wrap .region-lb{background-position:0 -318px}#loco-admin.wrap .region-mf{background-position:0 -330px}#loco-admin.wrap .region-lu{background-position:0 -347px}#loco-admin.wrap .region-mq{background-position:0 -359px}#loco-admin.wrap .region-cz{background-position:0 -371px}#loco-admin.wrap .region-ae{background-position:0 -383px}#loco-admin.wrap .region-cm{background-position:0 -395px}#loco-admin.wrap .region-bi{background-position:0 -407px}#loco-admin.wrap .region-ar{background-position:0 -419px}#loco-admin.wrap .region-as{background-position:0 -431px}#loco-admin.wrap .region-bh{background-position:0 -443px}#loco-admin.wrap .region-cl{background-position:0 -455px}#loco-admin.wrap .region-ad{background-position:0 -467px}#loco-admin.wrap .region-mp{background-position:0 -479px}#loco-admin.wrap .region-lt{background-position:0 -491px}#loco-admin.wrap .region-mg{background-position:0 -503px}#loco-admin.wrap .region-lc{background-position:0 -515px}#loco-admin.wrap .region-tr{background-position:0 -527px}#loco-admin.wrap .region-ua{background-position:0 -539px}#loco-admin.wrap .region-tv{background-position:0 -551px}#loco-admin.wrap .region-vi{background-position:0 -563px}#loco-admin.wrap .region-mt{background-position:0 -575px}#loco-admin.wrap .region-no{background-position:0 -587px}#loco-admin.wrap .region-mc{background-position:0 -599px}#loco-admin.wrap .region-ch{background-position:0 -611px}#loco-admin.wrap .region-bl{background-position:0 -623px}#loco-admin.wrap .region-aw{background-position:0 -640px}#loco-admin.wrap .region-bz{background-position:0 -652px}#loco-admin.wrap .region-bm{background-position:0 -664px}#loco-admin.wrap .region-ci{background-position:0 -676px}#loco-admin.wrap .region-mu{background-position:0 -688px}#loco-admin.wrap .region-us{background-position:0 -700px}#loco-admin.wrap .region-tw{background-position:0 -712px}#loco-admin.wrap .region-ye{background-position:0 -724px}#loco-admin.wrap .region-mw{background-position:0 -736px}#loco-admin.wrap .region-nl{background-position:0 -748px}#loco-admin.wrap .region-ls{background-position:0 -760px}#loco-admin.wrap .region-bo{background-position:0 -772px}#loco-admin.wrap .region-at{background-position:0 -784px}#loco-admin.wrap .region-ck{background-position:0 -796px}#loco-admin.wrap .region-by{background-position:0 -808px}#loco-admin.wrap .region-au{background-position:0 -820px}#loco-admin.wrap .region-bn{background-position:0 -832px}#loco-admin.wrap .region-ma{background-position:0 -844px}#loco-admin.wrap .region-nz{background-position:0 -856px}#loco-admin.wrap .region-lr{background-position:0 -868px}#loco-admin.wrap .region-mv{background-position:0 -880px}#loco-admin.wrap .region-tc{background-position:0 -892px}#loco-admin.wrap .region-ug{background-position:0 -904px}#loco-admin.wrap .region-tt{background-position:0 -916px}#loco-admin.wrap .region-pl{background-position:0 -928px}#loco-admin.wrap .region-rs{background-position:0 -940px}#loco-admin.wrap .region-in{background-position:0 -952px}#loco-admin.wrap .region-ge{background-position:0 -964px}#loco-admin.wrap .region-gr{background-position:0 -976px}#loco-admin.wrap .region-gs{background-position:0 -988px}#loco-admin.wrap .region-gd{background-position:0 -1000px}#loco-admin.wrap .region-io{background-position:0 -1012px}#loco-admin.wrap .region-hk{background-position:0 -1024px}#loco-admin.wrap .region-kp{background-position:0 -1036px}#loco-admin.wrap .region-kg{background-position:0 -1048px}#loco-admin.wrap .region-pm{background-position:0 -1060px}#loco-admin.wrap .region-sv{background-position:0 -1072px}#loco-admin.wrap .region-re{background-position:0 -1084px}#loco-admin.wrap .region-sa{background-position:0 -1096px}#loco-admin.wrap .region-sc{background-position:0 -1108px}#loco-admin.wrap .region-st{background-position:0 -1120px}#loco-admin.wrap .region-ke{background-position:0 -1132px}#loco-admin.wrap .region-im{background-position:0 -1144px}#loco-admin.wrap .region-kr{background-position:0 -1161px}#loco-admin.wrap .region-gf{background-position:0 -1173px}#loco-admin.wrap .region-dj{background-position:0 -1185px}#loco-admin.wrap .region-gq{background-position:0 -1197px}#loco-admin.wrap .region-gp{background-position:0 -1209px}#loco-admin.wrap .region-dk{background-position:0 -1221px}#loco-admin.wrap .region-gg{background-position:0 -1233px}#loco-admin.wrap .region-il{background-position:0 -1250px}#loco-admin.wrap .region-pn{background-position:0 -1262px}#loco-admin.wrap .region-sb{background-position:0 -1274px}#loco-admin.wrap .region-py{background-position:0 -1286px}#loco-admin.wrap .region-ru{background-position:0 -1298px}#loco-admin.wrap .region-kw{background-position:0 -1310px}#loco-admin.wrap .region-do{background-position:0 -1322px}#loco-admin.wrap .region-gt{background-position:0 -1334px}#loco-admin.wrap .region-gb{background-position:0 -1346px}#loco-admin.wrap .region-gu{background-position:0 -1358px}#loco-admin.wrap .region-je{background-position:0 -1370px}#loco-admin.wrap .region-hm{background-position:0 -1387px}#loco-admin.wrap .region-sg{background-position:0 -1399px}#loco-admin.wrap .region-pk{background-position:0 -1411px}#loco-admin.wrap .region-sr{background-position:0 -1423px}#loco-admin.wrap .region-se{background-position:0 -1435px}#loco-admin.wrap .region-jp{background-position:0 -1447px}#loco-admin.wrap .region-gw{background-position:0 -1459px}#loco-admin.wrap .region-eh{background-position:0 -1471px}#loco-admin.wrap .region-dz{background-position:0 -1483px}#loco-admin.wrap .region-ga{background-position:0 -1495px}#loco-admin.wrap .region-fr{background-position:0 -1507px}#loco-admin.wrap .region-dm{background-position:0 -1519px}#loco-admin.wrap .region-hn{background-position:0 -1531px}#loco-admin.wrap .region-sd{background-position:0 -1543px}#loco-admin.wrap .region-rw{background-position:0 -1555px}#loco-admin.wrap .region-ph{background-position:0 -1567px}#loco-admin.wrap .region-ss{background-position:0 -1579px}#loco-admin.wrap .region-qa{background-position:0 -1596px}#loco-admin.wrap .region-pe{background-position:0 -1608px}#loco-admin.wrap .region-pr{background-position:0 -1620px}#loco-admin.wrap .region-si{background-position:0 -1632px}#loco-admin.wrap .region-ht{background-position:0 -1644px}#loco-admin.wrap .region-es{background-position:0 -1656px}#loco-admin.wrap .region-gl{background-position:0 -1668px}#loco-admin.wrap .region-gm{background-position:0 -1680px}#loco-admin.wrap .region-er{background-position:0 -1692px}#loco-admin.wrap .region-fi{background-position:0 -1704px}#loco-admin.wrap .region-ee{background-position:0 -1716px}#loco-admin.wrap .region-kn{background-position:0 -1728px}#loco-admin.wrap .region-hu{background-position:0 -1740px}#loco-admin.wrap .region-iq{background-position:0 -1752px}#loco-admin.wrap .region-ky{background-position:0 -1764px}#loco-admin.wrap .region-sh{background-position:0 -1776px}#loco-admin.wrap .region-ps{background-position:0 -1788px}#loco-admin.wrap .region-pf{background-position:0 -1800px}#loco-admin.wrap .region-sj{background-position:0 -1812px}#loco-admin.wrap .region-id{background-position:0 -1824px}#loco-admin.wrap .region-is{background-position:0 -1836px}#loco-admin.wrap .region-eg{background-position:0 -1848px}#loco-admin.wrap .region-fk{background-position:0 -1860px}#loco-admin.wrap .region-fj{background-position:0 -1872px}#loco-admin.wrap .region-gn{background-position:0 -1884px}#loco-admin.wrap .region-gy{background-position:0 -1896px}#loco-admin.wrap .region-ir{background-position:0 -1908px}#loco-admin.wrap .region-km{background-position:0 -1920px}#loco-admin.wrap .region-ie{background-position:0 -1932px}#loco-admin.wrap .region-kz{background-position:0 -1944px}#loco-admin.wrap .region-ro{background-position:0 -1956px}#loco-admin.wrap .region-sk{background-position:0 -1968px}#loco-admin.wrap .region-pg{background-position:0 -1980px}#loco-admin.wrap .region-pt{background-position:0 -1992px}#loco-admin.wrap .region-so{background-position:0 -2004px}#loco-admin.wrap .region-sx{background-position:0 -2016px}#loco-admin.wrap .region-hr{background-position:0 -2033px}#loco-admin.wrap .region-ki{background-position:0 -2045px}#loco-admin.wrap .region-jm{background-position:0 -2057px}#loco-admin.wrap .region-ec{background-position:0 -2069px}#loco-admin.wrap .region-et{background-position:0 -2081px}#loco-admin.wrap .region-fo{background-position:0 -2093px}#loco-admin.wrap .region-kh{background-position:0 -2105px}#loco-admin.wrap .region-sy{background-position:0 -2117px}#loco-admin.wrap .region-sn{background-position:0 -2129px}#loco-admin.wrap .region-pw{background-position:0 -2141px}#loco-admin.wrap .region-sl{background-position:0 -2153px}#loco-admin.wrap .region-fm{background-position:0 -2165px}#loco-admin.wrap .region-gi{background-position:0 -2177px}#loco-admin.wrap .region-de{background-position:0 -2189px}#loco-admin.wrap .region-gh{background-position:0 -2201px}#loco-admin.wrap .region-jo{background-position:0 -2213px}#loco-admin.wrap .region-it{background-position:0 -2225px}#loco-admin.wrap .region-pa{background-position:0 -2237px}#loco-admin.wrap .region-sz{background-position:0 -2249px}#loco-admin.wrap .region-sm{background-position:0 -2261px}#loco-admin.wrap .region-tn{background-position:0 -2273px}#loco-admin.wrap .region-ml{background-position:0 -2285px}#loco-admin.wrap .region-cg{background-position:0 -2297px}#loco-admin.wrap .region-ax{background-position:0 -2309px}#loco-admin.wrap .region-ao{background-position:0 -2321px}#loco-admin.wrap .region-bt{background-position:0 -2333px}#loco-admin.wrap .region-an{background-position:0 -2345px}#loco-admin.wrap .region-bb{background-position:0 -2357px}#loco-admin.wrap .region-cf{background-position:0 -2369px}#loco-admin.wrap .region-mm{background-position:0 -2381px}#loco-admin.wrap .region-li{background-position:0 -2393px}#loco-admin.wrap .region-na{background-position:0 -2405px}#loco-admin.wrap .region-mz{background-position:0 -2417px}#loco-admin.wrap .region-to{background-position:0 -2429px}#loco-admin.wrap .region-vg{background-position:0 -2441px}#loco-admin.wrap .region-ve{background-position:0 -2453px}#loco-admin.wrap .region-tz{background-position:0 -2465px}#loco-admin.wrap .region-tm{background-position:0 -2477px}#loco-admin.wrap .region-mx{background-position:0 -2489px}#loco-admin.wrap .region-nc{background-position:0 -2501px}#loco-admin.wrap .region-mo{background-position:0 -2513px}#loco-admin.wrap .region-lk{background-position:0 -2525px}#loco-admin.wrap .region-cd{background-position:0 -2537px}#loco-admin.wrap .region-al{background-position:0 -2549px}#loco-admin.wrap .region-bw{background-position:0 -2561px}#loco-admin.wrap .region-cs{background-position:0 -2573px}#loco-admin.wrap .region-cr{background-position:0 -2585px}#loco-admin.wrap .region-bv{background-position:0 -2597px}#loco-admin.wrap .region-am{background-position:0 -2609px}#loco-admin.wrap .region-az{background-position:0 -2621px}#loco-admin.wrap .region-ba{background-position:0 -2633px}#loco-admin.wrap .region-mn{background-position:0 -2645px}#loco-admin.wrap .region-nu{background-position:0 -2657px}#loco-admin.wrap .region-my{background-position:0 -2669px}#loco-admin.wrap .region-tl{background-position:0 -2681px}#loco-admin.wrap .region-ws{background-position:0 -2693px}#loco-admin.wrap .region-th{background-position:0 -2705px}#loco-admin.wrap .region-nf{background-position:0 -2717px}#loco-admin.wrap .region-ly{background-position:0 -2729px}#loco-admin.wrap .region-ai{background-position:0 -2741px}#loco-admin.wrap .region-br{background-position:0 -2753px}#loco-admin.wrap .region-cv{background-position:0 -2765px}#loco-admin.wrap .region-be{background-position:0 -2777px}#loco-admin.wrap .region-ca{background-position:0 -2789px}#loco-admin.wrap .region-bd{background-position:0 -2801px}#loco-admin.wrap .region-cw{background-position:0 -2813px}#loco-admin.wrap .region-bs{background-position:0 -2830px}#loco-admin.wrap .region-ng{background-position:0 -2842px}#loco-admin.wrap .region-mk{background-position:0 -2854px}#loco-admin.wrap .region-np{background-position:0 -2866px}#loco-admin.wrap .region-va{background-position:0 -2878px}#loco-admin.wrap .region-uz{background-position:0 -2890px}#loco-admin.wrap .region-um{background-position:0 -2902px}#loco-admin.wrap .region-tk{background-position:0 -2914px}#loco-admin.wrap .region-vc{background-position:0 -2926px}#loco-admin.wrap .region-zw{background-position:0 -2938px}#loco-admin.wrap .region-nr{background-position:0 -2950px}#loco-admin.wrap .region-ne{background-position:0 -2962px}#loco-admin.wrap .region-cu{background-position:0 -2974px}#loco-admin.wrap .region-bq{background-position:0 -2986px}#loco-admin.wrap .region-bf{background-position:0 -2998px}#loco-admin.wrap .region-bg{background-position:0 -3010px}#loco-admin.wrap .region-cc{background-position:0 -3022px}#loco-admin.wrap .region-mh{background-position:0 -3034px}#loco-admin.wrap .region-za{background-position:0 -3046px}#loco-admin.wrap .region-uy{background-position:0 -3058px}#loco-admin.wrap .region-wf{background-position:0 -3070px}#loco-admin.wrap .region-vu{background-position:0 -3082px}#loco-admin.wrap .region-tj{background-position:0 -3094px}#loco-admin.wrap .variant-scotland,#loco-admin.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco-admin.wrap .variant-valencia,#loco-admin.wrap .region-es.variant-valencia{background-position:0 -3118px}#loco-admin.wrap .variant-wales,#loco-admin.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco-admin.wrap .x-eu{background-position:0 -3142px}#loco-admin.wrap span.lang code{display:none}#loco-admin.wrap .icon-share:before{content:"↑"}#loco-admin.wrap .icon-notag:before{content:""}#loco-admin.wrap .icon-magnify:before{content:"🔍"}#loco-admin.wrap .icon-python:before{content:"🐍"}#loco-admin.wrap .icon-unicode:before{content:"u"}#loco-admin.wrap .icon-json:before{content:"{"}#loco-admin.wrap .icon-bullist:before{content:""}#loco-admin.wrap .icon-numlist:before{content:""}#loco-admin.wrap .icon-indent:before{content:""}#loco-admin.wrap .icon-outdent:before{content:""}#loco-admin.wrap .icon-link:before{content:""}#loco-admin.wrap .icon-unlink:before{content:""}#loco-admin.wrap .icon-bold:before{content:"B"}#loco-admin.wrap .icon-italic:before{content:"I"}#loco-admin.wrap .icon-translate:before{content:""}#loco-admin.wrap .icon-proj:before{content:""}#loco-admin.wrap .icon-plural:before{content:"᛬"}#loco-admin.wrap .icon-max:before,#loco-admin.wrap .icon-full-screen:before{content:""}#loco-admin.wrap .icon-min:before{content:""}#loco-admin.wrap .icon-sort:before{content:""}#loco-admin.wrap .icon-ok:before,#loco-admin.wrap .notice-success>.has-icon:before,#loco-admin.wrap .notice-success p>strong.has-icon:before{content:"✓"}#loco-admin.wrap .icon-ok-empty:before{content:"🗌"}#loco-admin.wrap .icon-checkbox-checked:before,#loco-admin.wrap .selector.multi li.checked .icon-checkbox:before{content:"☑"}#loco-admin.wrap .icon-checkbox-unchecked:before{content:"☐"}#loco-admin.wrap .icon-checkbox-partial:before{content:"☉"}#loco-admin.wrap .icon-radio-checked:before{content:"⚫"}#loco-admin.wrap .icon-radio-unchecked:before{content:"⚪"}#loco-admin.wrap .icon-ext:before{content:"⬈"}#loco-admin.wrap .icon-star:before{content:""}#loco-admin.wrap .icon-user:before{content:""}#loco-admin.wrap .icon-remove:before,#loco-admin.wrap a.icon.close:before{content:"×"}#loco-admin.wrap .icon-cog:before{content:""}#loco-admin.wrap .icon-trash:before{content:""}#loco-admin.wrap .icon-time:before,#loco-admin.wrap .icon-history:before{content:""}#loco-admin.wrap .icon-download:before{content:""}#loco-admin.wrap .icon-revert:before{content:""}#loco-admin.wrap .icon-sync:before{content:""}#loco-admin.wrap .icon-lock:before,#loco-admin.wrap .notice-locked>.has-icon:before,#loco-admin.wrap .notice-locked p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-flag:before{content:""}#loco-admin.wrap .icon-tag:before{content:""}#loco-admin.wrap .icon-tags:before{content:""}#loco-admin.wrap .icon-print:before{content:""}#loco-admin.wrap .icon-camera:before{content:""}#loco-admin.wrap .icon-pencil:before{content:""}#loco-admin.wrap .icon-add:before{content:""}#loco-admin.wrap .icon-del:before{content:""}#loco-admin.wrap .icon-clear:before,#loco-admin.wrap a.icon.clear:before{content:""}#loco-admin.wrap .icon-ok-sign:before{content:"✔"}#loco-admin.wrap .icon-help:before{content:"?"}#loco-admin.wrap .icon-info:before,#loco-admin.wrap .notice-info>.has-icon:before,#loco-admin.wrap .notice-info p>strong.has-icon:before{content:"ℹ"}#loco-admin.wrap .icon-cancel:before{content:""}#loco-admin.wrap .icon-warn:before,#loco-admin.wrap .notice-error>.has-icon:before,#loco-admin.wrap .notice-error p>strong.has-icon:before,#loco-admin.wrap .notice-warning>.has-icon:before,#loco-admin.wrap .notice-warning p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-comment:before{content:""}#loco-admin.wrap .icon-bar-chart:before{content:""}#loco-admin.wrap .icon-key:before{content:""}#loco-admin.wrap .icon-cogs:before{content:""}#loco-admin.wrap .icon-comments:before{content:""}#loco-admin.wrap .icon-signout:before{content:""}#loco-admin.wrap .icon-signin:before{content:""}#loco-admin.wrap .icon-upload:before{content:""}#loco-admin.wrap .icon-twitter:before{content:"🐦"}#loco-admin.wrap .icon-facebook:before{content:""}#loco-admin.wrap .icon-github:before{content:""}#loco-admin.wrap .icon-feed:before{content:""}#loco-admin.wrap .icon-globe:before{content:""}#loco-admin.wrap .icon-wrench:before,#loco-admin.wrap .notice-debug>.has-icon:before,#loco-admin.wrap .notice-debug p>strong.has-icon:before{content:""}#loco-admin.wrap .icon-group:before{content:""}#loco-admin.wrap .icon-cloud:before{content:""}#loco-admin.wrap .icon-copy:before{content:""}#loco-admin.wrap .icon-save:before{content:""}#loco-admin.wrap .icon-menu:before{content:""}#loco-admin.wrap .icon-table:before{content:""}#loco-admin.wrap .icon-caret-down:before{content:"▼"}#loco-admin.wrap .icon-caret-up:before{content:"▲"}#loco-admin.wrap .icon-caret-right:before{content:"▶"}#loco-admin.wrap .icon-mail:before{content:""}#loco-admin.wrap .icon-cloud-upload:before{content:""}#loco-admin.wrap .icon-file:before{content:""}#loco-admin.wrap .icon-circle-white:before{content:"⚬"}#loco-admin.wrap .icon-circle-black:before{content:"●"}#loco-admin.wrap .icon-eraser:before{content:""}#loco-admin.wrap .icon-unlock:before{content:""}#loco-admin.wrap .icon-apple:before{content:""}#loco-admin.wrap .icon-android:before{content:""}#loco-admin.wrap .icon-robot:before{content:"🤖"}#loco-admin.wrap .icon-back:before{content:"⬅"}#loco-admin.wrap .icon-next:before{content:"➔"}#loco-admin.wrap .icon-arrow-up:before{content:""}#loco-admin.wrap .icon-calendar:before{content:""}#loco-admin.wrap .icon-ccard:before{content:""}#loco-admin.wrap .icon-caret-left:before{content:"◀"}#loco-admin.wrap .icon-pro:before{content:"⚡"}#loco-admin.wrap .icon-bell:before{content:""}#loco-admin.wrap .icon-code:before{content:""}#loco-admin.wrap .icon-privacy:before{content:"🛡"}#loco-admin.wrap .icon-hellip:before{content:"…"}#loco-admin.wrap .icon-vellip:before{content:"⁞"}#loco-admin.wrap .icon-collapse:before{content:""}#loco-admin.wrap .icon-expand:before{content:""}#loco-admin.wrap .icon-wordpress:before{content:""}#loco-admin.wrap .icon-database:before{content:""}#loco-admin.wrap .icon-restore:before{content:""}#loco-admin.wrap .icon-pilcrow:before{content:"¶"}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before{speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-admin.wrap .icon,#loco-admin.wrap .has-icon:before{font-family:"loco"}#loco-admin.wrap .has-dashicon:before{font-family:"dashicons";font-size:1.4em}#loco-admin.wrap .has-icon:before,#loco-admin.wrap .has-dashicon:before,#loco-admin.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco-admin.wrap .only-icon{text-align:center}#loco-admin.wrap .only-icon:before{text-align:center;padding:0}#loco-admin.wrap .only-icon span{display:none}#loco-admin.wrap a,#loco-admin.wrap .wp-core-ui .button-link{text-decoration:none}#loco-admin.wrap h3:hover>a.loco-anchor{color:#ccc}#loco-admin.wrap h3:hover>a.loco-anchor:before{content:"¶"}#loco-admin.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco-admin.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco-admin.wrap h1 ul,#loco-admin.wrap h1 li{margin:0;padding:0}#loco-admin.wrap h1 li{display:inline-block}#loco-admin.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco-admin.wrap h1 li:last-child:after{content:""}#loco-admin.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco-admin.wrap h2 span{color:#999;font-weight:normal}#loco-admin.wrap h2 .loco-meta,#loco-admin.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco-admin.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco-admin.wrap .wp-list-table td{white-space:nowrap}#loco-admin.wrap .wp-list-table td>a,#loco-admin.wrap .wp-list-table td>time{display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis}#loco-admin.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco-admin.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco-admin.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"▼"}#loco-admin.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"▲"}#loco-admin.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco-admin.wrap form.loco-filter{display:block;margin-bottom:5px}#loco-admin.wrap form.loco-filter .icon-filter{color:#999}#loco-admin.wrap nav.above-list-table{margin-bottom:1em}#loco-admin.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco-admin.wrap .wp-core-ui button.inverted,#loco-admin.wrap .wp-core-ui button.inverted:hover,#loco-admin.wrap .po-fuzzy button.icon-cloud{background:-moz-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:-webkit-linear-gradient(top, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);background:linear-gradient(to bottom, #cccccc 0%, #e0e0e0 30%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:gray}#loco-admin.wrap .wp-core-ui button:active,#loco-admin.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco-admin.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco-admin.wrap .loco-clearable a.clear,#loco-admin.wrap .auto-comp-wrap a.clear{top:0;right:0;outline:none;margin:0;border:solid 1px transparent;padding:5px 5px;position:absolute;font-size:1em;line-height:inherit}#loco-admin.wrap .loco-clearable a.clear:before,#loco-admin.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco-admin.wrap .loco-clearable a.clear:hover:before,#loco-admin.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco-admin.wrap .loco-clearable a.clear span,#loco-admin.wrap .auto-comp-wrap a.clear span{display:none}#loco-admin.wrap .loco-clearable ::-ms-clear,#loco-admin.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco-admin.wrap div.progress{color:#000;background:transparent !important}#loco-admin.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco-admin.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco-admin.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco-admin.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco-admin.wrap div.progress .l{display:block}#loco-admin.wrap td div.progress .t{border:none}#loco-admin.wrap td div.progress .l{display:none}#loco-admin.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco-admin.wrap .loco-danger{color:#d54e21}#loco-admin.wrap .notice,#loco-admin.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco-admin.wrap .notice-generic{border-color:#ddd}#loco-admin.wrap .notice-success>.has-icon,#loco-admin.wrap .notice-success p>strong.has-icon{color:#000}#loco-admin.wrap .notice-warning{border-color:orange}#loco-admin.wrap .notice-error{border-color:#dc3232}#loco-admin.wrap .notice-debug{border-color:#00a0d2}#loco-admin.wrap .notice-danger{border-color:#dc3232}#loco-admin.wrap .notice-locked{border-color:orange}#loco-admin.wrap .notice>.has-icon:before,#loco-admin.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco-admin.wrap .notice>p>a.button.has-icon:before{width:1.2em}#loco-admin.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco-admin.wrap .notice>p>em a{color:inherit}#loco-admin.wrap .notice>p a:hover,#loco-admin.wrap .notice>nav a:hover{text-decoration:underline}#loco-admin.wrap .notice>p a.button,#loco-admin.wrap .notice>nav a.button{text-decoration:inherit}#loco-admin.wrap .notice.has-nav{display:flex;flex-direction:row}#loco-admin.wrap .notice.has-nav p,#loco-admin.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco-admin.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco-admin.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco-admin.wrap .notice.has-nav a{white-space:nowrap}#loco-admin.wrap .notice.has-nav nav>span{color:#666}#loco-admin.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco-admin.wrap ul.problems li{font-style:italic}#loco-admin.wrap label{position:relative}#loco-admin.wrap label.for-disabled,#loco-admin.wrap label.for-disabled>input{cursor:default !important}#loco-admin.wrap input.regular-text,#loco-admin.wrap textarea.regular-text{width:25em}#loco-admin.wrap .button-link{padding:0 10px 1px}#loco-admin.wrap .button-danger{background:#ba0000;border-color:#900 #600 #600;-webkit-box-shadow:0 1px 0 #600;-moz-box-shadow:0 1px 0 #600;box-shadow:0 1px 0 #600;color:#fff;text-shadow:0 -1px 1px #600,1px 0 1px #600,0 1px 1px #600,-1px 0 1px #600}#loco-admin.wrap .button-success{background:#00b500;border-color:#090 #2e892e #2e892e;-webkit-box-shadow:0 1px 0 #2e892e;-moz-box-shadow:0 1px 0 #2e892e;box-shadow:0 1px 0 #2e892e;color:#fff;text-shadow:0 -1px 1px #2e892e,1px 0 1px #2e892e,0 1px 1px #2e892e,-1px 0 1px #2e892e}#loco-admin.wrap .button-success:hover{background:#3db63d}#loco-admin.wrap .button-danger[disabled],#loco-admin.wrap .button-success[disabled]{text-shadow:none !important}#loco-admin.wrap form button.loco-loading.button-large{padding-left:0}#loco-admin.wrap form button.loco-loading.button-large:before{width:16px;height:16px;margin:0 4px;content:" ";font-size:16px;line-height:1;display:inline-block;vertical-align:sub}#loco-admin.wrap ::placeholder{color:#ccc}#loco-admin.wrap ::-webkit-input-placeholder{color:#ccc}#loco-admin.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco-admin.wrap :-ms-input-placeholder{color:#ccc}#loco-admin.wrap .ielt10 .placeheld{color:#ccc}#loco-admin.wrap a.has-raquo:after{content:" »"}#loco-admin.wrap a.has-laquo:before{content:"« "}#loco-admin.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif?v=2.6.3) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco-admin.wrap .jshide,.no-js #loco-admin.wrap .jsonly{display:none !important}#loco-admin.wrap .invis{visibility:hidden}.form-table tr td{vertical-align:top}.form-table tr.compact td{padding-top:0}.form-table tr th a.icon-help{display:none}.loco-modal{min-width:50%;min-height:100px}.loco-modal-wide{min-width:90% !important}.loco-modal-no-close .ui-dialog-titlebar-close{display:none}.loco-modal .ui-dialog-titlebar-close{overflow:hidden}.loco-modal.request-filesystem-credentials-dialog{top:15% !important;max-height:85% !important}.loco-modal.request-filesystem-credentials-dialog>.ui-dialog-content{background:inherit}.loco-modal.request-filesystem-credentials-dialog .ftp-password>label>em:last-child{display:none}.ui-dialog-content>div.loco-loading{height:100%;background:transparent url(../img/spin-modal.gif?v=2.6.3) center 20px no-repeat}#loco-po-ref ol li{color:#aaa;margin:0;white-space:pre;padding:0 0 0 1em;font:normal 12px/17px Consolas,Monaco,monospace;background:transparent;border-left:1px solid #eee}#loco-po-ref ol li code{margin:0;padding:0;display:inline;background:inherit}#loco-po-ref ol li.highlighted{color:#666;background-color:#f8eec7}#loco-po-ref ol li.highlighted code.T_CONSTANT_ENCAPSED_STRING{color:#c931c7}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif?v=2.6.3) 0 0 no-repeat;height:30px;width:100px;text-indent:200px;-webkit-transition-duration:0s;transition-duration:0s}#loco-credit>a:hover{background-position:0 -35px}#loco-content{position:relative}#footer-upgrade span:before{color:#ccc;content:" | ";display:inline;padding-left:.5em;padding-right:.5em}#footer-upgrade span:first-child:before{content:"";display:none}.loco-clearfix:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}dl.debug dt{font-weight:bold}dl.debug dt,dl.debug dd{white-space:pre}.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(0,115,170,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#0073aa}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#66c6e4 !important;background:#008ec2 !important;border-color:#008ec2 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/editor.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.6.2);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.2) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.2);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.2);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.2);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor div.ta-mirror{position:absolute;top:0;border:solid 1px transparent;color:transparent;padding:.4em .6em;pointer-events:none}#loco-editor div.ta-mirror span{position:relative}#loco-editor div.ta-mirror span:after{color:#ccc;white-space:pre;display:inline-block;position:absolute;top:0;line-height:normal}#loco-editor div.ta-mirror .crlf:after{content:"¬"}#loco-editor div.ta-mirror .eof:after{content:"¶"}#loco-editor div.ta-mirror .x20:after{content:"·";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"⟶"}#loco-editor div.ta-mirror,#loco-editor .has-mirror textarea{white-space:pre-wrap;word-wrap:break-word;word-spacing:0px}#loco-editor .has-mirror ::placeholder{color:transparent}#loco-editor .has-mirror ::-webkit-input-placeholder{color:transparent}#loco-editor .has-mirror :-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror ::-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror :-ms-input-placeholder{color:transparent}#loco-editor .has-mirror .ielt10 .placeheld{color:transparent}#loco-editor div.ta-mirror{left:0;text-align:left}#loco-editor div.ta-mirror span:after{left:0}#loco-editor div.ta-mirror .eol:after{padding-left:.2em}#loco-editor [dir=RTL] div.ta-mirror{left:auto;right:0;text-align:right}#loco-editor [dir=RTL] div.ta-mirror span:after{right:0}#loco-editor [dir=RTL] div.ta-mirror .eol:after{padding-left:0;padding-right:.2em}#loco-editor .has-proxy>textarea{display:none !important}#loco-editor .has-proxy .ace_editor{height:100%;font-size:13px !important;line-height:1.4 !important}#loco-editor .has-proxy .ace_editor .ace_marker-layer .ace_bracket{display:none}#loco-editor .has-proxy .ace_print-margin{display:none}#loco-editor .ace_printf{color:#b90690;background-color:#edf1be}#loco-editor .ace_locked{color:gray}#loco-editor .ace_icu-quoted{color:gray}#loco-editor .ace_icu{color:#697eb9}#loco-editor .ace_icu.ace_name{color:#b90600}#loco-editor .resizer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0 6px 0;background:#f0f0f0 url(../img/wg/splity.png?v=2.6.2) 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.6.2);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.2) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.2);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.2);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.2);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor .wg-cell,#loco-editor .wg-cell>div{clear:both;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;outline:none}#loco-editor .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}#loco-editor .wg-split{background:#eee}#loco-editor .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}#loco-editor .wg-split-x>div>.not-first>*{margin-left:6px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:6px}#loco-editor .wg-split>div>.has-title .wg-content{margin-top:0}#loco-editor .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}#loco-editor .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}#loco-editor .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}#loco-editor .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png?v=2.6.2) 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.6.2) center center no-repeat}#loco-editor .wg-split>div.locked{cursor:default}#loco-editor .wg-split-x>div.locked>.not-first>*{margin-left:0px}#loco-editor .wg-split-y>div.locked>.not-first>*{margin-top:0px}#loco-editor .wg-split>div.locked>.not-first:before{display:none}#loco-editor .has-title>header{background:#e2e2e2;cursor:default !important;margin:0;white-space:nowrap}#loco-editor .wg-content{background:#fff;cursor:default;padding:4px 6px;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-editor .wg-toolbar{top:0;right:0;margin-top:6px;position:absolute}#loco-editor .wg-toolbar>span{color:#fff;background:#000;display:block;padding:0 6px;cursor:default !important}#loco-editor .wg-toolbar>span:active{color:#000;background-color:#fff}#loco-editor .wg-content,#loco-editor .wg-tbody>div{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-table{background-color:#fff}#loco-editor .is-table .wg-thead .has-title>header{font-weight:normal;background:transparent;padding:4px 0;margin:0 0 0 10px}#loco-editor .is-table .wg-thead>div>.not-first:before{background-position:center center}#loco-editor .is-table .wg-thead{background:#e2e2e2;border-bottom:solid 1px #ccc}#loco-editor .is-table .wg-tbody{background-image:url(data:image/gif;base64,R0lGODlhAQAsAIABAPz8/P///yH5BAEAAAEALAAAAAABACwAAAIIjI+pAe0PIygAOw==);position:relative}#loco-editor .is-table .wg-cols>div{float:left;clear:none}#loco-editor .is-table .wg-cols>div>div{white-space:nowrap;line-height:1.7em;padding-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;background-color:#fff}#loco-editor .is-table .wg-cols>div>div:nth-child(even){background-color:#f7f7f7}#loco-editor .is-table .wg-cols>div>div.selected{background-color:#3db63d;color:#fff}#loco-editor .is-table .wg-cols>div>div.selected::selection{background-color:#fff;color:#000}#loco-editor .is-table .wg-cols>div:first-child>div{padding-left:4px}#loco-editor .is-table .wg-dead{clear:both}#loco-editor .is-table .wg-thead .wg-sortable>header{cursor:pointer !important}#loco-editor .is-table .wg-thead .wg-sortable>header:after{padding:0 0 0 5px;color:#999}#loco-editor .is-table .wg-thead .wg-sortable.wg-asc>header:after{content:"▲"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"▼"}#loco-editor .is-table .wg-thead .wg-sortable:hover>header:after{color:#000}#loco-editor .is-field>.wg-content{cursor:text;padding:0;line-height:normal;overflow:hidden;overflow-y:hidden}#loco-editor .is-field>.wg-content>div,#loco-editor .is-field>.wg-content>textarea{font-size:14px;line-height:1.4;border:1px solid #ddd;width:100%;height:100%;padding:8px 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-editor .is-field>.wg-content textarea{resize:none;overflow:auto;display:block}#loco-editor .is-field>.wg-content>.ace_editor{padding:0;border-width:0}#loco-editor .is-field>.wg-content>div[contenteditable]{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-readonly>.wg-content{cursor:default}#loco-editor .is-readonly>.wg-content>div,#loco-editor .is-readonly>.wg-content>textarea,#loco-editor .is-readonly>.wg-content>textarea[readonly]{background:#f8f8f8;text-shadow:0 1px #fff;color:inherit}#loco-editor .is-readonly>.wg-content .ace_scroller{cursor:default;background:#f8f8f8}#loco-editor .is-readonly>.wg-content .ace_cursor-layer{display:none}#loco-editor .is-readonly>.wg-content>textarea[readonly]{cursor:default}#loco-editor .is-editable>.wg-content[dir=RTL] .ace_editor .ace_line{direction:ltr;unicode-bidi:bidi-override}#loco-editor .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center;cursor:default}#loco-editor .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:.5em 1em;margin-top:.2em;color:#000;text-decoration:none;-webkit-border-radius:.2em .2em 0 0;-moz-border-radius:.2em .2em 0 0;-ms-border-radius:.2em .2em 0 0;-o-border-radius:.2em .2em 0 0;border-radius:.2em .2em 0 0;background-color:#f3f7fd}#loco-editor .wg-split-x>nav.wg-tabs>a:hover{background-color:#fff}#loco-editor .wg-split-x>nav.wg-tabs>a.active{background-color:#3db63d;color:#fff}#loco-editor .wg-split>div>.has-nav>.wg-body{margin-top:0px}#loco-editor .wg-dead{visibility:hidden}@media all and (max-width: 768px){#loco-editor .wg-split-x>div>.not-first>*{margin-left:20px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:20px}#loco-editor .wg-split-x>div>.not-first:before{width:20px}#loco-editor .wg-split-y>div>.not-first:before{height:20px}#loco-editor .is-table .wg-thead header{padding-left:20px}}#loco-editor .is-table .po-fuzzy{color:#b59829;font-weight:bold}#loco-editor .is-table .po-empty{color:#1f507a;font-weight:bold}#loco-editor .is-table .po-flagged{color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div:before{font-family:loco;vertical-align:inherit;display:inline-block;content:" ";width:1.3em;line-height:1}#loco-editor .is-table .wg-cols>div:first-child>div.po-fuzzy:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flagged:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-comment:before{content:"";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.po-error:before{content:"";color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .wg-cell>.meta{color:#333;margin:0 !important;padding:6px 10px;font-weight:normal;font-size:13px;line-height:1.4em;cursor:default !important}#loco-editor .wg-cell>.meta>*{display:inline-block;margin-top:3px;margin-bottom:3px}#loco-editor .wg-cell>.meta>span{border:1px solid transparent;border-left:none}#loco-editor .wg-cell>.meta>mark{color:#fff;border-radius:2px;background-color:silver;border:1px solid silver;padding:0 .3em}#loco-editor .wg-cell>.meta>mark.tag{color:#999;background-color:#eee}#loco-editor .wg-cell>.meta>p{display:block;white-space:pre-line}#loco-editor .wg-cell>.meta .icon-warn{color:#c00}#loco-editor .wg-cell>.meta .has-icon:before{padding-right:0;width:17px}#loco-editor .wg-cell>.meta code{font-size:12px}#loco-editor .is-table .wg-cols>div>div>mark{display:inline-block;vertical-align:text-bottom;font:inherit;font-weight:normal;color:#fff;border-radius:2px;font-size:90%;line-height:1;padding:.2em .3em;background-color:rgba(0,0,0,.25)}#loco-editor .is-table .wg-cols>div>div.selected.po-flagged{background-color:#bd2c00}#loco-editor .is-table .wg-cols>div>div.selected.po-fuzzy{background-color:#b59829}#loco-editor .is-table .wg-cols>div>div.selected.po-empty{background-color:#999}#loco-editor #po-target header nav{display:block;position:absolute;right:0px;top:0px;padding:2px}#loco-editor #po-target header nav button{margin-left:5px}#loco-editor #po-target header nav.po-empty .icon-cloud{display:none !important}#loco-editor #po-list .wg-content{padding:0}#loco-editor #po-source>.wg-body>.has-title>header{background:transparent;font-weight:normal;float:left;clear:none;min-width:3.4em}#loco-editor #po-source>.wg-body>.has-title>.wg-content{clear:none}#loco-editor .has-title>header{line-height:normal;padding:6px}#loco-editor .has-title>header .lang{margin-right:6px;margin-bottom:1px}#loco-editor .trg-rtl #po-list-tbody .wg-cols>div[for=po-list-col-target]>div,#loco-editor .src-rtl #po-list-tbody .wg-cols>div[for=po-list-col-source]>div{direction:rtl;padding-left:0;padding-right:10px;text-align:right}#loco-editor #po-source>.wg-body>.has-title>h2{min-width:4.5em}#loco-editor .is-table .wg-td{font-size:13px}#loco-editor header,#loco-editor nav{display:block;position:relative}#loco-editor-inner{min-height:600px;font-size:14px;clear:both}#loco-editor-inner>div.loco-loading{height:100px;background:transparent url(../img/spin-editor-button.gif?v=2.6.2) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco-editor-inner .wg-cell>.meta code{padding:0;color:#0073aa;background:inherit;cursor:pointer}#loco-editor-inner .wg-cell>.meta code:hover{text-decoration:underline}#loco-admin.wrap #loco-editor>nav{font-size:14px;height:50px}#loco-admin.wrap #loco-editor>nav form{display:block;float:left;clear:none;padding:0;margin:0}#loco-admin.wrap #loco-editor>nav form.aux{float:right;margin-right:5px}#loco-admin.wrap #loco-editor>nav fieldset{display:block;position:relative;float:left;clear:none}#loco-admin.wrap #loco-editor>nav button,#loco-admin.wrap #loco-editor>nav input[type=text]{display:block;position:relative;float:left;clear:none;margin:5px 0 0 5px;height:36px;text-align:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-admin.wrap #loco-editor>nav input[type=text]{padding:0 10px;font-size:14px;line-height:normal}#loco-admin.wrap #loco-editor>nav .invalid input[type=text]:focus{border-color:#c00;-webkit-box-shadow:0 0 2px rgba(153,0,0,.5);-moz-box-shadow:0 0 2px rgba(153,0,0,.5);box-shadow:0 0 2px rgba(153,0,0,.5)}#loco-admin.wrap #loco-editor>nav .loco-clearable{padding:0 20px}#loco-admin.wrap #loco-editor>nav .loco-clearable.invalid a.clear:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear{right:25px;line-height:2}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:hover:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:active:before{color:#000}#loco-admin.wrap #loco-editor>nav button.only-icon{width:40px}#loco-admin.wrap button.has-icon:before{width:16px;padding:0}#loco-admin.wrap button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif?v=2.6.2) 0 0 no-repeat}#loco-admin.wrap .button,#loco-admin.wrap .button-link,#loco-admin.wrap input[type=text]{border-color:#aaa;color:#444}#loco-admin.wrap .button:hover,#loco-admin.wrap .button-link:hover{color:#000}#loco-admin.wrap .button-primary,#loco-admin.wrap .button-primary:hover{color:#fff}#loco-admin.wrap button.icon-translate:before{font-size:16px}.loco-modal .loco-api{position:relative;padding:10px;background:#f7f7f7;border:solid 1px #eee;font-size:14px;margin-bottom:16px}.loco-modal .loco-api p{padding:0;margin:0;font-size:inherit}.loco-modal .loco-api blockquote{font-weight:bold;margin:0;padding:10px 0}.loco-modal .loco-api a.loco-api-credit{padding:0;display:block;position:absolute;right:10px;bottom:10px;text-decoration:none;white-space:nowrap;overflow:hidden;font-size:12px}.loco-modal .loco-api a.loco-api-credit:hover{text-decoration:underline}.loco-modal .loco-api-loading{text-indent:20px;background:transparent url(../img/spin-modal.gif?v=2.6.2) 10px center no-repeat}.loco-modal .loco-alert p{margin-bottom:2em;font-size:14px}.loco-modal .loco-alert nav{display:block;position:relative;margin:1em 0}.loco-modal .loco-alert nav a{display:inline-block;margin-right:1em;padding:10px}#loco-auto{display:none;min-width:50%;min-height:300px;position:relative}#loco-auto form blockquote{margin:0;padding:1em 0;font-size:14px}.loco-api a.loco-api-credit{color:inherit}.loco-api-google a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/google.png?v=2.6.2) 0 0 no-repeat}.loco-api-microsoft a.loco-api-credit{text-indent:200px;width:152px;height:16px;background:transparent url(../img/api/microsoft.png?v=2.6.2) 0 0 no-repeat}.loco-api-deepl a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/deepl.png?v=2.6.2) 0 0 no-repeat}
|
1 |
+
#loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.6.3);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.3) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.3);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.3);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.3);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor div.ta-mirror{position:absolute;top:0;border:solid 1px transparent;color:transparent;padding:.4em .6em;pointer-events:none}#loco-editor div.ta-mirror span{position:relative}#loco-editor div.ta-mirror span:after{color:#ccc;white-space:pre;display:inline-block;position:absolute;top:0;line-height:normal}#loco-editor div.ta-mirror .crlf:after{content:"¬"}#loco-editor div.ta-mirror .eof:after{content:"¶"}#loco-editor div.ta-mirror .x20:after{content:"·";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"⟶"}#loco-editor div.ta-mirror,#loco-editor .has-mirror textarea{white-space:pre-wrap;word-wrap:break-word;word-spacing:0px}#loco-editor .has-mirror ::placeholder{color:transparent}#loco-editor .has-mirror ::-webkit-input-placeholder{color:transparent}#loco-editor .has-mirror :-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror ::-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror :-ms-input-placeholder{color:transparent}#loco-editor .has-mirror .ielt10 .placeheld{color:transparent}#loco-editor div.ta-mirror{left:0;text-align:left}#loco-editor div.ta-mirror span:after{left:0}#loco-editor div.ta-mirror .eol:after{padding-left:.2em}#loco-editor [dir=RTL] div.ta-mirror{left:auto;right:0;text-align:right}#loco-editor [dir=RTL] div.ta-mirror span:after{right:0}#loco-editor [dir=RTL] div.ta-mirror .eol:after{padding-left:0;padding-right:.2em}#loco-editor .has-proxy>textarea{display:none !important}#loco-editor .has-proxy .ace_editor{height:100%;font-size:13px !important;line-height:1.4 !important}#loco-editor .has-proxy .ace_editor .ace_marker-layer .ace_bracket{display:none}#loco-editor .has-proxy .ace_print-margin{display:none}#loco-editor .ace_printf{color:#b90690;background-color:#edf1be}#loco-editor .ace_locked{color:gray}#loco-editor .ace_icu-quoted{color:gray}#loco-editor .ace_icu{color:#697eb9}#loco-editor .ace_icu.ace_name{color:#b90600}#loco-editor .resizer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0 6px 0;background:#f0f0f0 url(../img/wg/splity.png?v=2.6.3) 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.6.3);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.6.3) 0 0 no-repeat;min-height:75px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc.gif?v=2.6.3);background-repeat:no-repeat;min-height:16px}@media only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.6.3);background-size:16px}#loco-editor ._ajax_loader_cc{background-image:url(../img/ajax-loader-cc-x2.gif?v=2.6.3);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 .5em 0 #3db63d;-moz-box-shadow:0 0 .5em 0 #3db63d;box-shadow:0 0 .5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:"loco";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor .wg-cell,#loco-editor .wg-cell>div{clear:both;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;outline:none}#loco-editor .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}#loco-editor .wg-split{background:#eee}#loco-editor .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}#loco-editor .wg-split-x>div>.not-first>*{margin-left:6px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:6px}#loco-editor .wg-split>div>.has-title .wg-content{margin-top:0}#loco-editor .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}#loco-editor .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}#loco-editor .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}#loco-editor .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png?v=2.6.3) 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.6.3) center center no-repeat}#loco-editor .wg-split>div.locked{cursor:default}#loco-editor .wg-split-x>div.locked>.not-first>*{margin-left:0px}#loco-editor .wg-split-y>div.locked>.not-first>*{margin-top:0px}#loco-editor .wg-split>div.locked>.not-first:before{display:none}#loco-editor .has-title>header{background:#e2e2e2;cursor:default !important;margin:0;white-space:nowrap}#loco-editor .wg-content{background:#fff;cursor:default;padding:4px 6px;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-editor .wg-toolbar{top:0;right:0;margin-top:6px;position:absolute}#loco-editor .wg-toolbar>span{color:#fff;background:#000;display:block;padding:0 6px;cursor:default !important}#loco-editor .wg-toolbar>span:active{color:#000;background-color:#fff}#loco-editor .wg-content,#loco-editor .wg-tbody>div{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-table{background-color:#fff}#loco-editor .is-table .wg-thead .has-title>header{font-weight:normal;background:transparent;padding:4px 0;margin:0 0 0 10px}#loco-editor .is-table .wg-thead>div>.not-first:before{background-position:center center}#loco-editor .is-table .wg-thead{background:#e2e2e2;border-bottom:solid 1px #ccc}#loco-editor .is-table .wg-tbody{background-image:url(data:image/gif;base64,R0lGODlhAQAsAIABAPz8/P///yH5BAEAAAEALAAAAAABACwAAAIIjI+pAe0PIygAOw==);position:relative}#loco-editor .is-table .wg-cols>div{float:left;clear:none}#loco-editor .is-table .wg-cols>div>div{white-space:nowrap;line-height:1.7em;padding-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;background-color:#fff}#loco-editor .is-table .wg-cols>div>div:nth-child(even){background-color:#f7f7f7}#loco-editor .is-table .wg-cols>div>div.selected{background-color:#3db63d;color:#fff}#loco-editor .is-table .wg-cols>div>div.selected::selection{background-color:#fff;color:#000}#loco-editor .is-table .wg-cols>div:first-child>div{padding-left:4px}#loco-editor .is-table .wg-dead{clear:both}#loco-editor .is-table .wg-thead .wg-sortable>header{cursor:pointer !important}#loco-editor .is-table .wg-thead .wg-sortable>header:after{padding:0 0 0 5px;color:#999}#loco-editor .is-table .wg-thead .wg-sortable.wg-asc>header:after{content:"▲"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"▼"}#loco-editor .is-table .wg-thead .wg-sortable:hover>header:after{color:#000}#loco-editor .is-field>.wg-content{cursor:text;padding:0;line-height:normal;overflow:hidden;overflow-y:hidden}#loco-editor .is-field>.wg-content>div,#loco-editor .is-field>.wg-content>textarea{font-size:14px;line-height:1.4;border:1px solid #ddd;width:100%;height:100%;padding:8px 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-editor .is-field>.wg-content textarea{resize:none;overflow:auto;display:block}#loco-editor .is-field>.wg-content>.ace_editor{padding:0;border-width:0}#loco-editor .is-field>.wg-content>div[contenteditable]{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-readonly>.wg-content{cursor:default}#loco-editor .is-readonly>.wg-content>div,#loco-editor .is-readonly>.wg-content>textarea,#loco-editor .is-readonly>.wg-content>textarea[readonly]{background:#f8f8f8;text-shadow:0 1px #fff;color:inherit}#loco-editor .is-readonly>.wg-content .ace_scroller{cursor:default;background:#f8f8f8}#loco-editor .is-readonly>.wg-content .ace_cursor-layer{display:none}#loco-editor .is-readonly>.wg-content>textarea[readonly]{cursor:default}#loco-editor .is-editable>.wg-content[dir=RTL] .ace_editor .ace_line{direction:ltr;unicode-bidi:bidi-override}#loco-editor .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center;cursor:default}#loco-editor .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:.5em 1em;margin-top:.2em;color:#000;text-decoration:none;-webkit-border-radius:.2em .2em 0 0;-moz-border-radius:.2em .2em 0 0;-ms-border-radius:.2em .2em 0 0;-o-border-radius:.2em .2em 0 0;border-radius:.2em .2em 0 0;background-color:#f3f7fd}#loco-editor .wg-split-x>nav.wg-tabs>a:hover{background-color:#fff}#loco-editor .wg-split-x>nav.wg-tabs>a.active{background-color:#3db63d;color:#fff}#loco-editor .wg-split>div>.has-nav>.wg-body{margin-top:0px}#loco-editor .wg-dead{visibility:hidden}@media all and (max-width: 768px){#loco-editor .wg-split-x>div>.not-first>*{margin-left:20px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:20px}#loco-editor .wg-split-x>div>.not-first:before{width:20px}#loco-editor .wg-split-y>div>.not-first:before{height:20px}#loco-editor .is-table .wg-thead header{padding-left:20px}}#loco-editor .is-table .po-fuzzy{color:#b59829;font-weight:bold}#loco-editor .is-table .po-empty{color:#1f507a;font-weight:bold}#loco-editor .is-table .po-flagged{color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div:before{font-family:loco;vertical-align:inherit;display:inline-block;content:" ";width:1.3em;line-height:1}#loco-editor .is-table .wg-cols>div:first-child>div.po-fuzzy:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flagged:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-comment:before{content:"";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.po-error:before{content:"";color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .wg-cell>.meta{color:#333;margin:0 !important;padding:6px 10px;font-weight:normal;font-size:13px;line-height:1.4em;cursor:default !important}#loco-editor .wg-cell>.meta>*{display:inline-block;margin-top:3px;margin-bottom:3px}#loco-editor .wg-cell>.meta>span{border:1px solid transparent;border-left:none}#loco-editor .wg-cell>.meta>mark{color:#fff;border-radius:2px;background-color:silver;border:1px solid silver;padding:0 .3em}#loco-editor .wg-cell>.meta>mark.tag{color:#999;background-color:#eee}#loco-editor .wg-cell>.meta>p{display:block;white-space:pre-line}#loco-editor .wg-cell>.meta .icon-warn{color:#c00}#loco-editor .wg-cell>.meta .has-icon:before{padding-right:0;width:17px}#loco-editor .wg-cell>.meta code{font-size:12px}#loco-editor .is-table .wg-cols>div>div>mark{display:inline-block;vertical-align:text-bottom;font:inherit;font-weight:normal;color:#fff;border-radius:2px;font-size:90%;line-height:1;padding:.2em .3em;background-color:rgba(0,0,0,.25)}#loco-editor .is-table .wg-cols>div>div.selected.po-flagged{background-color:#bd2c00}#loco-editor .is-table .wg-cols>div>div.selected.po-fuzzy{background-color:#b59829}#loco-editor .is-table .wg-cols>div>div.selected.po-empty{background-color:#999}#loco-editor #po-target header nav{display:block;position:absolute;right:0px;top:0px;padding:2px}#loco-editor #po-target header nav button{margin-left:5px}#loco-editor #po-target header nav.po-empty .icon-cloud{display:none !important}#loco-editor #po-list .wg-content{padding:0}#loco-editor #po-source>.wg-body>.has-title>header{background:transparent;font-weight:normal;float:left;clear:none;min-width:3.4em}#loco-editor #po-source>.wg-body>.has-title>.wg-content{clear:none}#loco-editor .has-title>header{line-height:normal;padding:6px}#loco-editor .has-title>header .lang{margin-right:6px;margin-bottom:1px}#loco-editor .trg-rtl #po-list-tbody .wg-cols>div[for=po-list-col-target]>div,#loco-editor .src-rtl #po-list-tbody .wg-cols>div[for=po-list-col-source]>div{direction:rtl;padding-left:0;padding-right:10px;text-align:right}#loco-editor #po-source>.wg-body>.has-title>h2{min-width:4.5em}#loco-editor .is-table .wg-td{font-size:13px}#loco-editor header,#loco-editor nav{display:block;position:relative}#loco-editor-inner{min-height:600px;font-size:14px;clear:both}#loco-editor-inner>div.loco-loading{height:100px;background:transparent url(../img/spin-editor-button.gif?v=2.6.3) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco-editor-inner .wg-cell>.meta code{padding:0;color:#0073aa;background:inherit;cursor:pointer}#loco-editor-inner .wg-cell>.meta code:hover{text-decoration:underline}#loco-admin.wrap #loco-editor>nav{font-size:14px;height:50px}#loco-admin.wrap #loco-editor>nav form{display:block;float:left;clear:none;padding:0;margin:0}#loco-admin.wrap #loco-editor>nav form.aux{float:right;margin-right:5px}#loco-admin.wrap #loco-editor>nav fieldset{display:block;position:relative;float:left;clear:none}#loco-admin.wrap #loco-editor>nav button,#loco-admin.wrap #loco-editor>nav input[type=text]{display:block;position:relative;float:left;clear:none;margin:5px 0 0 5px;height:36px;text-align:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-admin.wrap #loco-editor>nav input[type=text]{padding:0 10px;font-size:14px;line-height:normal}#loco-admin.wrap #loco-editor>nav .invalid input[type=text]:focus{border-color:#c00;-webkit-box-shadow:0 0 2px rgba(153,0,0,.5);-moz-box-shadow:0 0 2px rgba(153,0,0,.5);box-shadow:0 0 2px rgba(153,0,0,.5)}#loco-admin.wrap #loco-editor>nav .loco-clearable{padding:0 20px}#loco-admin.wrap #loco-editor>nav .loco-clearable.invalid a.clear:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear{right:25px;line-height:2;top:2px}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:hover:before{color:#c00}#loco-admin.wrap #loco-editor>nav .loco-clearable a.clear:active:before{color:#000}#loco-admin.wrap #loco-editor>nav button.only-icon{width:40px}#loco-admin.wrap button.has-icon:before{width:16px;padding:0}#loco-admin.wrap button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif?v=2.6.3) 0 0 no-repeat}#loco-admin.wrap .button,#loco-admin.wrap .button-link,#loco-admin.wrap input[type=text]{border-color:#aaa;color:#444}#loco-admin.wrap .button:hover,#loco-admin.wrap .button-link:hover{color:#000}#loco-admin.wrap .button-primary,#loco-admin.wrap .button-primary:hover{color:#fff}#loco-admin.wrap button.icon-translate:before{font-size:16px}.loco-modal .loco-api{position:relative;padding:10px;background:#f7f7f7;border:solid 1px #eee;font-size:14px;margin-bottom:16px}.loco-modal .loco-api p{padding:0;margin:0;font-size:inherit}.loco-modal .loco-api blockquote{font-weight:bold;margin:0;padding:10px 0}.loco-modal .loco-api a.loco-api-credit{padding:0;display:block;position:absolute;right:10px;bottom:10px;text-decoration:none;white-space:nowrap;overflow:hidden;font-size:12px}.loco-modal .loco-api a.loco-api-credit:hover{text-decoration:underline}.loco-modal .loco-api-loading{text-indent:20px;background:transparent url(../img/spin-modal.gif?v=2.6.3) 10px center no-repeat}.loco-modal .loco-alert p{margin-bottom:2em;font-size:14px}.loco-modal .loco-alert nav{display:block;position:relative;margin:1em 0}.loco-modal .loco-alert nav a{display:inline-block;margin-right:1em;padding:10px}#loco-auto{display:none;min-width:50%;min-height:300px;position:relative}#loco-auto form blockquote{margin:0;padding:1em 0;font-size:14px}.loco-api a.loco-api-credit{color:inherit}.loco-api-google a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/google.png?v=2.6.3) 0 0 no-repeat}.loco-api-microsoft a.loco-api-credit{text-indent:200px;width:152px;height:16px;background:transparent url(../img/api/microsoft.png?v=2.6.3) 0 0 no-repeat}.loco-api-deepl a.loco-api-credit{text-indent:200px;width:122px;height:16px;background:transparent url(../img/api/deepl.png?v=2.6.3) 0 0 no-repeat}
|
pub/css/podiff.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#loco-admin.wrap .revisions-diff{padding:10px;min-height:20px}#loco-admin.wrap table.diff{border-collapse:collapse;table-layout:auto}#loco-admin.wrap table.diff td{white-space:nowrap;overflow:hidden;font:normal 12px/17px "Monaco","Menlo","Ubuntu Mono","Consolas","source-code-pro",monospace;padding:2px}#loco-admin.wrap table.diff td>span{color:#aaa}#loco-admin.wrap table.diff td>span:after{content:". "}#loco-admin.wrap table.diff tbody{border-top:1px dashed #ccc}#loco-admin.wrap table.diff tbody:first-child{border-top:none}#loco-admin.wrap table.diff td>.dashicons{display:none}#loco-admin.wrap .revisions.loading .diff-meta{color:#eee}#loco-admin.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif?v=2.6.
|
1 |
+
#loco-admin.wrap .revisions-diff{padding:10px;min-height:20px}#loco-admin.wrap table.diff{border-collapse:collapse;table-layout:auto}#loco-admin.wrap table.diff td{white-space:nowrap;overflow:hidden;font:normal 12px/17px "Monaco","Menlo","Ubuntu Mono","Consolas","source-code-pro",monospace;padding:2px}#loco-admin.wrap table.diff td>span{color:#aaa}#loco-admin.wrap table.diff td>span:after{content:". "}#loco-admin.wrap table.diff tbody{border-top:1px dashed #ccc}#loco-admin.wrap table.diff tbody:first-child{border-top:none}#loco-admin.wrap table.diff td>.dashicons{display:none}#loco-admin.wrap .revisions.loading .diff-meta{color:#eee}#loco-admin.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif?v=2.6.3) center center no-repeat}#loco-admin.wrap .revisions-meta{clear:both;padding:10px 12px;margin:0;position:relative;top:10px}#loco-admin.wrap .revisions-meta .diff-meta{clear:none;float:left;width:50%;padding:0;min-height:auto}#loco-admin.wrap .revisions-meta .diff-meta button{margin-top:5px}#loco-admin.wrap .revisions-meta .diff-meta-current{float:right;text-align:right}#loco-admin.wrap .revisions-meta time{color:#72777c}#loco-admin.wrap .revisions-control-frame{margin:10px 0}#loco-admin.wrap .revisions-diff-frame{margin-top:20px}
|
pub/css/poview.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.js #loco-admin.wrap .loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif?v=2.6.
|
1 |
+
.js #loco-admin.wrap .loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif?v=2.6.3) center center no-repeat}.js #loco-admin.wrap .loco-loading ol.msgcat{display:none}#loco-admin.wrap #loco-po{padding-right:0;overflow:auto}#loco-admin.wrap ol.msgcat{margin-left:3em;padding-top:1em;border-top:1px dashed #ccc}#loco-admin.wrap ol.msgcat:first-child{padding-top:0;border-top:none}#loco-admin.wrap ol.msgcat li{color:#aaa;margin:0;padding:0 0 0 1em;font:normal 12px/17px "Monaco","Menlo","Ubuntu Mono","Consolas","source-code-pro",monospace;border-left:1px solid #eee}#loco-admin.wrap ol.msgcat li>*{color:#333;white-space:pre}#loco-admin.wrap ol.msgcat li>.po-comment{color:#3cc200}#loco-admin.wrap ol.msgcat li>.po-refs{color:#0073aa}#loco-admin.wrap ol.msgcat li>.po-refs a{color:inherit;text-decoration:none}#loco-admin.wrap ol.msgcat li>.po-refs a:hover{text-decoration:underline}#loco-admin.wrap ol.msgcat li>.po-flags{color:#77904a}#loco-admin.wrap ol.msgcat li>.po-flags em{font-style:normal}#loco-admin.wrap ol.msgcat li>.po-word{color:#000}#loco-admin.wrap ol.msgcat li>.po-junk{font-style:italic;color:#ccc}#loco-admin.wrap ol.msgcat li>.po-string>span{color:#c931c7}#loco-admin.wrap form.loco-filter{top:0;right:0;position:absolute}#loco-admin.wrap .loco-invalid form.loco-filter input[type=text]:focus{border-color:#c00;-webkit-box-shadow:0 0 2px rgba(153,0,0,.5);-moz-box-shadow:0 0 2px rgba(153,0,0,.5);box-shadow:0 0 2px rgba(153,0,0,.5)}#loco-admin.wrap .loco-invalid ol.msgcat{list-style-type:none}#loco-admin.wrap .loco-invalid ol.msgcat li{color:#000}
|
pub/css/skins/blue.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(9,100,132,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#096484}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cdc7 !important;background:#db9925 !important;border-color:#db9925 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/blue/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(9,100,132,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#096484}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cdc7 !important;background:#db9925 !important;border-color:#db9925 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/blue/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/skins/coffee.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(199,165,137,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#c7a589}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1ccc7 !important;background:#ba906d !important;border-color:#ba906d !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/coffee/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(199,165,137,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#c7a589}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1ccc7 !important;background:#ba906d !important;border-color:#ba906d !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/coffee/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/skins/ectoplasm.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(163,183,69,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#a3b745}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#cfd1c7 !important;background:#89993a !important;border-color:#89993a !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ectoplasm/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(163,183,69,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#a3b745}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#cfd1c7 !important;background:#89993a !important;border-color:#89993a !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ectoplasm/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/skins/light.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(136,136,136,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#888}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7cfd1 !important;background:#0384a4 !important;border-color:#0384a4 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/light/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(136,136,136,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#888}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7cfd1 !important;background:#0384a4 !important;border-color:#0384a4 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/light/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/skins/midnight.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(225,77,67,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#e14d43}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1c8c7 !important;background:#d92e23 !important;border-color:#d92e23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/midnight/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(225,77,67,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#e14d43}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1c8c7 !important;background:#d92e23 !important;border-color:#d92e23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/midnight/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/skins/modern.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(56,88,233,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#3858e9}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7c9d1 !important;background:#193ddf !important;border-color:#193ddf !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/modern/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(56,88,233,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#3858e9}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7c9d1 !important;background:#193ddf !important;border-color:#193ddf !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/modern/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/skins/ocean.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(158,186,160,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#9ebaa0}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7d1c8 !important;background:#86a989 !important;border-color:#86a989 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ocean/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(158,186,160,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#9ebaa0}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#c7d1c8 !important;background:#86a989 !important;border-color:#86a989 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/ocean/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/css/skins/sunrise.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(221,130,59,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#dd823b}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cbc7 !important;background:#cc6d23 !important;border-color:#cc6d23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/sunrise/spin-primary-button.gif?v=2.6.
|
1 |
+
.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(221,130,59,.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#dd823b}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);-moz-box-shadow:inset 0 0 .6em rgba(30,140,190,.8);box-shadow:inset 0 0 .6em rgba(30,140,190,.8)}.wp-core-ui .button-primary.loco-loading[disabled]{color:#d1cbc7 !important;background:#cc6d23 !important;border-color:#cc6d23 !important}.wp-core-ui .button-primary.loco-loading[disabled]:before{background:transparent url(../../img/skins/sunrise/spin-primary-button.gif?v=2.6.3) 0 0 no-repeat !important}
|
pub/js/min/admin.js
CHANGED
@@ -1536,9 +1536,9 @@ c.style["-ms-scroll-snap-type"] = "mandatory", c.style["-ms-scroll-chaining"] =
|
|
1536 |
},
|
1537 |
scroll: function(a, b, d) {
|
1538 |
x();
|
1539 |
-
var f = c.scrollLeft,
|
1540 |
return r = q.require("$48", "fps.js").loop(function(b) {
|
1541 |
-
b && (f = Math.max(0,
|
1542 |
}, c);
|
1543 |
}
|
1544 |
};
|
@@ -2681,10 +2681,10 @@ c.exists = function() {
|
|
2681 |
return this === m[this.id];
|
2682 |
};
|
2683 |
c.clear = function() {
|
2684 |
-
for (var a = this.el, b = this.cells, d = this.field, c = this.body,
|
2685 |
this.cells = [];
|
2686 |
this.length = 0;
|
2687 |
-
|
2688 |
c && (d && (n.ie() && k(c).triggerHandler("blur"), d.destroy(), this.field = null),
|
2689 |
this.table && (this.table = null), a === c.parentNode && a.removeChild(c));
|
2690 |
this.body = a.appendChild(f.el("", "wg-body"));
|
@@ -3262,14 +3262,21 @@ r.fire("poTab", [ c ]);
|
|
3262 |
M && p(b, 0);
|
3263 |
}
|
3264 |
function p(c, f) {
|
3265 |
-
|
3266 |
-
|
3267 |
r.validate(a);
|
3268 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3269 |
0 === f && r.updateListCell(a, "target");
|
3270 |
a.fuzzy(f) ? r.fuzzy(!1, a, f) : r.unsave(a, f);
|
3271 |
-
"" === d ? (r.fire("poEmpty", [ !0, a, f ]), r.setStatus(a, f)) : "" ===
|
3272 |
r.setStatus(a, f));
|
|
|
3273 |
}).on(g, function() {
|
3274 |
r.dict && r.rebuildSearch();
|
3275 |
r.fire(b, [ a ]);
|
@@ -5003,7 +5010,7 @@ k("#loco-admin.wrap table.wp-list-table").each(function(e, c) {
|
|
5003 |
q.require("$20", "tables.js").init(c);
|
5004 |
});
|
5005 |
D.validate = function(e) {
|
5006 |
-
return "2.6.
|
5007 |
!1) : !0;
|
5008 |
};
|
5009 |
})(window, document, window.jQuery);
|
1536 |
},
|
1537 |
scroll: function(a, b, d) {
|
1538 |
x();
|
1539 |
+
var f = c.scrollLeft, v = a > f ? 1 : -1, m = Math[1 === v ? "min" : "max"], g = Math.round(16 * b * v);
|
1540 |
return r = q.require("$48", "fps.js").loop(function(b) {
|
1541 |
+
b && (f = Math.max(0, m(a, f + g)), c.scrollLeft = f, a === f && (x(), d && d(f)));
|
1542 |
}, c);
|
1543 |
}
|
1544 |
};
|
2681 |
return this === m[this.id];
|
2682 |
};
|
2683 |
c.clear = function() {
|
2684 |
+
for (var a = this.el, b = this.cells, d = this.field, c = this.body, v = this.nav, g = this.length || 0; 0 !== g--; ) delete m[b[g].destroy().id];
|
2685 |
this.cells = [];
|
2686 |
this.length = 0;
|
2687 |
+
v && (a.removeChild(v), this.nav = null);
|
2688 |
c && (d && (n.ie() && k(c).triggerHandler("blur"), d.destroy(), this.field = null),
|
2689 |
this.table && (this.table = null), a === c.parentNode && a.removeChild(c));
|
2690 |
this.body = a.appendChild(f.el("", "wg-body"));
|
3262 |
M && p(b, 0);
|
3263 |
}
|
3264 |
function p(c, f) {
|
3265 |
+
function h() {
|
3266 |
+
n = null;
|
3267 |
r.validate(a);
|
3268 |
+
var b = a.errors(f).join(" ");
|
3269 |
+
e !== b && (e = b, r.setTrgMeta(a, f, c) && c.redraw());
|
3270 |
+
}
|
3271 |
+
var n, e = a.errors(f).join(" ");
|
3272 |
+
c.on(d, function(b, d, c) {
|
3273 |
+
n && (clearTimeout(n), n = null);
|
3274 |
+
a.translate(d, f);
|
3275 |
0 === f && r.updateListCell(a, "target");
|
3276 |
a.fuzzy(f) ? r.fuzzy(!1, a, f) : r.unsave(a, f);
|
3277 |
+
"" === d ? (r.fire("poEmpty", [ !0, a, f ]), r.setStatus(a, f)) : "" === c && (r.fire("poEmpty", [ !1, a, f ]),
|
3278 |
r.setStatus(a, f));
|
3279 |
+
n = setTimeout(h, e ? 300 : 1e3);
|
3280 |
}).on(g, function() {
|
3281 |
r.dict && r.rebuildSearch();
|
3282 |
r.fire(b, [ a ]);
|
5010 |
q.require("$20", "tables.js").init(c);
|
5011 |
});
|
5012 |
D.validate = function(e) {
|
5013 |
+
return "2.6.3" !== (/^\d+\.\d+\.\d+/.exec(e && e[0] || "") && RegExp.lastMatch) ? (D.notices.warn("admin.js is the wrong version (2.6.3). Please empty all relevant caches and reload this page."),
|
5014 |
!1) : !0;
|
5015 |
};
|
5016 |
})(window, document, window.jQuery);
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: timwhitlock
|
|
3 |
Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, PO, MO, productivity, multilingual, internationalization
|
4 |
Requires at least: 5.2
|
5 |
Requires PHP: 5.6.20
|
6 |
-
Tested up to: 6.0.
|
7 |
-
Stable tag: 2.6.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -100,6 +100,13 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
|
|
100 |
|
101 |
== Changelog ==
|
102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
= 2.6.2 =
|
104 |
* Bumped WordPress version to 6.0.0
|
105 |
* Better labelling of reverse-engineered plural forms
|
@@ -468,7 +475,7 @@ We don't collect your data or snoop on you. See the [plugin privacy notice](http
|
|
468 |
|
469 |
== Upgrade Notice ==
|
470 |
|
471 |
-
= 2.6.
|
472 |
* Various improvements and bug fixes
|
473 |
|
474 |
|
3 |
Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, PO, MO, productivity, multilingual, internationalization
|
4 |
Requires at least: 5.2
|
5 |
Requires PHP: 5.6.20
|
6 |
+
Tested up to: 6.0.3
|
7 |
+
Stable tag: 2.6.3
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
100 |
|
101 |
== Changelog ==
|
102 |
|
103 |
+
= 2.6.3 =
|
104 |
+
* Fixed bug in plural forms comparison
|
105 |
+
* Fixed bug generating author theme jsons
|
106 |
+
* Fixed errors in bundle debugger
|
107 |
+
* Extended cli type argument to filter specific bundle
|
108 |
+
* Bumped WordPress version to 6.0.3
|
109 |
+
|
110 |
= 2.6.2 =
|
111 |
* Bumped WordPress version to 6.0.0
|
112 |
* Better labelling of reverse-engineered plural forms
|
475 |
|
476 |
== Upgrade Notice ==
|
477 |
|
478 |
+
= 2.6.3 =
|
479 |
* Various improvements and bug fixes
|
480 |
|
481 |
|
src/Locale.php
CHANGED
@@ -57,7 +57,7 @@ class Loco_Locale implements JsonSerializable {
|
|
57 |
private $valid;
|
58 |
|
59 |
/**
|
60 |
-
* @param string
|
61 |
* @return Loco_Locale
|
62 |
*/
|
63 |
public static function parse( $tag ){
|
@@ -77,9 +77,9 @@ class Loco_Locale implements JsonSerializable {
|
|
77 |
/**
|
78 |
* Construct from subtags NOT from composite tag. See self::parse
|
79 |
* Note that this skips normalization and validation steps
|
80 |
-
* @param string
|
81 |
-
* @param string
|
82 |
-
* @param string
|
83 |
*/
|
84 |
public function __construct( $lang = '', $region = '', $variant = '' ){
|
85 |
if( 1 == func_num_args() && isset($lang[3]) ){
|
@@ -92,7 +92,7 @@ class Loco_Locale implements JsonSerializable {
|
|
92 |
/**
|
93 |
* Allow read access to subtags
|
94 |
* @internal
|
95 |
-
* @param string
|
96 |
* @return string
|
97 |
*/
|
98 |
public function __get( $t ){
|
@@ -103,8 +103,8 @@ class Loco_Locale implements JsonSerializable {
|
|
103 |
/**
|
104 |
* Allow write access to subtags
|
105 |
* @internal
|
106 |
-
* @param string
|
107 |
-
* @param string
|
108 |
* @return void
|
109 |
*/
|
110 |
public function __set( $t, $s ){
|
@@ -117,7 +117,7 @@ class Loco_Locale implements JsonSerializable {
|
|
117 |
|
118 |
/**
|
119 |
* Set subtags as produced from loco_parse_wp_locale
|
120 |
-
* @param string[]
|
121 |
* @return Loco_Locale
|
122 |
*/
|
123 |
public function setSubtags( array $tag ){
|
@@ -185,7 +185,7 @@ class Loco_Locale implements JsonSerializable {
|
|
185 |
|
186 |
|
187 |
/**
|
188 |
-
* @param bool whether to get name in current display language
|
189 |
* @return string | null
|
190 |
*/
|
191 |
public function getName( $translate = true ){
|
@@ -245,7 +245,7 @@ class Loco_Locale implements JsonSerializable {
|
|
245 |
|
246 |
|
247 |
/**
|
248 |
-
* @param string CSS icon name
|
249 |
* @return Loco_Locale
|
250 |
*/
|
251 |
public function setIcon( $css ){
|
@@ -260,8 +260,8 @@ class Loco_Locale implements JsonSerializable {
|
|
260 |
|
261 |
|
262 |
/**
|
263 |
-
* @param string
|
264 |
-
* @param string
|
265 |
* @return Loco_Locale
|
266 |
*/
|
267 |
public function setName( $english_name, $native_name = '' ){
|
@@ -285,7 +285,6 @@ class Loco_Locale implements JsonSerializable {
|
|
285 |
|
286 |
/**
|
287 |
* Resolve this locale's "official" name from WordPress's translation api
|
288 |
-
* @param Loco_api_WordPressTranslations
|
289 |
* @return string English name currently set
|
290 |
*/
|
291 |
public function fetchName( Loco_api_WordPressTranslations $api ){
|
@@ -335,7 +334,6 @@ class Loco_Locale implements JsonSerializable {
|
|
335 |
|
336 |
/**
|
337 |
* Ensure locale has a label, even if it has to fall back to language code or error
|
338 |
-
* @param Loco_api_WordPressTranslations
|
339 |
* @return string
|
340 |
*/
|
341 |
public function ensureName( Loco_api_WordPressTranslations $api ){
|
@@ -470,7 +468,7 @@ class Loco_Locale implements JsonSerializable {
|
|
470 |
|
471 |
/**
|
472 |
* Apply PO style Plural-Forms header.
|
473 |
-
* @param string e.g. "nplurals=2; plural=n != 1;"
|
474 |
* @return void
|
475 |
*/
|
476 |
public function setPluralFormsHeader( $str ){
|
@@ -514,8 +512,11 @@ class Loco_Locale implements JsonSerializable {
|
|
514 |
}
|
515 |
$keys[] = implode(',',$sample).$suffix;
|
516 |
}
|
517 |
-
//
|
518 |
-
|
|
|
|
|
|
|
519 |
// exception when two forms only and the first accepts n=1 and second n=2
|
520 |
if( 2 === $nplurals && 0 === $formula->execute(1) && 1 === $formula->execute(2) ){
|
521 |
$tags = ['one','other'];
|
@@ -534,7 +535,7 @@ class Loco_Locale implements JsonSerializable {
|
|
534 |
|
535 |
/**
|
536 |
* Crude normalizer for a plural equation such that similar formulae can be compared.
|
537 |
-
* @param string original plural equation
|
538 |
* @return string signature for comparison
|
539 |
*/
|
540 |
private static function hashPlural( $str ){
|
57 |
private $valid;
|
58 |
|
59 |
/**
|
60 |
+
* @param string $tag
|
61 |
* @return Loco_Locale
|
62 |
*/
|
63 |
public static function parse( $tag ){
|
77 |
/**
|
78 |
* Construct from subtags NOT from composite tag. See self::parse
|
79 |
* Note that this skips normalization and validation steps
|
80 |
+
* @param string $lang
|
81 |
+
* @param string $region
|
82 |
+
* @param string $variant
|
83 |
*/
|
84 |
public function __construct( $lang = '', $region = '', $variant = '' ){
|
85 |
if( 1 == func_num_args() && isset($lang[3]) ){
|
92 |
/**
|
93 |
* Allow read access to subtags
|
94 |
* @internal
|
95 |
+
* @param string $t subtag
|
96 |
* @return string
|
97 |
*/
|
98 |
public function __get( $t ){
|
103 |
/**
|
104 |
* Allow write access to subtags
|
105 |
* @internal
|
106 |
+
* @param string $t subtag, e.g. "lang"
|
107 |
+
* @param string $s subtag value, e.g. "en"
|
108 |
* @return void
|
109 |
*/
|
110 |
public function __set( $t, $s ){
|
117 |
|
118 |
/**
|
119 |
* Set subtags as produced from loco_parse_wp_locale
|
120 |
+
* @param string[] $tag
|
121 |
* @return Loco_Locale
|
122 |
*/
|
123 |
public function setSubtags( array $tag ){
|
185 |
|
186 |
|
187 |
/**
|
188 |
+
* @param bool $translate whether to get name in current display language
|
189 |
* @return string | null
|
190 |
*/
|
191 |
public function getName( $translate = true ){
|
245 |
|
246 |
|
247 |
/**
|
248 |
+
* @param string $css CSS icon name
|
249 |
* @return Loco_Locale
|
250 |
*/
|
251 |
public function setIcon( $css ){
|
260 |
|
261 |
|
262 |
/**
|
263 |
+
* @param string $english_name
|
264 |
+
* @param string $native_name
|
265 |
* @return Loco_Locale
|
266 |
*/
|
267 |
public function setName( $english_name, $native_name = '' ){
|
285 |
|
286 |
/**
|
287 |
* Resolve this locale's "official" name from WordPress's translation api
|
|
|
288 |
* @return string English name currently set
|
289 |
*/
|
290 |
public function fetchName( Loco_api_WordPressTranslations $api ){
|
334 |
|
335 |
/**
|
336 |
* Ensure locale has a label, even if it has to fall back to language code or error
|
|
|
337 |
* @return string
|
338 |
*/
|
339 |
public function ensureName( Loco_api_WordPressTranslations $api ){
|
468 |
|
469 |
/**
|
470 |
* Apply PO style Plural-Forms header.
|
471 |
+
* @param string $str header value e.g. "nplurals=2; plural=n != 1;"
|
472 |
* @return void
|
473 |
*/
|
474 |
public function setPluralFormsHeader( $str ){
|
512 |
}
|
513 |
$keys[] = implode(',',$sample).$suffix;
|
514 |
}
|
515 |
+
// cast to string for comparison due to PHP forcing integer keys in this->plurals
|
516 |
+
$expect = implode('|',$keys);
|
517 |
+
$actual = implode('|',array_keys($this->plurals));
|
518 |
+
// use mnemonic tags only if they match the default (CLDR) tags for the current language
|
519 |
+
if( $expect !== $actual ){
|
520 |
// exception when two forms only and the first accepts n=1 and second n=2
|
521 |
if( 2 === $nplurals && 0 === $formula->execute(1) && 1 === $formula->execute(2) ){
|
522 |
$tags = ['one','other'];
|
535 |
|
536 |
/**
|
537 |
* Crude normalizer for a plural equation such that similar formulae can be compared.
|
538 |
+
* @param string $str original plural equation
|
539 |
* @return string signature for comparison
|
540 |
*/
|
541 |
private static function hashPlural( $str ){
|
src/admin/bundle/BaseController.php
CHANGED
@@ -28,6 +28,19 @@ abstract class Loco_admin_bundle_BaseController extends Loco_mvc_AdminController
|
|
28 |
}
|
29 |
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
/**
|
32 |
* Commit bundle config to database
|
33 |
* @return Loco_admin_bundle_BaseController
|
28 |
}
|
29 |
|
30 |
|
31 |
+
/**
|
32 |
+
* Get current project's text domain if available
|
33 |
+
* @return string
|
34 |
+
*/
|
35 |
+
public function getDomain(){
|
36 |
+
$project = $this->getOptionalProject();
|
37 |
+
if( $project instanceof Loco_package_Project ){
|
38 |
+
return $project->getDomain()->getName();
|
39 |
+
}
|
40 |
+
return '';
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
/**
|
45 |
* Commit bundle config to database
|
46 |
* @return Loco_admin_bundle_BaseController
|
src/admin/file/DeleteController.php
CHANGED
@@ -7,7 +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 |
-
* @param Loco_fs_File primary file being deleted, probably the PO
|
11 |
* @return array
|
12 |
*/
|
13 |
private function expandFiles( Loco_fs_File $file ){
|
@@ -18,6 +18,7 @@ class Loco_admin_file_DeleteController extends Loco_admin_file_BaseController {
|
|
18 |
$ext = $file->extension();
|
19 |
throw new Loco_error_Exception( sprintf('Refusing to delete a %s file', strtoupper($ext) ) );
|
20 |
}
|
|
|
21 |
return $siblings->expand();
|
22 |
}
|
23 |
|
7 |
|
8 |
/**
|
9 |
* Expand single path to all files that will be deleted
|
10 |
+
* @param Loco_fs_File $file primary file being deleted, probably the PO
|
11 |
* @return array
|
12 |
*/
|
13 |
private function expandFiles( Loco_fs_File $file ){
|
18 |
$ext = $file->extension();
|
19 |
throw new Loco_error_Exception( sprintf('Refusing to delete a %s file', strtoupper($ext) ) );
|
20 |
}
|
21 |
+
$siblings->setDomain( $this->getDomain() );
|
22 |
return $siblings->expand();
|
23 |
}
|
24 |
|
src/admin/file/MoveController.php
CHANGED
@@ -15,6 +15,7 @@ class Loco_admin_file_MoveController extends Loco_admin_file_BaseController {
|
|
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;
|
@@ -98,6 +99,7 @@ class Loco_admin_file_MoveController extends Loco_admin_file_BaseController {
|
|
98 |
if( wp_redirect($href) ){
|
99 |
exit;
|
100 |
}
|
|
|
101 |
break;
|
102 |
}
|
103 |
}
|
@@ -116,14 +118,15 @@ class Loco_admin_file_MoveController extends Loco_admin_file_BaseController {
|
|
116 |
return $fail;
|
117 |
}
|
118 |
// relocation requires knowing text domain and locale
|
|
|
119 |
try {
|
120 |
$project = $this->getProject();
|
|
|
121 |
}
|
122 |
catch( Loco_error_Exception $e ){
|
123 |
Loco_error_AdminNotices::warn($e->getMessage());
|
124 |
$project = null;
|
125 |
}
|
126 |
-
$files = new Loco_fs_Siblings($file);
|
127 |
$file = new Loco_fs_LocaleFile( $files->getSource() );
|
128 |
$locale = $file->getLocale();
|
129 |
// switch between canonical move and custom file path mode
|
15 |
/* @var Loco_fs_File $file */
|
16 |
if( $file->exists() && ! $file->isDirectory() ){
|
17 |
$files = new Loco_fs_Siblings($file);
|
18 |
+
$files->setDomain( $this->getDomain() );
|
19 |
// nonce action will be specific to file for extra security
|
20 |
$path = $file->getPath();
|
21 |
$action = 'move:'.$path;
|
99 |
if( wp_redirect($href) ){
|
100 |
exit;
|
101 |
}
|
102 |
+
// end pseudo loop
|
103 |
break;
|
104 |
}
|
105 |
}
|
118 |
return $fail;
|
119 |
}
|
120 |
// relocation requires knowing text domain and locale
|
121 |
+
$files = new Loco_fs_Siblings($file);
|
122 |
try {
|
123 |
$project = $this->getProject();
|
124 |
+
$files->setDomain( $project->getDomain()->getName() );
|
125 |
}
|
126 |
catch( Loco_error_Exception $e ){
|
127 |
Loco_error_AdminNotices::warn($e->getMessage());
|
128 |
$project = null;
|
129 |
}
|
|
|
130 |
$file = new Loco_fs_LocaleFile( $files->getSource() );
|
131 |
$locale = $file->getLocale();
|
132 |
// switch between canonical move and custom file path mode
|
src/ajax/MsginitController.php
CHANGED
@@ -77,7 +77,7 @@ class Loco_ajax_MsginitController extends Loco_ajax_common_BundleController {
|
|
77 |
if( $post->json ){
|
78 |
$mergejson = true;
|
79 |
$siblings = new Loco_fs_Siblings($potfile);
|
80 |
-
$jsons = $siblings->getJsons();
|
81 |
if( $jsons ){
|
82 |
$refs = clone $data;
|
83 |
$merge = new Loco_gettext_Matcher();
|
77 |
if( $post->json ){
|
78 |
$mergejson = true;
|
79 |
$siblings = new Loco_fs_Siblings($potfile);
|
80 |
+
$jsons = $siblings->getJsons($domain);
|
81 |
if( $jsons ){
|
82 |
$refs = clone $data;
|
83 |
$merge = new Loco_gettext_Matcher();
|
src/ajax/SyncController.php
CHANGED
@@ -77,10 +77,10 @@ class Loco_ajax_SyncController extends Loco_mvc_AjaxController {
|
|
77 |
if( 'pot' !== $potfile->extension() ){
|
78 |
$translate = $opts->mergeMsgstr();
|
79 |
}
|
80 |
-
// related JSONs will only
|
81 |
if( $opts->mergeJson() ){
|
82 |
$siblings = new Loco_fs_Siblings($potfile);
|
83 |
-
$syncjsons = $siblings->getJsons();
|
84 |
}
|
85 |
}
|
86 |
// else extract POT from source code
|
77 |
if( 'pot' !== $potfile->extension() ){
|
78 |
$translate = $opts->mergeMsgstr();
|
79 |
}
|
80 |
+
// related JSONs will only sync if source is a localized PO.
|
81 |
if( $opts->mergeJson() ){
|
82 |
$siblings = new Loco_fs_Siblings($potfile);
|
83 |
+
$syncjsons = $siblings->getJsons( $project->getDomain()->getName() );
|
84 |
}
|
85 |
}
|
86 |
// else extract POT from source code
|
src/cli/Commands.php
CHANGED
@@ -12,7 +12,7 @@ class Loco_cli_Commands {
|
|
12 |
* ## OPTIONS
|
13 |
*
|
14 |
* [<filter>]
|
15 |
-
* : Restrict to a type of bundle (plugins|themes|core) or a
|
16 |
*
|
17 |
* [--locale=<code>]
|
18 |
* : Restrict to one or more locales. Separate multiple codes with commas.
|
@@ -30,9 +30,8 @@ class Loco_cli_Commands {
|
|
30 |
*
|
31 |
* wp loco sync plugins
|
32 |
*
|
33 |
-
*
|
34 |
-
* @param string[]
|
35 |
-
* @param string[]
|
36 |
*/
|
37 |
public function sync( $args, $opts ){
|
38 |
if( array_key_exists('fuzziness',$opts) ){
|
@@ -58,7 +57,7 @@ class Loco_cli_Commands {
|
|
58 |
* ## OPTIONS
|
59 |
*
|
60 |
* [<filter>]
|
61 |
-
* : Restrict to a type of bundle (plugins|themes|core) or a
|
62 |
*
|
63 |
* [--maxsize=<size>]
|
64 |
* : Override plugin settings for maximum PHP file size
|
@@ -73,8 +72,8 @@ class Loco_cli_Commands {
|
|
73 |
*
|
74 |
* wp loco extract core --maxsize=400K
|
75 |
*
|
76 |
-
* @param string[]
|
77 |
-
* @param string[]
|
78 |
*/
|
79 |
public function extract( $args, $opts ){
|
80 |
try {
|
@@ -100,7 +99,7 @@ class Loco_cli_Commands {
|
|
100 |
* ## OPTIONS
|
101 |
*
|
102 |
* [<filter>]
|
103 |
-
* : Restrict to a type of bundle (plugins|themes|core) or a
|
104 |
*
|
105 |
* [--locale=<code>]
|
106 |
* : Restrict to one or more locales. Separate multiple codes with commas.
|
@@ -112,8 +111,8 @@ class Loco_cli_Commands {
|
|
112 |
*
|
113 |
* wp loco fetch loco-translate --locale=en_GB
|
114 |
*
|
115 |
-
* @param string[]
|
116 |
-
* @param string[]
|
117 |
*/
|
118 |
public function fetch( $args, $opts ){
|
119 |
try {
|
12 |
* ## OPTIONS
|
13 |
*
|
14 |
* [<filter>]
|
15 |
+
* : Restrict to a type of bundle (plugins|themes|core); a single bundle (e.g. plugins:<handle>); or a Text Domain
|
16 |
*
|
17 |
* [--locale=<code>]
|
18 |
* : Restrict to one or more locales. Separate multiple codes with commas.
|
30 |
*
|
31 |
* wp loco sync plugins
|
32 |
*
|
33 |
+
* @param string[] $args
|
34 |
+
* @param string[] $opts
|
|
|
35 |
*/
|
36 |
public function sync( $args, $opts ){
|
37 |
if( array_key_exists('fuzziness',$opts) ){
|
57 |
* ## OPTIONS
|
58 |
*
|
59 |
* [<filter>]
|
60 |
+
* : Restrict to a type of bundle (plugins|themes|core); a single bundle (e.g. plugins:<handle>); or a Text Domain
|
61 |
*
|
62 |
* [--maxsize=<size>]
|
63 |
* : Override plugin settings for maximum PHP file size
|
72 |
*
|
73 |
* wp loco extract core --maxsize=400K
|
74 |
*
|
75 |
+
* @param string[] $args
|
76 |
+
* @param string[] $opts
|
77 |
*/
|
78 |
public function extract( $args, $opts ){
|
79 |
try {
|
99 |
* ## OPTIONS
|
100 |
*
|
101 |
* [<filter>]
|
102 |
+
* : Restrict to a type of bundle (plugins|themes|core); a single bundle (e.g. plugins:<handle>); or a Text Domain
|
103 |
*
|
104 |
* [--locale=<code>]
|
105 |
* : Restrict to one or more locales. Separate multiple codes with commas.
|
111 |
*
|
112 |
* wp loco fetch loco-translate --locale=en_GB
|
113 |
*
|
114 |
+
* @param string[] $args
|
115 |
+
* @param string[] $opts
|
116 |
*/
|
117 |
public function fetch( $args, $opts ){
|
118 |
try {
|
src/cli/SyncCommand.php
CHANGED
@@ -98,8 +98,8 @@ abstract class Loco_cli_SyncCommand {
|
|
98 |
$matcher->loadRefs($ref,$translate );
|
99 |
// Merge jsons if configured and available
|
100 |
if( $opts->mergeJson() ){
|
101 |
-
$siblings = new Loco_fs_Siblings($
|
102 |
-
$njson = $matcher->loadJsons( $siblings->getJsons() );
|
103 |
if( 0 !== $njson ){
|
104 |
Loco_cli_Utils::debug('> merged json files:%u', $njson );
|
105 |
}
|
98 |
$matcher->loadRefs($ref,$translate );
|
99 |
// Merge jsons if configured and available
|
100 |
if( $opts->mergeJson() ){
|
101 |
+
$siblings = new Loco_fs_Siblings($pofile);
|
102 |
+
$njson = $matcher->loadJsons( $siblings->getJsons( $project->getDomain()->getName() ) );
|
103 |
if( 0 !== $njson ){
|
104 |
Loco_cli_Utils::debug('> merged json files:%u', $njson );
|
105 |
}
|
src/cli/Utils.php
CHANGED
@@ -7,26 +7,40 @@ abstract class Loco_cli_Utils {
|
|
7 |
|
8 |
/**
|
9 |
* Collect translation sets according to type/domain filter
|
10 |
-
* @param string Type of bundle (plugins|themes|core) or a specific Text Domain
|
11 |
* @return Loco_package_Project[]
|
12 |
*/
|
13 |
public static function collectProjects( $filter ){
|
14 |
$projects = [];
|
15 |
-
$
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
$
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
}
|
|
|
29 |
else {
|
|
|
30 |
$bundles = [ Loco_package_Core::create() ];
|
31 |
$bundles = array_merge( $bundles, Loco_package_Plugin::getAll() );
|
32 |
$bundles = array_merge( $bundles, Loco_package_Theme::getAll() );
|
@@ -34,7 +48,10 @@ abstract class Loco_cli_Utils {
|
|
34 |
/* @var Loco_package_Project $project */
|
35 |
foreach( $bundles as $bundle ){
|
36 |
foreach( $bundle as $project ){
|
37 |
-
if( $
|
|
|
|
|
|
|
38 |
continue;
|
39 |
}
|
40 |
$projects[] = $project;
|
7 |
|
8 |
/**
|
9 |
* Collect translation sets according to type/domain filter
|
|
|
10 |
* @return Loco_package_Project[]
|
11 |
*/
|
12 |
public static function collectProjects( $filter ){
|
13 |
$projects = [];
|
14 |
+
$domain = null;
|
15 |
+
$slug = null;
|
16 |
+
// bundle type filter, with optional argument
|
17 |
+
if( preg_match('/^(plugins|themes|core)(?::(.+))?/i',$filter,$matched) ){
|
18 |
+
$type = strtolower($matched[1]);
|
19 |
+
$handle = isset($matched[2]) ? $matched[2] : '';
|
20 |
+
if( 'plugins' === $type ){
|
21 |
+
if( $handle ){
|
22 |
+
$bundles = [ Loco_package_Plugin::create($handle) ];
|
23 |
+
}
|
24 |
+
else {
|
25 |
+
$bundles = Loco_package_Plugin::getAll();
|
26 |
+
}
|
27 |
+
}
|
28 |
+
else if( 'themes' === $type ){
|
29 |
+
if( $handle ){
|
30 |
+
$bundles = [ Loco_package_Theme::create($handle) ];
|
31 |
+
}
|
32 |
+
else {
|
33 |
+
$bundles = Loco_package_Theme::getAll();
|
34 |
+
}
|
35 |
+
}
|
36 |
+
else {
|
37 |
+
$bundles = [ Loco_package_Core::create() ];
|
38 |
+
$slug = $handle;
|
39 |
+
}
|
40 |
}
|
41 |
+
// else fall back to text domain filter
|
42 |
else {
|
43 |
+
$domain = $filter;
|
44 |
$bundles = [ Loco_package_Core::create() ];
|
45 |
$bundles = array_merge( $bundles, Loco_package_Plugin::getAll() );
|
46 |
$bundles = array_merge( $bundles, Loco_package_Theme::getAll() );
|
48 |
/* @var Loco_package_Project $project */
|
49 |
foreach( $bundles as $bundle ){
|
50 |
foreach( $bundle as $project ){
|
51 |
+
if( $domain && $project->getDomain()->getName() !== $domain ){
|
52 |
+
continue;
|
53 |
+
}
|
54 |
+
if( $slug && $project->getSlug() !== $slug ){
|
55 |
continue;
|
56 |
}
|
57 |
$projects[] = $project;
|
src/config/ArrayModel.php
CHANGED
@@ -4,12 +4,25 @@
|
|
4 |
*/
|
5 |
class Loco_config_ArrayModel extends Loco_config_Model {
|
6 |
|
|
|
|
|
|
|
|
|
|
|
7 |
|
8 |
/**
|
9 |
* {@inheritdoc}
|
10 |
*/
|
11 |
public function createDom(){
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
14 |
|
15 |
|
@@ -45,7 +58,7 @@ class Loco_config_ArrayModel extends Loco_config_Model {
|
|
45 |
$match = new LocoConfigNodeList;
|
46 |
$query = explode('/', $query );
|
47 |
// absolute path always starts in document
|
48 |
-
if(
|
49 |
$match->append( $this->getDom() );
|
50 |
}
|
51 |
// else start with base for relative path
|
@@ -95,7 +108,7 @@ abstract class LocoConfigNode implements IteratorAggregate {
|
|
95 |
|
96 |
/**
|
97 |
* Raw data of internal format
|
98 |
-
* @var array
|
99 |
*/
|
100 |
protected $data;
|
101 |
|
@@ -110,15 +123,24 @@ abstract class LocoConfigNode implements IteratorAggregate {
|
|
110 |
*/
|
111 |
abstract public function export();
|
112 |
|
|
|
|
|
|
|
113 |
final public function __construct( $data ){
|
114 |
$this->data = $data;
|
115 |
}
|
116 |
|
|
|
|
|
|
|
117 |
protected function get_nodeName(){
|
118 |
return $this->data[0];
|
119 |
}
|
120 |
-
|
121 |
|
|
|
|
|
|
|
|
|
122 |
protected function get_childNodes(){
|
123 |
return $this->getIterator();
|
124 |
}
|
@@ -129,6 +151,7 @@ abstract class LocoConfigNode implements IteratorAggregate {
|
|
129 |
if( is_callable($method) ){
|
130 |
return call_user_func( $method );
|
131 |
}
|
|
|
132 |
}
|
133 |
|
134 |
|
@@ -220,13 +243,13 @@ class LocoConfigNodeList implements Iterator, Countable, ArrayAccess {
|
|
220 |
}
|
221 |
|
222 |
#[ReturnTypeWillChange]
|
223 |
-
public function offsetExists( $
|
224 |
-
return $
|
225 |
}
|
226 |
|
227 |
#[ReturnTypeWillChange]
|
228 |
-
public function offsetGet( $
|
229 |
-
$node = $this->nodes[$
|
230 |
if( ! $node instanceof LocoConfigNode ){
|
231 |
if( is_array($node) ){
|
232 |
$node = new LocoConfigElement( $node );
|
@@ -234,7 +257,7 @@ class LocoConfigNodeList implements Iterator, Countable, ArrayAccess {
|
|
234 |
else {
|
235 |
$node = new LocoConfigText( $node );
|
236 |
}
|
237 |
-
$this->nodes[$
|
238 |
}
|
239 |
return $node;
|
240 |
}
|
@@ -243,16 +266,16 @@ class LocoConfigNodeList implements Iterator, Countable, ArrayAccess {
|
|
243 |
* @codeCoverageIgnore
|
244 |
*/
|
245 |
#[ReturnTypeWillChange]
|
246 |
-
public function offsetSet( $
|
247 |
-
throw new
|
248 |
}
|
249 |
|
250 |
/**
|
251 |
* @codeCoverageIgnore
|
252 |
*/
|
253 |
#[ReturnTypeWillChange]
|
254 |
-
public function offsetUnset( $
|
255 |
-
throw new
|
256 |
}
|
257 |
|
258 |
|
@@ -284,6 +307,7 @@ class LocoConfigNodeList implements Iterator, Countable, ArrayAccess {
|
|
284 |
|
285 |
/**
|
286 |
* Document
|
|
|
287 |
*/
|
288 |
class LocoConfigDocument extends LocoConfigNode {
|
289 |
|
@@ -294,7 +318,7 @@ class LocoConfigDocument extends LocoConfigNode {
|
|
294 |
$this->data = $data;
|
295 |
$this->children = null;
|
296 |
}
|
297 |
-
|
298 |
|
299 |
/**
|
300 |
* @return LocoConfigElement
|
@@ -329,9 +353,8 @@ class LocoConfigDocument extends LocoConfigNode {
|
|
329 |
* Override to keep single element root
|
330 |
*/
|
331 |
public function export(){
|
332 |
-
|
333 |
-
|
334 |
-
}
|
335 |
}
|
336 |
|
337 |
}
|
@@ -379,7 +402,9 @@ class LocoConfigElement extends LocoConfigNode {
|
|
379 |
|
380 |
|
381 |
/**
|
382 |
-
* Text
|
|
|
|
|
383 |
*/
|
384 |
class LocoConfigText extends LocoConfigNode {
|
385 |
|
@@ -399,10 +424,12 @@ class LocoConfigText extends LocoConfigNode {
|
|
399 |
return (string) $this->data;
|
400 |
}
|
401 |
|
|
|
402 |
public function get_nodeValue(){
|
403 |
return (string) $this->data;
|
404 |
}
|
405 |
-
|
|
|
406 |
public function get_textContent(){
|
407 |
return (string) $this->data;
|
408 |
}
|
4 |
*/
|
5 |
class Loco_config_ArrayModel extends Loco_config_Model {
|
6 |
|
7 |
+
/**
|
8 |
+
* @var LocoConfigDocument
|
9 |
+
*/
|
10 |
+
private $dom;
|
11 |
+
|
12 |
|
13 |
/**
|
14 |
* {@inheritdoc}
|
15 |
*/
|
16 |
public function createDom(){
|
17 |
+
$this->dom = new LocoConfigDocument( ['#document', [], [] ] );
|
18 |
+
}
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @return LocoConfigDocument
|
23 |
+
*/
|
24 |
+
public function getDom(){
|
25 |
+
return $this->dom;
|
26 |
}
|
27 |
|
28 |
|
58 |
$match = new LocoConfigNodeList;
|
59 |
$query = explode('/', $query );
|
60 |
// absolute path always starts in document
|
61 |
+
if( empty($query[0]) ){
|
62 |
$match->append( $this->getDom() );
|
63 |
}
|
64 |
// else start with base for relative path
|
108 |
|
109 |
/**
|
110 |
* Raw data of internal format
|
111 |
+
* @var array|string
|
112 |
*/
|
113 |
protected $data;
|
114 |
|
123 |
*/
|
124 |
abstract public function export();
|
125 |
|
126 |
+
/**
|
127 |
+
* @param array|string $data
|
128 |
+
*/
|
129 |
final public function __construct( $data ){
|
130 |
$this->data = $data;
|
131 |
}
|
132 |
|
133 |
+
/**
|
134 |
+
* @internal
|
135 |
+
*/
|
136 |
protected function get_nodeName(){
|
137 |
return $this->data[0];
|
138 |
}
|
|
|
139 |
|
140 |
+
|
141 |
+
/**
|
142 |
+
* @internal
|
143 |
+
*/
|
144 |
protected function get_childNodes(){
|
145 |
return $this->getIterator();
|
146 |
}
|
151 |
if( is_callable($method) ){
|
152 |
return call_user_func( $method );
|
153 |
}
|
154 |
+
return null;
|
155 |
}
|
156 |
|
157 |
|
243 |
}
|
244 |
|
245 |
#[ReturnTypeWillChange]
|
246 |
+
public function offsetExists( $offset ){
|
247 |
+
return $offset >= 0 && $offset < $this->n;
|
248 |
}
|
249 |
|
250 |
#[ReturnTypeWillChange]
|
251 |
+
public function offsetGet( $offset ){
|
252 |
+
$node = $this->nodes[$offset];
|
253 |
if( ! $node instanceof LocoConfigNode ){
|
254 |
if( is_array($node) ){
|
255 |
$node = new LocoConfigElement( $node );
|
257 |
else {
|
258 |
$node = new LocoConfigText( $node );
|
259 |
}
|
260 |
+
$this->nodes[$offset] = $node;
|
261 |
}
|
262 |
return $node;
|
263 |
}
|
266 |
* @codeCoverageIgnore
|
267 |
*/
|
268 |
#[ReturnTypeWillChange]
|
269 |
+
public function offsetSet( $offset, $value ){
|
270 |
+
throw new LogicException('Use append');
|
271 |
}
|
272 |
|
273 |
/**
|
274 |
* @codeCoverageIgnore
|
275 |
*/
|
276 |
#[ReturnTypeWillChange]
|
277 |
+
public function offsetUnset( $offset ){
|
278 |
+
throw new LogicException('Read only');
|
279 |
}
|
280 |
|
281 |
|
307 |
|
308 |
/**
|
309 |
* Document
|
310 |
+
* @property-read LocoConfigElement $documentElement
|
311 |
*/
|
312 |
class LocoConfigDocument extends LocoConfigNode {
|
313 |
|
318 |
$this->data = $data;
|
319 |
$this->children = null;
|
320 |
}
|
321 |
+
|
322 |
|
323 |
/**
|
324 |
* @return LocoConfigElement
|
353 |
* Override to keep single element root
|
354 |
*/
|
355 |
public function export(){
|
356 |
+
$root = $this->get_documentElement();
|
357 |
+
return $root ? $root->export() : null;
|
|
|
358 |
}
|
359 |
|
360 |
}
|
402 |
|
403 |
|
404 |
/**
|
405 |
+
* Text node
|
406 |
+
* @property-read string $nodeValue
|
407 |
+
* @property-read string $textContent
|
408 |
*/
|
409 |
class LocoConfigText extends LocoConfigNode {
|
410 |
|
424 |
return (string) $this->data;
|
425 |
}
|
426 |
|
427 |
+
/** @internal */
|
428 |
public function get_nodeValue(){
|
429 |
return (string) $this->data;
|
430 |
}
|
431 |
+
|
432 |
+
/** @internal */
|
433 |
public function get_textContent(){
|
434 |
return (string) $this->data;
|
435 |
}
|
src/config/BundleReader.php
CHANGED
@@ -19,7 +19,6 @@ class Loco_config_BundleReader {
|
|
19 |
|
20 |
|
21 |
/**
|
22 |
-
* @param Loco_fs_File loco.xml file
|
23 |
* @return Loco_package_Bundle
|
24 |
*/
|
25 |
public function loadXml( Loco_fs_File $file ){
|
19 |
|
20 |
|
21 |
/**
|
|
|
22 |
* @return Loco_package_Bundle
|
23 |
*/
|
24 |
public function loadXml( Loco_fs_File $file ){
|
src/config/BundleWriter.php
CHANGED
@@ -69,7 +69,8 @@ class Loco_config_BundleWriter implements JsonSerializable {
|
|
69 |
$systemTargets = $bundle->getSystemTargets();
|
70 |
|
71 |
$dom = $model->getDom();
|
72 |
-
$root = $dom->
|
|
|
73 |
$root->setAttribute( 'name', $bundle->getName() );
|
74 |
|
75 |
/*/ additional headers for information only (not read back in)
|
@@ -78,11 +79,13 @@ class Loco_config_BundleWriter implements JsonSerializable {
|
|
78 |
}*/
|
79 |
|
80 |
foreach( $bundle->exportGrouped() as $domainName => $projects ){
|
81 |
-
$domainElement = $
|
|
|
82 |
$domainElement->setAttribute( 'name', $domainName );
|
83 |
/* @var $proj Loco_package_Project */
|
84 |
foreach( $projects as $proj ){
|
85 |
-
$projElement = $
|
|
|
86 |
// add project name even if it's the same as the bundle name
|
87 |
// when loading however, missing name will default to bundle name
|
88 |
$value = $proj->getName() or $value = $bundle->getName();
|
@@ -93,7 +96,7 @@ class Loco_config_BundleWriter implements JsonSerializable {
|
|
93 |
// <source>
|
94 |
// zero or more source file locations
|
95 |
$sourcesElement = $dom->createElement('source');
|
96 |
-
/* @var $file
|
97 |
foreach( $proj->getConfiguredSources() as $file ){
|
98 |
$sourcesElement->appendChild( $model->createFileElement($file) );
|
99 |
}
|
@@ -131,7 +134,8 @@ class Loco_config_BundleWriter implements JsonSerializable {
|
|
131 |
// <template>
|
132 |
// add single POT template location
|
133 |
if( $file = $proj->getPot() ){
|
134 |
-
$templateElement = $
|
|
|
135 |
$templateElement->appendChild( $model->createFileElement($file) );
|
136 |
// template may be protected from end-user tampering
|
137 |
if( $proj->isPotLocked() ){
|
69 |
$systemTargets = $bundle->getSystemTargets();
|
70 |
|
71 |
$dom = $model->getDom();
|
72 |
+
$root = $dom->createElement('bundle') ;
|
73 |
+
$dom->appendChild($root);
|
74 |
$root->setAttribute( 'name', $bundle->getName() );
|
75 |
|
76 |
/*/ additional headers for information only (not read back in)
|
79 |
}*/
|
80 |
|
81 |
foreach( $bundle->exportGrouped() as $domainName => $projects ){
|
82 |
+
$domainElement = $dom->createElement('domain');
|
83 |
+
$root->appendChild( $domainElement );
|
84 |
$domainElement->setAttribute( 'name', $domainName );
|
85 |
/* @var $proj Loco_package_Project */
|
86 |
foreach( $projects as $proj ){
|
87 |
+
$projElement = $dom->createElement('project');
|
88 |
+
$domainElement->appendChild($projElement);
|
89 |
// add project name even if it's the same as the bundle name
|
90 |
// when loading however, missing name will default to bundle name
|
91 |
$value = $proj->getName() or $value = $bundle->getName();
|
96 |
// <source>
|
97 |
// zero or more source file locations
|
98 |
$sourcesElement = $dom->createElement('source');
|
99 |
+
/* @var Loco_fs_File $file */
|
100 |
foreach( $proj->getConfiguredSources() as $file ){
|
101 |
$sourcesElement->appendChild( $model->createFileElement($file) );
|
102 |
}
|
134 |
// <template>
|
135 |
// add single POT template location
|
136 |
if( $file = $proj->getPot() ){
|
137 |
+
$templateElement = $dom->createElement('template');
|
138 |
+
$projElement->appendChild($templateElement);
|
139 |
$templateElement->appendChild( $model->createFileElement($file) );
|
140 |
// template may be protected from end-user tampering
|
141 |
if( $proj->isPotLocked() ){
|
src/config/FormModel.php
CHANGED
@@ -128,8 +128,9 @@ class Loco_config_FormModel extends Loco_config_ArrayModel {
|
|
128 |
// transform posted data into internal model:
|
129 |
// deliberately not configuring bundle object at this point. simply converting data for storage.
|
130 |
$dom = $this->getDom();
|
131 |
-
$root = $dom->
|
132 |
$root->setAttribute( 'name', $name );
|
|
|
133 |
|
134 |
// bundle level excluded paths
|
135 |
if( $nodes = array_intersect_key( $post->getArrayCopy(), [ 'exclude' => '' ] ) ) {
|
@@ -138,7 +139,7 @@ class Loco_config_FormModel extends Loco_config_ArrayModel {
|
|
138 |
|
139 |
// collect all projects grouped by domain
|
140 |
$domains = [];
|
141 |
-
foreach( $confs as $
|
142 |
if( ! empty($conf['removed']) ){
|
143 |
continue;
|
144 |
}
|
@@ -159,8 +160,9 @@ class Loco_config_FormModel extends Loco_config_ArrayModel {
|
|
159 |
}
|
160 |
// add all domains and their projects
|
161 |
foreach( $domains as $name => $projects ){
|
162 |
-
$parent = $
|
163 |
-
$parent->setAttribute(
|
|
|
164 |
/* @var $project LocoConfigElement */
|
165 |
foreach( $projects as $project ){
|
166 |
$parent->appendChild( $project );
|
@@ -183,13 +185,13 @@ class Loco_config_FormModel extends Loco_config_ArrayModel {
|
|
183 |
if( 'file' === $name || 'directory' === $name || 'path' === $name ){
|
184 |
// form model has multiline "path" nodes which we'll expand from non-empty lines
|
185 |
// resolving empty paths to "." must be done elsewhere. here empty means ignore.
|
186 |
-
foreach( preg_split('
|
187 |
$ext = pathinfo( $path, PATHINFO_EXTENSION );
|
188 |
$child = $parent->appendChild( $dom->createElement( $ext ? 'file' : 'directory' ) );
|
189 |
$child->appendChild( $dom->createTextNode($path) );
|
190 |
}
|
191 |
}
|
192 |
-
// else assume
|
193 |
else {
|
194 |
$parent->setAttribute( $name, $data );
|
195 |
}
|
@@ -201,7 +203,8 @@ class Loco_config_FormModel extends Loco_config_ArrayModel {
|
|
201 |
throw new InvalidArgumentException('Invalid datatype');
|
202 |
}
|
203 |
else {
|
204 |
-
$child = $
|
|
|
205 |
$this->loadStruct( $child, $data );
|
206 |
}
|
207 |
}
|
128 |
// transform posted data into internal model:
|
129 |
// deliberately not configuring bundle object at this point. simply converting data for storage.
|
130 |
$dom = $this->getDom();
|
131 |
+
$root = $dom->createElement('bundle');
|
132 |
$root->setAttribute( 'name', $name );
|
133 |
+
$dom->appendChild($root);
|
134 |
|
135 |
// bundle level excluded paths
|
136 |
if( $nodes = array_intersect_key( $post->getArrayCopy(), [ 'exclude' => '' ] ) ) {
|
139 |
|
140 |
// collect all projects grouped by domain
|
141 |
$domains = [];
|
142 |
+
foreach( $confs as $conf ){
|
143 |
if( ! empty($conf['removed']) ){
|
144 |
continue;
|
145 |
}
|
160 |
}
|
161 |
// add all domains and their projects
|
162 |
foreach( $domains as $name => $projects ){
|
163 |
+
$parent = $dom->createElement('domain');
|
164 |
+
$parent->setAttribute('name',$name);
|
165 |
+
$root->appendChild($parent);
|
166 |
/* @var $project LocoConfigElement */
|
167 |
foreach( $projects as $project ){
|
168 |
$parent->appendChild( $project );
|
185 |
if( 'file' === $name || 'directory' === $name || 'path' === $name ){
|
186 |
// form model has multiline "path" nodes which we'll expand from non-empty lines
|
187 |
// resolving empty paths to "." must be done elsewhere. here empty means ignore.
|
188 |
+
foreach( preg_split('/[\\r\\n]+/', trim( $data,"\n\r"), -1, PREG_SPLIT_NO_EMPTY ) as $path ){
|
189 |
$ext = pathinfo( $path, PATHINFO_EXTENSION );
|
190 |
$child = $parent->appendChild( $dom->createElement( $ext ? 'file' : 'directory' ) );
|
191 |
$child->appendChild( $dom->createTextNode($path) );
|
192 |
}
|
193 |
}
|
194 |
+
// else assume value is an attribute
|
195 |
else {
|
196 |
$parent->setAttribute( $name, $data );
|
197 |
}
|
203 |
throw new InvalidArgumentException('Invalid datatype');
|
204 |
}
|
205 |
else {
|
206 |
+
$child = $dom->createElement($name);
|
207 |
+
$parent->appendChild($child);
|
208 |
$this->loadStruct( $child, $data );
|
209 |
}
|
210 |
}
|
src/config/Model.php
CHANGED
@@ -3,11 +3,6 @@
|
|
3 |
* Generic configuration model serializer for portable Loco configs
|
4 |
*/
|
5 |
abstract class Loco_config_Model {
|
6 |
-
|
7 |
-
/**
|
8 |
-
* @var LocoConfigDocument
|
9 |
-
*/
|
10 |
-
private $dom;
|
11 |
|
12 |
/**
|
13 |
* Root directory for calculating relative file paths
|
@@ -16,7 +11,7 @@ abstract class Loco_config_Model {
|
|
16 |
private $base;
|
17 |
|
18 |
/**
|
19 |
-
* registry of location
|
20 |
* @var array
|
21 |
*/
|
22 |
private $dirs;
|
@@ -27,17 +22,22 @@ abstract class Loco_config_Model {
|
|
27 |
abstract public function query( $query, $context = null );
|
28 |
|
29 |
/**
|
30 |
-
* @return
|
31 |
*/
|
32 |
abstract public function createDom();
|
33 |
|
|
|
|
|
|
|
|
|
|
|
34 |
|
35 |
/**
|
36 |
-
*
|
37 |
*/
|
38 |
final public function __construct(){
|
39 |
$this->dirs = [];
|
40 |
-
$this->
|
41 |
$this->setDirectoryPath( loco_constant('ABSPATH') );
|
42 |
}
|
43 |
|
@@ -54,19 +54,11 @@ abstract class Loco_config_Model {
|
|
54 |
$this->dirs[$key] = $path;
|
55 |
}
|
56 |
}
|
57 |
-
|
58 |
-
|
59 |
-
/**
|
60 |
-
* @return LocoConfigDocument
|
61 |
-
*/
|
62 |
-
public function getDom(){
|
63 |
-
return $this->dom;
|
64 |
-
}
|
65 |
|
66 |
|
67 |
/**
|
68 |
* Evaluate a name constant pointing to a file location
|
69 |
-
* @param string one of 'LOCO_LANG_DIR', 'WP_LANG_DIR', 'WP_PLUGIN_DIR', 'WPMU_PLUGIN_DIR', 'WP_CONTENT_DIR', or 'ABSPATH'
|
70 |
*/
|
71 |
public function getDirectoryPath( $key = null ){
|
72 |
if( is_null($key) ){
|
@@ -87,7 +79,7 @@ abstract class Loco_config_Model {
|
|
87 |
* @return LocoConfigElement
|
88 |
*/
|
89 |
public function createFileElement( Loco_fs_File $file ){
|
90 |
-
$node = $this->
|
91 |
if( $path = $file->getPath() ) {
|
92 |
// Calculate relative path to the config file itself
|
93 |
$relpath = $file->getRelativePath( $this->base );
|
@@ -104,7 +96,7 @@ abstract class Loco_config_Model {
|
|
104 |
$relpath = substr( $path, $len );
|
105 |
break;
|
106 |
}
|
107 |
-
}
|
108 |
}
|
109 |
}
|
110 |
$path = $relpath;
|
@@ -114,20 +106,20 @@ abstract class Loco_config_Model {
|
|
114 |
}
|
115 |
|
116 |
|
117 |
-
|
118 |
/**
|
119 |
-
* @param LocoConfigElement
|
120 |
-
* @param string
|
121 |
* @return LocoConfigText
|
122 |
*/
|
123 |
protected function setFileElementPath( $node, $path ){
|
124 |
-
|
|
|
|
|
125 |
}
|
126 |
|
127 |
|
128 |
-
|
129 |
/**
|
130 |
-
* @param LocoConfigElement
|
131 |
* @return Loco_fs_File
|
132 |
*/
|
133 |
public function evaluateFileElement( $el ){
|
@@ -163,9 +155,9 @@ abstract class Loco_config_Model {
|
|
163 |
}
|
164 |
|
165 |
|
166 |
-
|
167 |
/**
|
168 |
-
* @param LocoConfigElement
|
|
|
169 |
* @return bool
|
170 |
*/
|
171 |
public function evaulateBooleanAttribute( $el, $attr ){
|
3 |
* Generic configuration model serializer for portable Loco configs
|
4 |
*/
|
5 |
abstract class Loco_config_Model {
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
/**
|
8 |
* Root directory for calculating relative file paths
|
11 |
private $base;
|
12 |
|
13 |
/**
|
14 |
+
* registry of location constants that may have been overridden
|
15 |
* @var array
|
16 |
*/
|
17 |
private $dirs;
|
22 |
abstract public function query( $query, $context = null );
|
23 |
|
24 |
/**
|
25 |
+
* @return void
|
26 |
*/
|
27 |
abstract public function createDom();
|
28 |
|
29 |
+
/**
|
30 |
+
* @return DOMDocument|LocoConfigDocument
|
31 |
+
*/
|
32 |
+
abstract public function getDom();
|
33 |
+
|
34 |
|
35 |
/**
|
36 |
+
* Super constructor for all model types
|
37 |
*/
|
38 |
final public function __construct(){
|
39 |
$this->dirs = [];
|
40 |
+
$this->createDom();
|
41 |
$this->setDirectoryPath( loco_constant('ABSPATH') );
|
42 |
}
|
43 |
|
54 |
$this->dirs[$key] = $path;
|
55 |
}
|
56 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
|
59 |
/**
|
60 |
* Evaluate a name constant pointing to a file location
|
61 |
+
* @param string|null $key one of 'LOCO_LANG_DIR', 'WP_LANG_DIR', 'WP_PLUGIN_DIR', 'WPMU_PLUGIN_DIR', 'WP_CONTENT_DIR', or 'ABSPATH'
|
62 |
*/
|
63 |
public function getDirectoryPath( $key = null ){
|
64 |
if( is_null($key) ){
|
79 |
* @return LocoConfigElement
|
80 |
*/
|
81 |
public function createFileElement( Loco_fs_File $file ){
|
82 |
+
$node = $this->getDom()->createElement( $file->isDirectory() ? 'directory' : 'file' );
|
83 |
if( $path = $file->getPath() ) {
|
84 |
// Calculate relative path to the config file itself
|
85 |
$relpath = $file->getRelativePath( $this->base );
|
96 |
$relpath = substr( $path, $len );
|
97 |
break;
|
98 |
}
|
99 |
+
}
|
100 |
}
|
101 |
}
|
102 |
$path = $relpath;
|
106 |
}
|
107 |
|
108 |
|
|
|
109 |
/**
|
110 |
+
* @param LocoConfigElement $node
|
111 |
+
* @param string $path
|
112 |
* @return LocoConfigText
|
113 |
*/
|
114 |
protected function setFileElementPath( $node, $path ){
|
115 |
+
$text = $this->getDom()->createTextNode($path);
|
116 |
+
$node->appendChild($text);
|
117 |
+
return $text;
|
118 |
}
|
119 |
|
120 |
|
|
|
121 |
/**
|
122 |
+
* @param LocoConfigElement $el
|
123 |
* @return Loco_fs_File
|
124 |
*/
|
125 |
public function evaluateFileElement( $el ){
|
155 |
}
|
156 |
|
157 |
|
|
|
158 |
/**
|
159 |
+
* @param LocoConfigElement $el
|
160 |
+
* @param string $attr
|
161 |
* @return bool
|
162 |
*/
|
163 |
public function evaulateBooleanAttribute( $el, $attr ){
|
src/config/XMLModel.php
CHANGED
@@ -3,6 +3,11 @@
|
|
3 |
* Holds a bundle definition in a DOM document
|
4 |
*/
|
5 |
class Loco_config_XMLModel extends Loco_config_Model {
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
/**
|
8 |
* @var DOMXpath
|
@@ -18,7 +23,14 @@ class Loco_config_XMLModel extends Loco_config_Model {
|
|
18 |
$dom->formatOutput = true;
|
19 |
$dom->registerNodeClass('DOMElement','LocoConfig_DOMElement');
|
20 |
$this->xpath = new DOMXPath($dom);
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
}
|
23 |
|
24 |
|
@@ -47,7 +59,7 @@ class Loco_config_XMLModel extends Loco_config_Model {
|
|
47 |
// parse with silent errors, clearing after
|
48 |
$used_errors = libxml_use_internal_errors(true);
|
49 |
|
50 |
-
$
|
51 |
unset( $source );
|
52 |
|
53 |
// fetch errors and ensure clean for next run.
|
@@ -57,21 +69,22 @@ class Loco_config_XMLModel extends Loco_config_Model {
|
|
57 |
|
58 |
// Throw exception if error level exceeds current tolerance
|
59 |
if( $errors ){
|
60 |
-
/* @var $error LibXMLError */
|
61 |
foreach( $errors as $error ){
|
62 |
if( $error->level >= LIBXML_ERR_FATAL ){
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
} // @codeCoverageIgnoreStart
|
67 |
}
|
68 |
}
|
69 |
-
// @codeCoverageIgnoreEnd
|
70 |
|
71 |
-
// Not currently validating against a DTD, but
|
72 |
-
|
|
|
73 |
throw new Loco_error_XmlParseException('Expected <bundle> document element');
|
74 |
}
|
|
|
|
|
|
|
75 |
|
76 |
$this->xpath = new DOMXPath($dom);
|
77 |
}
|
3 |
* Holds a bundle definition in a DOM document
|
4 |
*/
|
5 |
class Loco_config_XMLModel extends Loco_config_Model {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* @var DOMDocument
|
9 |
+
*/
|
10 |
+
private $dom;
|
11 |
|
12 |
/**
|
13 |
* @var DOMXpath
|
23 |
$dom->formatOutput = true;
|
24 |
$dom->registerNodeClass('DOMElement','LocoConfig_DOMElement');
|
25 |
$this->xpath = new DOMXPath($dom);
|
26 |
+
$this->dom = $dom;
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @return DOMDocument
|
31 |
+
*/
|
32 |
+
public function getDom(){
|
33 |
+
return $this->dom;
|
34 |
}
|
35 |
|
36 |
|
59 |
// parse with silent errors, clearing after
|
60 |
$used_errors = libxml_use_internal_errors(true);
|
61 |
|
62 |
+
$dom->loadXML( $source, LIBXML_NONET );
|
63 |
unset( $source );
|
64 |
|
65 |
// fetch errors and ensure clean for next run.
|
69 |
|
70 |
// Throw exception if error level exceeds current tolerance
|
71 |
if( $errors ){
|
|
|
72 |
foreach( $errors as $error ){
|
73 |
if( $error->level >= LIBXML_ERR_FATAL ){
|
74 |
+
throw new Loco_error_XmlParseException( trim($error->message) );
|
75 |
+
// ->setContext( $error->line, $error->column, $source );
|
76 |
+
}
|
|
|
77 |
}
|
78 |
}
|
|
|
79 |
|
80 |
+
// Not currently validating against a DTD, but will preempt generic model loading errors
|
81 |
+
$root = $dom->documentElement;
|
82 |
+
if( ! $root instanceof DOMNode ){
|
83 |
throw new Loco_error_XmlParseException('Expected <bundle> document element');
|
84 |
}
|
85 |
+
if( 'bundle' !== strtolower($root->nodeName) ){
|
86 |
+
throw new Loco_error_XmlParseException('Expected <bundle> document element, got <'.$root->nodeName.'>');
|
87 |
+
}
|
88 |
|
89 |
$this->xpath = new DOMXPath($dom);
|
90 |
}
|
src/error/AdminNotices.php
CHANGED
@@ -29,7 +29,7 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
29 |
|
30 |
|
31 |
/**
|
32 |
-
* @param Loco_error_Exception
|
33 |
* @return Loco_error_Exception
|
34 |
*/
|
35 |
public static function add( Loco_error_Exception $error ){
|
@@ -62,7 +62,7 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
62 |
|
63 |
/**
|
64 |
* Raise a success message
|
65 |
-
* @param string
|
66 |
* @return Loco_error_Exception
|
67 |
*/
|
68 |
public static function success( $message ){
|
@@ -73,7 +73,7 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
73 |
|
74 |
/**
|
75 |
* Raise a failure message
|
76 |
-
* @param string
|
77 |
* @return Loco_error_Exception
|
78 |
*/
|
79 |
public static function err( $message ){
|
@@ -84,7 +84,7 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
84 |
|
85 |
/**
|
86 |
* Raise a warning message
|
87 |
-
* @param string
|
88 |
* @return Loco_error_Exception
|
89 |
*/
|
90 |
public static function warn( $message ){
|
@@ -95,7 +95,7 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
95 |
|
96 |
/**
|
97 |
* Raise a generic info message
|
98 |
-
* @param string
|
99 |
* @return Loco_error_Exception
|
100 |
*/
|
101 |
public static function info( $message ){
|
@@ -106,7 +106,7 @@ class Loco_error_AdminNotices extends Loco_hooks_Hookable {
|
|
106 |
|
107 |
/**
|
108 |
* Raise a debug notice, if debug is enabled
|
109 |
-
* @param string
|
110 |
* @return Loco_error_Debug
|
111 |
*/
|
112 |
public static function debug( $message ){
|
29 |
|
30 |
|
31 |
/**
|
32 |
+
* @param Loco_error_Exception $error
|
33 |
* @return Loco_error_Exception
|
34 |
*/
|
35 |
public static function add( Loco_error_Exception $error ){
|
62 |
|
63 |
/**
|
64 |
* Raise a success message
|
65 |
+
* @param string $message
|
66 |
* @return Loco_error_Exception
|
67 |
*/
|
68 |
public static function success( $message ){
|
73 |
|
74 |
/**
|
75 |
* Raise a failure message
|
76 |
+
* @param string $message
|
77 |
* @return Loco_error_Exception
|
78 |
*/
|
79 |
public static function err( $message ){
|
84 |
|
85 |
/**
|
86 |
* Raise a warning message
|
87 |
+
* @param string $message
|
88 |
* @return Loco_error_Exception
|
89 |
*/
|
90 |
public static function warn( $message ){
|
95 |
|
96 |
/**
|
97 |
* Raise a generic info message
|
98 |
+
* @param string $message
|
99 |
* @return Loco_error_Exception
|
100 |
*/
|
101 |
public static function info( $message ){
|
106 |
|
107 |
/**
|
108 |
* Raise a debug notice, if debug is enabled
|
109 |
+
* @param string $message
|
110 |
* @return Loco_error_Debug
|
111 |
*/
|
112 |
public static function debug( $message ){
|
src/error/Exception.php
CHANGED
@@ -86,7 +86,7 @@ class Loco_error_Exception extends Exception implements JsonSerializable {
|
|
86 |
|
87 |
|
88 |
/**
|
89 |
-
* @param int number of levels up from callee
|
90 |
* @return Loco_error_Exception
|
91 |
*/
|
92 |
public function setCallee( $depth = 0 ){
|
@@ -101,15 +101,14 @@ class Loco_error_Exception extends Exception implements JsonSerializable {
|
|
101 |
|
102 |
/**
|
103 |
* Write this error to file regardless of log level
|
104 |
-
* @param Loco_error_Exception
|
105 |
* @return void
|
106 |
*/
|
107 |
public function log(){
|
108 |
$file = new Loco_fs_File( $this->getRealFile() );
|
109 |
$path = $file->getRelativePath( loco_plugin_root() );
|
110 |
$text = sprintf('[Loco.%s] "%s" in %s:%u', $this->getType(), $this->getMessage(), $path, $this->getRealLine() );
|
111 |
-
// separate error log
|
112 |
-
if( defined('
|
113 |
error_log( '['.date('c').'] '.$text."\n", 3, 'debug.log' );
|
114 |
}
|
115 |
// Else write to default PHP log, but note that WordPress may have set this to wp-content/debug.log.
|
@@ -184,8 +183,8 @@ class Loco_error_Exception extends Exception implements JsonSerializable {
|
|
184 |
|
185 |
/**
|
186 |
* Push navigation links into error. Use for help pages etc..
|
187 |
-
* @param string
|
188 |
-
* @param string
|
189 |
* @return Loco_error_Exception
|
190 |
*/
|
191 |
public function addLink( $href, $text ){
|
@@ -204,7 +203,7 @@ class Loco_error_Exception extends Exception implements JsonSerializable {
|
|
204 |
|
205 |
/**
|
206 |
* Convert generic exception to one of ours
|
207 |
-
* @param Exception original error
|
208 |
* @return Loco_error_Exception
|
209 |
*/
|
210 |
public static function convert( Exception $e ){
|
86 |
|
87 |
|
88 |
/**
|
89 |
+
* @param int $depth number of levels up from callee
|
90 |
* @return Loco_error_Exception
|
91 |
*/
|
92 |
public function setCallee( $depth = 0 ){
|
101 |
|
102 |
/**
|
103 |
* Write this error to file regardless of log level
|
|
|
104 |
* @return void
|
105 |
*/
|
106 |
public function log(){
|
107 |
$file = new Loco_fs_File( $this->getRealFile() );
|
108 |
$path = $file->getRelativePath( loco_plugin_root() );
|
109 |
$text = sprintf('[Loco.%s] "%s" in %s:%u', $this->getType(), $this->getMessage(), $path, $this->getRealLine() );
|
110 |
+
// separate error log for cli tests
|
111 |
+
if( 'cli' === PHP_SAPI && defined('LOCO_TEST_DATA_ROOT') ){
|
112 |
error_log( '['.date('c').'] '.$text."\n", 3, 'debug.log' );
|
113 |
}
|
114 |
// Else write to default PHP log, but note that WordPress may have set this to wp-content/debug.log.
|
183 |
|
184 |
/**
|
185 |
* Push navigation links into error. Use for help pages etc..
|
186 |
+
* @param string $href
|
187 |
+
* @param string $text
|
188 |
* @return Loco_error_Exception
|
189 |
*/
|
190 |
public function addLink( $href, $text ){
|
203 |
|
204 |
/**
|
205 |
* Convert generic exception to one of ours
|
206 |
+
* @param Exception $e original error
|
207 |
* @return Loco_error_Exception
|
208 |
*/
|
209 |
public static function convert( Exception $e ){
|
src/fs/File.php
CHANGED
@@ -580,7 +580,7 @@ class Loco_fs_File {
|
|
580 |
|
581 |
/**
|
582 |
* Copy this object with an alternative file extension
|
583 |
-
* @param string new extension
|
584 |
* @return self
|
585 |
*/
|
586 |
public function cloneExtension( $ext ){
|
@@ -591,7 +591,7 @@ class Loco_fs_File {
|
|
591 |
|
592 |
/**
|
593 |
* Copy this object with an alternative name under the same directory
|
594 |
-
* @param string new name
|
595 |
* @return self
|
596 |
*/
|
597 |
public function cloneBasename( $name ){
|
@@ -602,24 +602,6 @@ class Loco_fs_File {
|
|
602 |
}
|
603 |
|
604 |
|
605 |
-
/**
|
606 |
-
* Copy this object as a WordPress script translation file
|
607 |
-
* @param string relative path to .js file presumed to exist
|
608 |
-
* @return self
|
609 |
-
*/
|
610 |
-
public function cloneJson( $ref ){
|
611 |
-
$name = $this->filename();
|
612 |
-
if( is_string($ref) && '' !== $ref ){
|
613 |
-
// Hashable reference is always finally unminified, as per load_script_textdomain()
|
614 |
-
if( substr($ref,-7) === '.min.js' ) {
|
615 |
-
$ref = substr($ref,0,-7).'.js';
|
616 |
-
}
|
617 |
-
$name .= '-'.md5($ref);
|
618 |
-
}
|
619 |
-
return $this->cloneBasename( $name.'.json' );
|
620 |
-
}
|
621 |
-
|
622 |
-
|
623 |
/**
|
624 |
* Ensure full parent directory tree exists
|
625 |
* @return Loco_fs_Directory|null
|
@@ -634,7 +616,7 @@ class Loco_fs_File {
|
|
634 |
|
635 |
|
636 |
/**
|
637 |
-
* @param string file contents
|
638 |
* @return int number of bytes written to file
|
639 |
*/
|
640 |
public function putContents( $data ){
|
580 |
|
581 |
/**
|
582 |
* Copy this object with an alternative file extension
|
583 |
+
* @param string $ext new extension
|
584 |
* @return self
|
585 |
*/
|
586 |
public function cloneExtension( $ext ){
|
591 |
|
592 |
/**
|
593 |
* Copy this object with an alternative name under the same directory
|
594 |
+
* @param string $name new name
|
595 |
* @return self
|
596 |
*/
|
597 |
public function cloneBasename( $name ){
|
602 |
}
|
603 |
|
604 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
605 |
/**
|
606 |
* Ensure full parent directory tree exists
|
607 |
* @return Loco_fs_Directory|null
|
616 |
|
617 |
|
618 |
/**
|
619 |
+
* @param string $data file contents
|
620 |
* @return int number of bytes written to file
|
621 |
*/
|
622 |
public function putContents( $data ){
|
src/fs/LocaleFile.php
CHANGED
@@ -41,7 +41,7 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
|
|
41 |
$this->prefix = implode('-',$parts);
|
42 |
// handle situations where unsuffixed name is wrongly taken as the prefix
|
43 |
// e.g. "de.po" is valid but "hello.po" is not.
|
44 |
-
// There are still some
|
45 |
if( ! $this->prefix && ! $this->getLocale()->isValid() ){
|
46 |
$this->prefix = $this->suffix;
|
47 |
$this->suffix = '';
|
@@ -69,7 +69,7 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
|
|
69 |
|
70 |
|
71 |
/**
|
72 |
-
* @param Loco_locale
|
73 |
* @return Loco_fs_LocaleFile
|
74 |
*/
|
75 |
public function cloneLocale( Loco_locale $locale ){
|
@@ -133,6 +133,5 @@ class Loco_fs_LocaleFile extends Loco_fs_File {
|
|
133 |
$info = $this->split();
|
134 |
return $info[0] && ! $info[1];
|
135 |
}
|
136 |
-
|
137 |
-
|
138 |
}
|
41 |
$this->prefix = implode('-',$parts);
|
42 |
// handle situations where unsuffixed name is wrongly taken as the prefix
|
43 |
// e.g. "de.po" is valid but "hello.po" is not.
|
44 |
+
// There are still some ambiguous situations, e.g. "foo-bar.po" is valid, but nonsense
|
45 |
if( ! $this->prefix && ! $this->getLocale()->isValid() ){
|
46 |
$this->prefix = $this->suffix;
|
47 |
$this->suffix = '';
|
69 |
|
70 |
|
71 |
/**
|
72 |
+
* @param $locale Loco_locale
|
73 |
* @return Loco_fs_LocaleFile
|
74 |
*/
|
75 |
public function cloneLocale( Loco_locale $locale ){
|
133 |
$info = $this->split();
|
134 |
return $info[0] && ! $info[1];
|
135 |
}
|
136 |
+
|
|
|
137 |
}
|
src/fs/Locations.php
CHANGED
@@ -119,7 +119,7 @@ class Loco_fs_Locations extends ArrayObject {
|
|
119 |
|
120 |
|
121 |
/**
|
122 |
-
*
|
123 |
*/
|
124 |
public function __construct( array $paths ){
|
125 |
parent::__construct( [] );
|
@@ -130,7 +130,7 @@ class Loco_fs_Locations extends ArrayObject {
|
|
130 |
|
131 |
|
132 |
/**
|
133 |
-
* @param string normalized absolute path
|
134 |
* @return Loco_fs_Locations
|
135 |
*/
|
136 |
public function add( $path ){
|
@@ -144,7 +144,7 @@ class Loco_fs_Locations extends ArrayObject {
|
|
144 |
|
145 |
/**
|
146 |
* Check if a given path begins with any of the registered ones
|
147 |
-
* @param string absolute path
|
148 |
* @return bool whether path matched
|
149 |
*/
|
150 |
public function check( $path ){
|
@@ -162,7 +162,7 @@ class Loco_fs_Locations extends ArrayObject {
|
|
162 |
/**
|
163 |
* Match location and return the relative subpath.
|
164 |
* Note that exact match is returned as "." indicating self
|
165 |
-
* @param string
|
166 |
* @return string | null
|
167 |
*/
|
168 |
public function rel( $path ){
|
@@ -181,7 +181,7 @@ class Loco_fs_Locations extends ArrayObject {
|
|
181 |
|
182 |
|
183 |
/**
|
184 |
-
* @param string
|
185 |
* @return string[]
|
186 |
*/
|
187 |
private function expand( $path ){
|
119 |
|
120 |
|
121 |
/**
|
122 |
+
* Create instance from list of locations
|
123 |
*/
|
124 |
public function __construct( array $paths ){
|
125 |
parent::__construct( [] );
|
130 |
|
131 |
|
132 |
/**
|
133 |
+
* @param string $path normalized absolute path
|
134 |
* @return Loco_fs_Locations
|
135 |
*/
|
136 |
public function add( $path ){
|
144 |
|
145 |
/**
|
146 |
* Check if a given path begins with any of the registered ones
|
147 |
+
* @param string $path absolute path
|
148 |
* @return bool whether path matched
|
149 |
*/
|
150 |
public function check( $path ){
|
162 |
/**
|
163 |
* Match location and return the relative subpath.
|
164 |
* Note that exact match is returned as "." indicating self
|
165 |
+
* @param string $path
|
166 |
* @return string | null
|
167 |
*/
|
168 |
public function rel( $path ){
|
181 |
|
182 |
|
183 |
/**
|
184 |
+
* @param string $path
|
185 |
* @return string[]
|
186 |
*/
|
187 |
private function expand( $path ){
|
src/fs/Siblings.php
CHANGED
@@ -14,7 +14,15 @@ class Loco_fs_Siblings {
|
|
14 |
*/
|
15 |
private $mo;
|
16 |
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
public function __construct( Loco_fs_File $file ){
|
19 |
$ext = $file->extension();
|
20 |
if( 'pot' === $ext ){
|
@@ -34,6 +42,15 @@ class Loco_fs_Siblings {
|
|
34 |
}
|
35 |
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
/**
|
38 |
* Get all dependant files (including self) that actually exist on disk
|
39 |
* @return Loco_fs_File[]
|
@@ -53,7 +70,7 @@ class Loco_fs_Siblings {
|
|
53 |
}
|
54 |
// JSON exports, unless in POT mode:
|
55 |
if( 'po' === $this->po->extension() ){
|
56 |
-
$siblings = array_merge($siblings,$this->getJsons());
|
57 |
}
|
58 |
|
59 |
return $siblings;
|
@@ -77,12 +94,18 @@ class Loco_fs_Siblings {
|
|
77 |
|
78 |
|
79 |
/**
|
|
|
80 |
* @return Loco_fs_File[]
|
81 |
*/
|
82 |
-
public function getJsons(){
|
83 |
$list = new Loco_fs_FileList;
|
84 |
$name = $this->po->filename();
|
85 |
$finder = new Loco_fs_FileFinder( $this->po->dirname() );
|
|
|
|
|
|
|
|
|
|
|
86 |
// match .json files with same name as .po, plus hashed names
|
87 |
$regex = '/^'.preg_quote($name,'/').'-[0-9a-f]{32}$/';
|
88 |
/* @var Loco_fs_File $file */
|
14 |
*/
|
15 |
private $mo;
|
16 |
|
17 |
+
/**
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
private $td = '';
|
21 |
+
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @param Loco_fs_File $file Master file, either PO/MO or POT
|
25 |
+
*/
|
26 |
public function __construct( Loco_fs_File $file ){
|
27 |
$ext = $file->extension();
|
28 |
if( 'pot' === $ext ){
|
42 |
}
|
43 |
|
44 |
|
45 |
+
/**
|
46 |
+
* Set text domain explicitly, required if unknown from PO/POT file name
|
47 |
+
* @return void
|
48 |
+
*/
|
49 |
+
public function setDomain( $domain ){
|
50 |
+
$this->td = $domain ?: 'default';
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
/**
|
55 |
* Get all dependant files (including self) that actually exist on disk
|
56 |
* @return Loco_fs_File[]
|
70 |
}
|
71 |
// JSON exports, unless in POT mode:
|
72 |
if( 'po' === $this->po->extension() ){
|
73 |
+
$siblings = array_merge($siblings,$this->getJsons($this->td));
|
74 |
}
|
75 |
|
76 |
return $siblings;
|
94 |
|
95 |
|
96 |
/**
|
97 |
+
* @param string $prefix Prefix required in case not present in PO file name
|
98 |
* @return Loco_fs_File[]
|
99 |
*/
|
100 |
+
public function getJsons( $prefix ){
|
101 |
$list = new Loco_fs_FileList;
|
102 |
$name = $this->po->filename();
|
103 |
$finder = new Loco_fs_FileFinder( $this->po->dirname() );
|
104 |
+
// Handle problem that PO file has no text domain prefix
|
105 |
+
if( $prefix && 'default' !== $prefix && preg_match('/^[a-z]{2,3}(?:_[a-z\\d_]+)?$/i',$name) ){
|
106 |
+
$name = $prefix.'-'.$name;
|
107 |
+
}
|
108 |
+
// locale must also be known, which it should be if only localised po file is set
|
109 |
// match .json files with same name as .po, plus hashed names
|
110 |
$regex = '/^'.preg_quote($name,'/').'-[0-9a-f]{32}$/';
|
111 |
/* @var Loco_fs_File $file */
|
src/gettext/Compiler.php
CHANGED
@@ -29,7 +29,7 @@ class Loco_gettext_Compiler {
|
|
29 |
|
30 |
/**
|
31 |
* Construct with primary file (PO) being saved
|
32 |
-
* @param Loco_fs_LocaleFile Localised PO file which may or may not exist yet
|
33 |
*/
|
34 |
public function __construct( Loco_fs_LocaleFile $pofile ){
|
35 |
$this->fs = new Loco_api_WordPressFileSystem;
|
@@ -44,7 +44,7 @@ class Loco_gettext_Compiler {
|
|
44 |
|
45 |
/**
|
46 |
* Set overwrite mode
|
47 |
-
* @param bool whether to overwrite existing files during compilation
|
48 |
* @return self
|
49 |
*/
|
50 |
public function overwrite( $overwrite ){
|
@@ -54,8 +54,6 @@ class Loco_gettext_Compiler {
|
|
54 |
|
55 |
|
56 |
/**
|
57 |
-
* @param Loco_gettext_Data
|
58 |
-
* @param Loco_package_Project|null
|
59 |
* @return self
|
60 |
*/
|
61 |
public function writeAll( Loco_gettext_Data $po, Loco_package_Project $project = null ){
|
@@ -69,7 +67,6 @@ class Loco_gettext_Compiler {
|
|
69 |
|
70 |
|
71 |
/**
|
72 |
-
* @param Loco_gettext_Data PO data
|
73 |
* @return int bytes written to PO file
|
74 |
* @throws Loco_error_WriteException
|
75 |
*/
|
@@ -92,7 +89,6 @@ class Loco_gettext_Compiler {
|
|
92 |
|
93 |
|
94 |
/**
|
95 |
-
* @param Loco_gettext_Data PO data
|
96 |
* @return int bytes written to MO file
|
97 |
*/
|
98 |
public function writeMo( Loco_gettext_Data $po ){
|
@@ -112,8 +108,8 @@ class Loco_gettext_Compiler {
|
|
112 |
|
113 |
|
114 |
/**
|
115 |
-
* @param Loco_package_Project Translation set, required to resolve script paths
|
116 |
-
* @param Loco_gettext_Data PO data to export
|
117 |
* @return Loco_fs_FileList All json files created
|
118 |
*/
|
119 |
public function writeJson( Loco_package_Project $project, Loco_gettext_Data $po ){
|
@@ -182,23 +178,25 @@ class Loco_gettext_Compiler {
|
|
182 |
$buffer[$use] = $fragment;
|
183 |
}
|
184 |
}
|
185 |
-
|
186 |
-
|
187 |
-
$
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
|
|
|
|
195 |
}
|
|
|
196 |
}
|
197 |
-
$buffer = null;
|
198 |
}
|
199 |
// clean up redundant JSONs including if no JSONs were compiled
|
200 |
if( Loco_data_Settings::get()->jed_clean ){
|
201 |
-
foreach( $this->files->getJsons() as $path ){
|
202 |
$jsonfile = new Loco_fs_File($path);
|
203 |
if( ! $jsons->has($jsonfile) ){
|
204 |
try {
|
@@ -215,6 +213,27 @@ class Loco_gettext_Compiler {
|
|
215 |
}
|
216 |
|
217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
/**
|
219 |
* Fetch compilation summary and raise most relevant success message
|
220 |
* @return Loco_mvc_ViewParams
|
@@ -259,7 +278,7 @@ class Loco_gettext_Compiler {
|
|
259 |
|
260 |
/**
|
261 |
* @param Loco_fs_File $file
|
262 |
-
* @param string Serialized JSON to write to given file
|
263 |
* @return int bytes written
|
264 |
*/
|
265 |
public function writeFile( Loco_fs_File $file, $data ){
|
29 |
|
30 |
/**
|
31 |
* Construct with primary file (PO) being saved
|
32 |
+
* @param Loco_fs_LocaleFile $pofile Localised PO file which may or may not exist yet
|
33 |
*/
|
34 |
public function __construct( Loco_fs_LocaleFile $pofile ){
|
35 |
$this->fs = new Loco_api_WordPressFileSystem;
|
44 |
|
45 |
/**
|
46 |
* Set overwrite mode
|
47 |
+
* @param bool $overwrite whether to overwrite existing files during compilation
|
48 |
* @return self
|
49 |
*/
|
50 |
public function overwrite( $overwrite ){
|
54 |
|
55 |
|
56 |
/**
|
|
|
|
|
57 |
* @return self
|
58 |
*/
|
59 |
public function writeAll( Loco_gettext_Data $po, Loco_package_Project $project = null ){
|
67 |
|
68 |
|
69 |
/**
|
|
|
70 |
* @return int bytes written to PO file
|
71 |
* @throws Loco_error_WriteException
|
72 |
*/
|
89 |
|
90 |
|
91 |
/**
|
|
|
92 |
* @return int bytes written to MO file
|
93 |
*/
|
94 |
public function writeMo( Loco_gettext_Data $po ){
|
108 |
|
109 |
|
110 |
/**
|
111 |
+
* @param Loco_package_Project $project Translation set, required to resolve script paths
|
112 |
+
* @param Loco_gettext_Data $po PO data to export
|
113 |
* @return Loco_fs_FileList All json files created
|
114 |
*/
|
115 |
public function writeJson( Loco_package_Project $project, Loco_gettext_Data $po ){
|
178 |
$buffer[$use] = $fragment;
|
179 |
}
|
180 |
}
|
181 |
+
if( $buffer ){
|
182 |
+
// write all buffered fragments to their computed JSON paths
|
183 |
+
foreach( $buffer as $ref => $fragment ) {
|
184 |
+
$jsonfile = $this->cloneJson($pofile,$ref,$domain);
|
185 |
+
try {
|
186 |
+
$this->writeFile( $jsonfile, $fragment->msgjed($domain,$ref) );
|
187 |
+
$jsons->add($jsonfile);
|
188 |
+
}
|
189 |
+
catch( Loco_error_WriteException $e ){
|
190 |
+
Loco_error_AdminNotices::debug( $e->getMessage() );
|
191 |
+
Loco_error_AdminNotices::warn( sprintf(__('JSON compilation failed for %s','loco-translate'),$ref));
|
192 |
+
}
|
193 |
}
|
194 |
+
$buffer = null;
|
195 |
}
|
|
|
196 |
}
|
197 |
// clean up redundant JSONs including if no JSONs were compiled
|
198 |
if( Loco_data_Settings::get()->jed_clean ){
|
199 |
+
foreach( $this->files->getJsons($domain) as $path ){
|
200 |
$jsonfile = new Loco_fs_File($path);
|
201 |
if( ! $jsons->has($jsonfile) ){
|
202 |
try {
|
213 |
}
|
214 |
|
215 |
|
216 |
+
/**
|
217 |
+
* Clone localised file as a WordPress script translation file
|
218 |
+
* @return Loco_fs_File
|
219 |
+
*/
|
220 |
+
private function cloneJson( Loco_fs_File $pofile, $ref, $domain ){
|
221 |
+
$name = $pofile->filename();
|
222 |
+
// Theme author PO files have no text domain, but JSON files must always be prefixed
|
223 |
+
if( $domain && 'default' !== $domain && preg_match('/^[a-z]{2,3}(?:_[a-z\\d_]+)?$/i',$name) ){
|
224 |
+
$name = $domain.'-'.$name;
|
225 |
+
}
|
226 |
+
// Hashable reference is always finally unminified, as per load_script_textdomain()
|
227 |
+
if( is_string($ref) && '' !== $ref ){
|
228 |
+
if( substr($ref,-7) === '.min.js' ) {
|
229 |
+
$ref = substr($ref,0,-7).'.js';
|
230 |
+
}
|
231 |
+
$name .= '-'.md5($ref);
|
232 |
+
}
|
233 |
+
return $pofile->cloneBasename( $name.'.json' );
|
234 |
+
}
|
235 |
+
|
236 |
+
|
237 |
/**
|
238 |
* Fetch compilation summary and raise most relevant success message
|
239 |
* @return Loco_mvc_ViewParams
|
278 |
|
279 |
/**
|
280 |
* @param Loco_fs_File $file
|
281 |
+
* @param string $data Serialized JSON to write to given file
|
282 |
* @return int bytes written
|
283 |
*/
|
284 |
public function writeFile( Loco_fs_File $file, $data ){
|
src/gettext/Data.php
CHANGED
@@ -9,7 +9,6 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
9 |
|
10 |
/**
|
11 |
* Normalize file extension to internal type
|
12 |
-
* @param Loco_fs_File
|
13 |
* @return string Normalized file extension "po", "pot" or "mo"
|
14 |
* @throws Loco_error_Exception
|
15 |
*/
|
@@ -25,7 +24,6 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
25 |
|
26 |
|
27 |
/**
|
28 |
-
* @param Loco_fs_File
|
29 |
* @return Loco_gettext_Data
|
30 |
*/
|
31 |
public static function load( Loco_fs_File $file ){
|
@@ -49,7 +47,6 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
49 |
|
50 |
/**
|
51 |
* Like load but just pulls header, saving a full parse. PO only
|
52 |
-
* @param Loco_fs_File
|
53 |
* @return LocoPoHeaders
|
54 |
* @throws InvalidArgumentException
|
55 |
*/
|
@@ -64,7 +61,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
64 |
|
65 |
|
66 |
/**
|
67 |
-
* @param string
|
68 |
* @return Loco_gettext_Data
|
69 |
*/
|
70 |
public static function fromSource( $src ){
|
@@ -74,7 +71,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
74 |
|
75 |
|
76 |
/**
|
77 |
-
* @param string
|
78 |
* @return Loco_gettext_Data
|
79 |
*/
|
80 |
public static function fromBinary( $bin ){
|
@@ -95,7 +92,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
95 |
/**
|
96 |
* Ensure PO source is UTF-8.
|
97 |
* Required if we want PO code when we're not parsing it. e.g. source view
|
98 |
-
* @param string
|
99 |
* @return string
|
100 |
*/
|
101 |
public static function ensureUtf8( $src ){
|
@@ -140,7 +137,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
140 |
|
141 |
/**
|
142 |
* Get final UTF-8 string for writing to file
|
143 |
-
* @param bool
|
144 |
* @return string
|
145 |
*/
|
146 |
public function msgcat( $sort = false ){
|
@@ -158,8 +155,8 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
158 |
|
159 |
/**
|
160 |
* Compile JED flavour JSON
|
161 |
-
* @param string text domain for JED metadata
|
162 |
-
* @param string source file that uses included strings
|
163 |
* @return string
|
164 |
*/
|
165 |
public function msgjed( $domain = 'messages', $source = '' ){
|
@@ -316,9 +313,6 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
316 |
|
317 |
|
318 |
/**
|
319 |
-
* @param string[] Required headers
|
320 |
-
* @param string[] Default headers
|
321 |
-
* @param string[] Custom headers
|
322 |
* @return LocoPoHeaders
|
323 |
*/
|
324 |
private function applyHeaders( array $required = [], array $defaults = [], array $custom = [] ){
|
@@ -344,9 +338,9 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
344 |
/**
|
345 |
* Remap proprietary base path when PO file is moving to another location.
|
346 |
*
|
347 |
-
* @param Loco_fs_File the file that was originally extracted to (POT)
|
348 |
-
* @param Loco_fs_File the file that must now target references relative to itself
|
349 |
-
* @param string vendor name used in header keys
|
350 |
* @return bool whether base header was altered
|
351 |
*/
|
352 |
public function rebaseHeader( Loco_fs_File $origin, Loco_fs_File $target, $vendor ){
|
@@ -368,7 +362,6 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
368 |
|
369 |
/**
|
370 |
* Inherit meta values from header given, but leave standard headers intact.
|
371 |
-
* @param LocoPoHeaders source header
|
372 |
*/
|
373 |
public function inheritHeader( LocoPoHeaders $source ){
|
374 |
$target = $this->getHeaders();
|
@@ -381,7 +374,7 @@ class Loco_gettext_Data extends LocoPoIterator implements JsonSerializable {
|
|
381 |
|
382 |
|
383 |
/**
|
384 |
-
* @param string
|
385 |
* @return int
|
386 |
*/
|
387 |
public static function parseDate( $podate ){
|
9 |
|
10 |
/**
|
11 |
* Normalize file extension to internal type
|
|
|
12 |
* @return string Normalized file extension "po", "pot" or "mo"
|
13 |
* @throws Loco_error_Exception
|
14 |
*/
|
24 |
|
25 |
|
26 |
/**
|
|
|
27 |
* @return Loco_gettext_Data
|
28 |
*/
|
29 |
public static function load( Loco_fs_File $file ){
|
47 |
|
48 |
/**
|
49 |
* Like load but just pulls header, saving a full parse. PO only
|
|
|
50 |
* @return LocoPoHeaders
|
51 |
* @throws InvalidArgumentException
|
52 |
*/
|
61 |
|
62 |
|
63 |
/**
|
64 |
+
* @param string $src PO source
|
65 |
* @return Loco_gettext_Data
|
66 |
*/
|
67 |
public static function fromSource( $src ){
|
71 |
|
72 |
|
73 |
/**
|
74 |
+
* @param string $bin MO bytes
|
75 |
* @return Loco_gettext_Data
|
76 |
*/
|
77 |
public static function fromBinary( $bin ){
|
92 |
/**
|
93 |
* Ensure PO source is UTF-8.
|
94 |
* Required if we want PO code when we're not parsing it. e.g. source view
|
95 |
+
* @param string $src PO source
|
96 |
* @return string
|
97 |
*/
|
98 |
public static function ensureUtf8( $src ){
|
137 |
|
138 |
/**
|
139 |
* Get final UTF-8 string for writing to file
|
140 |
+
* @param bool $sort Whether to sort output, generally only for extracting strings
|
141 |
* @return string
|
142 |
*/
|
143 |
public function msgcat( $sort = false ){
|
155 |
|
156 |
/**
|
157 |
* Compile JED flavour JSON
|
158 |
+
* @param string $domain text domain for JED metadata
|
159 |
+
* @param string $source reference to file that uses included strings
|
160 |
* @return string
|
161 |
*/
|
162 |
public function msgjed( $domain = 'messages', $source = '' ){
|
313 |
|
314 |
|
315 |
/**
|
|
|
|
|
|
|
316 |
* @return LocoPoHeaders
|
317 |
*/
|
318 |
private function applyHeaders( array $required = [], array $defaults = [], array $custom = [] ){
|
338 |
/**
|
339 |
* Remap proprietary base path when PO file is moving to another location.
|
340 |
*
|
341 |
+
* @param Loco_fs_File $origin the file that was originally extracted to (POT)
|
342 |
+
* @param Loco_fs_File $target the file that must now target references relative to itself
|
343 |
+
* @param string $vendor name used in header keys
|
344 |
* @return bool whether base header was altered
|
345 |
*/
|
346 |
public function rebaseHeader( Loco_fs_File $origin, Loco_fs_File $target, $vendor ){
|
362 |
|
363 |
/**
|
364 |
* Inherit meta values from header given, but leave standard headers intact.
|
|
|
365 |
*/
|
366 |
public function inheritHeader( LocoPoHeaders $source ){
|
367 |
$target = $this->getHeaders();
|
374 |
|
375 |
|
376 |
/**
|
377 |
+
* @param string $podate Gettext data formatted "YEAR-MO-DA HO:MI+ZONE"
|
378 |
* @return int
|
379 |
*/
|
380 |
public static function parseDate( $podate ){
|
src/package/Bundle.php
CHANGED
@@ -514,11 +514,8 @@ abstract class Loco_package_Bundle extends ArrayObject implements JsonSerializab
|
|
514 |
}
|
515 |
|
516 |
|
517 |
-
|
518 |
/**
|
519 |
* Get XML configuration file used to define this bundle
|
520 |
-
* TODO will we also support JSON for when dom extension is loaded?
|
521 |
-
* TODO support custom location for user-saved XML?
|
522 |
* @return Loco_fs_File
|
523 |
*/
|
524 |
public function getConfigFile(){
|
@@ -531,7 +528,6 @@ abstract class Loco_package_Bundle extends ArrayObject implements JsonSerializab
|
|
531 |
}
|
532 |
|
533 |
|
534 |
-
|
535 |
/**
|
536 |
* Check whether bundle is manually configured, as opposed to guessed
|
537 |
* @return string (file|db|meta|internal)
|
514 |
}
|
515 |
|
516 |
|
|
|
517 |
/**
|
518 |
* Get XML configuration file used to define this bundle
|
|
|
|
|
519 |
* @return Loco_fs_File
|
520 |
*/
|
521 |
public function getConfigFile(){
|
528 |
}
|
529 |
|
530 |
|
|
|
531 |
/**
|
532 |
* Check whether bundle is manually configured, as opposed to guessed
|
533 |
* @return string (file|db|meta|internal)
|
src/package/Debugger.php
CHANGED
@@ -18,35 +18,35 @@ class Loco_package_Debugger implements IteratorAggregate {
|
|
18 |
/**
|
19 |
* Run immediately on construct
|
20 |
*/
|
21 |
-
public function __construct( Loco_package_Bundle $bundle ){
|
22 |
-
|
23 |
$this->messages = [];
|
24 |
-
$this->counts
|
25 |
'success' => 0,
|
26 |
'warning' => 0,
|
27 |
'debug' => 0,
|
28 |
'info' => 0,
|
29 |
];
|
30 |
-
|
31 |
// config storage type
|
32 |
-
switch( $bundle->isConfigured() ){
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
}
|
51 |
|
52 |
$base = $bundle->getDirectoryPath();
|
@@ -54,180 +54,165 @@ class Loco_package_Debugger implements IteratorAggregate {
|
|
54 |
|
55 |
// self-declarations provided by author in file headers
|
56 |
$native = $bundle->getHeaderInfo();
|
57 |
-
if( $value = $native->TextDomain ){
|
58 |
-
$this->info('WordPress says primary text domain is "%s"', $value);
|
59 |
// WordPress 4.6 changes mean this header could be a fallback and not actually declared by author
|
60 |
-
if( $bundle->isPlugin() ){
|
61 |
-
$map =
|
62 |
$raw = get_file_data( $bundle->getBootstrapPath(), $map, 'plugin' );
|
63 |
-
if( empty($raw['TextDomain']) ){
|
64 |
-
$this->warn('Author doesn\'t define the TextDomain header, WordPress guessed it');
|
65 |
}
|
66 |
}
|
67 |
// Warn if WordPress-assumed text domain is not configured. plugin/theme headers won't be translated
|
68 |
$domains = $bundle->getDomains();
|
69 |
-
if( ! isset($domains[$value]) && ! isset($domains['*']) ){
|
70 |
-
$this->warn('Expected text domain "%s" is not configured', $value );
|
71 |
}
|
|
|
|
|
72 |
}
|
73 |
-
|
74 |
-
$this->
|
75 |
-
}
|
76 |
-
|
77 |
-
|
|
|
78 |
}
|
79 |
-
|
80 |
-
$this->info('Standard "languages" folder found, although DomainPath not declared');
|
81 |
-
}
|
82 |
-
else {
|
83 |
-
$this->warn("Author doesn't define the DomainPath header");
|
84 |
-
}
|
85 |
-
|
86 |
// check validity of single-file plugins
|
87 |
-
if( $bundle->isSingleFile() && ! $bundle->getBootstrapPath() ){
|
88 |
-
$this->warn('Plugin is a single file, but bootstrap file is unknown');
|
89 |
}
|
90 |
-
|
91 |
// collecting only configured domains to match against source code
|
92 |
-
$domains
|
93 |
$templates = [];
|
94 |
-
|
95 |
// show each known subset
|
96 |
-
if( $count = count($bundle) ){
|
97 |
/* @var $project Loco_package_Project */
|
98 |
-
foreach( $bundle as $project ){
|
99 |
-
$id
|
100 |
$domain = (string) $project->getDomain();
|
101 |
-
if( '*' === $domain ){
|
102 |
-
$this->devel('Wildcard text domain configured for %s', $project );
|
103 |
$domain = '';
|
104 |
}
|
105 |
-
$domains[$domain] = true;
|
106 |
// Domain path[s] within bundle directory
|
107 |
$targets = [];
|
108 |
/* @var $dir Loco_fs_Directory */
|
109 |
-
foreach( $project->getConfiguredTargets() as $dir ){
|
110 |
-
$targets[] = $dir->getRelativePath($base);
|
111 |
}
|
112 |
-
if( $targets ){
|
113 |
-
$this->info('%u domain path[s] configured for "%s" -> %s', count($targets), $id, json_encode($targets,JSON_UNESCAPED_SLASHES) );
|
114 |
-
}
|
115 |
-
|
116 |
-
$this->warn('No domain paths configured for "%s"', $id );
|
117 |
}
|
118 |
// POT template file
|
119 |
-
if( $potfile = $project->getPot() ){
|
120 |
-
if( $potfile->exists() ){
|
121 |
-
$this->good('Template file for "%s" exists at "%s"', $id, $potfile->getRelativePath($base) );
|
122 |
try {
|
123 |
-
$data = Loco_gettext_Data::load($potfile);
|
124 |
-
$templates[$domain][] = $data;
|
125 |
-
}
|
126 |
-
|
127 |
-
$this->warn('Template file for "%s" is invalid format', $id );
|
128 |
}
|
|
|
|
|
129 |
}
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
else {
|
135 |
-
$this->warn('No template file configured for "%s"', $domain );
|
136 |
-
if( $potfile = $project->guessPot() ){
|
137 |
-
$this->devel('Possible non-standard name for "%s" template at "%s"', $id, $potfile->getRelativePath($base) );
|
138 |
$project->setPot( $potfile ); // <- adding so that invert ignores it
|
139 |
}
|
140 |
}
|
141 |
}
|
142 |
$default = $bundle->getDefaultProject();
|
143 |
-
if( ! $default ){
|
144 |
-
$this->warn('%u subsets configured, but failed to establish the default/primary', $count );
|
145 |
}
|
146 |
-
}
|
147 |
-
else {
|
148 |
$default = $bundle->createDefault();
|
149 |
-
$domain
|
150 |
$this->devel( 'Suggested text domain: "%s"', $domain );
|
151 |
}
|
152 |
-
|
153 |
// files picked up with no context as to what they're for
|
154 |
-
if( $bundle->isTheme() || ( $bundle->isPlugin() && ! $bundle->isSingleFile() ) ){
|
155 |
$unknown = $bundle->invert();
|
156 |
-
if(
|
157 |
/* @var $project Loco_package_Project */
|
158 |
-
foreach( $unknown as $project ){
|
159 |
$domain = (string) $project->getDomain();
|
160 |
// should only have one target due the way the inverter groups results
|
161 |
/* @var $dir Loco_fs_Directory */
|
162 |
-
foreach( $project->getConfiguredTargets() as $dir ){
|
163 |
-
$reldir = $dir->getRelativePath($base)
|
164 |
-
$this->warn('Unconfigured files found in "%s", possible domain name: "%s"', $reldir, $domain );
|
165 |
}
|
166 |
}
|
167 |
}
|
168 |
}
|
169 |
-
|
170 |
// source code extraction across entire bundle
|
171 |
-
$
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
else {
|
191 |
-
$this->warn('No strings extracted from source code for "%s"', $domain?$domain:'*' );
|
192 |
-
}
|
193 |
-
// check POT agrees with extracted count, but only if domain has single POT (i.e. not split across files on purpose)
|
194 |
-
if( isset($templates[$domain]) && 1 === count($templates[$domain]) ){
|
195 |
-
$data = current( $templates[$domain] );
|
196 |
-
if( ! $extr->getTemplate($domain)->equalSource($data) ){
|
197 |
-
$meta = Loco_gettext_Metadata::create( new Loco_fs_DummyFile(''), $data );
|
198 |
-
$this->devel('Template is not in sync with source code (%s in file)', $meta->getTotalSummary() );
|
199 |
-
}
|
200 |
-
}
|
201 |
}
|
202 |
-
// with extracted
|
203 |
-
if( $
|
204 |
-
$
|
205 |
-
|
206 |
-
|
|
|
|
|
207 |
}
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
}
|
224 |
}
|
225 |
}
|
226 |
}
|
227 |
-
|
228 |
-
}
|
229 |
-
else {
|
230 |
-
$this->warn("No strings can be extracted from source code");
|
231 |
}
|
232 |
|
233 |
}
|
18 |
/**
|
19 |
* Run immediately on construct
|
20 |
*/
|
21 |
+
public function __construct( Loco_package_Bundle $bundle ) {
|
22 |
+
|
23 |
$this->messages = [];
|
24 |
+
$this->counts = [
|
25 |
'success' => 0,
|
26 |
'warning' => 0,
|
27 |
'debug' => 0,
|
28 |
'info' => 0,
|
29 |
];
|
30 |
+
|
31 |
// config storage type
|
32 |
+
switch ( $bundle->isConfigured() ) {
|
33 |
+
case 'db':
|
34 |
+
$this->info( "Custom configuration saved in database" );
|
35 |
+
break;
|
36 |
+
case 'meta':
|
37 |
+
$this->good( "Configuration auto-detected from file headers" );
|
38 |
+
break;
|
39 |
+
case 'file':
|
40 |
+
$this->good( "Official configuration provided by author" );
|
41 |
+
break;
|
42 |
+
case 'internal':
|
43 |
+
$this->info( "Configuration built-in to Loco" );
|
44 |
+
break;
|
45 |
+
case '':
|
46 |
+
$this->warn( "Cannot auto-detect configuration" );
|
47 |
+
break;
|
48 |
+
default:
|
49 |
+
throw new Exception( 'Unexpected isConfigured() return value' );
|
50 |
}
|
51 |
|
52 |
$base = $bundle->getDirectoryPath();
|
54 |
|
55 |
// self-declarations provided by author in file headers
|
56 |
$native = $bundle->getHeaderInfo();
|
57 |
+
if ( $value = $native->TextDomain ) {
|
58 |
+
$this->info( 'WordPress says primary text domain is "%s"', $value );
|
59 |
// WordPress 4.6 changes mean this header could be a fallback and not actually declared by author
|
60 |
+
if ( $bundle->isPlugin() ) {
|
61 |
+
$map = [ 'TextDomain' => 'Text Domain' ];
|
62 |
$raw = get_file_data( $bundle->getBootstrapPath(), $map, 'plugin' );
|
63 |
+
if ( empty( $raw['TextDomain'] ) ) {
|
64 |
+
$this->warn( 'Author doesn\'t define the TextDomain header, WordPress guessed it' );
|
65 |
}
|
66 |
}
|
67 |
// Warn if WordPress-assumed text domain is not configured. plugin/theme headers won't be translated
|
68 |
$domains = $bundle->getDomains();
|
69 |
+
if ( ! isset( $domains[ $value ] ) && ! isset( $domains['*'] ) ) {
|
70 |
+
$this->warn( 'Expected text domain "%s" is not configured', $value );
|
71 |
}
|
72 |
+
} else {
|
73 |
+
$this->warn( "Author doesn't define the TextDomain header" );
|
74 |
}
|
75 |
+
if ( $value = $native->DomainPath ) {
|
76 |
+
$this->good( 'Primary domain path declared by author as "%s"', $value );
|
77 |
+
} else if ( is_dir( $base . '/languages' ) ) {
|
78 |
+
$this->info( 'Standard "languages" folder found, although DomainPath not declared' );
|
79 |
+
} else {
|
80 |
+
$this->warn( "Author doesn't define the DomainPath header" );
|
81 |
}
|
82 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
// check validity of single-file plugins
|
84 |
+
if ( $bundle->isSingleFile() && ! $bundle->getBootstrapPath() ) {
|
85 |
+
$this->warn( 'Plugin is a single file, but bootstrap file is unknown' );
|
86 |
}
|
87 |
+
|
88 |
// collecting only configured domains to match against source code
|
89 |
+
$domains = [];
|
90 |
$templates = [];
|
91 |
+
|
92 |
// show each known subset
|
93 |
+
if ( $count = count( $bundle ) ) {
|
94 |
/* @var $project Loco_package_Project */
|
95 |
+
foreach ( $bundle as $project ) {
|
96 |
+
$id = $project->getId();
|
97 |
$domain = (string) $project->getDomain();
|
98 |
+
if ( '*' === $domain ) {
|
99 |
+
$this->devel( 'Wildcard text domain configured for %s', $project );
|
100 |
$domain = '';
|
101 |
}
|
102 |
+
$domains[ $domain ] = true;
|
103 |
// Domain path[s] within bundle directory
|
104 |
$targets = [];
|
105 |
/* @var $dir Loco_fs_Directory */
|
106 |
+
foreach ( $project->getConfiguredTargets() as $dir ) {
|
107 |
+
$targets[] = $dir->getRelativePath( $base );
|
108 |
}
|
109 |
+
if ( $targets ) {
|
110 |
+
$this->info( '%u domain path[s] configured for "%s" -> %s', count( $targets ), $id, json_encode( $targets, JSON_UNESCAPED_SLASHES ) );
|
111 |
+
} else {
|
112 |
+
$this->warn( 'No domain paths configured for "%s"', $id );
|
|
|
113 |
}
|
114 |
// POT template file
|
115 |
+
if ( $potfile = $project->getPot() ) {
|
116 |
+
if ( $potfile->exists() ) {
|
117 |
+
$this->good( 'Template file for "%s" exists at "%s"', $id, $potfile->getRelativePath( $base ) );
|
118 |
try {
|
119 |
+
$data = Loco_gettext_Data::load( $potfile );
|
120 |
+
$templates[ $domain ][] = $data;
|
121 |
+
} catch ( Exception $e ) {
|
122 |
+
$this->warn( 'Template file for "%s" is invalid format', $id );
|
|
|
123 |
}
|
124 |
+
} else {
|
125 |
+
$this->warn( 'Template file for "%s" does not exist (%s)', $id, $potfile->getRelativePath( $base ) );
|
126 |
}
|
127 |
+
} else {
|
128 |
+
$this->warn( 'No template file configured for "%s"', $domain );
|
129 |
+
if ( $potfile = $project->guessPot() ) {
|
130 |
+
$this->devel( 'Possible non-standard name for "%s" template at "%s"', $id, $potfile->getRelativePath( $base ) );
|
|
|
|
|
|
|
|
|
131 |
$project->setPot( $potfile ); // <- adding so that invert ignores it
|
132 |
}
|
133 |
}
|
134 |
}
|
135 |
$default = $bundle->getDefaultProject();
|
136 |
+
if ( ! $default ) {
|
137 |
+
$this->warn( '%u subsets configured, but failed to establish the default/primary', $count );
|
138 |
}
|
139 |
+
} else {
|
|
|
140 |
$default = $bundle->createDefault();
|
141 |
+
$domain = (string) $default->getDomain();
|
142 |
$this->devel( 'Suggested text domain: "%s"', $domain );
|
143 |
}
|
144 |
+
|
145 |
// files picked up with no context as to what they're for
|
146 |
+
if ( $bundle->isTheme() || ( $bundle->isPlugin() && ! $bundle->isSingleFile() ) ) {
|
147 |
$unknown = $bundle->invert();
|
148 |
+
if ( count( $unknown ) ) {
|
149 |
/* @var $project Loco_package_Project */
|
150 |
+
foreach ( $unknown as $project ) {
|
151 |
$domain = (string) $project->getDomain();
|
152 |
// should only have one target due the way the inverter groups results
|
153 |
/* @var $dir Loco_fs_Directory */
|
154 |
+
foreach ( $project->getConfiguredTargets() as $dir ) {
|
155 |
+
$reldir = $dir->getRelativePath( $base ) ?: '.';
|
156 |
+
$this->warn( 'Unconfigured files found in "%s", possible domain name: "%s"', $reldir, $domain );
|
157 |
}
|
158 |
}
|
159 |
}
|
160 |
}
|
161 |
+
|
162 |
// source code extraction across entire bundle
|
163 |
+
$extr = new Loco_gettext_Extraction( $bundle );
|
164 |
+
foreach ( $bundle as $project ) {
|
165 |
+
$extr->addProject( $project );
|
166 |
+
}
|
167 |
+
|
168 |
+
// real count excludes additional metadata
|
169 |
+
$realCounts = $extr->getDomainCounts();
|
170 |
+
$counts = $extr->includeMeta()->getDomainCounts();
|
171 |
+
// $this->devel( json_encode(compact('realCounts','counts')) );
|
172 |
+
foreach( array_intersect_key($counts, $domains) as $domain => $count ){
|
173 |
+
if( isset($realCounts[$domain]) ){
|
174 |
+
$count = $counts[$domain];
|
175 |
+
$realCount = $realCounts[$domain];
|
176 |
+
// translators: 1: Number of strings; 2: Text Domain; e.g. 100 strings extracted from source code for "loco-translate"
|
177 |
+
$str = _n( '%1$s string extracted from source code for "%2$s"', '%1$s strings extracted from source code for "%2$s"', $realCount, 'loco-translate' );
|
178 |
+
$this->good( $str.' (%s including metadata)', number_format($realCount), $domain?:'*', number_format($count) );
|
179 |
+
}
|
180 |
+
else {
|
181 |
+
$this->warn('No strings extracted from source code for "%s"', $domain?:'*' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
}
|
183 |
+
// check POT agrees with extracted count, but only if domain has single POT (i.e. not split across files on purpose)
|
184 |
+
if( isset($templates[$domain]) && 1 === count($templates[$domain]) ){
|
185 |
+
$data = current( $templates[$domain] );
|
186 |
+
if( ! $extr->getTemplate($domain)->equalSource($data) ){
|
187 |
+
$meta = Loco_gettext_Metadata::create( new Loco_fs_DummyFile(''), $data );
|
188 |
+
$this->devel('Template is not in sync with source code (%s in file)', $meta->getTotalSummary() );
|
189 |
+
}
|
190 |
}
|
191 |
+
}
|
192 |
+
// with extracted strings we can check for domain mismatches
|
193 |
+
if( $missing = array_diff_key($domains, $realCounts) ){
|
194 |
+
$num = count($missing);
|
195 |
+
$str = _n( 'Configured domain has no extractable strings', '%u configured domains have no extractable strings', $num, 'loco-translate' );
|
196 |
+
$this->warn( $str.': %2$s', $num, $this->implodeKeys($missing) );
|
197 |
+
}
|
198 |
+
if( $extra = array_diff_key($realCounts,$domains) ){
|
199 |
+
|
200 |
+
$this->info('%u unconfigured domain[s] found in source code: %s', count($extra), $this->implodeKeys($extra) );
|
201 |
+
/*/ debug other domains extracted
|
202 |
+
foreach( $extra as $name => $count ){
|
203 |
+
$this->devel(' > %s (%u)', $name, $count );
|
204 |
+
}*/
|
205 |
+
// extracted domains could prove that declared domain is wrong
|
206 |
+
if( $missing ){
|
207 |
+
foreach( array_keys($extra) as $name ){
|
208 |
+
$flat = preg_replace('/[^a-z\\d]/','', strtolower($name) );
|
209 |
+
foreach( array_keys($missing) as $decl ){
|
210 |
+
if( preg_replace('/[^a-z\\d]/','', strtolower($decl) ) === $flat ){
|
211 |
+
$this->devel('"%s" might be a mistake. Should it be "%s"?', $decl, $name );
|
212 |
}
|
213 |
}
|
214 |
}
|
215 |
}
|
|
|
|
|
|
|
|
|
216 |
}
|
217 |
|
218 |
}
|
src/package/Project.php
CHANGED
@@ -421,8 +421,8 @@ class Loco_package_Project {
|
|
421 |
$exts = $this->sexts;
|
422 |
if( is_null($exts) ){
|
423 |
$conf = Loco_data_Settings::get();
|
424 |
-
$exts =
|
425 |
-
$exts = array_merge( $exts,
|
426 |
}
|
427 |
// always ensure we have at least PHP files scanned
|
428 |
return array_merge( $exts, ['php'] );
|
@@ -430,9 +430,9 @@ class Loco_package_Project {
|
|
430 |
|
431 |
|
432 |
/**
|
433 |
-
* Utility excludes current exclude paths from target finder
|
434 |
* @param Loco_fs_FileFinder
|
435 |
-
* @return
|
436 |
*/
|
437 |
private function excludeSources( Loco_fs_FileFinder $finder ){
|
438 |
foreach( $this->xspaths as $file ){
|
@@ -445,7 +445,6 @@ class Loco_package_Project {
|
|
445 |
$finder->exclude( $path );
|
446 |
}
|
447 |
}
|
448 |
-
return $finder;
|
449 |
}
|
450 |
|
451 |
|
@@ -691,21 +690,20 @@ class Loco_package_Project {
|
|
691 |
public function findSourceFiles(){
|
692 |
$source = $this->getSourceFinder();
|
693 |
// augment file list from directories unless already done so
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
}
|
704 |
-
$this->sfiles->add($file);
|
705 |
}
|
|
|
706 |
}
|
707 |
}
|
708 |
-
return $
|
709 |
}
|
710 |
|
711 |
|
421 |
$exts = $this->sexts;
|
422 |
if( is_null($exts) ){
|
423 |
$conf = Loco_data_Settings::get();
|
424 |
+
$exts = $conf->php_alias;
|
425 |
+
$exts = array_merge( $exts, $conf->jsx_alias );
|
426 |
}
|
427 |
// always ensure we have at least PHP files scanned
|
428 |
return array_merge( $exts, ['php'] );
|
430 |
|
431 |
|
432 |
/**
|
433 |
+
* Utility excludes current exclude paths from passed target finder
|
434 |
* @param Loco_fs_FileFinder
|
435 |
+
* @return void
|
436 |
*/
|
437 |
private function excludeSources( Loco_fs_FileFinder $finder ){
|
438 |
foreach( $this->xspaths as $file ){
|
445 |
$finder->exclude( $path );
|
446 |
}
|
447 |
}
|
|
|
448 |
}
|
449 |
|
450 |
|
690 |
public function findSourceFiles(){
|
691 |
$source = $this->getSourceFinder();
|
692 |
// augment file list from directories unless already done so
|
693 |
+
$list = $this->sfiles->copy();
|
694 |
+
$crawled = $source->exportGroups();
|
695 |
+
foreach( $crawled as $ext => $files ){
|
696 |
+
/* @var Loco_fs_File $file */
|
697 |
+
foreach( $files as $file ){
|
698 |
+
$name = $file->filename();
|
699 |
+
// skip "{name}.min.{ext}" but only if "{name}.{ext}" exists
|
700 |
+
if( '.min' === substr($name,-4) && file_exists( $file->dirname().'/'.substr($name,0,-4).'.'.$ext ) ){
|
701 |
+
continue;
|
|
|
|
|
702 |
}
|
703 |
+
$list->add($file);
|
704 |
}
|
705 |
}
|
706 |
+
return $list;
|
707 |
}
|
708 |
|
709 |
|
tpl/admin/bundle/debug.php
CHANGED
@@ -12,7 +12,7 @@ $this->extend('../layout');
|
|
12 |
</p>
|
13 |
|
14 |
<?php
|
15 |
-
/* @var $
|
16 |
foreach( $notices as $notice ):?>
|
17 |
<div class="<?php $notice->e('style')?>">
|
18 |
<p>
|
@@ -21,7 +21,7 @@ $this->extend('../layout');
|
|
21 |
</p>
|
22 |
</div><?php
|
23 |
endforeach;
|
24 |
-
|
25 |
if( $params->has('xml') ):?>
|
26 |
<div class="notice inline notice-generic">
|
27 |
<h4>Current configuration as XML:</h4>
|
12 |
</p>
|
13 |
|
14 |
<?php
|
15 |
+
/* @var $notices Loco_mvc_ViewParams[] */
|
16 |
foreach( $notices as $notice ):?>
|
17 |
<div class="<?php $notice->e('style')?>">
|
18 |
<p>
|
21 |
</p>
|
22 |
</div><?php
|
23 |
endforeach;
|
24 |
+
|
25 |
if( $params->has('xml') ):?>
|
26 |
<div class="notice inline notice-generic">
|
27 |
<h4>Current configuration as XML:</h4>
|