Loco Translate - Version 2.1.4

Version Description

  • Bumped WP compatibility to 4.9.6
  • Hooked in privacy policy suggestion
Download this release

Release Info

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

Code changes from version 2.1.3 to 2.1.4

languages/loco-translate.pot CHANGED
@@ -1,9 +1,9 @@
1
  #, fuzzy
2
  msgid ""
3
  msgstr ""
4
- "Project-Id-Version: Loco Translate 2.1.3-dev\n"
5
  "Report-Msgid-Bugs-To: \n"
6
- "POT-Creation-Date: 2018-04-09 09:23+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"
@@ -128,6 +128,13 @@ msgstr ""
128
  msgid "Additional files found"
129
  msgstr ""
130
 
 
 
 
 
 
 
 
131
  #: src/admin/bundle/BaseController.php:101
132
  msgid "Advanced"
133
  msgstr ""
@@ -896,7 +903,7 @@ msgid ""
896
  "are many files"
897
  msgstr ""
898
 
899
- #: src/output/Buffer.php:84
900
  #, php-format
901
  msgid "Loco interrupted by output from %s:%u"
902
  msgstr ""
@@ -917,7 +924,7 @@ msgid ""
917
  msgstr ""
918
 
919
  #. Name of the plugin
920
- #: src/mvc/AdminRouter.php:37
921
  msgid "Loco Translate"
922
  msgstr ""
923
 
@@ -1559,6 +1566,10 @@ msgstr ""
1559
  msgid "This page was expecting a file, but the path is actually a directory"
1560
  msgstr ""
1561
 
 
 
 
 
1562
  #: tpl/admin/bundle/alias.php:14
1563
  msgid ""
1564
  "This plugin doesn't have its own translation files, but its metadata can be "
@@ -1585,7 +1596,7 @@ msgid ""
1585
  "the file writeable by %s"
1586
  msgstr ""
1587
 
1588
- #: src/hooks/AdminHooks.php:82
1589
  msgid "Translate"
1590
  msgstr ""
1591
 
1
  #, fuzzy
2
  msgid ""
3
  msgstr ""
4
+ "Project-Id-Version: Loco Translate 2.1.4-dev\n"
5
  "Report-Msgid-Bugs-To: \n"
6
+ "POT-Creation-Date: 2018-05-25 11:55+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"
128
  msgid "Additional files found"
129
  msgstr ""
130
 
131
+ #: src/hooks/AdminHooks.php:69
132
+ #, php-format
133
+ msgid ""
134
+ "Administrators and auditors may wish to review Loco's <a href=\"%s\">plugin "
135
+ "privacy notice</a>."
136
+ msgstr ""
137
+
138
  #: src/admin/bundle/BaseController.php:101
139
  msgid "Advanced"
140
  msgstr ""
903
  "are many files"
904
  msgstr ""
905
 
906
+ #: src/output/Buffer.php:80
907
  #, php-format
908
  msgid "Loco interrupted by output from %s:%u"
909
  msgstr ""
924
  msgstr ""
925
 
926
  #. Name of the plugin
927
+ #: src/mvc/AdminRouter.php:37 src/hooks/AdminHooks.php:67
928
  msgid "Loco Translate"
929
  msgstr ""
930
 
1566
  msgid "This page was expecting a file, but the path is actually a directory"
1567
  msgstr ""
1568
 
1569
+ #: src/hooks/AdminHooks.php:68
1570
+ msgid "This plugin doesn't collect any data from public website visitors."
1571
+ msgstr ""
1572
+
1573
  #: tpl/admin/bundle/alias.php:14
1574
  msgid ""
1575
  "This plugin doesn't have its own translation files, but its metadata can be "
1596
  "the file writeable by %s"
1597
  msgstr ""
1598
 
1599
+ #: src/hooks/AdminHooks.php:97
1600
  msgid "Translate"
1601
  msgstr ""
1602
 
lib/compiled/gettext.php CHANGED
@@ -2,33 +2,33 @@
2
  /**
3
  * Downgraded for PHP 5.2 compatibility. Do not edit.
4
  */
5
- function loco_ensure_utf8( $str, $enc = null, $prefix_bom = false ){ if( is_null($enc) ){ $m = substr( $str, 0, 2 ); if( "\xEF\xBB" === $m && "\xBF" === $str{2} ){ $str = substr( $str, 3 ); } else if( "\xFF\xFE" === $m ){ $str = substr( $str, 2 ); $enc = 'UTF-16LE'; } else if( "\xFE\xFF" === $m ){ $str = substr( $str, 2 ); $enc = 'UTF-16BE'; } else { $enc = mb_detect_encoding( $str, array('UTF-8','Windows-1252','ISO-8859-1'), true ); if( ! $enc ){ throw new Exception('Unknown character encoding'); } } } else if( 0 === strcasecmp('ISO-8859-1',$enc) || 0 === strcasecmp('CP-1252', $enc ) ){ $enc = 'Windows-1252'; } else if( 0 === strcasecmp('UTF8', $enc) ){ $enc = null; } else if( 0 === strcasecmp('UTF-16', $enc) ){ $enc = 'UTF-16BE'; } if( is_string($enc) && $enc !== 'UTF-8' ){ $str = mb_convert_encoding( $str, 'UTF-8', array($enc) ); } if( $prefix_bom ){ $str = "\xEF\xBB\xBF".$str; } return $str; }
6
- interface LocoArrayInterface extends ArrayAccess, Iterator, Countable, JsonSerializable { public function export(); public function keys(); public function toArray(); public function getArrayCopy(); }
7
- class LocoHeaders extends ArrayIterator implements LocoArrayInterface { private $map = array(); public function __construct( array $raw = array() ){ if( $raw ){ $keys = array_keys( $raw ); $this->map = array_combine( array_map( 'strtolower', $keys ), $keys ); parent::__construct($raw); } } public function normalize( $key ){ $k = strtolower($key); return isset($this->map[$k]) ? $this->map[$k] : null; } public function add( $key, $val ){ $this->offsetSet( $key, $val ); return $this; } public function __toString(){ $pairs = array(); foreach( $this as $key => $val ){ $pairs[] = trim($key).': '.$val; } return implode("\n", $pairs ); } public function trimmed( $prop ){ return trim( $this->__get($prop) ); } public function has( $key ){ $k = strtolower($key); return isset($this->map[$k]); } public function __get( $key ){ return $this->offsetGet( $key ); } public function __set( $key, $val ){ $this->offsetSet( $key, $val ); } public function offsetExists( $k ){ return ! is_null( $this->normalize($k) ); } public function offsetGet( $k ){ $k = $this->normalize($k); if( is_null($k) ){ return ''; } return parent::offsetGet($k); } public function offsetSet( $key, $v ){ $k = strtolower($key); if( isset($this->map[$k]) && $key !== $this->map[$k] ){ parent::offsetUnset( $this->map[$k] ); } $this->map[$k] = $key; return parent::offsetSet( $key, $v ); } public function offsetUnset( $key ){ $k = strtolower($key); if( isset($this->map[$k]) ){ parent::offsetUnset( $this->map[$k] ); unset( $this->map[$k] ); } } public function export(){ return $this->getArrayCopy(); } public function jsonSerialize(){ return $this->getArrayCopy(); } public function toArray(){ return $this->getArrayCopy(); } public function keys(){ return array_values( $this->map ); } }
8
- class LocoPoHeaders extends LocoHeaders { public static function fromMsgstr( $str ){ $headers = new LocoPoHeaders; foreach( explode("\n",$str) as $line ){ $i = strpos($line,':') and $key = trim( substr($line,0,$i) ) and $headers->add( $key, trim( substr($line,++$i) ) ); } return $headers; } public static function fromSource( $raw ){ if( $raw = self::snip($raw) ){ return self::fromMsgstr($raw); } } public static function snip( $raw ){ $raw = loco_ensure_utf8($raw); while( preg_match('/^.*[\r\n]+/u', $raw, $r ) ){ $line = $r[0]; if( '#' === $line{0} ){ $raw = substr( $raw, strlen($line) ); continue; } if( preg_match('/^msgid\s+""\s+msgstr\s+/', $raw, $r ) ){ $raw = substr( $raw, strlen($r[0]) ); $str = array(); while( preg_match('/^"(.*)"\s*/', $raw, $r ) ){ $raw = substr( $raw, strlen($r[0]) ); $chunk = $r[1]; if( '' !== $chunk ){ $str[] = $chunk; } } if( $str ){ return stripcslashes( implode('',$str) ); } } break; } throw new Loco_error_ParseException('Invalid PO header'); } }
9
  function loco_parse_reference_id( $refs, &$_id ){ if( false === ( $n = strpos($refs,'loco:') ) ){ $_id = ''; return $refs; } $_id = substr($refs, $n+5, 24 ); $refs = substr_replace( $refs, '', $n, 29 ); return trim( $refs ); }
10
- function loco_parse_po( $src ){ $src = loco_ensure_utf8($src); $i = -1; $key = null; $entries = array(); $template = array( '#' => array(), 'id' => array(), 'str' => array(), 'ctxt' => array(), 'i' => null ); $entry = new ArrayIterator( $template ); foreach( preg_split('/[\r\n]+/', $src) as $_i => $line ){ $_line = $line; while( $line = trim($line," \t") ){ try { $c = $line{0}; if( '"' === $c ){ if( is_null($key) ){ throw new Exception('String encountered without keyword'); } if( '"' === substr($line,-1) ){ $line = substr( $line, 1, -1 ); $entry[$key][$idx][] = stripcslashes($line); } else { throw new Exception('Unterminated msg'.$key ); } } else if( '#' === $c ){ if( is_int($entry['i']) ){ $entry = new ArrayIterator($template); } $f = empty($line{1}) ? ' ' : $line{1}; $entry['#'][$f][] = trim( substr( $line, 1+strlen($f) ), "/ \n\r\t" ); } else if( preg_match('/^msg(id|str|ctxt|id_plural)(?:\[(\d+)\])?[ \t]+/', $line, $r ) ){ $key = $r[1]; $idx = isset($r[2]) ? (int) $r[2] : 0; if( is_null($entry['i']) ){ $entry['i'] = ++$i; $entries[$i] = $entry; } else if( 'str' !== $key && $entry['str'] ){ $entry = new ArrayIterator($template); } $line = substr( $line, strlen($r[0]) ); continue; } continue 2; } catch( Exception $e ){ continue 2; } } } unset( $entry, $key, $template ); $lookup_key = null; if( isset($entries[0]) ){ if( array(array('')) === $entries[0]['id'] ){ if( isset($entries[0]['str'][0]) ){ foreach( preg_grep('/^X-Loco-Lookup: /', $entries[0]['str'][0]) as $header ){ $lookup_key = rtrim( substr($header,15) ); break; } } else { $entries[0] = null; } } } else if( '' === $src ){ throw new Loco_error_ParseException('Empty PO file'); } $assets = array(); foreach( $entries as $i => $entry ){ if( empty($entry['id']) ){ continue; } if( empty($entry['str']) ){ $entry['str'] = array( array('') ); } $asset = array( 'source' => implode('',$entry['id'][0]), 'target' => implode('',$entry['str'][0]), ); $prev_entry = null; if( isset($entry['ctxt'][0]) ){ $asset['context'] = implode('',$entry['ctxt'][0]); } if( isset($entry['#']) ){ $cmt = $entry['#']; if( isset($cmt[' ']) ){ $asset['comment'] = implode("\n", $cmt[' '] ); } if( isset($cmt['.']) ){ $asset['notes'] = implode("\n", $cmt['.'] ); } if( isset($cmt[':']) ){ if( $refs = implode( ' ', $cmt[':'] ) ) { if( $refs = loco_parse_reference_id( $refs, $_id ) ){ $asset['refs'] = $refs; } if( $_id ){ $asset['_id'] = $_id; } } } if( isset($cmt[',']) ){ foreach( $cmt[','] as $flags ){ foreach( explode(',',$flags) as $flag ){ if( $flag = trim($flag) ){ if( preg_match('/^((?:no-)?\w+)-format/', $flag, $r ) ){ $asset['format'] = $r[1]; } else if( 'fuzzy' === $flag ){ $asset['flag'] = 4; } } } } } if( isset($cmt['|']) ){ try { if( $prev_entry = loco_parse_po( implode("\n", $cmt['|']) ) ){ $msgid = $prev_entry[0]['source']; if( is_string($lookup_key) ){ $asset[$lookup_key] = $asset['source']; $asset['source'] = $msgid; } else if( 'loco:' === substr($msgid,0,5) ){ $asset['_id'] = substr($msgid,5); } else { $asset['prev'] = $prev_entry; } } else { $prev_entry = null; } } catch( LocoParseException $e ){ $prev_entry = null; } } } $assets[] = $asset; if( isset($entry['id_plural']) || isset($entry['str'][1]) ){ $idx = 0; $pidx = count($assets) - 1; $num = max( 2, count($entry['str']) ); while( ++$idx < $num ){ $plural = array( 'source' => '', 'target' => isset($entry['str'][$idx]) ? implode('',$entry['str'][$idx]) : '', 'plural' => $idx, 'parent' => $pidx, ); if( 1 === $idx ){ $plural['source'] = isset($entry['id_plural'][0]) ? implode('',$entry['id_plural'][0]) : ''; if( is_string($lookup_key) && is_array($prev_entry) && isset($prev_entry[1]) ){ $plural[$lookup_key] = $plural['source']; $plural['source'] = $prev_entry[1]['source']; } } $assets[] = $plural; } } } if( ! isset($assets[0]) ){ throw new Loco_error_ParseException('Invalid PO file'); } return $assets; }
11
  function loco_parse_po_headers( $str ){ return LocoPoHeaders::fromMsgstr($str); }
12
  class LocoMoParser { private $bin; private $be; private $n; private $o; private $t; private $v; private $cs; public function __construct( $bin ){ $this->bin = $bin; } public function getAt( $idx ){ $offset = $this->targetOffset(); $offset += ( $idx * 8 ); $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $txt = $this->bytes( $idx, $len ); if( false === strpos( $txt, "\0") ){ return $txt; } return explode( "\0", $txt ); } public function parse(){ $r = array(); $sourceOffset = $this->sourceOffset(); $targetOffset = $this->targetOffset(); $soffset = $sourceOffset; $toffset = $targetOffset; while( $soffset < $targetOffset ){ $len = $this->integerAt( $soffset ); $idx = $this->integerAt( $soffset + 4 ); $src = $this->bytes( $idx, $len ); $eot = strpos( $src, "\x04" ); if( false === $eot ){ $context = null; } else { $context = $this->decodeStr( substr($src, 0, $eot ) ); $src = substr( $src, $eot+1 ); } $sources = explode( "\0", $src, 2 ); $len = $this->integerAt( $toffset ); $idx = $this->integerAt( $toffset + 4 ); $targets = explode( "\0", $this->bytes( $idx, $len ) ); $r[] = array( 'source' => $this->decodeStr( $sources[0] ), 'target' => $this->decodeStr( $targets[0] ), 'context' => $context, ); if( isset($sources[1]) ){ $p = count($r) - 1; $nforms = max( 2, count($targets) ); for( $i = 1; $i < $nforms; $i++ ){ $r[] = array( 'source' => isset($sources[$i]) ? $this->decodeStr( $sources[$i] ) : sprintf('%s (plural %u)',$r[$p]['source'],$i), 'target' => isset($targets[$i]) ? $this->decodeStr( $targets[$i] ) : '', 'parent' => $p, 'plural' => $i, ); } } $soffset += 8; $toffset += 8; } return $r; } public function isBigendian(){ while( is_null($this->be) ){ $str = $this->words( 0, 1 ); if( "\xDE\x12\x04\x95" === $str ){ $this->be = false; break; } if( "\x95\x04\x12\xDE" === $str ){ $this->be = true; break; } throw new Loco_error_ParseException('Invalid MO format'); } return $this->be; } public function version(){ if( is_null($this->v) ){ $this->v = $this->integerWord(1); } return $this->v; } public function count(){ if( is_null($this->n) ){ $this->n = $this->integerWord(2); } return $this->n; } public function sourceOffset(){ if( is_null($this->o) ){ $this->o = $this->integerWord(3); } return $this->o; } public function targetOffset(){ if( is_null($this->t) ){ $this->t = $this->integerWord(4); } return $this->t; } public function getHashTable(){ $s = $this->integerWord(5); $h = $this->integerWord(6); return $this->bytes( $h, $s * 4 ); } private function bytes( $offset, $length ){ return substr( $this->bin, $offset, $length ); } private function words( $offset, $length ){ return $this->bytes( $offset * 4, $length * 4 ); } private function integerWord( $offset ){ return $this->integerAt( $offset * 4 ); } private function integerAt( $offset ){ $str = $this->bytes( $offset, 4 ); $fmt = $this->isBigendian() ? 'N' : 'V'; $arr = unpack( $fmt, $str ); if( ! isset($arr[1]) || ! is_int($arr[1]) ){ throw new Loco_error_ParseException('Failed to read integer at byte '.$offset); } return $arr[1]; } private function decodeStr( $str ){ if( $this->cs ){ $enc = $this->cs; } else { $enc = mb_detect_encoding( $str, array('ASCII','UTF-8','ISO-8859-1'), false ); if( 'ASCII' !== $enc ){ $this->cs = $enc; } } if( 'UTF-8' !== $enc ){ $str = mb_convert_encoding( $str, 'UTF-8', array($enc) ); } return $str; } }
13
  function loco_parse_mo( $src ){ $mo = new LocoMoParser($src); return $mo->parse(); }
14
  function loco_parse_comment($comment){ if( '*' === $comment{1} ){ $lines = array(); $junk = "\r\t/ *"; foreach( explode("\n", $comment) as $line ){ if( $line = trim($line,$junk) ){ $lines[] = trim($line,$junk); } } return implode("\n", $lines); } return trim( $comment,"/ \n\r\t" ); }
15
  function loco_parse_wp_comment( $block ){ $header = array(); if( '*' === $block{1} ){ $junk = "\r\t/ *"; foreach( explode("\n", $block) as $line ){ if( false !== ( $i = strpos($line,':') ) ){ $key = substr($line,0,$i); $val = substr($line,++$i); $header[ trim($key,$junk) ] = trim($val,$junk); } } } return $header; }
16
- abstract class LocoExtractor { private $rules; private $exp = array(); private $reg = array(); private $dom = array(); private $wp = array(); private $dflt = ''; abstract public function extractSource( $src, $fileref = '' ); public function __construct( array $rules ){ $this->rules = $rules; } protected function decapse( $raw ){ return $raw; } protected function fsniff( $str ){ return ''; } public function rule( $s ){ return isset($this->rules[$s]) ? $this->rules[$s] : ''; } public function export(){ return $this->exp; } public function getTotal(){ return count( $this->exp ); } public function getDomainCounts(){ return $this->dom; } public function setDomain( $default ){ $this->dflt = (string) $default; return $this; } public function headerize( array $tags, $domain = '' ){ if( isset($this->wp[$domain]) ){ $this->wp[$domain] += $tags; } else { $this->wp[$domain] = $tags; } return $this; } protected function headerized(){ return $this->wp; } public function pushMeta( $source, $notes = '', $domain = null ){ if( ! $domain || '*' === $domain ){ $domain = $this->dflt; } $entry = array( 'id' => '', 'source' => $source, 'target' => '', 'notes' => $notes, ); if( $domain ){ $entry['domain'] = $domain; $key = $source."\1".$domain; } else { $key = $source; } $this->pushMsgid( $key, $entry, $domain ); return $this; } private function pushMsgid( $key, array $entry, $domain ){ if( isset($this->reg[$key]) ){ $index = $this->reg[$key]; $clash = $this->exp[$index]; if( $value = $this->mergeField( $clash, $entry, 'refs', ' ') ){ $this->exp[$index]['refs'] = $value; } if( $value = $this->mergeField( $clash, $entry, 'notes', "\n") ){ $this->exp[$index]['notes'] = $value; } } else { $index = count($this->exp); $this->reg[$key] = $index; $this->exp[] = $entry; if( isset($this->dom[$domain]) ){ $this->dom[$domain]++; } else { $this->dom[$domain] = 1; } } return $index; } private function mergeField( array $old, array $new, $field, $glue ){ $prev = isset($old[$field]) ? $old[$field] : ''; if( isset($new[$field]) ){ $text = $new[$field]; if( '' !== $prev && $prev !== $text ){ $text = $prev.$glue.$text; } return $text; } return $prev; } protected function push( $rule, array $args, $comment = '', $ref = '' ){ $s = strpos( $rule, 's'); $p = strpos( $rule, 'p'); $c = strpos( $rule, 'c'); $d = strpos( $rule, 'd'); if( false === $s || ! isset($args[$s]) ){ return null; } $key = $args[$s]; if( ! is_string($key) ){ return null; } $entry = array( 'id' => '', 'source' => ( $msgid = $key ), 'target' => '', ); if( is_int($c) && isset($args[$c]) ){ $entry['context'] = $context = $args[$c]; $key .= "\0". $context; } else if( ! isset($msgid{0}) ){ return null; } else { $context = null; } if( $ref ){ $entry['refs'] = $ref; } if( is_int($d) && array_key_exists($d,$args) ){ $domain = $args[$d]; if( is_null($domain) ){ $domain = ''; } } else { $domain = $this->dflt; } if( $domain ){ $entry['domain'] = $domain; $key .= "\1".$domain; } $parse_printf = true; if( $comment ){ if( preg_match('/xgettext:\s*((?:no-)?\w+)-format/', $comment, $r ) ){ $entry['format'] = $r[1]; if( 'no-' === substr($r[1],0,3) ){ $parse_printf = false; } else { $parse_printf = null; } $comment = str_replace( $r[0], '', $comment ); } $comment = loco_parse_comment($comment); if( preg_match('/^translators:\s+/i', $comment, $r ) ){ $comment = substr( $comment, strlen($r[0]) ); } $entry['notes'] = $comment; } if( $parse_printf && ( $format = $this->fsniff($msgid) ) ){ $entry['format'] = $format; } $index = $this->pushMsgid( $key, $entry, $domain ); if( is_int($p) && isset($args[$p]) ){ $msgid_plural = $args[$p]; $entry = array( 'id' => '', 'source' => $msgid_plural, 'target' => '', 'plural' => 1, 'parent' => $index, ); if( false !== $parse_printf && ( $format = $this->fsniff($msgid_plural) ) ){ $entry['format'] = $format; } $pkey = $key."\2"; if( isset($this->reg[$pkey]) ){ $plural_index = $this->reg[$pkey]; $this->exp[$plural_index] = $entry; } else { $plural_index = count($this->exp); $this->reg[$pkey] = $plural_index; $this->exp[] = $entry; } } return $index; } public function filter( $domain ){ $map = array(); $newOffset = 1; $matchAll = '*' === $domain; $raw = array( array( 'id' => '', 'source' => '', 'target' => '', 'domain' => $matchAll ? '' : $domain, ) ); foreach( $this->exp as $oldOffset => $r ){ if( isset($r['parent']) ){ if( isset($map[$r['parent']]) ){ $r['parent'] = $map[ $r['parent'] ]; $raw[ $newOffset++ ] = $r; } } else { if( $matchAll ){ $match = true; } else if( isset($r['domain']) ){ $match = $domain === $r['domain']; } else { $match = $domain === ''; } if( $match ){ $map[ $oldOffset ] = $newOffset; $raw[ $newOffset++ ] = $r; } } } return $raw; } }
17
  interface LocoTokensInterface extends Iterator, Countable { public function advance(); }
18
  class LocoPHPTokens implements LocoTokensInterface { private $i; private $tokens; private $skip_tokens = array(); private $skip_strings = array(); private $literal_tokens = array(); public function __construct( array $tokens ){ $this->tokens = $tokens; $this->rewind(); } public function literal(){ foreach( func_get_args() as $t ){ $this->literal_tokens[ $t ] = 1; } return $this; } public function ignore(){ foreach( func_get_args() as $t ){ if( is_int($t) ){ $this->skip_tokens[$t] = true; } else { $this->skip_strings[$t] = true; } } return $this; } public function export(){ $arr = array(); foreach( $this as $tok ){ $arr[] = $tok; } return $arr; } public function advance(){ $this->next(); return $this->current(); } public function rewind(){ $this->i = ( false === reset($this->tokens) ? null : key($this->tokens) ); } public function valid(){ while( isset($this->i) ){ $tok = $this->tokens[$this->i]; if( is_array($tok) ){ if( isset($this->skip_tokens[$tok[0]]) ){ $this->next(); } else { return true; } } else if( isset($this->skip_strings[$tok]) ){ $this->next(); } else { return true; } } return false; } public function key(){ return $this->i; } public function next(){ $this->i = ( false === next($this->tokens) ? null : key($this->tokens) ); } public function current(){ if( ! $this->valid() ){ return false; } $tok = $this->tokens[$this->i]; if( is_array($tok) && isset($this->literal_tokens[$tok[0]]) ){ return $tok[1]; } return $tok; } public function __toString(){ $s = array(); foreach( $this as $token ){ $s[] = is_array($token) ? $token[1] : $token; } return implode('',$s); } public function count(){ return count($this->tokens); } }
19
  function loco_sniff_printf( $s, $p, $limit = 0, $offset = 0 ){ $n = 0; while( $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; }
20
  function loco_sniff_php_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:\\d+\\$)?(?:\'.|[-+0 ])*\\d*(?:\\.\\d+)?[suxXbcdeEfFgGo%]/', $limit ); }
21
  function loco_decapse_php_string( $s ){ if( ! $s ){ return ''; } $q = $s{0}; if( "'" === $q ){ return str_replace( array( '\\'.$q, '\\\\' ), array( $q, '\\' ), substr( $s, 1, -1 ) ); } if( '"' !== $q ){ return $s; } $s = substr( $s, 1, -1 ); $a = ''; $e = false; $symbols = array ( 'n' => "\x0A", 'r' => "\x0D", 't' => "\x09", 'v' => "\x0B", 'f' => "\x0C", 'e' => "\x1B", '$' => '$', '\\' => '\\', '"' => '"', ); foreach( explode('\\', $s) as $i => $t ){ if( '' === $t ){ if( $e ){ $a .= '\\'; } $e = ! $e; continue; } if( $e ){ $c = $t{0}; while( true ){ if( 'x' === $c || 'X' === $c ){ if( preg_match('/^x([0-9a-f]{1,2})/i', $t, $n ) ){ $c = chr( intval( $n[1], 16 ) ); $n = strlen($n[0]); break; } } else if( isset($symbols[$c]) ){ $c = $symbols[$c]; $n = 1; break; } else if( preg_match('/^[0-7]{1,3}/', $t, $n ) ){ $c = chr( intval( $n[0], 8 ) ); $n = strlen($n[0]); break; } $a .= '\\'.$t; continue 2; } $a .= substr_replace( $t, $c, 0, $n ); continue; } $a .= $t; $e = true; } return $a; }
22
- class LocoPHPExtractor extends LocoExtractor { private $defs = array(); public function extractSource( $src, $fileref = '' ){ $tokens = new LocoPHPTokens( token_get_all($src) ); $tokens->ignore( T_WHITESPACE ); return $this->extract( $tokens, $fileref )->export(); } public function decapse( $raw ){ return loco_decapse_php_string( $raw ); } public function fsniff( $str ){ return loco_sniff_php_printf($str) ? 'php' : ''; } public function define( $name, $value ){ if( is_string($value) ){ $this->defs[$name] = $value; } return $this; } public function extract( LocoTokensInterface $tokens, $fileref ){ $n = 0; $depth = 0; $comment = ''; $wp = $this->headerized(); $tokens->rewind(); while( $tok = $tokens->advance() ){ if( is_string($tok) ){ $s = $tok; $t = null; } else { $t = $tok[0]; $s = $tok[1]; } if( $depth ){ if( ')' === $s || ']' === $s ){ if( 0 === --$depth ){ if( $this->push( $rule, $args, $comment, $ref ) ){ $n++; } $comment = ''; } } else if( '(' === $s || '[' === $s ){ $depth++; $args[$narg] = null; } else if( 1 === $depth ){ if( ',' === $s ){ $narg++; } else if( T_CONSTANT_ENCAPSED_STRING === $t ){ $args[$narg] = $this->decapse($s); } else if( T_STRING === $t && array_key_exists($s,$this->defs) ){ $args[$narg] = $this->defs[$s]; } else { $args[$narg] = null; } } } else if( T_COMMENT === $t || T_DOC_COMMENT === $t ){ $was_header = false; if( 0 === $n ){ if( false !== strpos($s,'* @package') ){ $was_header = true; } if( $wp && ( $header = loco_parse_wp_comment($s) ) ){ foreach( $wp as $domain => $tags ){ foreach( array_intersect_key($header,$tags) as $tag => $source ){ $this->pushMeta( $source, $tags[$tag], $domain ); $was_header = true; } } } } if( ! $was_header ) { $comment = $s; } } else if( T_STRING === $t && '(' === $tokens->advance() && ( $rule = $this->rule($s) ) ){ $ref = $fileref ? $fileref.':'.$tok[2]: ''; $depth = 1; $args = array(); $narg = 0; } else if( $comment ){ if( false === stripos($comment, 'translators:') && false === strpos($comment, 'xgettext:') ){ $comment = ''; } } } return $this; } }
23
  function loco_wp_extractor(){ $e = new LocoWordPressExtractor( array( '__' => 'sd', '_e' => 'sd', '_c' => 'sd', '_n' => 'sp_d', '_n_noop' => 'spd', '_nc' => 'sp_d', '__ngettext' => 'spd', '__ngettext_noop' => 'spd', '_x' => 'scd', '_ex' => 'scd', '_nx' => 'sp_cd', '_nx_noop' => 'spcd', 'esc_attr__' => 'sd', 'esc_html__' => 'sd', 'esc_attr_e' => 'sd', 'esc_html_e' => 'sd', 'esc_attr_x' => 'scd', 'esc_html_x' => 'scd', ) ); return $e->setDomain('default'); }
24
  final class LocoWordPressExtractor extends LocoPHPExtractor { public function extractSource( $src, $fileref = '' ){ if( '.twig' === substr($fileref,-5) ){ $src = '<?php '.preg_replace('/\\{#([^#]+)#\\}/su','/*\\1*/',$src); } return parent::extractSource( $src, $fileref ); } }
25
- abstract class LocoPo { public static function pair( $key, $text, $width = 79 ){ if( ! $text && '0' !== $text ){ return $key.' ""'; } $text = addcslashes( $text, "\t\x0B\x0C\x07\x08\\\"" ); $text = preg_replace('/\R/u', "\\n\n", $text, -1, $nbr ); if( $nbr ){ } else if( $width && $width < mb_strlen($text,'UTF-8') + strlen($key) + 3 ){ } else { return $key.' "'.$text.'"'; } $lines = array( $key.' "' ); if( $width ){ $width -= 2; $a = '/^.{0,'.($width-1).'}[-– \\.,:;\\?!\\)\\]\\}\\>]/u'; $b = '/^[^-– \\.,:;\\?!\\)\\]\\}\\>]+/u'; foreach( explode("\n",$text) as $unwrapped ){ $length = mb_strlen( $unwrapped, 'UTF-8' ); while( $length > $width ){ if( preg_match( $a, $unwrapped, $r ) ){ $line = $r[0]; } else if( preg_match( $b, $unwrapped, $r ) ){ $line = $r[0]; } else { throw new Exception('Wrapping error'); } $lines[] = $line; $trunc = mb_strlen($line,'UTF-8'); $length -= $trunc; $unwrapped = substr( $unwrapped, strlen($line) ); if( ( false === $unwrapped && 0 !== $length ) || ( 0 === $length && false !== $unwrapped ) ){ throw new Exception('Truncation error'); } } if( 0 !== $length ){ $lines[] = $unwrapped; } } } else { foreach( explode("\n",$text) as $unwrapped ){ $lines[] = $unwrapped; } } return implode("\"\n\"",$lines).'"'; } public static function refs( $text, $width = 76 ){ $text = preg_replace('/\\s+/', ' ', $text ); if( $width ){ $text = wordwrap( $text, $width, "\n#: ", false ); } return '#: '.$text; } public static function prefix( $text, $prefix ){ $lines = preg_split('/\\R/u', $text, -1 ); return $prefix.implode( "\n".$prefix, $lines ); } }
26
  function loco_is_numeric( $s ){ return is_int($s) || ctype_digit($s); }
27
- class LocoPoIterator implements Iterator, Countable { private $po; private $headers; private $i; private $t; private $j; private $z; private $m; private $w = 79; public function __construct( $po ){ $this->po = $po; $this->t = count( $po ); if( ! isset($po[0]) ){ throw new InvalidArgumentException('Empty PO data'); } $h = $po[0]; if( '' === $h['source'] && empty($h['context']) ){ $this->z = 0; } else { $this->z = -1; } } public function count(){ return $this->t - ( $this->z + 1 ); } public function wrap( $width ){ if( ! loco_is_numeric($width) || $width < 1 ){ $this->w = 0; } else { $this->w = max( 15, (int) $width ); } return $this; } public function rewind(){ $this->i = $this->z; $this->j = -1; $this->next(); } public function key(){ return $this->j; } public function valid(){ return is_int($this->i); } public function next(){ $i = $this->i; while( ++$i < $this->t ){ $this->j++; $this->i = $i; return; } $this->i = null; $this->j = null; } public function current(){ $i = $this->i; $po = $this->po; $parent = new LocoPoMessage( $po[$i] ); $plurals = array(); while( isset($po[++$i]['parent']) ){ $this->i = $i; $plurals[] = new LocoPoMessage( $po[$i] ); } if( $plurals ){ $parent['plurals'] = $plurals; } return $parent; } public function getArrayCopy(){ $po = $this->po; if( 0 === $this->z ){ $po[0]['target'] = (string) $this->getHeaders(); } return $po; } public function getHeaders(){ if( ! $this->headers ){ $header = $this->po[0]; if( 0 === $this->z ){ $this->headers = loco_parse_po_headers( $header['target'] ); } else { $this->headers = new LocoPoHeaders; } } return $this->headers; } public function initPo(){ if( 0 === $this->z ){ unset( $this->po[0]['flag'] ); } return $this; } public function initPot(){ if( 0 === $this->z ){ $this->po[0]['flag'] = 4; } return $this; } public function strip(){ $po = $this->po; $i = count($po); $z = $this->z; while( --$i > $z ){ $po[$i]['target'] = ''; } $this->po = $po; return $this; } public function __toString(){ try { return $this->render(); } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); return ''; } } public function render( $sorter = null ){ $width = $this->w; $ref_width = max( 0, $width - 3 ); if( 0 === $this->z ){ $h = $this->po[0]; } else { $h = array( 'source' => '' ); } $h['target'] = (string) $this->getHeaders(); $msg = new LocoPoMessage( $h ); $s = $msg->render( $width, $ref_width ); if( $sorter ){ if( ! is_callable($sorter) ){ throw new InvalidArgumentException('Bad callback'); } $msgs = array(); foreach( $this as $msg ){ $msgs[] = $msg; } usort( $msgs, $sorter ); } else { $msgs = $this; } foreach( $msgs as $msg ){ $s .= "\n".$msg->render( $width, $ref_width ); } return $s; } public function getHashes(){ $a = array(); foreach( $this as $msg ){ $a[] = $msg->getHash(); } sort( $a, SORT_STRING ); return $a; } public function equalSource( LocoPoIterator $that ){ $a = $this->getHashes(); $b = $that->getHashes(); if( count($a) !== count($b) ){ return false; } foreach( $a as $i => $hash ){ if( $hash !== $b[$i] ){ return false; } } return true; } public function sort( $func = null ){ $order = array(); foreach( $this as $msg ){ $order[] = $msg; } if( is_null($func) ){ $func = array( __CLASS__, 'compare' ); } else if( ! is_callable($func) ){ throw new InvalidArgumentException('Bad callback'); } usort( $order, $func ); $po = array(); if( 0 === $this->z ){ $po[] = $this->po[0]; } foreach( $order as $msg ){ $po[] = $msg->getArrayCopy(); if( is_array( $plurals = $msg->plurals ) ){ $index = count($po) - 1; unset( $po[$index]['plurals'] ); foreach( $plurals as $p ){ $a = $p->getArrayCopy(); $a['parent'] = $index; $po[] = $a; } } } $this->po = $po; return $this; } public static function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); $j = $b->getHash(); $n = strcasecmp( $h, $j ); if( 0 === $n ){ $n = strcmp( $h, $j ); if( 0 === $n ){ return 0; } } return $n > 0 ? 1 : -1; } public function createSorter(){ $index = array(); foreach( $this as $i => $msg ){ $index[ $msg->getHash() ] = $i; } $obj = new LocoPoIndex( $index ); return array( $obj, 'compare' ); } }
28
  class LocoPoIndex extends ArrayIterator { public function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); if( ! isset($this[$h]) ){ return 1; } $j = $b->getHash(); if( ! isset($this[$j]) ){ return -1; } return $this[$h] > $this[$j] ? 1 : -1; } }
29
  class LocoPoMessage extends ArrayObject { public function __construct( array $r ){ $r['key'] = $r['source']; parent::__construct($r); } public function __get( $prop ){ return isset($this[$prop]) ? $this[$prop] : null; } private function _getFlags(){ $flags = array(); $plurals = $this->__get('plurals'); if( 4 === $this->__get('flag') ){ $flags[] = 'fuzzy'; } else if( $plurals ){ foreach( $plurals as $child ){ if( 4 === $child->__get('flag') ){ $flags[] = 'fuzzy'; break; } } } if( $f = $this->__get('format') ){ $flags[] = $f.'-format'; } else if( isset($plurals[0]) && ( $f = $plurals[0]->__get('format') ) ){ $flags[] = $f.'-format'; } return $flags; } public function getHash(){ $msgid = $this['source']; if( isset($this['context']) ){ $msgctxt = $this['context']; if( is_string($msgctxt) && '' !== $msgctxt ){ if( ! $msgid && '0' !== $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\x04".$msgid; } } if( isset($this['plurals']) ){ foreach( $this['plurals'] as $p ){ $msgid .= "\0".$p->getHash(); break; } } return $msgid; } public function __toString(){ return $this->render( 79, 76 ); } public function render( $width, $ref_width ){ $s = ''; try { if( $text = $this->__get('comment') ) { $s .= LocoPo::prefix( $text, '# ')."\n"; } if( $text = $this->__get('notes') ) { $s .= LocoPo::prefix( $text, '#. ')."\n"; } if( $text = $this->__get('refs') ){ $s .= LocoPo::refs( $text, $ref_width )."\n"; } if( $texts = $this->_getFlags() ){ $s .= '#, '.implode(', ',$texts)."\n"; } $text = $this->__get('context'); if( is_string($text) && isset($text{0}) ){ $s .= LocoPo::pair('msgctxt', $text, $width )."\n"; } $s .= LocoPo::pair( 'msgid', $this['key'], $width )."\n"; $target = $this['target']; if( is_array( $plurals = $this->__get('plurals') ) ){ if( $plurals ){ foreach( $plurals as $i => $p ){ if( 0 === $i ){ $s .= LocoPo::pair('msgid_plural', $p['key'], $width )."\n"; $s .= LocoPo::pair('msgstr[0]', $target, $width )."\n"; } $s .= LocoPo::pair('msgstr['.(++$i).']', $p['target'], $width )."\n"; } } else if( isset($this['plural_key']) ){ $s .= LocoPo::pair('msgid_plural', $this['plural_key'], $width )."\n"; $s .= LocoPo::pair('msgstr[0]', $target, $width )."\n"; } else { trigger_error('Missing plural_key in zero plural export'); $s .= LocoPo::pair('msgstr', $target, $width )."\n"; } } else { $s .= LocoPo::pair('msgstr', $target, $width )."\n"; } } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); } return $s; } }
30
  class LocoMoTable { private $size = 0; private $bin = ''; private $map; public function __construct( $data = null ){ if( is_array($data) ){ $this->compile( $data ); } else if( $data ){ $this->parse( $data ); } } public function count(){ if( ! isset($this->size) ){ if( $this->bin ){ $this->size = (int) ( strlen( $this->bin ) / 4 ); } else if( is_array($this->map) ){ $this->size = count($this->map); } else { return 0; } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2, got '.$this->size); } } return $this->size; } public function bytes(){ return $this->count() * 4; } public function __toString(){ return $this->bin; } public function export(){ if( ! is_array($this->map) ){ $this->parse( $this->bin ); } return $this->map; } private function reset( $length ){ $this->size = max( 3, self::next_prime ( $length * 4 / 3 ) ); $this->bin = null; $this->map = array(); return $this->size; } public function compile( array $msgids ){ $hash_tab_size = $this->reset( count($msgids) ); $packed = array_fill( 0, $hash_tab_size, "\0\0\0\0" ); $j = 0; foreach( $msgids as $msgid ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $hash_tab_size; if( array_key_exists($idx, $this->map) ){ $incr = 1 + ( $hash_val % ( $hash_tab_size - 2 ) ); do { $idx += $incr; if( $hash_val === $idx ){ throw new Exception('Unable to find empty slot in hash table'); } $idx %= $hash_tab_size; } while( array_key_exists($idx, $this->map ) ); } $this->map[$idx] = $j; $packed[$idx] = pack('V', ++$j ); } return $this->bin = implode('',$packed); } public function lookup( $msgid, array $msgids ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $this->size; $incr = 1 + ( $hash_val % ( $this->size - 2 ) ); while( true ){ if( ! array_key_exists($idx, $this->map) ){ break; } $j = $this->map[$idx]; if( isset($msgids[$j]) && $msgid === $msgids[$j] ){ return $j; } $idx += $incr; if( $idx === $hash_val ){ break; } $idx %= $this->size; } return -1; } public function parse( $bin ){ $this->bin = (string) $bin; $this->size = null; $hash_tab_size = $this->count(); $this->map = array(); $idx = -1; $byte = 0; while( ++$idx < $hash_tab_size ){ $word = substr( $this->bin, $byte, 4 ); if( "\0\0\0\0" !== $word ){ list(,$j) = unpack('V', $word ); $this->map[$idx] = $j - 1; } $byte += 4; } return $this->map; } public static function hashpjw( $str ){ $i = -1; $hval = 0; $len = strlen($str); while( ++$i < $len ){ $ord = ord( $str{$i} ); $hval = ( $hval << 4 ) + $ord; $g = $hval & 0xf0000000; if( $g !== 0 ){ $hval ^= $g >> 24; $hval ^= $g; } } return $hval; } private static function next_prime( $seed ){ $seed |= 1; while ( ! self::is_prime($seed) ){ $seed += 2; } return $seed; } private static function is_prime( $num ) { if ($num === 1 ){ return false; } if( $num === 2 ){ return true; } if( $num % 2 == 0 ) { return false; } for( $i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) { if($num % $i == 0 ){ return false; } } return true; } }
31
- class LocoMo { private $bin; private $msgs; private $head; private $hash; private $use_fuzzy = false; public function __construct( Iterator $export, Iterator $head = null ){ if( $head ){ $this->head = $head; } else { $this->head = new LocoHeaders( array ( 'Project-Id-Version' => 'Loco', 'Language' => 'English', 'Plural-Forms' => 'nplurals=2; plural=(n!=1);', 'MIME-Version' => '1.0', 'Content-Type' => 'text/plain; charset=UTF-8', 'Content-Transfer-Encoding' => '8bit', 'X-Generator' => 'Loco '.PLUG_HTTP_ADDR, ) ); } $this->msgs = $export; $this->bin = ''; } public function enableHash(){ return $this->hash = new LocoMoTable; } public function useFuzzy(){ $this->use_fuzzy = true; } public function setHeader( $key, $val ){ $this->head->add($key, $val); return $this; } public function setProject( LocoProject $Proj ){ return $this ->setHeader( 'Project-Id-Version', $Proj->proj_name ) ->setHeader($key, $val) ; } public function setLocale( LocoProjectLocale $Loc ){ return $this ->setHeader( 'Language', $Loc->label ) ->setHeader( 'Plural-Forms', (string) $Loc->getPlurals() ) ; } public function count(){ return count($this->msgs); } public function compile(){ $table = array(''); $sources = array(''); $targets = array( (string) $this->head ); $fuzzy_flag = 4; $skip_fuzzy = ! $this->use_fuzzy; foreach( $this->msgs as $r ){ if( isset($r['flag']) && $skip_fuzzy && $fuzzy_flag === $r['flag'] ){ continue; } $msgid = $r['key']; if( isset($r['context']) ){ $msgctxt = $r['context']; if( is_string($msgctxt) && '' !== $msgctxt ){ if( ! $msgid && '0' !== $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\x04".$msgid; } } if( ! $msgid && '0' !== $msgid ){ continue; } $msgstr = $r['target']; if( ! $msgstr && '0' !== $msgstr ){ continue; } $table[] = $msgid; if( isset($r['plurals']) ){ foreach( $r['plurals'] as $i => $p ){ if( $i === 0 ){ $msgid .= "\0".$p['key']; } $msgstr .= "\0".$p['target']; } } $sources[] = $msgid; $targets[] = $msgstr; } asort( $sources, SORT_STRING ); $this->bin = "\xDE\x12\x04\x95\x00\x00\x00\x00"; $n = count($sources); $this->writeInteger( $n ); $offset = 28; $this->writeInteger( $offset ); $offset += $n * 8; $this->writeInteger( $offset ); if( $this->hash ){ sort( $table, SORT_STRING ); $this->hash->compile( $table ); $s = $this->hash->count(); } else { $s = 0; } $this->writeInteger( $s ); $offset += $n * 8; $this->writeInteger( $offset ); if( $s ){ $offset += $s * 4; } $source = ''; foreach( $sources as $i => $str ){ $source .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } $target = ''; foreach( array_keys($sources) as $i ){ $str = $targets[$i]; $target .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } if( $this->hash ){ $this->bin .= $this->hash->__toString(); } $this->bin .= $source; $this->bin .= $target; return $this->bin; } private function writeInteger( $num ){ $this->bin .= pack( 'V', $num ); return $this; } }
32
  function loco_print_percent( $n, $t ){ $s = loco_string_percent( (int) $n, (int) $t ); echo $s,'%'; return ''; }
33
  function loco_print_progress( $translated, $untranslated, $flagged ){ $total = $translated + $untranslated; $complete = loco_string_percent( $translated - $flagged, $total ); $class = 'progress'; if( ! $translated && ! $flagged ){ $class .= ' empty'; } else if( '100' === $complete ){ $class .= ' done'; } echo '<div class="',$class,'"><div class="t">'; if( $flagged ){ $s = loco_string_percent( $flagged, $total ); echo '<div class="bar f" style="width:',$s,'%">&nbsp;</div>'; } if( '0' === $complete ){ echo '&nbsp;'; } else { $class = 'bar p'; $p = (int) $complete; $class .= sprintf(' p-%u', 10*floor($p/10) ); $style = 'width:'.$complete.'%'; if( $flagged ){ $remain = 100.0 - (float) $s; $style .= '; max-width: '.sprintf('%s',$remain).'%'; } echo '<div class="',$class,'" style="'.$style.'">&nbsp;</div>'; } echo '</div><div class="l">',$complete,'%</div></div>'; return ''; }
34
  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 ){ $n = min( $n, 99.99 ); do { $s = number_format( $n, ++$dp ); } while( '100' === substr($s,0,3) && $dp < 2 ); } else if( $n < 0.5 ){ $n = max( $n, 0.0001 ); do { $s = number_format( $n, ++$dp ); } while( preg_match('/^0\\.0+$/',$s) && $dp < 4 ); } else { $s = number_format( $n, $dp ); } } return $s; }
2
  /**
3
  * Downgraded for PHP 5.2 compatibility. Do not edit.
4
  */
5
+ function loco_ensure_utf8( $str, $enc = null, $prefix_bom = false ){ while( '' !== $str ){ $sniff = mb_detect_encoding( $str, array('UTF-8','ISO-8859-1'), true ); if( is_null($enc) ){ $m = substr( $str, 0, 2 ); if( "\xEF\xBB" === $m && "\xBF" === $str{2} ){ $str = substr( $str, 3 ); $enc = 'UTF-8'; } else if( "\xFF\xFE" === $m ){ $str = substr( $str, 2 ); $enc = 'UTF-16LE'; } else if( "\xFE\xFF" === $m ){ $str = substr( $str, 2 ); $enc = 'UTF-16BE'; } else if( 'UTF-8' === $sniff ){ break; } else if( 'ISO-8859-1' === $sniff ){ $enc = 'Windows-1252'; } else { throw new InvalidArgumentException('Unknown character encoding'); } } else if( preg_match('/^UTF-?8$/i', $enc ) ){ $enc = 'UTF-8'; } else if( 0 === strcasecmp('ISO-8859-1',$enc) || 0 === strcasecmp('CP-1252', $enc ) ){ $enc = 'Windows-1252'; } else if( 0 === strcasecmp('UTF-16', $enc) ){ $enc = 'UTF-16BE'; } else if( false === @mb_encoding_aliases($enc) ){ throw new InvalidArgumentException('Unsupported character encoding: '.$enc); } if( 'UTF-8' !== $enc ) { $str = mb_convert_encoding( $str, 'UTF-8', array($enc) ); } else if( 'UTF-8' !== $sniff ){ throw new InvalidArgumentException('Bad UTF-8 encoding'); } break; } if( $prefix_bom ){ $str = "\xEF\xBB\xBF".$str; } return $str; }
6
+ interface LocoArrayInterface extends ArrayAccess, Iterator, Countable, JsonSerializable { public function getArrayCopy(); }
7
+ class LocoHeaders extends ArrayIterator implements LocoArrayInterface { private $map = array(); public function __construct(array $raw = array() ){ if( $raw ){ $keys = array_keys( $raw ); $this->map = array_combine( array_map( 'strtolower', $keys ), $keys ); parent::__construct($raw); } } public function normalize( $key ){ $k = strtolower($key); return isset($this->map[$k]) ? $this->map[$k] : null; } public function add($key, $val ){ $this->offsetSet( $key, $val ); return $this; } public function __toString(){ $pairs = array(); foreach( $this as $key => $val ){ $pairs[] = trim($key).': '.$val; } return implode("\n", $pairs ); } public function trimmed($prop ){ return trim( $this->__get($prop) ); } public function has($key ){ $k = strtolower($key); return isset($this->map[$k]); } public function __get($key ){ return $this->offsetGet( $key ); } public function __set($key, $val ){ $this->offsetSet( $key, $val ); } public function offsetExists($k ){ return ! is_null( $this->normalize($k) ); } public function offsetGet($k ){ $k = $this->normalize($k); if( is_null($k) ){ return ''; } return parent::offsetGet($k); } public function offsetSet($key, $v ){ $k = strtolower($key); if( isset($this->map[$k]) && $key !== $this->map[$k] ){ parent::offsetUnset( $this->map[$k] ); } $this->map[$k] = $key; parent::offsetSet( $key, $v ); } public function offsetUnset($key ){ $k = strtolower($key); if( isset($this->map[$k]) ){ parent::offsetUnset( $this->map[$k] ); unset( $this->map[$k] ); } } public function jsonSerialize(){ return $this->getArrayCopy(); } public function keys(){ trigger_error('Is this required?', E_USER_NOTICE); return array_values( $this->map ); } }
8
+ class LocoPoHeaders extends LocoHeaders { public static function fromMsgstr( $str ){ $headers = new LocoPoHeaders; foreach( explode("\n",$str) as $line ){ $i = strpos($line,':') and $key = trim( substr($line,0,$i) ) and $headers->add( $key, trim( substr($line,++$i) ) ); } return $headers; } public static function fromSource( $raw ){ if( $raw = self::snip($raw) ){ return self::fromMsgstr($raw); } return new LocoPoHeaders(array()); } public static function snip($raw ){ $raw = loco_ensure_utf8($raw); while( preg_match('/^.*[\r\n]+/u', $raw, $r ) ){ $line = $r[0]; if( '#' === $line{0} ){ $raw = substr( $raw, strlen($line) ); continue; } if( preg_match('/^msgid\s+""\s+msgstr\s+/', $raw, $r ) ){ $raw = substr( $raw, strlen($r[0]) ); $str = array(); while( preg_match('/^"(.*)"\s*/', $raw, $r ) ){ $raw = substr( $raw, strlen($r[0]) ); $chunk = $r[1]; if( '' !== $chunk ){ $str[] = $chunk; } } if( $str ){ return stripcslashes( implode('',$str) ); } } break; } throw new Loco_error_ParseException('Invalid PO header'); } }
9
  function loco_parse_reference_id( $refs, &$_id ){ if( false === ( $n = strpos($refs,'loco:') ) ){ $_id = ''; return $refs; } $_id = substr($refs, $n+5, 24 ); $refs = substr_replace( $refs, '', $n, 29 ); return trim( $refs ); }
10
+ function loco_parse_po( $src ){ $src = loco_ensure_utf8($src); $i = -1; $key = null; $idx = null; $entries = array(); $template = array( '#' => array(), 'id' => array(), 'str' => array(), 'ctxt' => array(), 'i' => null ); $entry = new ArrayIterator( $template ); foreach( preg_split('/[\r\n]+/', $src) as $_i => $line ){ while( $line = trim($line," \t") ){ try { $c = $line{0}; if( '"' === $c ){ if( is_null($key) ){ throw new Exception('String encountered without keyword'); } if( '"' === substr($line,-1) ){ $line = substr( $line, 1, -1 ); $entry[$key][$idx][] = stripcslashes($line); } else { throw new Exception('Unterminated msg'.$key ); } } else if( '#' === $c ){ if( is_int($entry['i']) ){ $entry = new ArrayIterator($template); } $f = empty($line{1}) ? ' ' : $line{1}; $entry['#'][$f][] = trim( substr( $line, 1+strlen($f) ), "/ \n\r\t" ); } else if( preg_match('/^msg(id|str|ctxt|id_plural)(?:\[(\d+)\])?[ \t]+/', $line, $r ) ){ $key = $r[1]; $idx = isset($r[2]) ? (int) $r[2] : 0; if( is_null($entry['i']) ){ $entry['i'] = ++$i; $entries[$i] = $entry; } else if( 'str' !== $key && $entry['str'] ){ $entry = new ArrayIterator($template); } $line = substr( $line, strlen($r[0]) ); continue; } continue 2; } catch( Exception $e ){ continue 2; } } } unset( $entry, $key, $template ); $lookup_key = null; if( isset($entries[0]) ){ if( array(array('')) === $entries[0]['id'] ){ if( isset($entries[0]['str'][0]) ){ foreach( preg_grep('/^X-Loco-Lookup: /', $entries[0]['str'][0]) as $header ){ $lookup_key = rtrim( substr($header,15) ); break; } } else { $entries[0] = null; } } } else if( '' === $src ){ throw new Loco_error_ParseException('Empty PO file'); } $assets = array(); foreach( $entries as $i => $entry ){ if( ! isset($entry['id'][0]) ){ continue; } if( ! isset($entry['str'][0]) ){ $entry['str'] = array( array('') ); } $asset = array( 'source' => implode('',$entry['id'][0]), 'target' => implode('',$entry['str'][0]), ); $prev_entry = null; if( isset($entry['ctxt'][0]) ){ $asset['context'] = implode('',$entry['ctxt'][0]); } if( isset($entry['#']) ){ $cmt = $entry['#']; if( isset($cmt[' ']) ){ $asset['comment'] = implode("\n", $cmt[' '] ); } if( isset($cmt['.']) ){ $asset['notes'] = implode("\n", $cmt['.'] ); } if( isset($cmt[':']) ){ if( $refs = implode( ' ', $cmt[':'] ) ) { if( $refs = loco_parse_reference_id( $refs, $_id ) ){ $asset['refs'] = $refs; } if( $_id ){ $asset['_id'] = $_id; } } } if( isset($cmt[',']) ){ foreach( $cmt[','] as $flags ){ foreach( explode(',',$flags) as $flag ){ if( $flag = trim($flag) ){ if( preg_match('/^((?:no-)?\w+)-format/', $flag, $r ) ){ $asset['format'] = $r[1]; } else if( 'fuzzy' === $flag ){ $asset['flag'] = 4; } } } } } if( isset($cmt['|']) ){ try { if( $prev_entry = loco_parse_po( implode("\n", $cmt['|']) ) ){ $msgid = $prev_entry[0]['source']; if( is_string($lookup_key) ){ $asset[$lookup_key] = $asset['source']; $asset['source'] = $msgid; } else if( 'loco:' === substr($msgid,0,5) ){ $asset['_id'] = substr($msgid,5); } else { $asset['prev'] = $prev_entry; } } else { $prev_entry = null; } } catch( Loco_error_ParseException $e ){ $prev_entry = null; } } } $assets[] = $asset; if( isset($entry['id_plural']) || isset($entry['str'][1]) ){ $idx = 0; $pidx = count($assets) - 1; $num = max( 2, count($entry['str']) ); while( ++$idx < $num ){ $plural = array( 'source' => '', 'target' => isset($entry['str'][$idx]) ? implode('',$entry['str'][$idx]) : '', 'plural' => $idx, 'parent' => $pidx, ); if( 1 === $idx ){ $plural['source'] = isset($entry['id_plural'][0]) ? implode('',$entry['id_plural'][0]) : ''; if( is_string($lookup_key) && is_array($prev_entry) && isset($prev_entry[1]) ){ $plural[$lookup_key] = $plural['source']; $plural['source'] = $prev_entry[1]['source']; } } $assets[] = $plural; } } } if( ! isset($assets[0]) ){ throw new Loco_error_ParseException('Invalid PO file'); } return $assets; }
11
  function loco_parse_po_headers( $str ){ return LocoPoHeaders::fromMsgstr($str); }
12
  class LocoMoParser { private $bin; private $be; private $n; private $o; private $t; private $v; private $cs; public function __construct( $bin ){ $this->bin = $bin; } public function getAt( $idx ){ $offset = $this->targetOffset(); $offset += ( $idx * 8 ); $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $txt = $this->bytes( $idx, $len ); if( false === strpos( $txt, "\0") ){ return $txt; } return explode( "\0", $txt ); } public function parse(){ $r = array(); $sourceOffset = $this->sourceOffset(); $targetOffset = $this->targetOffset(); $soffset = $sourceOffset; $toffset = $targetOffset; while( $soffset < $targetOffset ){ $len = $this->integerAt( $soffset ); $idx = $this->integerAt( $soffset + 4 ); $src = $this->bytes( $idx, $len ); $eot = strpos( $src, "\x04" ); if( false === $eot ){ $context = null; } else { $context = $this->decodeStr( substr($src, 0, $eot ) ); $src = substr( $src, $eot+1 ); } $sources = explode( "\0", $src, 2 ); $len = $this->integerAt( $toffset ); $idx = $this->integerAt( $toffset + 4 ); $targets = explode( "\0", $this->bytes( $idx, $len ) ); $r[] = array( 'source' => $this->decodeStr( $sources[0] ), 'target' => $this->decodeStr( $targets[0] ), 'context' => $context, ); if( isset($sources[1]) ){ $p = count($r) - 1; $nforms = max( 2, count($targets) ); for( $i = 1; $i < $nforms; $i++ ){ $r[] = array( 'source' => isset($sources[$i]) ? $this->decodeStr( $sources[$i] ) : sprintf('%s (plural %u)',$r[$p]['source'],$i), 'target' => isset($targets[$i]) ? $this->decodeStr( $targets[$i] ) : '', 'parent' => $p, 'plural' => $i, ); } } $soffset += 8; $toffset += 8; } return $r; } public function isBigendian(){ while( is_null($this->be) ){ $str = $this->words( 0, 1 ); if( "\xDE\x12\x04\x95" === $str ){ $this->be = false; break; } if( "\x95\x04\x12\xDE" === $str ){ $this->be = true; break; } throw new Loco_error_ParseException('Invalid MO format'); } return $this->be; } public function version(){ if( is_null($this->v) ){ $this->v = $this->integerWord(1); } return $this->v; } public function count(){ if( is_null($this->n) ){ $this->n = $this->integerWord(2); } return $this->n; } public function sourceOffset(){ if( is_null($this->o) ){ $this->o = $this->integerWord(3); } return $this->o; } public function targetOffset(){ if( is_null($this->t) ){ $this->t = $this->integerWord(4); } return $this->t; } public function getHashTable(){ $s = $this->integerWord(5); $h = $this->integerWord(6); return $this->bytes( $h, $s * 4 ); } private function bytes( $offset, $length ){ return substr( $this->bin, $offset, $length ); } private function words( $offset, $length ){ return $this->bytes( $offset * 4, $length * 4 ); } private function integerWord( $offset ){ return $this->integerAt( $offset * 4 ); } private function integerAt( $offset ){ $str = $this->bytes( $offset, 4 ); $fmt = $this->isBigendian() ? 'N' : 'V'; $arr = unpack( $fmt, $str ); if( ! isset($arr[1]) || ! is_int($arr[1]) ){ throw new Loco_error_ParseException('Failed to read integer at byte '.$offset); } return $arr[1]; } private function decodeStr( $str ){ if( $this->cs ){ $enc = $this->cs; } else { $enc = mb_detect_encoding( $str, array('ASCII','UTF-8','ISO-8859-1'), false ); if( 'ASCII' !== $enc ){ $this->cs = $enc; } } if( 'UTF-8' !== $enc ){ $str = mb_convert_encoding( $str, 'UTF-8', array($enc) ); } return $str; } }
13
  function loco_parse_mo( $src ){ $mo = new LocoMoParser($src); return $mo->parse(); }
14
  function loco_parse_comment($comment){ if( '*' === $comment{1} ){ $lines = array(); $junk = "\r\t/ *"; foreach( explode("\n", $comment) as $line ){ if( $line = trim($line,$junk) ){ $lines[] = trim($line,$junk); } } return implode("\n", $lines); } return trim( $comment,"/ \n\r\t" ); }
15
  function loco_parse_wp_comment( $block ){ $header = array(); if( '*' === $block{1} ){ $junk = "\r\t/ *"; foreach( explode("\n", $block) as $line ){ if( false !== ( $i = strpos($line,':') ) ){ $key = substr($line,0,$i); $val = substr($line,++$i); $header[ trim($key,$junk) ] = trim($val,$junk); } } } return $header; }
16
+ abstract class LocoExtractor { private $rules; private $exp = array(); private $reg = array(); private $dom = array(); private $wp = array(); private $dflt = ''; abstract public function extractSource( $src, $fileref = '' ); abstract protected function fsniff( $str ); public function __construct( array $rules ){ $this->rules = $rules; } protected function decapse( $raw ){ return $raw; } public function rule( $s ){ return isset($this->rules[$s]) ? $this->rules[$s] : ''; } public function export(){ return $this->exp; } public function getTotal(){ return count( $this->exp ); } public function getDomainCounts(){ return $this->dom; } public function setDomain( $default ){ $this->dflt = (string) $default; return $this; } public function headerize( array $tags, $domain = '' ){ if( isset($this->wp[$domain]) ){ $this->wp[$domain] += $tags; } else { $this->wp[$domain] = $tags; } return $this; } protected function headerized(){ return $this->wp; } public function pushMeta( $source, $notes = '', $domain = null ){ if( ! $domain || '*' === $domain ){ $domain = $this->dflt; } $entry = array( 'id' => '', 'source' => $source, 'target' => '', 'notes' => $notes, ); if( $domain ){ $entry['domain'] = $domain; $key = $source."\1".$domain; } else { $key = $source; } $this->pushMsgid( $key, $entry, $domain ); return $this; } private function pushMsgid( $key, array $entry, $domain ){ if( isset($this->reg[$key]) ){ $index = $this->reg[$key]; $clash = $this->exp[$index]; if( $value = $this->mergeField( $clash, $entry, 'refs', ' ') ){ $this->exp[$index]['refs'] = $value; } if( $value = $this->mergeField( $clash, $entry, 'notes', "\n") ){ $this->exp[$index]['notes'] = $value; } } else { $index = count($this->exp); $this->reg[$key] = $index; $this->exp[] = $entry; if( isset($this->dom[$domain]) ){ $this->dom[$domain]++; } else { $this->dom[$domain] = 1; } } return $index; } private function mergeField( array $old, array $new, $field, $glue ){ $prev = isset($old[$field]) ? $old[$field] : ''; if( isset($new[$field]) ){ $text = $new[$field]; if( '' !== $prev && $prev !== $text ){ $text = $prev.$glue.$text; } return $text; } return $prev; } protected function push($rule, array $args, $comment = '', $ref = '' ){ $s = strpos( $rule, 's'); $p = strpos( $rule, 'p'); $c = strpos( $rule, 'c'); $d = strpos( $rule, 'd'); if( false === $s || ! isset($args[$s]) ){ return null; } $key = $args[$s]; if( ! is_string($key) ){ return null; } $entry = array( 'id' => '', 'source' => ( $msgid = $key ), 'target' => '', ); if( is_int($c) && isset($args[$c]) ){ $entry['context'] = $context = $args[$c]; $key .= "\0". $context; } else if( ! isset($msgid{0}) ){ return null; } else { $context = null; } if( $ref ){ $entry['refs'] = $ref; } if( is_int($d) && array_key_exists($d,$args) ){ $domain = $args[$d]; if( is_null($domain) ){ $domain = ''; } } else { $domain = $this->dflt; } if( $domain ){ $entry['domain'] = $domain; $key .= "\1".$domain; } $parse_printf = true; if( $comment ){ if( preg_match('/xgettext:\s*((?:no-)?\w+)-format/', $comment, $r ) ){ $entry['format'] = $r[1]; if( 'no-' === substr($r[1],0,3) ){ $parse_printf = false; } else { $parse_printf = null; } $comment = str_replace( $r[0], '', $comment ); } $comment = loco_parse_comment($comment); if( preg_match('/^translators:\s+/i', $comment, $r ) ){ $comment = substr( $comment, strlen($r[0]) ); } $entry['notes'] = $comment; } if( $parse_printf && ( $format = $this->fsniff($msgid) ) ){ $entry['format'] = $format; } $index = $this->pushMsgid( $key, $entry, $domain ); if( is_int($p) && isset($args[$p]) ){ $msgid_plural = $args[$p]; $entry = array( 'id' => '', 'source' => $msgid_plural, 'target' => '', 'plural' => 1, 'parent' => $index, ); if( false !== $parse_printf && ( $format = $this->fsniff($msgid_plural) ) ){ $entry['format'] = $format; } $pkey = $key."\2"; if( isset($this->reg[$pkey]) ){ $plural_index = $this->reg[$pkey]; $this->exp[$plural_index] = $entry; } else { $plural_index = count($this->exp); $this->reg[$pkey] = $plural_index; $this->exp[] = $entry; } } return $index; } public function filter( $domain ){ $map = array(); $newOffset = 1; $matchAll = '*' === $domain; $raw = array( array( 'id' => '', 'source' => '', 'target' => '', 'domain' => $matchAll ? '' : $domain, ) ); foreach( $this->exp as $oldOffset => $r ){ if( isset($r['parent']) ){ if( isset($map[$r['parent']]) ){ $r['parent'] = $map[ $r['parent'] ]; $raw[ $newOffset++ ] = $r; } } else { if( $matchAll ){ $match = true; } else if( isset($r['domain']) ){ $match = $domain === $r['domain']; } else { $match = $domain === ''; } if( $match ){ $map[ $oldOffset ] = $newOffset; $raw[ $newOffset++ ] = $r; } } } return $raw; } }
17
  interface LocoTokensInterface extends Iterator, Countable { public function advance(); }
18
  class LocoPHPTokens implements LocoTokensInterface { private $i; private $tokens; private $skip_tokens = array(); private $skip_strings = array(); private $literal_tokens = array(); public function __construct( array $tokens ){ $this->tokens = $tokens; $this->rewind(); } public function literal(){ foreach( func_get_args() as $t ){ $this->literal_tokens[ $t ] = 1; } return $this; } public function ignore(){ foreach( func_get_args() as $t ){ if( is_int($t) ){ $this->skip_tokens[$t] = true; } else { $this->skip_strings[$t] = true; } } return $this; } public function export(){ $arr = array(); foreach( $this as $tok ){ $arr[] = $tok; } return $arr; } public function advance(){ $this->next(); return $this->current(); } public function rewind(){ $this->i = ( false === reset($this->tokens) ? null : key($this->tokens) ); } public function valid(){ while( isset($this->i) ){ $tok = $this->tokens[$this->i]; if( is_array($tok) ){ if( isset($this->skip_tokens[$tok[0]]) ){ $this->next(); } else { return true; } } else if( isset($this->skip_strings[$tok]) ){ $this->next(); } else { return true; } } return false; } public function key(){ return $this->i; } public function next(){ $this->i = ( false === next($this->tokens) ? null : key($this->tokens) ); } public function current(){ if( ! $this->valid() ){ return false; } $tok = $this->tokens[$this->i]; if( is_array($tok) && isset($this->literal_tokens[$tok[0]]) ){ return $tok[1]; } return $tok; } public function __toString(){ $s = array(); foreach( $this as $token ){ $s[] = is_array($token) ? $token[1] : $token; } return implode('',$s); } public function count(){ return count($this->tokens); } }
19
  function loco_sniff_printf( $s, $p, $limit = 0, $offset = 0 ){ $n = 0; while( $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; }
20
  function loco_sniff_php_printf( $s, $limit = 0 ){ return loco_sniff_printf( $s, '/^%(?:\\d+\\$)?(?:\'.|[-+0 ])*\\d*(?:\\.\\d+)?[suxXbcdeEfFgGo%]/', $limit ); }
21
  function loco_decapse_php_string( $s ){ if( ! $s ){ return ''; } $q = $s{0}; if( "'" === $q ){ return str_replace( array( '\\'.$q, '\\\\' ), array( $q, '\\' ), substr( $s, 1, -1 ) ); } if( '"' !== $q ){ return $s; } $s = substr( $s, 1, -1 ); $a = ''; $e = false; $symbols = array ( 'n' => "\x0A", 'r' => "\x0D", 't' => "\x09", 'v' => "\x0B", 'f' => "\x0C", 'e' => "\x1B", '$' => '$', '\\' => '\\', '"' => '"', ); foreach( explode('\\', $s) as $i => $t ){ if( '' === $t ){ if( $e ){ $a .= '\\'; } $e = ! $e; continue; } if( $e ){ $c = $t{0}; while( true ){ if( 'x' === $c || 'X' === $c ){ if( preg_match('/^x([0-9a-f]{1,2})/i', $t, $n ) ){ $c = chr( intval( $n[1], 16 ) ); $n = strlen($n[0]); break; } } else if( isset($symbols[$c]) ){ $c = $symbols[$c]; $n = 1; break; } else if( preg_match('/^[0-7]{1,3}/', $t, $n ) ){ $c = chr( intval( $n[0], 8 ) ); $n = strlen($n[0]); break; } $a .= '\\'.$t; continue 2; } $a .= substr_replace( $t, $c, 0, $n ); continue; } $a .= $t; $e = true; } return $a; }
22
+ class LocoPHPExtractor extends LocoExtractor { private $defs = array(); public function extractSource( $src, $fileref = '' ){ $tokens = new LocoPHPTokens( token_get_all($src) ); $tokens->ignore( T_WHITESPACE ); return $this->extract( $tokens, $fileref )->export(); } public function decapse( $raw ){ return loco_decapse_php_string( $raw ); } public function fsniff( $str ){ return loco_sniff_php_printf($str) ? 'php' : ''; } public function define( $name, $value ){ if( is_string($value) ){ $this->defs[$name] = $value; } return $this; } public function extract( LocoTokensInterface $tokens, $fileref ){ $n = 0; $depth = 0; $comment = ''; $narg = 0; $args = array(); $ref = ''; $rule = ''; $wp = $this->headerized(); $tokens->rewind(); while( $tok = $tokens->advance() ){ if( is_string($tok) ){ $s = $tok; $t = null; } else { $t = $tok[0]; $s = $tok[1]; } if( $depth ){ if( ')' === $s || ']' === $s ){ if( 0 === --$depth ){ if( $this->push( $rule, $args, $comment, $ref ) ){ $n++; } $comment = ''; } } else if( '(' === $s || '[' === $s ){ $depth++; $args[$narg] = null; } else if( 1 === $depth ){ if( ',' === $s ){ $narg++; } else if( T_CONSTANT_ENCAPSED_STRING === $t ){ $args[$narg] = $this->decapse($s); } else if( T_STRING === $t && array_key_exists($s,$this->defs) ){ $args[$narg] = $this->defs[$s]; } else { $args[$narg] = null; } } } else if( T_COMMENT === $t || T_DOC_COMMENT === $t ){ $was_header = false; if( 0 === $n ){ if( false !== strpos($s,'* @package') ){ $was_header = true; } if( $wp && ( $header = loco_parse_wp_comment($s) ) ){ foreach( $wp as $domain => $tags ){ foreach( array_intersect_key($header,$tags) as $tag => $source ){ $this->pushMeta( $source, $tags[$tag], $domain ); $was_header = true; } } } } if( ! $was_header ) { $comment = $s; } } else if( T_STRING === $t && '(' === $tokens->advance() && ( $rule = $this->rule($s) ) ){ $ref = $fileref ? $fileref.':'.$tok[2]: ''; $depth = 1; $args = array(); $narg = 0; } else if( $comment ){ if( false === stripos($comment, 'translators:') && false === strpos($comment, 'xgettext:') ){ $comment = ''; } } } return $this; } }
23
  function loco_wp_extractor(){ $e = new LocoWordPressExtractor( array( '__' => 'sd', '_e' => 'sd', '_c' => 'sd', '_n' => 'sp_d', '_n_noop' => 'spd', '_nc' => 'sp_d', '__ngettext' => 'spd', '__ngettext_noop' => 'spd', '_x' => 'scd', '_ex' => 'scd', '_nx' => 'sp_cd', '_nx_noop' => 'spcd', 'esc_attr__' => 'sd', 'esc_html__' => 'sd', 'esc_attr_e' => 'sd', 'esc_html_e' => 'sd', 'esc_attr_x' => 'scd', 'esc_html_x' => 'scd', ) ); return $e->setDomain('default'); }
24
  final class LocoWordPressExtractor extends LocoPHPExtractor { public function extractSource( $src, $fileref = '' ){ if( '.twig' === substr($fileref,-5) ){ $src = '<?php '.preg_replace('/\\{#([^#]+)#\\}/su','/*\\1*/',$src); } return parent::extractSource( $src, $fileref ); } }
25
+ abstract class LocoPo { public static function pair( $key, $text, $width = 79 ){ if( ! $text && '0' !== $text ){ return $key.' ""'; } $text = addcslashes( $text, "\t\x0B\x0C\x07\x08\\\"" ); $text = preg_replace('/\R/u', "\\n\n", $text, -1, $nbr ); if( $nbr ){ } else if( $width && $width < mb_strlen($text,'UTF-8') + strlen($key) + 3 ){ } else { return $key.' "'.$text.'"'; } $lines = array( $key.' "' ); if( $width ){ $width -= 2; $a = '/^.{0,'.($width-1).'}[-– \\.,:;\\?!\\)\\]\\}\\>]/u'; $b = '/^[^-– \\.,:;\\?!\\)\\]\\}\\>]+/u'; foreach( explode("\n",$text) as $unwrapped ){ $length = mb_strlen( $unwrapped, 'UTF-8' ); while( $length > $width ){ if( preg_match( $a, $unwrapped, $r ) ){ $line = $r[0]; } else if( preg_match( $b, $unwrapped, $r ) ){ $line = $r[0]; } else { throw new Exception('Wrapping error'); } $lines[] = $line; $trunc = mb_strlen($line,'UTF-8'); $length -= $trunc; $unwrapped = (string) substr( $unwrapped, strlen($line) ); if( ( '' === $unwrapped && 0 !== $length ) || ( 0 === $length && '' !== $unwrapped ) ){ throw new Exception('Truncation error'); } } if( 0 !== $length ){ $lines[] = $unwrapped; } } } else { foreach( explode("\n",$text) as $unwrapped ){ $lines[] = $unwrapped; } } return implode("\"\n\"",$lines).'"'; } public static function refs( $text, $width = 76 ){ $text = preg_replace('/\\s+/', ' ', $text ); if( $width ){ $text = wordwrap( $text, $width, "\n#: ", false ); } return '#: '.$text; } public static function prefix( $text, $prefix ){ $lines = preg_split('/\\R/u', $text, -1 ); return $prefix.implode( "\n".$prefix, $lines ); } }
26
  function loco_is_numeric( $s ){ return is_int($s) || ctype_digit($s); }
27
+ class LocoPoIterator implements Iterator, Countable { private $po; private $headers; private $i; private $t; private $j; private $z; private $w = 79; public function __construct( $po ){ $this->po = $po; $this->t = count( $po ); if( ! isset($po[0]) ){ throw new InvalidArgumentException('Empty PO data'); } $h = $po[0]; if( '' === $h['source'] && empty($h['context']) ){ $this->z = 0; } else { $this->z = -1; } } public function count(){ return $this->t - ( $this->z + 1 ); } public function wrap( $width ){ if( ! loco_is_numeric($width) || $width < 1 ){ $this->w = 0; } else { $this->w = max( 15, (int) $width ); } return $this; } public function rewind(){ $this->i = $this->z; $this->j = -1; $this->next(); } public function key(){ return $this->j; } public function valid(){ return is_int($this->i); } public function next(){ $i = $this->i; while( ++$i < $this->t ){ $this->j++; $this->i = $i; return; } $this->i = null; $this->j = null; } public function current(){ $i = $this->i; $po = $this->po; $parent = new LocoPoMessage( $po[$i] ); $plurals = array(); while( isset($po[++$i]['parent']) ){ $this->i = $i; $plurals[] = new LocoPoMessage( $po[$i] ); } if( $plurals ){ $parent['plurals'] = $plurals; } return $parent; } public function getArrayCopy(){ $po = $this->po; if( 0 === $this->z ){ $po[0]['target'] = (string) $this->getHeaders(); } return $po; } public function getHeaders(){ if( ! $this->headers ){ $header = $this->po[0]; if( 0 === $this->z ){ $this->headers = loco_parse_po_headers( $header['target'] ); } else { $this->headers = new LocoPoHeaders; } } return $this->headers; } public function initPo(){ if( 0 === $this->z ){ unset( $this->po[0]['flag'] ); } return $this; } public function initPot(){ if( 0 === $this->z ){ $this->po[0]['flag'] = 4; } return $this; } public function strip(){ $po = $this->po; $i = count($po); $z = $this->z; while( --$i > $z ){ $po[$i]['target'] = ''; } $this->po = $po; return $this; } public function __toString(){ try { return $this->render(); } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); return ''; } } public function render( $sorter = null ){ $width = $this->w; $ref_width = max( 0, $width - 3 ); if( 0 === $this->z ){ $h = $this->po[0]; } else { $h = array( 'source' => '' ); } $h['target'] = (string) $this->getHeaders(); $msg = new LocoPoMessage( $h ); $s = $msg->render( $width, $ref_width ); if( $sorter ){ if( ! is_callable($sorter) ){ throw new InvalidArgumentException('Bad callback'); } $msgs = array(); foreach( $this as $msg ){ $msgs[] = $msg; } usort( $msgs, $sorter ); } else { $msgs = $this; } foreach( $msgs as $msg ){ $s .= "\n".$msg->render( $width, $ref_width ); } return $s; } public function getHashes(){ $a = array(); foreach( $this as $msg ){ $a[] = $msg->getHash(); } sort( $a, SORT_STRING ); return $a; } public function equalSource( LocoPoIterator $that ){ $a = $this->getHashes(); $b = $that->getHashes(); if( count($a) !== count($b) ){ return false; } foreach( $a as $i => $hash ){ if( $hash !== $b[$i] ){ return false; } } return true; } public function sort( $func = null ){ $order = array(); foreach( $this as $msg ){ $order[] = $msg; } if( is_null($func) ){ $func = array( __CLASS__, 'compare' ); } else if( ! is_callable($func) ){ throw new InvalidArgumentException('Bad callback'); } usort( $order, $func ); $po = array(); if( 0 === $this->z ){ $po[] = $this->po[0]; } foreach( $order as $msg ){ $po[] = $msg->getArrayCopy(); if( is_array( $plurals = $msg->plurals ) ){ $index = count($po) - 1; unset( $po[$index]['plurals'] ); foreach( $plurals as $p ){ $a = $p->getArrayCopy(); $a['parent'] = $index; $po[] = $a; } } } $this->po = $po; return $this; } public static function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); $j = $b->getHash(); $n = strcasecmp( $h, $j ); if( 0 === $n ){ $n = strcmp( $h, $j ); if( 0 === $n ){ return 0; } } return $n > 0 ? 1 : -1; } public function createSorter(){ $index = array(); foreach( $this as $i => $msg ){ $index[ $msg->getHash() ] = $i; } $obj = new LocoPoIndex( $index ); return array( $obj, 'compare' ); } }
28
  class LocoPoIndex extends ArrayIterator { public function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); if( ! isset($this[$h]) ){ return 1; } $j = $b->getHash(); if( ! isset($this[$j]) ){ return -1; } return $this[$h] > $this[$j] ? 1 : -1; } }
29
  class LocoPoMessage extends ArrayObject { public function __construct( array $r ){ $r['key'] = $r['source']; parent::__construct($r); } public function __get( $prop ){ return isset($this[$prop]) ? $this[$prop] : null; } private function _getFlags(){ $flags = array(); $plurals = $this->__get('plurals'); if( 4 === $this->__get('flag') ){ $flags[] = 'fuzzy'; } else if( $plurals ){ foreach( $plurals as $child ){ if( 4 === $child->__get('flag') ){ $flags[] = 'fuzzy'; break; } } } if( $f = $this->__get('format') ){ $flags[] = $f.'-format'; } else if( isset($plurals[0]) && ( $f = $plurals[0]->__get('format') ) ){ $flags[] = $f.'-format'; } return $flags; } public function getHash(){ $msgid = $this['source']; if( isset($this['context']) ){ $msgctxt = $this['context']; if( is_string($msgctxt) && '' !== $msgctxt ){ if( ! $msgid && '0' !== $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\x04".$msgid; } } if( isset($this['plurals']) ){ foreach( $this['plurals'] as $p ){ $msgid .= "\0".$p->getHash(); break; } } return $msgid; } public function __toString(){ return $this->render( 79, 76 ); } public function render( $width, $ref_width ){ $s = ''; try { if( $text = $this->__get('comment') ) { $s .= LocoPo::prefix( $text, '# ')."\n"; } if( $text = $this->__get('notes') ) { $s .= LocoPo::prefix( $text, '#. ')."\n"; } if( $text = $this->__get('refs') ){ $s .= LocoPo::refs( $text, $ref_width )."\n"; } if( $texts = $this->_getFlags() ){ $s .= '#, '.implode(', ',$texts)."\n"; } $text = $this->__get('context'); if( is_string($text) && isset($text{0}) ){ $s .= LocoPo::pair('msgctxt', $text, $width )."\n"; } $s .= LocoPo::pair( 'msgid', $this['key'], $width )."\n"; $target = $this['target']; if( is_array( $plurals = $this->__get('plurals') ) ){ if( $plurals ){ foreach( $plurals as $i => $p ){ if( 0 === $i ){ $s .= LocoPo::pair('msgid_plural', $p['key'], $width )."\n"; $s .= LocoPo::pair('msgstr[0]', $target, $width )."\n"; } $s .= LocoPo::pair('msgstr['.(++$i).']', $p['target'], $width )."\n"; } } else if( isset($this['plural_key']) ){ $s .= LocoPo::pair('msgid_plural', $this['plural_key'], $width )."\n"; $s .= LocoPo::pair('msgstr[0]', $target, $width )."\n"; } else { trigger_error('Missing plural_key in zero plural export'); $s .= LocoPo::pair('msgstr', $target, $width )."\n"; } } else { $s .= LocoPo::pair('msgstr', $target, $width )."\n"; } } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); } return $s; } }
30
  class LocoMoTable { private $size = 0; private $bin = ''; private $map; public function __construct( $data = null ){ if( is_array($data) ){ $this->compile( $data ); } else if( $data ){ $this->parse( $data ); } } public function count(){ if( ! isset($this->size) ){ if( $this->bin ){ $this->size = (int) ( strlen( $this->bin ) / 4 ); } else if( is_array($this->map) ){ $this->size = count($this->map); } else { return 0; } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2, got '.$this->size); } } return $this->size; } public function bytes(){ return $this->count() * 4; } public function __toString(){ return $this->bin; } public function export(){ if( ! is_array($this->map) ){ $this->parse( $this->bin ); } return $this->map; } private function reset( $length ){ $this->size = max( 3, self::next_prime ( $length * 4 / 3 ) ); $this->bin = null; $this->map = array(); return $this->size; } public function compile( array $msgids ){ $hash_tab_size = $this->reset( count($msgids) ); $packed = array_fill( 0, $hash_tab_size, "\0\0\0\0" ); $j = 0; foreach( $msgids as $msgid ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $hash_tab_size; if( array_key_exists($idx, $this->map) ){ $incr = 1 + ( $hash_val % ( $hash_tab_size - 2 ) ); do { $idx += $incr; if( $hash_val === $idx ){ throw new Exception('Unable to find empty slot in hash table'); } $idx %= $hash_tab_size; } while( array_key_exists($idx, $this->map ) ); } $this->map[$idx] = $j; $packed[$idx] = pack('V', ++$j ); } return $this->bin = implode('',$packed); } public function lookup( $msgid, array $msgids ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $this->size; $incr = 1 + ( $hash_val % ( $this->size - 2 ) ); while( true ){ if( ! array_key_exists($idx, $this->map) ){ break; } $j = $this->map[$idx]; if( isset($msgids[$j]) && $msgid === $msgids[$j] ){ return $j; } $idx += $incr; if( $idx === $hash_val ){ break; } $idx %= $this->size; } return -1; } public function parse( $bin ){ $this->bin = (string) $bin; $this->size = null; $hash_tab_size = $this->count(); $this->map = array(); $idx = -1; $byte = 0; while( ++$idx < $hash_tab_size ){ $word = substr( $this->bin, $byte, 4 ); if( "\0\0\0\0" !== $word ){ list(,$j) = unpack('V', $word ); $this->map[$idx] = $j - 1; } $byte += 4; } return $this->map; } public static function hashpjw( $str ){ $i = -1; $hval = 0; $len = strlen($str); while( ++$i < $len ){ $ord = ord( $str{$i} ); $hval = ( $hval << 4 ) + $ord; $g = $hval & 0xf0000000; if( $g !== 0 ){ $hval ^= $g >> 24; $hval ^= $g; } } return $hval; } private static function next_prime( $seed ){ $seed |= 1; while ( ! self::is_prime($seed) ){ $seed += 2; } return $seed; } private static function is_prime( $num ) { if ($num === 1 ){ return false; } if( $num === 2 ){ return true; } if( $num % 2 == 0 ) { return false; } for( $i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) { if($num % $i == 0 ){ return false; } } return true; } }
31
+ class LocoMo { private $bin; private $msgs; private $head; private $hash; private $use_fuzzy = false; public function __construct( Iterator $export, LocoHeaders $head = null ){ if( $head ){ $this->head = $head; } else { $this->head = new LocoPoHeaders(array('Project-Id-Version' => 'Loco')); } $this->msgs = $export; $this->bin = ''; } public function enableHash(){ return $this->hash = new LocoMoTable; } public function useFuzzy(){ $this->use_fuzzy = true; } public function setHeader( $key, $val ){ $this->head->add($key, $val); return $this; } public function compile(){ $table = array(''); $sources = array(''); $targets = array( (string) $this->head ); $fuzzy_flag = 4; $skip_fuzzy = ! $this->use_fuzzy; foreach( $this->msgs as $r ){ if( isset($r['flag']) && $skip_fuzzy && $fuzzy_flag === $r['flag'] ){ continue; } $msgid = $r['key']; if( isset($r['context']) ){ $msgctxt = $r['context']; if( is_string($msgctxt) && '' !== $msgctxt ){ if( ! $msgid && '0' !== $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\x04".$msgid; } } if( ! $msgid && '0' !== $msgid ){ continue; } $msgstr = $r['target']; if( ! $msgstr && '0' !== $msgstr ){ continue; } $table[] = $msgid; if( isset($r['plurals']) ){ foreach( $r['plurals'] as $i => $p ){ if( $i === 0 ){ $msgid .= "\0".$p['key']; } $msgstr .= "\0".$p['target']; } } $sources[] = $msgid; $targets[] = $msgstr; } asort( $sources, SORT_STRING ); $this->bin = "\xDE\x12\x04\x95\x00\x00\x00\x00"; $n = count($sources); $this->writeInteger( $n ); $offset = 28; $this->writeInteger( $offset ); $offset += $n * 8; $this->writeInteger( $offset ); if( $this->hash ){ sort( $table, SORT_STRING ); $this->hash->compile( $table ); $s = $this->hash->count(); } else { $s = 0; } $this->writeInteger( $s ); $offset += $n * 8; $this->writeInteger( $offset ); if( $s ){ $offset += $s * 4; } $source = ''; foreach( $sources as $i => $str ){ $source .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } $target = ''; foreach( array_keys($sources) as $i ){ $str = $targets[$i]; $target .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } if( $this->hash ){ $this->bin .= $this->hash->__toString(); } $this->bin .= $source; $this->bin .= $target; return $this->bin; } private function writeInteger( $num ){ $this->bin .= pack( 'V', $num ); return $this; } }
32
  function loco_print_percent( $n, $t ){ $s = loco_string_percent( (int) $n, (int) $t ); echo $s,'%'; return ''; }
33
  function loco_print_progress( $translated, $untranslated, $flagged ){ $total = $translated + $untranslated; $complete = loco_string_percent( $translated - $flagged, $total ); $class = 'progress'; if( ! $translated && ! $flagged ){ $class .= ' empty'; } else if( '100' === $complete ){ $class .= ' done'; } echo '<div class="',$class,'"><div class="t">'; if( $flagged ){ $s = loco_string_percent( $flagged, $total ); echo '<div class="bar f" style="width:',$s,'%">&nbsp;</div>'; } if( '0' === $complete ){ echo '&nbsp;'; } else { $class = 'bar p'; $p = (int) $complete; $class .= sprintf(' p-%u', 10*floor($p/10) ); $style = 'width:'.$complete.'%'; if( $flagged ){ $remain = 100.0 - (float) $s; $style .= '; max-width: '.sprintf('%s',$remain).'%'; } echo '<div class="',$class,'" style="'.$style.'">&nbsp;</div>'; } echo '</div><div class="l">',$complete,'%</div></div>'; return ''; }
34
  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 ){ $n = min( $n, 99.99 ); do { $s = number_format( $n, ++$dp ); } while( '100' === substr($s,0,3) && $dp < 2 ); } else if( $n < 0.5 ){ $n = max( $n, 0.0001 ); do { $s = number_format( $n, ++$dp ); } while( preg_match('/^0\\.0+$/',$s) && $dp < 4 ); } else { $s = number_format( $n, $dp ); } } return $s; }
lib/data/locales.php CHANGED
@@ -2,4 +2,4 @@
2
  /**
3
  * Compiled data. Do not edit.
4
  */
5
- return unserialize('a:113:{s:2:"af";a:2:{i:0;s:9:"Afrikaans";i:1;s:9:"Afrikaans";}s:2:"ar";a:2:{i:0;s:6:"Arabic";i:1;s:14:"العربية";}s:3:"ary";a:2:{i:0;s:15:"Moroccan Arabic";i:1;s:31:"العربية المغربية";}s:2:"as";a:2:{i:0;s:8:"Assamese";i:1;s:21:"অসমীয়া";}s:3:"azb";a:2:{i:0;s:17:"South Azerbaijani";i:1;s:29:"گؤنئی آذربایجان";}s:2:"az";a:2:{i:0;s:11:"Azerbaijani";i:1;s:16:"Azərbaycan dili";}s:3:"bel";a:2:{i:0;s:10:"Belarusian";i:1;s:29:"Беларуская мова";}s:5:"bg_BG";a:2:{i:0;s:9:"Bulgarian";i:1;s:18:"Български";}s:5:"bn_BD";a:2:{i:0;s:7:"Bengali";i:1;s:15:"বাংলা";}s:2:"bo";a:2:{i:0;s:7:"Tibetan";i:1;s:21:"བོད་ཡིག";}s:5:"bs_BA";a:2:{i:0;s:7:"Bosnian";i:1;s:8:"Bosanski";}s:2:"ca";a:2:{i:0;s:7:"Catalan";i:1;s:7:"Català";}s:3:"ceb";a:2:{i:0;s:7:"Cebuano";i:1;s:7:"Cebuano";}s:5:"cs_CZ";a:2:{i:0;s:5:"Czech";i:1;s:9:"Čeština";}s:2:"cy";a:2:{i:0;s:5:"Welsh";i:1;s:7:"Cymraeg";}s:5:"da_DK";a:2:{i:0;s:6:"Danish";i:1;s:5:"Dansk";}s:12:"de_DE_formal";a:2:{i:0;s:15:"German (Formal)";i:1;s:13:"Deutsch (Sie)";}s:5:"de_CH";a:2:{i:0;s:20:"German (Switzerland)";i:1;s:17:"Deutsch (Schweiz)";}s:14:"de_CH_informal";a:2:{i:0;s:30:"German (Switzerland, Informal)";i:1;s:21:"Deutsch (Schweiz, Du)";}s:5:"de_DE";a:2:{i:0;s:6:"German";i:1;s:7:"Deutsch";}s:3:"dzo";a:2:{i:0;s:8:"Dzongkha";i:1;s:18:"རྫོང་ཁ";}s:2:"el";a:2:{i:0;s:5:"Greek";i:1;s:16:"Ελληνικά";}s:5:"en_GB";a:2:{i:0;s:12:"English (UK)";i:1;s:12:"English (UK)";}s:5:"en_CA";a:2:{i:0;s:16:"English (Canada)";i:1;s:16:"English (Canada)";}s:5:"en_ZA";a:2:{i:0;s:22:"English (South Africa)";i:1;s:22:"English (South Africa)";}s:5:"en_AU";a:2:{i:0;s:19:"English (Australia)";i:1;s:19:"English (Australia)";}s:5:"en_NZ";a:2:{i:0;s:21:"English (New Zealand)";i:1;s:21:"English (New Zealand)";}s:2:"eo";a:2:{i:0;s:9:"Esperanto";i:1;s:9:"Esperanto";}s:5:"es_GT";a:2:{i:0;s:19:"Spanish (Guatemala)";i:1;s:21:"Español de Guatemala";}s:5:"es_AR";a:2:{i:0;s:19:"Spanish (Argentina)";i:1;s:21:"Español de Argentina";}s:5:"es_MX";a:2:{i:0;s:16:"Spanish (Mexico)";i:1;s:19:"Español de México";}s:5:"es_VE";a:2:{i:0;s:19:"Spanish (Venezuela)";i:1;s:21:"Español de Venezuela";}s:5:"es_CR";a:2:{i:0;s:20:"Spanish (Costa Rica)";i:1;s:22:"Español de Costa Rica";}s:5:"es_CL";a:2:{i:0;s:15:"Spanish (Chile)";i:1;s:17:"Español de Chile";}s:5:"es_PE";a:2:{i:0;s:14:"Spanish (Peru)";i:1;s:17:"Español de Perú";}s:5:"es_CO";a:2:{i:0;s:18:"Spanish (Colombia)";i:1;s:20:"Español de Colombia";}s:5:"es_ES";a:2:{i:0;s:15:"Spanish (Spain)";i:1;s:8:"Español";}s:2:"et";a:2:{i:0;s:8:"Estonian";i:1;s:5:"Eesti";}s:2:"eu";a:2:{i:0;s:6:"Basque";i:1;s:7:"Euskara";}s:5:"fa_IR";a:2:{i:0;s:7:"Persian";i:1;s:10:"فارسی";}s:2:"fi";a:2:{i:0;s:7:"Finnish";i:1;s:5:"Suomi";}s:5:"fr_BE";a:2:{i:0;s:16:"French (Belgium)";i:1;s:21:"Français de Belgique";}s:5:"fr_CA";a:2:{i:0;s:15:"French (Canada)";i:1;s:19:"Français du Canada";}s:5:"fr_FR";a:2:{i:0;s:15:"French (France)";i:1;s:9:"Français";}s:3:"fur";a:2:{i:0;s:8:"Friulian";i:1;s:8:"Friulian";}s:2:"gd";a:2:{i:0;s:15:"Scottish Gaelic";i:1;s:9:"Gàidhlig";}s:5:"gl_ES";a:2:{i:0;s:8:"Galician";i:1;s:6:"Galego";}s:2:"gu";a:2:{i:0;s:8:"Gujarati";i:1;s:21:"ગુજરાતી";}s:3:"haz";a:2:{i:0;s:8:"Hazaragi";i:1;s:15:"هزاره گی";}s:5:"he_IL";a:2:{i:0;s:6:"Hebrew";i:1;s:16:"עִבְרִית";}s:5:"hi_IN";a:2:{i:0;s:5:"Hindi";i:1;s:18:"हिन्दी";}s:2:"hr";a:2:{i:0;s:8:"Croatian";i:1;s:8:"Hrvatski";}s:5:"hu_HU";a:2:{i:0;s:9:"Hungarian";i:1;s:6:"Magyar";}s:2:"hy";a:2:{i:0;s:8:"Armenian";i:1;s:14:"Հայերեն";}s:5:"id_ID";a:2:{i:0;s:10:"Indonesian";i:1;s:16:"Bahasa Indonesia";}s:5:"is_IS";a:2:{i:0;s:9:"Icelandic";i:1;s:9:"Íslenska";}s:5:"it_IT";a:2:{i:0;s:7:"Italian";i:1;s:8:"Italiano";}s:2:"ja";a:2:{i:0;s:8:"Japanese";i:1;s:9:"日本語";}s:5:"jv_ID";a:2:{i:0;s:8:"Javanese";i:1;s:9:"Basa Jawa";}s:5:"ka_GE";a:2:{i:0;s:8:"Georgian";i:1;s:21:"ქართული";}s:3:"kab";a:2:{i:0;s:6:"Kabyle";i:1;s:9:"Taqbaylit";}s:2:"kk";a:2:{i:0;s:6:"Kazakh";i:1;s:19:"Қазақ тілі";}s:2:"km";a:2:{i:0;s:5:"Khmer";i:1;s:27:"ភាសាខ្មែរ";}s:5:"ko_KR";a:2:{i:0;s:6:"Korean";i:1;s:9:"한국어";}s:3:"ckb";a:2:{i:0;s:16:"Kurdish (Sorani)";i:1;s:13:"كوردی‎";}s:2:"lo";a:2:{i:0;s:3:"Lao";i:1;s:21:"ພາສາລາວ";}s:5:"lt_LT";a:2:{i:0;s:10:"Lithuanian";i:1;s:15:"Lietuvių kalba";}s:2:"lv";a:2:{i:0;s:7:"Latvian";i:1;s:16:"Latviešu valoda";}s:5:"mk_MK";a:2:{i:0;s:10:"Macedonian";i:1;s:31:"Македонски јазик";}s:5:"ml_IN";a:2:{i:0;s:9:"Malayalam";i:1;s:18:"മലയാളം";}s:2:"mn";a:2:{i:0;s:9:"Mongolian";i:1;s:12:"Монгол";}s:2:"mr";a:2:{i:0;s:7:"Marathi";i:1;s:15:"मराठी";}s:5:"ms_MY";a:2:{i:0;s:5:"Malay";i:1;s:13:"Bahasa Melayu";}s:5:"my_MM";a:2:{i:0;s:17:"Myanmar (Burmese)";i:1;s:15:"ဗမာစာ";}s:5:"nb_NO";a:2:{i:0;s:19:"Norwegian (Bokmål)";i:1;s:13:"Norsk bokmål";}s:5:"ne_NP";a:2:{i:0;s:6:"Nepali";i:1;s:18:"नेपाली";}s:5:"nl_NL";a:2:{i:0;s:5:"Dutch";i:1;s:10:"Nederlands";}s:12:"nl_NL_formal";a:2:{i:0;s:14:"Dutch (Formal)";i:1;s:20:"Nederlands (Formeel)";}s:5:"nl_BE";a:2:{i:0;s:15:"Dutch (Belgium)";i:1;s:20:"Nederlands (België)";}s:5:"nn_NO";a:2:{i:0;s:19:"Norwegian (Nynorsk)";i:1;s:13:"Norsk nynorsk";}s:3:"oci";a:2:{i:0;s:7:"Occitan";i:1;s:7:"Occitan";}s:5:"pa_IN";a:2:{i:0;s:7:"Punjabi";i:1;s:18:"ਪੰਜਾਬੀ";}s:5:"pl_PL";a:2:{i:0;s:6:"Polish";i:1;s:6:"Polski";}s:2:"ps";a:2:{i:0;s:6:"Pashto";i:1;s:8:"پښتو";}s:5:"pt_BR";a:2:{i:0;s:19:"Portuguese (Brazil)";i:1;s:20:"Português do Brasil";}s:5:"pt_PT";a:2:{i:0;s:21:"Portuguese (Portugal)";i:1;s:10:"Português";}s:10:"pt_PT_ao90";a:2:{i:0;s:27:"Portuguese (Portugal, AO90)";i:1;s:17:"Português (AO90)";}s:3:"rhg";a:2:{i:0;s:8:"Rohingya";i:1;s:8:"Ruáinga";}s:5:"ro_RO";a:2:{i:0;s:8:"Romanian";i:1;s:8:"Română";}s:5:"ru_RU";a:2:{i:0;s:7:"Russian";i:1;s:14:"Русский";}s:3:"sah";a:2:{i:0;s:5:"Sakha";i:1;s:14:"Сахалыы";}s:5:"si_LK";a:2:{i:0;s:7:"Sinhala";i:1;s:15:"සිංහල";}s:5:"sk_SK";a:2:{i:0;s:6:"Slovak";i:1;s:11:"Slovenčina";}s:5:"sl_SI";a:2:{i:0;s:9:"Slovenian";i:1;s:13:"Slovenščina";}s:2:"sq";a:2:{i:0;s:8:"Albanian";i:1;s:5:"Shqip";}s:5:"sr_RS";a:2:{i:0;s:7:"Serbian";i:1;s:23:"Српски језик";}s:5:"sv_SE";a:2:{i:0;s:7:"Swedish";i:1;s:7:"Svenska";}s:3:"szl";a:2:{i:0;s:8:"Silesian";i:1;s:17:"Ślōnskŏ gŏdka";}s:5:"ta_IN";a:2:{i:0;s:5:"Tamil";i:1;s:15:"தமிழ்";}s:2:"te";a:2:{i:0;s:6:"Telugu";i:1;s:18:"తెలుగు";}s:2:"th";a:2:{i:0;s:4:"Thai";i:1;s:9:"ไทย";}s:2:"tl";a:2:{i:0;s:7:"Tagalog";i:1;s:7:"Tagalog";}s:5:"tr_TR";a:2:{i:0;s:7:"Turkish";i:1;s:8:"Türkçe";}s:5:"tt_RU";a:2:{i:0;s:5:"Tatar";i:1;s:19:"Татар теле";}s:3:"tah";a:2:{i:0;s:8:"Tahitian";i:1;s:10:"Reo Tahiti";}s:5:"ug_CN";a:2:{i:0;s:6:"Uighur";i:1;s:9:"Uyƣurqə";}s:2:"uk";a:2:{i:0;s:9:"Ukrainian";i:1;s:20:"Українська";}s:2:"ur";a:2:{i:0;s:4:"Urdu";i:1;s:8:"اردو";}s:5:"uz_UZ";a:2:{i:0;s:5:"Uzbek";i:1;s:11:"O‘zbekcha";}s:2:"vi";a:2:{i:0;s:10:"Vietnamese";i:1;s:14:"Tiếng Việt";}s:5:"zh_TW";a:2:{i:0;s:16:"Chinese (Taiwan)";i:1;s:12:"繁體中文";}s:5:"zh_HK";a:2:{i:0;s:19:"Chinese (Hong Kong)";i:1;s:16:"香港中文版 ";}s:5:"zh_CN";a:2:{i:0;s:15:"Chinese (China)";i:1;s:12:"简体中文";}}');
2
  /**
3
  * Compiled data. Do not edit.
4
  */
5
+ return unserialize('a:113:{s:2:"af";a:2:{i:0;s:9:"Afrikaans";i:1;s:9:"Afrikaans";}s:2:"ar";a:2:{i:0;s:6:"Arabic";i:1;s:14:"العربية";}s:3:"ary";a:2:{i:0;s:15:"Moroccan Arabic";i:1;s:31:"العربية المغربية";}s:2:"as";a:2:{i:0;s:8:"Assamese";i:1;s:21:"অসমীয়া";}s:3:"azb";a:2:{i:0;s:17:"South Azerbaijani";i:1;s:29:"گؤنئی آذربایجان";}s:2:"az";a:2:{i:0;s:11:"Azerbaijani";i:1;s:16:"Azərbaycan dili";}s:3:"bel";a:2:{i:0;s:10:"Belarusian";i:1;s:29:"Беларуская мова";}s:5:"bg_BG";a:2:{i:0;s:9:"Bulgarian";i:1;s:18:"Български";}s:5:"bn_BD";a:2:{i:0;s:7:"Bengali";i:1;s:15:"বাংলা";}s:2:"bo";a:2:{i:0;s:7:"Tibetan";i:1;s:21:"བོད་ཡིག";}s:5:"bs_BA";a:2:{i:0;s:7:"Bosnian";i:1;s:8:"Bosanski";}s:2:"ca";a:2:{i:0;s:7:"Catalan";i:1;s:7:"Català";}s:3:"ceb";a:2:{i:0;s:7:"Cebuano";i:1;s:7:"Cebuano";}s:5:"cs_CZ";a:2:{i:0;s:5:"Czech";i:1;s:9:"Čeština";}s:2:"cy";a:2:{i:0;s:5:"Welsh";i:1;s:7:"Cymraeg";}s:5:"da_DK";a:2:{i:0;s:6:"Danish";i:1;s:5:"Dansk";}s:5:"de_CH";a:2:{i:0;s:20:"German (Switzerland)";i:1;s:17:"Deutsch (Schweiz)";}s:14:"de_CH_informal";a:2:{i:0;s:30:"German (Switzerland, Informal)";i:1;s:21:"Deutsch (Schweiz, Du)";}s:5:"de_DE";a:2:{i:0;s:6:"German";i:1;s:7:"Deutsch";}s:12:"de_DE_formal";a:2:{i:0;s:15:"German (Formal)";i:1;s:13:"Deutsch (Sie)";}s:3:"dzo";a:2:{i:0;s:8:"Dzongkha";i:1;s:18:"རྫོང་ཁ";}s:2:"el";a:2:{i:0;s:5:"Greek";i:1;s:16:"Ελληνικά";}s:5:"en_AU";a:2:{i:0;s:19:"English (Australia)";i:1;s:19:"English (Australia)";}s:5:"en_CA";a:2:{i:0;s:16:"English (Canada)";i:1;s:16:"English (Canada)";}s:5:"en_GB";a:2:{i:0;s:12:"English (UK)";i:1;s:12:"English (UK)";}s:5:"en_ZA";a:2:{i:0;s:22:"English (South Africa)";i:1;s:22:"English (South Africa)";}s:5:"en_NZ";a:2:{i:0;s:21:"English (New Zealand)";i:1;s:21:"English (New Zealand)";}s:2:"eo";a:2:{i:0;s:9:"Esperanto";i:1;s:9:"Esperanto";}s:5:"es_CO";a:2:{i:0;s:18:"Spanish (Colombia)";i:1;s:20:"Español de Colombia";}s:5:"es_GT";a:2:{i:0;s:19:"Spanish (Guatemala)";i:1;s:21:"Español de Guatemala";}s:5:"es_MX";a:2:{i:0;s:16:"Spanish (Mexico)";i:1;s:19:"Español de México";}s:5:"es_AR";a:2:{i:0;s:19:"Spanish (Argentina)";i:1;s:21:"Español de Argentina";}s:5:"es_VE";a:2:{i:0;s:19:"Spanish (Venezuela)";i:1;s:21:"Español de Venezuela";}s:5:"es_CR";a:2:{i:0;s:20:"Spanish (Costa Rica)";i:1;s:22:"Español de Costa Rica";}s:5:"es_PE";a:2:{i:0;s:14:"Spanish (Peru)";i:1;s:17:"Español de Perú";}s:5:"es_CL";a:2:{i:0;s:15:"Spanish (Chile)";i:1;s:17:"Español de Chile";}s:5:"es_ES";a:2:{i:0;s:15:"Spanish (Spain)";i:1;s:8:"Español";}s:2:"et";a:2:{i:0;s:8:"Estonian";i:1;s:5:"Eesti";}s:2:"eu";a:2:{i:0;s:6:"Basque";i:1;s:7:"Euskara";}s:5:"fa_IR";a:2:{i:0;s:7:"Persian";i:1;s:10:"فارسی";}s:2:"fi";a:2:{i:0;s:7:"Finnish";i:1;s:5:"Suomi";}s:5:"fr_CA";a:2:{i:0;s:15:"French (Canada)";i:1;s:19:"Français du Canada";}s:5:"fr_FR";a:2:{i:0;s:15:"French (France)";i:1;s:9:"Français";}s:5:"fr_BE";a:2:{i:0;s:16:"French (Belgium)";i:1;s:21:"Français de Belgique";}s:3:"fur";a:2:{i:0;s:8:"Friulian";i:1;s:8:"Friulian";}s:2:"gd";a:2:{i:0;s:15:"Scottish Gaelic";i:1;s:9:"Gàidhlig";}s:5:"gl_ES";a:2:{i:0;s:8:"Galician";i:1;s:6:"Galego";}s:2:"gu";a:2:{i:0;s:8:"Gujarati";i:1;s:21:"ગુજરાતી";}s:3:"haz";a:2:{i:0;s:8:"Hazaragi";i:1;s:15:"هزاره گی";}s:5:"he_IL";a:2:{i:0;s:6:"Hebrew";i:1;s:16:"עִבְרִית";}s:5:"hi_IN";a:2:{i:0;s:5:"Hindi";i:1;s:18:"हिन्दी";}s:2:"hr";a:2:{i:0;s:8:"Croatian";i:1;s:8:"Hrvatski";}s:5:"hu_HU";a:2:{i:0;s:9:"Hungarian";i:1;s:6:"Magyar";}s:2:"hy";a:2:{i:0;s:8:"Armenian";i:1;s:14:"Հայերեն";}s:5:"id_ID";a:2:{i:0;s:10:"Indonesian";i:1;s:16:"Bahasa Indonesia";}s:5:"is_IS";a:2:{i:0;s:9:"Icelandic";i:1;s:9:"Íslenska";}s:5:"it_IT";a:2:{i:0;s:7:"Italian";i:1;s:8:"Italiano";}s:2:"ja";a:2:{i:0;s:8:"Japanese";i:1;s:9:"日本語";}s:5:"jv_ID";a:2:{i:0;s:8:"Javanese";i:1;s:9:"Basa Jawa";}s:5:"ka_GE";a:2:{i:0;s:8:"Georgian";i:1;s:21:"ქართული";}s:3:"kab";a:2:{i:0;s:6:"Kabyle";i:1;s:9:"Taqbaylit";}s:2:"kk";a:2:{i:0;s:6:"Kazakh";i:1;s:19:"Қазақ тілі";}s:2:"km";a:2:{i:0;s:5:"Khmer";i:1;s:27:"ភាសាខ្មែរ";}s:5:"ko_KR";a:2:{i:0;s:6:"Korean";i:1;s:9:"한국어";}s:3:"ckb";a:2:{i:0;s:16:"Kurdish (Sorani)";i:1;s:13:"كوردی‎";}s:2:"lo";a:2:{i:0;s:3:"Lao";i:1;s:21:"ພາສາລາວ";}s:5:"lt_LT";a:2:{i:0;s:10:"Lithuanian";i:1;s:15:"Lietuvių kalba";}s:2:"lv";a:2:{i:0;s:7:"Latvian";i:1;s:16:"Latviešu valoda";}s:5:"mk_MK";a:2:{i:0;s:10:"Macedonian";i:1;s:31:"Македонски јазик";}s:5:"ml_IN";a:2:{i:0;s:9:"Malayalam";i:1;s:18:"മലയാളം";}s:2:"mn";a:2:{i:0;s:9:"Mongolian";i:1;s:12:"Монгол";}s:2:"mr";a:2:{i:0;s:7:"Marathi";i:1;s:15:"मराठी";}s:5:"ms_MY";a:2:{i:0;s:5:"Malay";i:1;s:13:"Bahasa Melayu";}s:5:"my_MM";a:2:{i:0;s:17:"Myanmar (Burmese)";i:1;s:15:"ဗမာစာ";}s:5:"nb_NO";a:2:{i:0;s:19:"Norwegian (Bokmål)";i:1;s:13:"Norsk bokmål";}s:5:"ne_NP";a:2:{i:0;s:6:"Nepali";i:1;s:18:"नेपाली";}s:12:"nl_NL_formal";a:2:{i:0;s:14:"Dutch (Formal)";i:1;s:20:"Nederlands (Formeel)";}s:5:"nl_NL";a:2:{i:0;s:5:"Dutch";i:1;s:10:"Nederlands";}s:5:"nl_BE";a:2:{i:0;s:15:"Dutch (Belgium)";i:1;s:20:"Nederlands (België)";}s:5:"nn_NO";a:2:{i:0;s:19:"Norwegian (Nynorsk)";i:1;s:13:"Norsk nynorsk";}s:3:"oci";a:2:{i:0;s:7:"Occitan";i:1;s:7:"Occitan";}s:5:"pa_IN";a:2:{i:0;s:7:"Punjabi";i:1;s:18:"ਪੰਜਾਬੀ";}s:5:"pl_PL";a:2:{i:0;s:6:"Polish";i:1;s:6:"Polski";}s:2:"ps";a:2:{i:0;s:6:"Pashto";i:1;s:8:"پښتو";}s:5:"pt_BR";a:2:{i:0;s:19:"Portuguese (Brazil)";i:1;s:20:"Português do Brasil";}s:5:"pt_PT";a:2:{i:0;s:21:"Portuguese (Portugal)";i:1;s:10:"Português";}s:10:"pt_PT_ao90";a:2:{i:0;s:27:"Portuguese (Portugal, AO90)";i:1;s:17:"Português (AO90)";}s:3:"rhg";a:2:{i:0;s:8:"Rohingya";i:1;s:8:"Ruáinga";}s:5:"ro_RO";a:2:{i:0;s:8:"Romanian";i:1;s:8:"Română";}s:5:"ru_RU";a:2:{i:0;s:7:"Russian";i:1;s:14:"Русский";}s:3:"sah";a:2:{i:0;s:5:"Sakha";i:1;s:14:"Сахалыы";}s:5:"si_LK";a:2:{i:0;s:7:"Sinhala";i:1;s:15:"සිංහල";}s:5:"sk_SK";a:2:{i:0;s:6:"Slovak";i:1;s:11:"Slovenčina";}s:5:"sl_SI";a:2:{i:0;s:9:"Slovenian";i:1;s:13:"Slovenščina";}s:2:"sq";a:2:{i:0;s:8:"Albanian";i:1;s:5:"Shqip";}s:5:"sr_RS";a:2:{i:0;s:7:"Serbian";i:1;s:23:"Српски језик";}s:5:"sv_SE";a:2:{i:0;s:7:"Swedish";i:1;s:7:"Svenska";}s:3:"szl";a:2:{i:0;s:8:"Silesian";i:1;s:17:"Ślōnskŏ gŏdka";}s:5:"ta_IN";a:2:{i:0;s:5:"Tamil";i:1;s:15:"தமிழ்";}s:2:"te";a:2:{i:0;s:6:"Telugu";i:1;s:18:"తెలుగు";}s:2:"th";a:2:{i:0;s:4:"Thai";i:1;s:9:"ไทย";}s:2:"tl";a:2:{i:0;s:7:"Tagalog";i:1;s:7:"Tagalog";}s:5:"tr_TR";a:2:{i:0;s:7:"Turkish";i:1;s:8:"Türkçe";}s:5:"tt_RU";a:2:{i:0;s:5:"Tatar";i:1;s:19:"Татар теле";}s:3:"tah";a:2:{i:0;s:8:"Tahitian";i:1;s:10:"Reo Tahiti";}s:5:"ug_CN";a:2:{i:0;s:6:"Uighur";i:1;s:16:"ئۇيغۇرچە";}s:2:"uk";a:2:{i:0;s:9:"Ukrainian";i:1;s:20:"Українська";}s:2:"ur";a:2:{i:0;s:4:"Urdu";i:1;s:8:"اردو";}s:5:"uz_UZ";a:2:{i:0;s:5:"Uzbek";i:1;s:11:"O‘zbekcha";}s:2:"vi";a:2:{i:0;s:10:"Vietnamese";i:1;s:14:"Tiếng Việt";}s:5:"zh_CN";a:2:{i:0;s:15:"Chinese (China)";i:1;s:12:"简体中文";}s:5:"zh_HK";a:2:{i:0;s:19:"Chinese (Hong Kong)";i:1;s:16:"香港中文版 ";}s:5:"zh_TW";a:2:{i:0;s:16:"Chinese (Taiwan)";i:1;s:12:"繁體中文";}}');
loco.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Loco Translate
4
  Plugin URI: https://wordpress.org/plugins/loco-translate/
5
  Description: Translate themes and plugins directly in WordPress
6
  Author: Tim Whitlock
7
- Version: 2.1.3
8
  Author URI: https://localise.biz/wordpress/plugin
9
  Text Domain: loco-translate
10
  Domain Path: /languages/
@@ -36,7 +36,7 @@ function loco_plugin_file(){
36
  * @return string
37
  */
38
  function loco_plugin_version(){
39
- return '2.1.3';
40
  }
41
 
42
 
4
  Plugin URI: https://wordpress.org/plugins/loco-translate/
5
  Description: Translate themes and plugins directly in WordPress
6
  Author: Tim Whitlock
7
+ Version: 2.1.4
8
  Author URI: https://localise.biz/wordpress/plugin
9
  Text Domain: loco-translate
10
  Domain Path: /languages/
36
  * @return string
37
  */
38
  function loco_plugin_version(){
39
+ return '2.1.4';
40
  }
41
 
42
 
pub/css/admin.css CHANGED
@@ -1 +1 @@
1
- ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.1.3);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.1.3) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.1.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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}.loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:'loco';src:url("../font/loco.eot");src:url("../font/loco.eot?#iefix") format("embedded-opentype"),url("../font/loco.woff") format("woff"),url("../font/loco.ttf") format("truetype"),url("../font/loco.svg#loco") format("svg");font-weight:normal;font-style:normal}.tipsy{font-size:11px;position:absolute;padding:5px;z-index:500001;opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.tipsy.in{opacity:1}.tipsy-inner{background-color:#000;color:#FFF;white-space:nowrap;padding:6px 8px;line-height:1.3em;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-n .tipsy-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-nw .tipsy-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-se .tipsy-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-e .tipsy-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.tipsy-w .tipsy-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}#loco.wrap .selector li,#loco.wrap .selector .handle,#loco.wrap .selectoradd a,#loco.wrap .selectorsep:before,#loco.wrap .selectorsep span{padding:0.3em 0.75em}#loco.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco.wrap .selectoradd a,#loco.wrap .selector .handle{cursor:default;display:block;position:relative;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666;height:1.3em;overflow:hidden;white-space:normal}#loco.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco.wrap .selector .handle .prefix{padding-right:0.6ex}#loco.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:0.25em;right:0.6em}#loco.wrap .selector .handle:focus:after,#loco.wrap .selector .handle:hover:after{color:#666}#loco.wrap .selector.no-caret .handle{padding-right:0.75em}#loco.wrap .selector.no-caret .handle:after{display:none}#loco.wrap .selector.no-title .handle{padding-left:0.5em;padding-right:0.5em}#loco.wrap .selector.no-title .handle .label{display:none}#loco.wrap .selector.no-title .handle .icon{margin-right:0px}#loco.wrap .selector.dummy .handle{border-color:transparent}#loco.wrap .selector.dummy .handle:after{display:none}#loco.wrap .selectoradd{position:relative}#loco.wrap .selectoradd>*{display:block;float:left;clear:none}#loco.wrap .selectoradd>a.has-icon{width:1.3em}#loco.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco.wrap .selectorsep{display:inline-block}#loco.wrap .selectorsep span{color:#666;height:1.3em}#loco.wrap .selector ul{padding:0}#loco.wrap .selector ul,#loco.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,0.2);border:solid 1px #ccc;overflow:auto}#loco.wrap .selector.up ul{margin-top:0}#loco.wrap .selector.multi li input{display:none}#loco.wrap .selector.multi li.checked{background:#eee}#loco.wrap .selector li.active{background:#eee !important}#loco.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco.wrap .selector li.over .label{color:#fff}#loco.wrap .selector .label{font:inherit;color:inherit}#loco.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco.wrap .selector .icon.no-icon{display:none}#loco.wrap .selector .icon:before{color:#666}#loco.wrap .selector .label{line-height:1}#loco.wrap .selector .icon,#loco.wrap .selector .icon-16{vertical-align:bottom}#loco.wrap .selector .icon,#loco.wrap .selector .lang,#loco.wrap .selector .icon-16{margin-right:5px}#loco.wrap .selector .region,#loco.wrap .selector .lang-ca,#loco.wrap .selector .lang-eo,#loco.wrap .selector .lang-eu,#loco.wrap .selector .variant-wales,#loco.wrap .selector .region-gb.lang-cy,#loco.wrap .selector .variant-scotland,#loco.wrap .selector .region-gb.lang-gd{margin-left:2px;margin-right:7px}#loco.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco.wrap .selector.ticked .active .icon.no-icon:before{content:"\2713"}#loco.wrap .selectoradd a:hover,#loco.wrap .selector a.handle:focus,#loco.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco.wrap .selector.active .handle:after{color:#999}#loco.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco.wrap .selector.disabled .handle{pointer-events:none;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666}#loco.wrap .selector.disabled .handle:after{font-size:1em;top:0.5em;right:0.75em}#loco.wrap .selector li.disabled,#loco.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco.wrap .selector li.disabled *{cursor:text}#loco.wrap .selector li.disabled .icon:before{color:#aaa}#loco.wrap .selector li.disabled .flag,#loco.wrap .selector li.disabled .icon-16{opacity:0.4}#loco.wrap .selector.lefty ul{left:auto;right:0}#loco.wrap .selector.lefty ul .icon,#loco.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco.wrap div.auto-comp-wrap{width:100%}#loco.wrap div.auto-comp-wrap input{display:inline-block}#loco.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif?v=2.1.3) right 2px no-repeat}#loco.wrap div.auto-comp-drop{color:#333333;background:#FFFFFF;border-top:none;position:absolute;width:100%;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,0.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,0.4);box-shadow:0 5px 5px rgba(0,0,0,0.4)}#loco.wrap div.auto-comp-result{padding:5px 10px;cursor:pointer;background:#F0F0F0;border-top:solid 1px #FFF;border-bottom:solid 1px #DDD}#loco.wrap div.auto-comp-result:first-child{border-top:solid 1px #DDD}#loco.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco.wrap div.auto-comp-result:hover{background:#A8A8A8;color:#FFFFFF;border-top-color:#A8A8A8;border-bottom-color:#999999}#loco.wrap div.auto-comp-result.selected{background:#666666 !important;color:#FFFFFF;border-top-color:#666666;border-bottom-color:#666666}#loco.wrap div.auto-comp-result .lang,#loco.wrap div.auto-comp-result .region,#loco.wrap div.auto-comp-result .lang-ca,#loco.wrap div.auto-comp-result .lang-eo,#loco.wrap div.auto-comp-result .lang-eu,#loco.wrap div.auto-comp-result .variant-wales,#loco.wrap div.auto-comp-result .region-gb.lang-cy,#loco.wrap div.auto-comp-result .variant-scotland,#loco.wrap div.auto-comp-result .region-gb.lang-gd{margin-right:5px}#loco.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#cc0000;opacity:1}#loco.wrap div.auto-comp-wrap.error input[type="text"]{border-color:#cc0000;color:#cc0000}#loco.wrap div.auto-comp-wrap.error input[type="text"]:focus{-webkit-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);-moz-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5)}#loco.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif?v=2.1.3);background-repeat:no-repeat;min-height:16px}#loco.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.1.3) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){#loco.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.1.3);background-size:16px}}#loco.wrap ._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco.wrap ._green_glow_outer{-webkit-box-shadow:0 0 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco.wrap .loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{#loco.wrap{font-family:'loco';src:url("../fonts/loco.eot");src:url("../fonts/loco.eot?#iefix") format("embedded-opentype"),url("../fonts/loco.ttf") format("truetype"),url("../fonts/loco.woff") format("woff"),url("../fonts/loco.svg#loco") format("svg");font-weight:normal;font-style:normal}}#loco.wrap .has-icon:before{display:inline-block;padding-right:0.3em}#loco.wrap a.icon-help{cursor:help}#loco.wrap a.icon-help span{display:none}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\73"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .selector.disabled .handle:after,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon-flag.is-untranslated{color:#999}#loco.wrap .icon-flag.is-untranslated:before{color:inherit;content:"×";text-align:center}#loco.wrap .icon-flag.status-0,#loco.wrap .icon-flag.is-translated{color:#2e892e}#loco.wrap .icon-flag.status-0:before,#loco.wrap .icon-flag.is-translated:before{color:inherit;content:"✓";text-align:center}#loco.wrap .icon-flag.status-4,#loco.wrap .icon-flag.is-fuzzy{color:#666}#loco.wrap .icon-flag.status-4:before,#loco.wrap .icon-flag.is-fuzzy:before{color:inherit;content:"";text-align:center}#loco.wrap .icon-flag.status-1,#loco.wrap .icon-flag.is-incorrect,#loco.wrap .icon-flag.status-2,#loco.wrap .icon-flag.is-provisional,#loco.wrap .icon-flag.status-3,#loco.wrap .icon-flag.is-unapproved,#loco.wrap .icon-flag.status-5,#loco.wrap .icon-flag.is-incomplete,#loco.wrap .icon-flag.status-6,#loco.wrap .icon-flag.is-rejected{color:#bd2c00}#loco.wrap .icon-flag.status-1:before,#loco.wrap .icon-flag.is-incorrect:before,#loco.wrap .icon-flag.status-2:before,#loco.wrap .icon-flag.is-provisional:before,#loco.wrap .icon-flag.status-3:before,#loco.wrap .icon-flag.is-unapproved:before,#loco.wrap .icon-flag.status-5:before,#loco.wrap .icon-flag.is-incomplete:before,#loco.wrap .icon-flag.status-6:before,#loco.wrap .icon-flag.is-rejected:before{color:inherit;content:"";text-align:center}#loco.wrap .lang,#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{color:#fff;background:#2e892e;display:inline-block;text-transform:uppercase;overflow:hidden;font-family:Verdana,Arial,sans-serif;font-size:9px;font-weight:normal;font-style:normal;line-height:12px;text-align:center;white-space:normal;text-shadow:none}#loco.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco.wrap .lang-el{background-color:#1D48A3}#loco.wrap .lang-el:before{content:"\0395\03BB"}#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png?v=2.1.3);background-repeat:no-repeat;background-color:transparent}#loco.wrap .region:before,#loco.wrap .lang-ca:before,#loco.wrap .lang-eo:before,#loco.wrap .lang-eu:before,#loco.wrap .variant-wales:before,#loco.wrap .region-gb.lang-cy:before,#loco.wrap .variant-scotland:before,#loco.wrap .region-gb.lang-gd:before{visibility:hidden}#loco.wrap .lang-zh{background-color:#B90000}#loco.wrap .lang-zh.script-hans:before{content:"\4E2D\56FD"}#loco.wrap .lang-zh.script-hant:before{content:"\4E2D\570B"}#loco.wrap .__{background-position:0 0}#loco.wrap .lang-eo{background-position:0 -12px}#loco.wrap .lang-eu{background-position:0 -24px}#loco.wrap .lang-ca{background-position:0 -36px}#loco.wrap .region-tg{background-position:0 -48px}#loco.wrap .region-me{background-position:0 -60px}#loco.wrap .region-la{background-position:0 -73px}#loco.wrap .region-mr{background-position:0 -85px}#loco.wrap .region-ni{background-position:0 -97px}#loco.wrap .region-lv{background-position:0 -109px}#loco.wrap .region-om{background-position:0 -121px}#loco.wrap .region-af{background-position:0 -133px}#loco.wrap .region-cy{background-position:0 -145px}#loco.wrap .region-bj{background-position:0 -157px}#loco.wrap .region-aq{background-position:0 -169px}#loco.wrap .region-cn{background-position:0 -186px}#loco.wrap .region-co{background-position:0 -198px}#loco.wrap .region-cx{background-position:0 -210px}#loco.wrap .region-ag{background-position:0 -222px}#loco.wrap .region-ms{background-position:0 -234px}#loco.wrap .region-md{background-position:0 -246px}#loco.wrap .region-zm{background-position:0 -258px}#loco.wrap .region-vn{background-position:0 -270px}#loco.wrap .region-tf{background-position:0 -282px}#loco.wrap .region-td{background-position:0 -294px}#loco.wrap .region-yt{background-position:0 -306px}#loco.wrap .region-lb{background-position:0 -318px}#loco.wrap .region-mf{background-position:0 -330px}#loco.wrap .region-lu{background-position:0 -347px}#loco.wrap .region-mq{background-position:0 -359px}#loco.wrap .region-cz{background-position:0 -371px}#loco.wrap .region-ae{background-position:0 -383px}#loco.wrap .region-cm{background-position:0 -395px}#loco.wrap .region-bi{background-position:0 -407px}#loco.wrap .region-ar{background-position:0 -419px}#loco.wrap .region-as{background-position:0 -431px}#loco.wrap .region-bh{background-position:0 -443px}#loco.wrap .region-cl{background-position:0 -455px}#loco.wrap .region-ad{background-position:0 -467px}#loco.wrap .region-mp{background-position:0 -479px}#loco.wrap .region-lt{background-position:0 -491px}#loco.wrap .region-mg{background-position:0 -503px}#loco.wrap .region-lc{background-position:0 -515px}#loco.wrap .region-tr{background-position:0 -527px}#loco.wrap .region-ua{background-position:0 -539px}#loco.wrap .region-tv{background-position:0 -551px}#loco.wrap .region-vi{background-position:0 -563px}#loco.wrap .region-mt{background-position:0 -575px}#loco.wrap .region-no{background-position:0 -587px}#loco.wrap .region-mc{background-position:0 -599px}#loco.wrap .region-ch{background-position:0 -611px}#loco.wrap .region-bl{background-position:0 -623px}#loco.wrap .region-aw{background-position:0 -640px}#loco.wrap .region-bz{background-position:0 -652px}#loco.wrap .region-bm{background-position:0 -664px}#loco.wrap .region-ci{background-position:0 -676px}#loco.wrap .region-mu{background-position:0 -688px}#loco.wrap .region-us{background-position:0 -700px}#loco.wrap .region-tw{background-position:0 -712px}#loco.wrap .region-ye{background-position:0 -724px}#loco.wrap .region-mw{background-position:0 -736px}#loco.wrap .region-nl{background-position:0 -748px}#loco.wrap .region-ls{background-position:0 -760px}#loco.wrap .region-bo{background-position:0 -772px}#loco.wrap .region-at{background-position:0 -784px}#loco.wrap .region-ck{background-position:0 -796px}#loco.wrap .region-by{background-position:0 -808px}#loco.wrap .region-au{background-position:0 -820px}#loco.wrap .region-bn{background-position:0 -832px}#loco.wrap .region-ma{background-position:0 -844px}#loco.wrap .region-nz{background-position:0 -856px}#loco.wrap .region-lr{background-position:0 -868px}#loco.wrap .region-mv{background-position:0 -880px}#loco.wrap .region-tc{background-position:0 -892px}#loco.wrap .region-ug{background-position:0 -904px}#loco.wrap .region-tt{background-position:0 -916px}#loco.wrap .region-pl{background-position:0 -928px}#loco.wrap .region-rs{background-position:0 -940px}#loco.wrap .region-in{background-position:0 -952px}#loco.wrap .region-ge{background-position:0 -964px}#loco.wrap .region-gr{background-position:0 -976px}#loco.wrap .region-gs{background-position:0 -988px}#loco.wrap .region-gd{background-position:0 -1000px}#loco.wrap .region-io{background-position:0 -1012px}#loco.wrap .region-hk{background-position:0 -1024px}#loco.wrap .region-kp{background-position:0 -1036px}#loco.wrap .region-kg{background-position:0 -1048px}#loco.wrap .region-pm{background-position:0 -1060px}#loco.wrap .region-sv{background-position:0 -1072px}#loco.wrap .region-re{background-position:0 -1084px}#loco.wrap .region-sa{background-position:0 -1096px}#loco.wrap .region-sc{background-position:0 -1108px}#loco.wrap .region-st{background-position:0 -1120px}#loco.wrap .region-ke{background-position:0 -1132px}#loco.wrap .region-im{background-position:0 -1144px}#loco.wrap .region-kr{background-position:0 -1161px}#loco.wrap .region-gf{background-position:0 -1173px}#loco.wrap .region-dj{background-position:0 -1185px}#loco.wrap .region-gq{background-position:0 -1197px}#loco.wrap .region-gp{background-position:0 -1209px}#loco.wrap .region-dk{background-position:0 -1221px}#loco.wrap .region-gg{background-position:0 -1233px}#loco.wrap .region-il{background-position:0 -1250px}#loco.wrap .region-pn{background-position:0 -1262px}#loco.wrap .region-sb{background-position:0 -1274px}#loco.wrap .region-py{background-position:0 -1286px}#loco.wrap .region-ru{background-position:0 -1298px}#loco.wrap .region-kw{background-position:0 -1310px}#loco.wrap .region-do{background-position:0 -1322px}#loco.wrap .region-gt{background-position:0 -1334px}#loco.wrap .region-gb{background-position:0 -1346px}#loco.wrap .region-gu{background-position:0 -1358px}#loco.wrap .region-je{background-position:0 -1370px}#loco.wrap .region-hm{background-position:0 -1387px}#loco.wrap .region-sg{background-position:0 -1399px}#loco.wrap .region-pk{background-position:0 -1411px}#loco.wrap .region-sr{background-position:0 -1423px}#loco.wrap .region-se{background-position:0 -1435px}#loco.wrap .region-jp{background-position:0 -1447px}#loco.wrap .region-gw{background-position:0 -1459px}#loco.wrap .region-eh{background-position:0 -1471px}#loco.wrap .region-dz{background-position:0 -1483px}#loco.wrap .region-ga{background-position:0 -1495px}#loco.wrap .region-fr{background-position:0 -1507px}#loco.wrap .region-dm{background-position:0 -1519px}#loco.wrap .region-hn{background-position:0 -1531px}#loco.wrap .region-sd{background-position:0 -1543px}#loco.wrap .region-rw{background-position:0 -1555px}#loco.wrap .region-ph{background-position:0 -1567px}#loco.wrap .region-ss{background-position:0 -1579px}#loco.wrap .region-qa{background-position:0 -1596px}#loco.wrap .region-pe{background-position:0 -1608px}#loco.wrap .region-pr{background-position:0 -1620px}#loco.wrap .region-si{background-position:0 -1632px}#loco.wrap .region-ht{background-position:0 -1644px}#loco.wrap .region-es{background-position:0 -1656px}#loco.wrap .region-gl{background-position:0 -1668px}#loco.wrap .region-gm{background-position:0 -1680px}#loco.wrap .region-er{background-position:0 -1692px}#loco.wrap .region-fi{background-position:0 -1704px}#loco.wrap .region-ee{background-position:0 -1716px}#loco.wrap .region-kn{background-position:0 -1728px}#loco.wrap .region-hu{background-position:0 -1740px}#loco.wrap .region-iq{background-position:0 -1752px}#loco.wrap .region-ky{background-position:0 -1764px}#loco.wrap .region-sh{background-position:0 -1776px}#loco.wrap .region-ps{background-position:0 -1788px}#loco.wrap .region-pf{background-position:0 -1800px}#loco.wrap .region-sj{background-position:0 -1812px}#loco.wrap .region-id{background-position:0 -1824px}#loco.wrap .region-is{background-position:0 -1836px}#loco.wrap .region-eg{background-position:0 -1848px}#loco.wrap .region-fk{background-position:0 -1860px}#loco.wrap .region-fj{background-position:0 -1872px}#loco.wrap .region-gn{background-position:0 -1884px}#loco.wrap .region-gy{background-position:0 -1896px}#loco.wrap .region-ir{background-position:0 -1908px}#loco.wrap .region-km{background-position:0 -1920px}#loco.wrap .region-ie{background-position:0 -1932px}#loco.wrap .region-kz{background-position:0 -1944px}#loco.wrap .region-ro{background-position:0 -1956px}#loco.wrap .region-sk{background-position:0 -1968px}#loco.wrap .region-pg{background-position:0 -1980px}#loco.wrap .region-pt{background-position:0 -1992px}#loco.wrap .region-so{background-position:0 -2004px}#loco.wrap .region-sx{background-position:0 -2016px}#loco.wrap .region-hr{background-position:0 -2033px}#loco.wrap .region-ki{background-position:0 -2045px}#loco.wrap .region-jm{background-position:0 -2057px}#loco.wrap .region-ec{background-position:0 -2069px}#loco.wrap .region-et{background-position:0 -2081px}#loco.wrap .region-fo{background-position:0 -2093px}#loco.wrap .region-kh{background-position:0 -2105px}#loco.wrap .region-sy{background-position:0 -2117px}#loco.wrap .region-sn{background-position:0 -2129px}#loco.wrap .region-pw{background-position:0 -2141px}#loco.wrap .region-sl{background-position:0 -2153px}#loco.wrap .region-fm{background-position:0 -2165px}#loco.wrap .region-gi{background-position:0 -2177px}#loco.wrap .region-de{background-position:0 -2189px}#loco.wrap .region-gh{background-position:0 -2201px}#loco.wrap .region-jo{background-position:0 -2213px}#loco.wrap .region-it{background-position:0 -2225px}#loco.wrap .region-pa{background-position:0 -2237px}#loco.wrap .region-sz{background-position:0 -2249px}#loco.wrap .region-sm{background-position:0 -2261px}#loco.wrap .region-tn{background-position:0 -2273px}#loco.wrap .region-ml{background-position:0 -2285px}#loco.wrap .region-cg{background-position:0 -2297px}#loco.wrap .region-ax{background-position:0 -2309px}#loco.wrap .region-ao{background-position:0 -2321px}#loco.wrap .region-bt{background-position:0 -2333px}#loco.wrap .region-an{background-position:0 -2345px}#loco.wrap .region-bb{background-position:0 -2357px}#loco.wrap .region-cf{background-position:0 -2369px}#loco.wrap .region-mm{background-position:0 -2381px}#loco.wrap .region-li{background-position:0 -2393px}#loco.wrap .region-na{background-position:0 -2405px}#loco.wrap .region-mz{background-position:0 -2417px}#loco.wrap .region-to{background-position:0 -2429px}#loco.wrap .region-vg{background-position:0 -2441px}#loco.wrap .region-ve{background-position:0 -2453px}#loco.wrap .region-tz{background-position:0 -2465px}#loco.wrap .region-tm{background-position:0 -2477px}#loco.wrap .region-mx{background-position:0 -2489px}#loco.wrap .region-nc{background-position:0 -2501px}#loco.wrap .region-mo{background-position:0 -2513px}#loco.wrap .region-lk{background-position:0 -2525px}#loco.wrap .region-cd{background-position:0 -2537px}#loco.wrap .region-al{background-position:0 -2549px}#loco.wrap .region-bw{background-position:0 -2561px}#loco.wrap .region-cs{background-position:0 -2573px}#loco.wrap .region-cr{background-position:0 -2585px}#loco.wrap .region-bv{background-position:0 -2597px}#loco.wrap .region-am{background-position:0 -2609px}#loco.wrap .region-az{background-position:0 -2621px}#loco.wrap .region-ba{background-position:0 -2633px}#loco.wrap .region-mn{background-position:0 -2645px}#loco.wrap .region-nu{background-position:0 -2657px}#loco.wrap .region-my{background-position:0 -2669px}#loco.wrap .region-tl{background-position:0 -2681px}#loco.wrap .region-ws{background-position:0 -2693px}#loco.wrap .region-th{background-position:0 -2705px}#loco.wrap .region-nf{background-position:0 -2717px}#loco.wrap .region-ly{background-position:0 -2729px}#loco.wrap .region-ai{background-position:0 -2741px}#loco.wrap .region-br{background-position:0 -2753px}#loco.wrap .region-cv{background-position:0 -2765px}#loco.wrap .region-be{background-position:0 -2777px}#loco.wrap .region-ca{background-position:0 -2789px}#loco.wrap .region-bd{background-position:0 -2801px}#loco.wrap .region-cw{background-position:0 -2813px}#loco.wrap .region-bs{background-position:0 -2830px}#loco.wrap .region-ng{background-position:0 -2842px}#loco.wrap .region-mk{background-position:0 -2854px}#loco.wrap .region-np{background-position:0 -2866px}#loco.wrap .region-va{background-position:0 -2878px}#loco.wrap .region-uz{background-position:0 -2890px}#loco.wrap .region-um{background-position:0 -2902px}#loco.wrap .region-tk{background-position:0 -2914px}#loco.wrap .region-vc{background-position:0 -2926px}#loco.wrap .region-zw{background-position:0 -2938px}#loco.wrap .region-nr{background-position:0 -2950px}#loco.wrap .region-ne{background-position:0 -2962px}#loco.wrap .region-cu{background-position:0 -2974px}#loco.wrap .region-bq{background-position:0 -2986px}#loco.wrap .region-bf{background-position:0 -2998px}#loco.wrap .region-bg{background-position:0 -3010px}#loco.wrap .region-cc{background-position:0 -3022px}#loco.wrap .region-mh{background-position:0 -3034px}#loco.wrap .region-za{background-position:0 -3046px}#loco.wrap .region-uy{background-position:0 -3058px}#loco.wrap .region-wf{background-position:0 -3070px}#loco.wrap .region-vu{background-position:0 -3082px}#loco.wrap .region-tj{background-position:0 -3094px}#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco.wrap .variant-valencia{background-position:0 -3118px}#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco.wrap .x-eu{background-position:0 -3142px}#loco.wrap span.lang code{display:none}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\73"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .selector.disabled .handle:after,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .has-dashicon:before{speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco.wrap .icon,#loco.wrap .has-icon:before{font-family:'loco'}#loco.wrap .has-dashicon:before{font-family:'dashicons';font-size:1.4em}#loco.wrap .has-icon:before,#loco.wrap .has-dashicon:before,#loco.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco.wrap .only-icon{text-align:center}#loco.wrap .only-icon:before{text-align:center}#loco.wrap .only-icon span{display:none}#loco.wrap a,#loco.wrap .wp-core-ui .button-link{text-decoration:none}#loco.wrap h3:hover>a.loco-anchor{color:#ccc}#loco.wrap h3:hover>a.loco-anchor:before{content:"\B6"}#loco.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco.wrap h1 ul,#loco.wrap h1 li{margin:0;padding:0}#loco.wrap h1 li{display:inline-block}#loco.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco.wrap h1 li:last-child:after{content:""}#loco.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco.wrap h2 span{color:#999;font-weight:normal}#loco.wrap h2 .loco-meta,#loco.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco.wrap .wp-list-table td{white-space:nowrap}#loco.wrap .wp-list-table td>a,#loco.wrap .wp-list-table td>time{display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis}#loco.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"\25bc"}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"\25b2"}#loco.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco.wrap form.loco-filter{display:block;margin-bottom:5px}#loco.wrap form.loco-filter .icon-filter{color:#999}#loco.wrap nav.above-list-table{margin-bottom:1em}#loco.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco.wrap .wp-core-ui button.inverted,#loco.wrap .wp-core-ui button.inverted:hover{background:-moz-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:-webkit-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:linear-gradient(to bottom, #ccc 0%, #e0e0e0 5%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:#bbb}#loco.wrap .wp-core-ui button:active,#loco.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco.wrap .loco-clearable a.clear,#loco.wrap .auto-comp-wrap a.clear{top:0;right:0;outline:none;margin:0;border:solid 1px transparent;padding:5px 5px;position:absolute;font-size:1em;line-height:normal}#loco.wrap .loco-clearable a.clear:before,#loco.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco.wrap .loco-clearable a.clear:hover:before,#loco.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco.wrap .loco-clearable a.clear span,#loco.wrap .auto-comp-wrap a.clear span{display:none}#loco.wrap .loco-clearable ::-ms-clear,#loco.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco.wrap div.progress{color:#000;background:transparent !important}#loco.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco.wrap div.progress .l{display:block}#loco.wrap td div.progress .t{border:none}#loco.wrap td div.progress .l{display:none}#loco.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco.wrap .loco-danger{color:#d54e21}#loco.wrap .notice,#loco.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco.wrap .notice-generic{border-color:#ddd}#loco.wrap .notice-success>.has-icon,#loco.wrap .notice-success p>strong.has-icon{color:#000}#loco.wrap .notice-warning{border-color:#FFA500}#loco.wrap .notice-error{border-color:#dc3232}#loco.wrap .notice-debug{border-color:#00a0d2}#loco.wrap .notice-danger{border-color:#dc3232}#loco.wrap .notice-locked{border-color:#FFA500}#loco.wrap .notice>.has-icon:before,#loco.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco.wrap .notice>p>a.button.has-icon:before{width:1.5em}#loco.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco.wrap .notice>p>em a{color:inherit}#loco.wrap .notice>p a:hover,#loco.wrap .notice>nav a:hover{text-decoration:underline}#loco.wrap .notice>p a.button,#loco.wrap .notice>nav a.button{text-decoration:inherit}#loco.wrap .notice.has-nav{display:flex;flex-direction:row}#loco.wrap .notice.has-nav p,#loco.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco.wrap .notice.has-nav a{font-size:12px;white-space:nowrap}#loco.wrap .notice.has-nav nav>span{color:#666}#loco.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco.wrap ul.problems li{font-style:italic}#loco.wrap label{position:relative}#loco.wrap label.for-disabled,#loco.wrap label.for-disabled>input{cursor:default !important}#loco.wrap input.regular-text,#loco.wrap textarea.regular-text{width:25em}#loco.wrap .button-link{padding:0 10px 1px}#loco.wrap .button-danger{background:#ba0000;border-color:#990000 #660000 #660000;-webkit-box-shadow:0 1px 0 #600;-moz-box-shadow:0 1px 0 #600;box-shadow:0 1px 0 #600;color:#fff;text-shadow:0 -1px 1px #660000, 1px 0 1px #660000, 0 1px 1px #660000, -1px 0 1px #660000}#loco.wrap .button-success{background:#00B500;border-color:#090 #2e892e #2e892e;-webkit-box-shadow:0 1px 0 #2e892e;-moz-box-shadow:0 1px 0 #2e892e;box-shadow:0 1px 0 #2e892e;color:#fff;text-shadow:0 -1px 1px #2e892e,1px 0 1px #2e892e,0 1px 1px #2e892e,-1px 0 1px #2e892e}#loco.wrap .button-success:hover{background:#3db63d}#loco.wrap form button.loco-loading.button-large{padding-left:0}#loco.wrap form button.loco-loading.button-large:before{width:16px;height:16px;margin:0 4px;content:" ";font-size:16px;line-height:1;display:inline-block;vertical-align:sub}#loco.wrap ::-webkit-input-placeholder{color:#ccc}#loco.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco.wrap :-ms-input-placeholder{color:#ccc}#loco.wrap .ielt10 .placeheld{color:#ccc}#loco.wrap a.has-raquo:after{content:"\A0\BB"}#loco.wrap a.has-laquo:before{content:"\AB\A0"}#loco.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif?v=2.1.3) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco.wrap .jshide{display:none !important}#loco.wrap .invis{visibility:hidden}.form-table tr{vertical-align:top}.form-table tr.compact td{padding-top:0}.loco-modal.request-filesystem-credentials-dialog{top:15% !important;max-height:85% !important}.loco-modal.request-filesystem-credentials-dialog>.ui-dialog-content{background:inherit}.loco-modal.request-filesystem-credentials-dialog .ftp-password>label>em:last-child{display:none}.ui-dialog-content>div.loco-loading{height:100%;background:transparent url(../img/spin-modal.gif?v=2.1.3) center 20px no-repeat}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif?v=2.1.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:0.5em;padding-right:0.5em}#footer-upgrade span:first-child:before{content:"";display:none}.loco-clearfix:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}dl.debug dt{font-weight:bold}dl.debug dt,dl.debug dd{white-space:pre}.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(0,115,170,0.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#0073aa}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif?v=2.1.3) 0 0 no-repeat !important}
1
+ ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif);background-repeat:no-repeat;min-height:16px}._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif);background-size:16px}}._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}._green_glow_outer{-webkit-box-shadow:0 0 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}.loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:'loco';src:url("../font/loco.eot");src:url("../font/loco.eot?#iefix") format("embedded-opentype"),url("../font/loco.woff") format("woff"),url("../font/loco.ttf") format("truetype"),url("../font/loco.svg#loco") format("svg");font-weight:normal;font-style:normal}.tipsy{font-size:11px;position:absolute;padding:5px;z-index:500001;opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.tipsy.in{opacity:1}.tipsy-inner{background-color:#000;color:#FFF;white-space:nowrap;padding:6px 8px;line-height:1.3em;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-n .tipsy-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-nw .tipsy-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-se .tipsy-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-e .tipsy-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.tipsy-w .tipsy-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}#loco.wrap .selector li,#loco.wrap .selector .handle,#loco.wrap .selectoradd a,#loco.wrap .selectorsep:before,#loco.wrap .selectorsep span{padding:0.3em 0.75em}#loco.wrap .selector{text-align:left;display:inline-block;white-space:nowrap}#loco.wrap .selectoradd a,#loco.wrap .selector .handle{cursor:default;display:block;position:relative;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666;height:1.3em;overflow:hidden;white-space:normal}#loco.wrap .selectorsep{display:inline-block;border:solid 1px transparent}#loco.wrap .selectorsep:before{display:block;position:relative;color:#999;height:1.3em;overflow:hidden}#loco.wrap .selectorsep>*{display:block;line-height:1em;color:#666;height:1.3em;overflow:hidden}#loco.wrap .selector .handle{outline:none;white-space:nowrap;padding-right:2.3em;max-width:250px;text-overflow:ellipsis}#loco.wrap .selector .handle .prefix{padding-right:0.6ex}#loco.wrap .selector .handle:after{font-family:loco;font-size:1.3em;color:#ccc;display:block;position:absolute;top:0.25em;right:0.6em}#loco.wrap .selector .handle:focus:after,#loco.wrap .selector .handle:hover:after{color:#666}#loco.wrap .selector.no-caret .handle{padding-right:0.75em}#loco.wrap .selector.no-caret .handle:after{display:none}#loco.wrap .selector.no-title .handle{padding-left:0.5em;padding-right:0.5em}#loco.wrap .selector.no-title .handle .label{display:none}#loco.wrap .selector.no-title .handle .icon{margin-right:0px}#loco.wrap .selector.dummy .handle{border-color:transparent}#loco.wrap .selector.dummy .handle:after{display:none}#loco.wrap .selectoradd{position:relative}#loco.wrap .selectoradd>*{display:block;float:left;clear:none}#loco.wrap .selectoradd>a.has-icon{width:1.3em}#loco.wrap .selectoradd>a.has-icon:before{color:#999;display:inline;padding-left:0;padding-right:0;line-height:1.4em}#loco.wrap .selectoradd>a.has-icon:hover:after{color:#2e892e}#loco.wrap .selectorsep{display:inline-block}#loco.wrap .selectorsep span{color:#666;height:1.3em}#loco.wrap .selector ul{padding:0}#loco.wrap .selector ul,#loco.wrap .selector li{display:block;position:relative;cursor:default;margin:0}#loco.wrap .selector ul{z-index:5;position:absolute;left:0;top:0;background:#f5f5f5;box-shadow:0 10px 5px rgba(0,0,0,0.2);border:solid 1px #ccc;overflow:auto}#loco.wrap .selector.up ul{margin-top:0}#loco.wrap .selector.multi li input{display:none}#loco.wrap .selector.multi li.checked{background:#eee}#loco.wrap .selector li.active{background:#eee !important}#loco.wrap .selector li.over{background:#ccc !important;color:#fff;text-shadow:1px 1px #aaa}#loco.wrap .selector li.over .label{color:#fff}#loco.wrap .selector .label{font:inherit;color:inherit}#loco.wrap .selector .icon{display:inline-block;min-width:1.2em;text-align:center;font-size:14px}#loco.wrap .selector .icon.no-icon{display:none}#loco.wrap .selector .icon:before{color:#666}#loco.wrap .selector .label{line-height:1}#loco.wrap .selector .icon,#loco.wrap .selector .icon-16{vertical-align:bottom}#loco.wrap .selector .icon,#loco.wrap .selector .lang,#loco.wrap .selector .icon-16{margin-right:5px}#loco.wrap .selector .region,#loco.wrap .selector .lang-ca,#loco.wrap .selector .lang-eo,#loco.wrap .selector .lang-eu,#loco.wrap .selector .variant-wales,#loco.wrap .selector .region-gb.lang-cy,#loco.wrap .selector .variant-scotland,#loco.wrap .selector .region-gb.lang-gd{margin-left:2px;margin-right:7px}#loco.wrap .selector.ticked .icon.no-icon{font-size:12px;display:inline-block}#loco.wrap .selector.ticked .active .icon.no-icon:before{content:"\2713"}#loco.wrap .selectoradd a:hover,#loco.wrap .selector a.handle:focus,#loco.wrap .selector a.handle:hover{color:#000;border-color:#999}#loco.wrap .selector.active .handle{border-color:#999;background-color:#eee;color:#999}#loco.wrap .selector.active .handle:after{color:#999}#loco.wrap .selector.disabled{cursor:default;cursor:no-drop;cursor:not-allowed}#loco.wrap .selector.disabled .handle{pointer-events:none;border-top:solid 1px #fff;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd;border-left:solid 1px #fff;color:#666}#loco.wrap .selector.disabled .handle:after{font-size:1em;top:0.5em;right:0.75em}#loco.wrap .selector li.disabled,#loco.wrap .selector li.disabled.over{color:#aaa;text-shadow:1px 1px #fff;pointer-events:none}#loco.wrap .selector li.disabled *{cursor:text}#loco.wrap .selector li.disabled .icon:before{color:#aaa}#loco.wrap .selector li.disabled .flag,#loco.wrap .selector li.disabled .icon-16{opacity:0.4}#loco.wrap .selector.lefty ul{left:auto;right:0}#loco.wrap .selector.lefty ul .icon,#loco.wrap .selector.lefty ul .icon-32{display:block;float:right;clear:none}#loco.wrap .selector.lefty ul .label{padding-right:32px;padding-left:0}#loco.wrap div.auto-comp-wrap{width:100%}#loco.wrap div.auto-comp-wrap input{display:inline-block}#loco.wrap div.auto-comp-wrap.loading input{background:transparent url(../img/ajax-loader.gif) right 2px no-repeat}#loco.wrap div.auto-comp-drop{color:#333333;background:#FFFFFF;border-top:none;position:absolute;width:100%;top:0;left:0;z-index:99;-webkit-box-shadow:0 5px 5px rgba(0,0,0,0.4);-moz-box-shadow:0 5px 5px rgba(0,0,0,0.4);box-shadow:0 5px 5px rgba(0,0,0,0.4)}#loco.wrap div.auto-comp-result{padding:5px 10px;cursor:pointer;background:#F0F0F0;border-top:solid 1px #FFF;border-bottom:solid 1px #DDD}#loco.wrap div.auto-comp-result:first-child{border-top:solid 1px #DDD}#loco.wrap div.auto-comp-result>*{display:inline-block;vertical-align:middle;line-height:normal}#loco.wrap div.auto-comp-result .icon:before{padding-right:5px}#loco.wrap div.auto-comp-result:hover{background:#A8A8A8;color:#FFFFFF;border-top-color:#A8A8A8;border-bottom-color:#999999}#loco.wrap div.auto-comp-result.selected{background:#666666 !important;color:#FFFFFF;border-top-color:#666666;border-bottom-color:#666666}#loco.wrap div.auto-comp-result .lang,#loco.wrap div.auto-comp-result .region,#loco.wrap div.auto-comp-result .lang-ca,#loco.wrap div.auto-comp-result .lang-eo,#loco.wrap div.auto-comp-result .lang-eu,#loco.wrap div.auto-comp-result .variant-wales,#loco.wrap div.auto-comp-result .region-gb.lang-cy,#loco.wrap div.auto-comp-result .variant-scotland,#loco.wrap div.auto-comp-result .region-gb.lang-gd{margin-right:5px}#loco.wrap div.auto-comp-wrap.error a.icon.clear:before{color:#cc0000;opacity:1}#loco.wrap div.auto-comp-wrap.error input[type="text"]{border-color:#cc0000;color:#cc0000}#loco.wrap div.auto-comp-wrap.error input[type="text"]:focus{-webkit-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);-moz-box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5);box-shadow:0 0 0.5em 0 rgba(153,0,0,0.5)}#loco.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif);background-repeat:no-repeat;min-height:16px}#loco.wrap ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){#loco.wrap ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif);background-size:16px}}#loco.wrap ._green_glow_inner{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco.wrap ._green_glow_outer{-webkit-box-shadow:0 0 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco.wrap .loco-font,#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{#loco.wrap{font-family:'loco';src:url("../fonts/loco.eot");src:url("../fonts/loco.eot?#iefix") format("embedded-opentype"),url("../fonts/loco.ttf") format("truetype"),url("../fonts/loco.woff") format("woff"),url("../fonts/loco.svg#loco") format("svg");font-weight:normal;font-style:normal}}#loco.wrap .has-icon:before{display:inline-block;padding-right:0.3em}#loco.wrap a.icon-help{cursor:help}#loco.wrap a.icon-help span{display:none}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\16ec"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .selector.disabled .handle:after,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-privacy:before{content:"\1f6e1"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon-flag.is-untranslated{color:#999}#loco.wrap .icon-flag.is-untranslated:before{color:inherit;content:"×";text-align:center}#loco.wrap .icon-flag.status-0,#loco.wrap .icon-flag.is-translated{color:#2e892e}#loco.wrap .icon-flag.status-0:before,#loco.wrap .icon-flag.is-translated:before{color:inherit;content:"✓";text-align:center}#loco.wrap .icon-flag.status-4,#loco.wrap .icon-flag.is-fuzzy{color:#666}#loco.wrap .icon-flag.status-4:before,#loco.wrap .icon-flag.is-fuzzy:before{color:inherit;content:"";text-align:center}#loco.wrap .icon-flag.status-1,#loco.wrap .icon-flag.is-incorrect,#loco.wrap .icon-flag.status-2,#loco.wrap .icon-flag.is-provisional,#loco.wrap .icon-flag.status-3,#loco.wrap .icon-flag.is-unapproved,#loco.wrap .icon-flag.status-5,#loco.wrap .icon-flag.is-incomplete,#loco.wrap .icon-flag.status-6,#loco.wrap .icon-flag.is-rejected{color:#bd2c00}#loco.wrap .icon-flag.status-1:before,#loco.wrap .icon-flag.is-incorrect:before,#loco.wrap .icon-flag.status-2:before,#loco.wrap .icon-flag.is-provisional:before,#loco.wrap .icon-flag.status-3:before,#loco.wrap .icon-flag.is-unapproved:before,#loco.wrap .icon-flag.status-5:before,#loco.wrap .icon-flag.is-incomplete:before,#loco.wrap .icon-flag.status-6:before,#loco.wrap .icon-flag.is-rejected:before{color:inherit;content:"";text-align:center}#loco.wrap .lang,#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{color:#fff;background:#2e892e;display:inline-block;text-transform:uppercase;overflow:hidden;font-family:Verdana,Arial,sans-serif;font-size:9px;font-weight:normal;font-style:normal;line-height:12px;text-align:center;white-space:normal;text-shadow:none}#loco.wrap .lang{width:20px;height:12px;line-height:12px;vertical-align:middle}#loco.wrap .lang:before{content:attr(lang);vertical-align:baseline}#loco.wrap .no-lang{width:18px;height:10px;border:solid 1px #2e892e;background:transparent}#loco.wrap .lang-el{background-color:#1D48A3}#loco.wrap .lang-el:before{content:"\0395\03BB"}#loco.wrap .region,#loco.wrap .lang-ca,#loco.wrap .lang-eo,#loco.wrap .lang-eu,#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy,#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{width:16px;height:12px;margin:0 2px;background-image:url(../img/flags.png);background-repeat:no-repeat;background-color:transparent}#loco.wrap .region:before,#loco.wrap .lang-ca:before,#loco.wrap .lang-eo:before,#loco.wrap .lang-eu:before,#loco.wrap .variant-wales:before,#loco.wrap .region-gb.lang-cy:before,#loco.wrap .variant-scotland:before,#loco.wrap .region-gb.lang-gd:before{visibility:hidden}#loco.wrap .lang-zh{background-color:#B90000}#loco.wrap .lang-zh.script-hans:before{content:"\4E2D\56FD"}#loco.wrap .lang-zh.script-hant:before{content:"\4E2D\570B"}#loco.wrap .__{background-position:0 0}#loco.wrap .lang-eo{background-position:0 -12px}#loco.wrap .lang-eu{background-position:0 -24px}#loco.wrap .lang-ca{background-position:0 -36px}#loco.wrap .region-tg{background-position:0 -48px}#loco.wrap .region-me{background-position:0 -60px}#loco.wrap .region-la{background-position:0 -73px}#loco.wrap .region-mr{background-position:0 -85px}#loco.wrap .region-ni{background-position:0 -97px}#loco.wrap .region-lv{background-position:0 -109px}#loco.wrap .region-om{background-position:0 -121px}#loco.wrap .region-af{background-position:0 -133px}#loco.wrap .region-cy{background-position:0 -145px}#loco.wrap .region-bj{background-position:0 -157px}#loco.wrap .region-aq{background-position:0 -169px}#loco.wrap .region-cn{background-position:0 -186px}#loco.wrap .region-co{background-position:0 -198px}#loco.wrap .region-cx{background-position:0 -210px}#loco.wrap .region-ag{background-position:0 -222px}#loco.wrap .region-ms{background-position:0 -234px}#loco.wrap .region-md{background-position:0 -246px}#loco.wrap .region-zm{background-position:0 -258px}#loco.wrap .region-vn{background-position:0 -270px}#loco.wrap .region-tf{background-position:0 -282px}#loco.wrap .region-td{background-position:0 -294px}#loco.wrap .region-yt{background-position:0 -306px}#loco.wrap .region-lb{background-position:0 -318px}#loco.wrap .region-mf{background-position:0 -330px}#loco.wrap .region-lu{background-position:0 -347px}#loco.wrap .region-mq{background-position:0 -359px}#loco.wrap .region-cz{background-position:0 -371px}#loco.wrap .region-ae{background-position:0 -383px}#loco.wrap .region-cm{background-position:0 -395px}#loco.wrap .region-bi{background-position:0 -407px}#loco.wrap .region-ar{background-position:0 -419px}#loco.wrap .region-as{background-position:0 -431px}#loco.wrap .region-bh{background-position:0 -443px}#loco.wrap .region-cl{background-position:0 -455px}#loco.wrap .region-ad{background-position:0 -467px}#loco.wrap .region-mp{background-position:0 -479px}#loco.wrap .region-lt{background-position:0 -491px}#loco.wrap .region-mg{background-position:0 -503px}#loco.wrap .region-lc{background-position:0 -515px}#loco.wrap .region-tr{background-position:0 -527px}#loco.wrap .region-ua{background-position:0 -539px}#loco.wrap .region-tv{background-position:0 -551px}#loco.wrap .region-vi{background-position:0 -563px}#loco.wrap .region-mt{background-position:0 -575px}#loco.wrap .region-no{background-position:0 -587px}#loco.wrap .region-mc{background-position:0 -599px}#loco.wrap .region-ch{background-position:0 -611px}#loco.wrap .region-bl{background-position:0 -623px}#loco.wrap .region-aw{background-position:0 -640px}#loco.wrap .region-bz{background-position:0 -652px}#loco.wrap .region-bm{background-position:0 -664px}#loco.wrap .region-ci{background-position:0 -676px}#loco.wrap .region-mu{background-position:0 -688px}#loco.wrap .region-us{background-position:0 -700px}#loco.wrap .region-tw{background-position:0 -712px}#loco.wrap .region-ye{background-position:0 -724px}#loco.wrap .region-mw{background-position:0 -736px}#loco.wrap .region-nl{background-position:0 -748px}#loco.wrap .region-ls{background-position:0 -760px}#loco.wrap .region-bo{background-position:0 -772px}#loco.wrap .region-at{background-position:0 -784px}#loco.wrap .region-ck{background-position:0 -796px}#loco.wrap .region-by{background-position:0 -808px}#loco.wrap .region-au{background-position:0 -820px}#loco.wrap .region-bn{background-position:0 -832px}#loco.wrap .region-ma{background-position:0 -844px}#loco.wrap .region-nz{background-position:0 -856px}#loco.wrap .region-lr{background-position:0 -868px}#loco.wrap .region-mv{background-position:0 -880px}#loco.wrap .region-tc{background-position:0 -892px}#loco.wrap .region-ug{background-position:0 -904px}#loco.wrap .region-tt{background-position:0 -916px}#loco.wrap .region-pl{background-position:0 -928px}#loco.wrap .region-rs{background-position:0 -940px}#loco.wrap .region-in{background-position:0 -952px}#loco.wrap .region-ge{background-position:0 -964px}#loco.wrap .region-gr{background-position:0 -976px}#loco.wrap .region-gs{background-position:0 -988px}#loco.wrap .region-gd{background-position:0 -1000px}#loco.wrap .region-io{background-position:0 -1012px}#loco.wrap .region-hk{background-position:0 -1024px}#loco.wrap .region-kp{background-position:0 -1036px}#loco.wrap .region-kg{background-position:0 -1048px}#loco.wrap .region-pm{background-position:0 -1060px}#loco.wrap .region-sv{background-position:0 -1072px}#loco.wrap .region-re{background-position:0 -1084px}#loco.wrap .region-sa{background-position:0 -1096px}#loco.wrap .region-sc{background-position:0 -1108px}#loco.wrap .region-st{background-position:0 -1120px}#loco.wrap .region-ke{background-position:0 -1132px}#loco.wrap .region-im{background-position:0 -1144px}#loco.wrap .region-kr{background-position:0 -1161px}#loco.wrap .region-gf{background-position:0 -1173px}#loco.wrap .region-dj{background-position:0 -1185px}#loco.wrap .region-gq{background-position:0 -1197px}#loco.wrap .region-gp{background-position:0 -1209px}#loco.wrap .region-dk{background-position:0 -1221px}#loco.wrap .region-gg{background-position:0 -1233px}#loco.wrap .region-il{background-position:0 -1250px}#loco.wrap .region-pn{background-position:0 -1262px}#loco.wrap .region-sb{background-position:0 -1274px}#loco.wrap .region-py{background-position:0 -1286px}#loco.wrap .region-ru{background-position:0 -1298px}#loco.wrap .region-kw{background-position:0 -1310px}#loco.wrap .region-do{background-position:0 -1322px}#loco.wrap .region-gt{background-position:0 -1334px}#loco.wrap .region-gb{background-position:0 -1346px}#loco.wrap .region-gu{background-position:0 -1358px}#loco.wrap .region-je{background-position:0 -1370px}#loco.wrap .region-hm{background-position:0 -1387px}#loco.wrap .region-sg{background-position:0 -1399px}#loco.wrap .region-pk{background-position:0 -1411px}#loco.wrap .region-sr{background-position:0 -1423px}#loco.wrap .region-se{background-position:0 -1435px}#loco.wrap .region-jp{background-position:0 -1447px}#loco.wrap .region-gw{background-position:0 -1459px}#loco.wrap .region-eh{background-position:0 -1471px}#loco.wrap .region-dz{background-position:0 -1483px}#loco.wrap .region-ga{background-position:0 -1495px}#loco.wrap .region-fr{background-position:0 -1507px}#loco.wrap .region-dm{background-position:0 -1519px}#loco.wrap .region-hn{background-position:0 -1531px}#loco.wrap .region-sd{background-position:0 -1543px}#loco.wrap .region-rw{background-position:0 -1555px}#loco.wrap .region-ph{background-position:0 -1567px}#loco.wrap .region-ss{background-position:0 -1579px}#loco.wrap .region-qa{background-position:0 -1596px}#loco.wrap .region-pe{background-position:0 -1608px}#loco.wrap .region-pr{background-position:0 -1620px}#loco.wrap .region-si{background-position:0 -1632px}#loco.wrap .region-ht{background-position:0 -1644px}#loco.wrap .region-es{background-position:0 -1656px}#loco.wrap .region-gl{background-position:0 -1668px}#loco.wrap .region-gm{background-position:0 -1680px}#loco.wrap .region-er{background-position:0 -1692px}#loco.wrap .region-fi{background-position:0 -1704px}#loco.wrap .region-ee{background-position:0 -1716px}#loco.wrap .region-kn{background-position:0 -1728px}#loco.wrap .region-hu{background-position:0 -1740px}#loco.wrap .region-iq{background-position:0 -1752px}#loco.wrap .region-ky{background-position:0 -1764px}#loco.wrap .region-sh{background-position:0 -1776px}#loco.wrap .region-ps{background-position:0 -1788px}#loco.wrap .region-pf{background-position:0 -1800px}#loco.wrap .region-sj{background-position:0 -1812px}#loco.wrap .region-id{background-position:0 -1824px}#loco.wrap .region-is{background-position:0 -1836px}#loco.wrap .region-eg{background-position:0 -1848px}#loco.wrap .region-fk{background-position:0 -1860px}#loco.wrap .region-fj{background-position:0 -1872px}#loco.wrap .region-gn{background-position:0 -1884px}#loco.wrap .region-gy{background-position:0 -1896px}#loco.wrap .region-ir{background-position:0 -1908px}#loco.wrap .region-km{background-position:0 -1920px}#loco.wrap .region-ie{background-position:0 -1932px}#loco.wrap .region-kz{background-position:0 -1944px}#loco.wrap .region-ro{background-position:0 -1956px}#loco.wrap .region-sk{background-position:0 -1968px}#loco.wrap .region-pg{background-position:0 -1980px}#loco.wrap .region-pt{background-position:0 -1992px}#loco.wrap .region-so{background-position:0 -2004px}#loco.wrap .region-sx{background-position:0 -2016px}#loco.wrap .region-hr{background-position:0 -2033px}#loco.wrap .region-ki{background-position:0 -2045px}#loco.wrap .region-jm{background-position:0 -2057px}#loco.wrap .region-ec{background-position:0 -2069px}#loco.wrap .region-et{background-position:0 -2081px}#loco.wrap .region-fo{background-position:0 -2093px}#loco.wrap .region-kh{background-position:0 -2105px}#loco.wrap .region-sy{background-position:0 -2117px}#loco.wrap .region-sn{background-position:0 -2129px}#loco.wrap .region-pw{background-position:0 -2141px}#loco.wrap .region-sl{background-position:0 -2153px}#loco.wrap .region-fm{background-position:0 -2165px}#loco.wrap .region-gi{background-position:0 -2177px}#loco.wrap .region-de{background-position:0 -2189px}#loco.wrap .region-gh{background-position:0 -2201px}#loco.wrap .region-jo{background-position:0 -2213px}#loco.wrap .region-it{background-position:0 -2225px}#loco.wrap .region-pa{background-position:0 -2237px}#loco.wrap .region-sz{background-position:0 -2249px}#loco.wrap .region-sm{background-position:0 -2261px}#loco.wrap .region-tn{background-position:0 -2273px}#loco.wrap .region-ml{background-position:0 -2285px}#loco.wrap .region-cg{background-position:0 -2297px}#loco.wrap .region-ax{background-position:0 -2309px}#loco.wrap .region-ao{background-position:0 -2321px}#loco.wrap .region-bt{background-position:0 -2333px}#loco.wrap .region-an{background-position:0 -2345px}#loco.wrap .region-bb{background-position:0 -2357px}#loco.wrap .region-cf{background-position:0 -2369px}#loco.wrap .region-mm{background-position:0 -2381px}#loco.wrap .region-li{background-position:0 -2393px}#loco.wrap .region-na{background-position:0 -2405px}#loco.wrap .region-mz{background-position:0 -2417px}#loco.wrap .region-to{background-position:0 -2429px}#loco.wrap .region-vg{background-position:0 -2441px}#loco.wrap .region-ve{background-position:0 -2453px}#loco.wrap .region-tz{background-position:0 -2465px}#loco.wrap .region-tm{background-position:0 -2477px}#loco.wrap .region-mx{background-position:0 -2489px}#loco.wrap .region-nc{background-position:0 -2501px}#loco.wrap .region-mo{background-position:0 -2513px}#loco.wrap .region-lk{background-position:0 -2525px}#loco.wrap .region-cd{background-position:0 -2537px}#loco.wrap .region-al{background-position:0 -2549px}#loco.wrap .region-bw{background-position:0 -2561px}#loco.wrap .region-cs{background-position:0 -2573px}#loco.wrap .region-cr{background-position:0 -2585px}#loco.wrap .region-bv{background-position:0 -2597px}#loco.wrap .region-am{background-position:0 -2609px}#loco.wrap .region-az{background-position:0 -2621px}#loco.wrap .region-ba{background-position:0 -2633px}#loco.wrap .region-mn{background-position:0 -2645px}#loco.wrap .region-nu{background-position:0 -2657px}#loco.wrap .region-my{background-position:0 -2669px}#loco.wrap .region-tl{background-position:0 -2681px}#loco.wrap .region-ws{background-position:0 -2693px}#loco.wrap .region-th{background-position:0 -2705px}#loco.wrap .region-nf{background-position:0 -2717px}#loco.wrap .region-ly{background-position:0 -2729px}#loco.wrap .region-ai{background-position:0 -2741px}#loco.wrap .region-br{background-position:0 -2753px}#loco.wrap .region-cv{background-position:0 -2765px}#loco.wrap .region-be{background-position:0 -2777px}#loco.wrap .region-ca{background-position:0 -2789px}#loco.wrap .region-bd{background-position:0 -2801px}#loco.wrap .region-cw{background-position:0 -2813px}#loco.wrap .region-bs{background-position:0 -2830px}#loco.wrap .region-ng{background-position:0 -2842px}#loco.wrap .region-mk{background-position:0 -2854px}#loco.wrap .region-np{background-position:0 -2866px}#loco.wrap .region-va{background-position:0 -2878px}#loco.wrap .region-uz{background-position:0 -2890px}#loco.wrap .region-um{background-position:0 -2902px}#loco.wrap .region-tk{background-position:0 -2914px}#loco.wrap .region-vc{background-position:0 -2926px}#loco.wrap .region-zw{background-position:0 -2938px}#loco.wrap .region-nr{background-position:0 -2950px}#loco.wrap .region-ne{background-position:0 -2962px}#loco.wrap .region-cu{background-position:0 -2974px}#loco.wrap .region-bq{background-position:0 -2986px}#loco.wrap .region-bf{background-position:0 -2998px}#loco.wrap .region-bg{background-position:0 -3010px}#loco.wrap .region-cc{background-position:0 -3022px}#loco.wrap .region-mh{background-position:0 -3034px}#loco.wrap .region-za{background-position:0 -3046px}#loco.wrap .region-uy{background-position:0 -3058px}#loco.wrap .region-wf{background-position:0 -3070px}#loco.wrap .region-vu{background-position:0 -3082px}#loco.wrap .region-tj{background-position:0 -3094px}#loco.wrap .variant-scotland,#loco.wrap .region-gb.lang-gd{background-position:0 -3106px}#loco.wrap .variant-valencia{background-position:0 -3118px}#loco.wrap .variant-wales,#loco.wrap .region-gb.lang-cy{background-position:0 -3130px}#loco.wrap .x-eu{background-position:0 -3142px}#loco.wrap span.lang code{display:none}#loco.wrap .icon-bullist:before{content:"\e00a"}#loco.wrap .icon-numlist:before{content:"\e00b"}#loco.wrap .icon-indent:before{content:"\e00c"}#loco.wrap .icon-outdent:before{content:"\e00d"}#loco.wrap .icon-link:before{content:"\e011"}#loco.wrap .icon-unlink:before{content:"\e012"}#loco.wrap .icon-bold:before{content:"\42"}#loco.wrap .icon-italic:before{content:"\49"}#loco.wrap .icon-translate:before{content:"\f326"}#loco.wrap .icon-proj:before{content:"\e900"}#loco.wrap .icon-plural:before{content:"\16ec"}#loco.wrap .icon-max:before,#loco.wrap .icon-full-screen:before{content:"\e901"}#loco.wrap .icon-min:before{content:"\e902"}#loco.wrap .icon-sort:before{content:"\e903"}#loco.wrap .icon-checkbox-checked:before,#loco.wrap .selector.multi li.checked .icon-checkbox:before{content:"\2611"}#loco.wrap .icon-checkbox-unchecked:before{content:"\2610"}#loco.wrap .icon-checkbox-partial:before{content:"\2609"}#loco.wrap .icon-radio-checked:before{content:"\26ab"}#loco.wrap .icon-radio-unchecked:before{content:"\26aa"}#loco.wrap .icon-ext:before{content:"\2b08"}#loco.wrap .icon-share:before{content:"\e904"}#loco.wrap .icon-star:before{content:"\e612"}#loco.wrap .icon-user:before{content:"\e620"}#loco.wrap .icon-ok:before,#loco.wrap .notice-success>.has-icon:before,#loco.wrap .notice-success p>strong.has-icon:before{content:"\2713"}#loco.wrap .icon-remove:before{content:"\d7"}#loco.wrap .icon-cog:before{content:"\e61b"}#loco.wrap .icon-trash:before{content:"\e60f"}#loco.wrap .icon-time:before{content:"\e62d"}#loco.wrap .icon-download:before{content:"\e608"}#loco.wrap .icon-revert:before{content:"\e635"}#loco.wrap .icon-sync:before{content:"\e634"}#loco.wrap .icon-lock:before,#loco.wrap .selector.disabled .handle:after,#loco.wrap .notice-locked>.has-icon:before,#loco.wrap .notice-locked p>strong.has-icon:before{content:"\e604"}#loco.wrap .icon-flag:before{content:"\e60e"}#loco.wrap .icon-tag:before{content:"\e622"}#loco.wrap .icon-tags:before{content:"\e623"}#loco.wrap .icon-print:before{content:"\e62a"}#loco.wrap .icon-camera:before{content:"\e629"}#loco.wrap .icon-pencil:before{content:"\e61e"}#loco.wrap .icon-add:before{content:"\e60c"}#loco.wrap .icon-del:before{content:"\e60d"}#loco.wrap .icon-clear:before,#loco.wrap a.icon.clear:before{content:"\e615"}#loco.wrap .icon-ok-sign:before{content:"\2714"}#loco.wrap .icon-help:before{content:"\3f"}#loco.wrap .icon-info:before,#loco.wrap .notice-info>.has-icon:before,#loco.wrap .notice-info p>strong.has-icon:before{content:"\2139"}#loco.wrap .icon-cancel:before{content:"\e605"}#loco.wrap .icon-warn:before,#loco.wrap .notice-warning>.has-icon:before,#loco.wrap .notice-warning p>strong.has-icon:before,#loco.wrap .notice-error>.has-icon:before,#loco.wrap .notice-error p>strong.has-icon:before{content:"\e62e"}#loco.wrap .icon-comment:before{content:"\e613"}#loco.wrap .icon-bar-chart:before{content:"\e624"}#loco.wrap .icon-key:before{content:"\e606"}#loco.wrap .icon-cogs:before{content:"\e61c"}#loco.wrap .icon-comments:before{content:"\e614"}#loco.wrap .icon-signout:before{content:"\e61a"}#loco.wrap .icon-signin:before{content:"\e619"}#loco.wrap .icon-upload:before{content:"\e609"}#loco.wrap .icon-twitter:before{content:"\1f426"}#loco.wrap .icon-facebook:before{content:"\e630"}#loco.wrap .icon-github:before{content:"\e633"}#loco.wrap .icon-feed:before{content:"\e628"}#loco.wrap .icon-globe:before{content:"\e61d"}#loco.wrap .icon-wrench:before,#loco.wrap .notice-debug>.has-icon:before,#loco.wrap .notice-debug p>strong.has-icon:before{content:"\e626"}#loco.wrap .icon-group:before{content:"\e61f"}#loco.wrap .icon-cloud:before{content:"\e607"}#loco.wrap .icon-copy:before{content:"\e62b"}#loco.wrap .icon-save:before{content:"\e610"}#loco.wrap .icon-menu:before{content:"\e600"}#loco.wrap .icon-table:before{content:"\e627"}#loco.wrap .icon-caret-down:before,#loco.wrap .selector .handle:after{content:"\25bc"}#loco.wrap .icon-caret-up:before,#loco.wrap .selector.active .handle:after{content:"\25b2"}#loco.wrap .icon-caret-right:before{content:"\25b6"}#loco.wrap .icon-mail:before{content:"\e603"}#loco.wrap .icon-cloud-upload:before{content:"\e617"}#loco.wrap .icon-file:before{content:"\e611"}#loco.wrap .icon-circle-white:before{content:"\26ac"}#loco.wrap .icon-circle-black:before{content:"\25cf"}#loco.wrap .icon-eraser:before{content:"\e636"}#loco.wrap .icon-unlock:before{content:"\e616"}#loco.wrap .icon-apple:before{content:"\e60b"}#loco.wrap .icon-android:before{content:"\e60a"}#loco.wrap .icon-back:before{content:"\2b05"}#loco.wrap .icon-next:before{content:"\2794"}#loco.wrap .icon-arrow-up:before{content:"\f062"}#loco.wrap .icon-ccard:before{content:"\f09d"}#loco.wrap .icon-caret-left:before{content:"\25c0"}#loco.wrap .icon-pro:before{content:"\26a1"}#loco.wrap .icon-bell:before{content:"\f0f3"}#loco.wrap .icon-code:before{content:"\f121"}#loco.wrap .icon-privacy:before{content:"\1f6e1"}#loco.wrap .icon-hellip:before{content:"\2026"}#loco.wrap .icon-vellip:before{content:"\205e"}#loco.wrap .icon-collapse:before{content:"\f147"}#loco.wrap .icon-expand:before{content:"\f196"}#loco.wrap .icon-wordpress:before{content:"\f19a"}#loco.wrap .icon-database:before{content:"\f1c0"}#loco.wrap .icon-restore:before{content:"\f1da"}#loco.wrap .icon-pilcrow:before{content:"\b6"}#loco.wrap .icon,#loco.wrap .has-icon:before,#loco.wrap .has-dashicon:before{speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco.wrap .icon,#loco.wrap .has-icon:before{font-family:'loco'}#loco.wrap .has-dashicon:before{font-family:'dashicons';font-size:1.4em}#loco.wrap .has-icon:before,#loco.wrap .has-dashicon:before,#loco.wrap .has-icon>span{display:inline-block;vertical-align:middle}#loco.wrap .only-icon{text-align:center}#loco.wrap .only-icon:before{text-align:center}#loco.wrap .only-icon span{display:none}#loco.wrap a,#loco.wrap .wp-core-ui .button-link{text-decoration:none}#loco.wrap h3:hover>a.loco-anchor{color:#ccc}#loco.wrap h3:hover>a.loco-anchor:before{content:"\B6"}#loco.wrap .has-lang>span{display:inline-block;vertical-align:middle}#loco.wrap a.has-lang:hover>span:last-child{text-decoration:underline}#loco.wrap h1 ul,#loco.wrap h1 li{margin:0;padding:0}#loco.wrap h1 li{display:inline-block}#loco.wrap h1 li:after{content:"/";color:#999;text-shadow:none;display:inline-block}#loco.wrap h1 li:last-child:after{content:""}#loco.wrap h1 li:last-child a{color:inherit;pointer-events:none;cursor:auto}#loco.wrap h2 span{color:#999;font-weight:normal}#loco.wrap h2 .loco-meta,#loco.wrap h3 .loco-meta{color:inherit;font-size:14px;font-weight:normal;vertical-align:middle}#loco.wrap .wp-list-table td:first-child .icon{width:16px;display:inline-block;text-align:center}#loco.wrap .wp-list-table td{white-space:nowrap}#loco.wrap .wp-list-table td>a,#loco.wrap .wp-list-table td>time{display:inline-block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis}#loco.wrap .wp-list-table th.loco-sort{cursor:pointer}#loco.wrap .wp-list-table th.loco-sort:hover{color:#000}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after,#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{padding:0 0 0 4px;color:#999}#loco.wrap .wp-list-table th.loco-sort.loco-desc:after{content:"\25bc"}#loco.wrap .wp-list-table th.loco-sort.loco-asc:after{content:"\25b2"}#loco.wrap .wp-list-table td.has-row-actions{overflow:visible}#loco.wrap form.loco-filter{display:block;margin-bottom:5px}#loco.wrap form.loco-filter .icon-filter{color:#999}#loco.wrap nav.above-list-table{margin-bottom:1em}#loco.wrap nav.above-list-table a{display:inline-block;margin-right:1em}#loco.wrap .wp-core-ui button.inverted,#loco.wrap .wp-core-ui button.inverted:hover{background:-moz-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:-webkit-linear-gradient(top, #ccc 0%, #e0e0e0 5%, #fefefe 100%);background:linear-gradient(to bottom, #ccc 0%, #e0e0e0 5%, #fefefe 100%);-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;border-color:#bbb}#loco.wrap .wp-core-ui button:active,#loco.wrap .wp-core-ui button.inverted:active{border-color:#5b9dd9}#loco.wrap .loco-clearable{display:inline-block;vertical-align:middle;position:relative}#loco.wrap .loco-clearable a.clear,#loco.wrap .auto-comp-wrap a.clear{top:0;right:0;outline:none;margin:0;border:solid 1px transparent;padding:5px 5px;position:absolute;font-size:1em;line-height:normal}#loco.wrap .loco-clearable a.clear:before,#loco.wrap .auto-comp-wrap a.clear:before{vertical-align:middle;padding:0;color:#999}#loco.wrap .loco-clearable a.clear:hover:before,#loco.wrap .auto-comp-wrap a.clear:hover:before{color:#333}#loco.wrap .loco-clearable a.clear span,#loco.wrap .auto-comp-wrap a.clear span{display:none}#loco.wrap .loco-clearable ::-ms-clear,#loco.wrap .auto-comp-wrap ::-ms-clear{display:none}#loco.wrap div.progress{color:#000;background:transparent !important}#loco.wrap div.progress *{height:100%;overflow:hidden;white-space:nowrap}#loco.wrap div.progress .t{background-color:#ddd;border:1px solid #ccc}#loco.wrap div.progress .t .bar{float:left;clear:none;background-color:#3db63d}#loco.wrap div.progress .t .bar.f{background-color:#bd2c00}#loco.wrap div.progress .l{display:block}#loco.wrap td div.progress .t{border:none}#loco.wrap td div.progress .l{display:none}#loco.wrap code.path{color:#333;margin:0;padding:0;display:inline;background:transparent}#loco.wrap .loco-danger{color:#d54e21}#loco.wrap .notice,#loco.wrap .panel{background:#fff;position:relative;margin:1em 0;padding:1px 12px}#loco.wrap .notice-generic{border-color:#ddd}#loco.wrap .notice-success>.has-icon,#loco.wrap .notice-success p>strong.has-icon{color:#000}#loco.wrap .notice-warning{border-color:#FFA500}#loco.wrap .notice-error{border-color:#dc3232}#loco.wrap .notice-debug{border-color:#00a0d2}#loco.wrap .notice-danger{border-color:#dc3232}#loco.wrap .notice-locked{border-color:#FFA500}#loco.wrap .notice>.has-icon:before,#loco.wrap .notice p>strong.has-icon:before{padding-right:6px}#loco.wrap .notice>p>a.button.has-icon:before{width:1.5em}#loco.wrap .notice>p>em{color:#d54e21;font-style:normal}#loco.wrap .notice>p>em a{color:inherit}#loco.wrap .notice>p a:hover,#loco.wrap .notice>nav a:hover{text-decoration:underline}#loco.wrap .notice>p a.button,#loco.wrap .notice>nav a.button{text-decoration:inherit}#loco.wrap .notice.has-nav{display:flex;flex-direction:row}#loco.wrap .notice.has-nav p,#loco.wrap .notice.has-nav nav{line-height:22px;flex-grow:1}#loco.wrap .notice.has-nav nav{text-align:right;padding:2px;margin:.5em 0}#loco.wrap .notice.has-nav.is-dismissible{padding-right:38px}#loco.wrap .notice.has-nav a{font-size:12px;white-space:nowrap}#loco.wrap .notice.has-nav nav>span{color:#666}#loco.wrap .notice>h3>span{display:inline-block;vertical-align:middle}#loco.wrap ul.problems li{font-style:italic}#loco.wrap label{position:relative}#loco.wrap label.for-disabled,#loco.wrap label.for-disabled>input{cursor:default !important}#loco.wrap input.regular-text,#loco.wrap textarea.regular-text{width:25em}#loco.wrap .button-link{padding:0 10px 1px}#loco.wrap .button-danger{background:#ba0000;border-color:#990000 #660000 #660000;-webkit-box-shadow:0 1px 0 #600;-moz-box-shadow:0 1px 0 #600;box-shadow:0 1px 0 #600;color:#fff;text-shadow:0 -1px 1px #660000, 1px 0 1px #660000, 0 1px 1px #660000, -1px 0 1px #660000}#loco.wrap .button-success{background:#00B500;border-color:#090 #2e892e #2e892e;-webkit-box-shadow:0 1px 0 #2e892e;-moz-box-shadow:0 1px 0 #2e892e;box-shadow:0 1px 0 #2e892e;color:#fff;text-shadow:0 -1px 1px #2e892e,1px 0 1px #2e892e,0 1px 1px #2e892e,-1px 0 1px #2e892e}#loco.wrap .button-success:hover{background:#3db63d}#loco.wrap form button.loco-loading.button-large{padding-left:0}#loco.wrap form button.loco-loading.button-large:before{width:16px;height:16px;margin:0 4px;content:" ";font-size:16px;line-height:1;display:inline-block;vertical-align:sub}#loco.wrap ::-webkit-input-placeholder{color:#ccc}#loco.wrap :-moz-placeholder{color:#ccc;opacity:1}#loco.wrap ::-moz-placeholder{color:#ccc;opacity:1}#loco.wrap :-ms-input-placeholder{color:#ccc}#loco.wrap .ielt10 .placeheld{color:#ccc}#loco.wrap a.has-raquo:after{content:"\A0\BB"}#loco.wrap a.has-laquo:before{content:"\AB\A0"}#loco.wrap span.inline-spinner{display:inline-block;min-width:16px;min-height:16px;background:transparent url(../img/spin-modal.gif) 0 0 no-repeat}.js #wpbody-content>.notice{display:none}.js #wpbody-content>.notice.inline{display:block}.js #loco.wrap .jshide{display:none !important}#loco.wrap .invis{visibility:hidden}.form-table tr{vertical-align:top}.form-table tr.compact td{padding-top:0}.loco-modal.request-filesystem-credentials-dialog{top:15% !important;max-height:85% !important}.loco-modal.request-filesystem-credentials-dialog>.ui-dialog-content{background:inherit}.loco-modal.request-filesystem-credentials-dialog .ftp-password>label>em:last-child{display:none}.ui-dialog-content>div.loco-loading{height:100%;background:transparent url(../img/spin-modal.gif) center 20px no-repeat}#loco-credit>*{vertical-align:middle}#loco-credit>a{display:inline-block;position:relative;overflow:hidden;background:transparent url(../img/logo-foot.gif) 0 0 no-repeat;height:30px;width:100px;text-indent:200px;-webkit-transition-duration:0s;transition-duration:0s}#loco-credit>a:hover{background-position:0 -35px}#loco-content{position:relative}#footer-upgrade span:before{color:#CCC;content:" | ";display:inline;padding-left:0.5em;padding-right:0.5em}#footer-upgrade span:first-child:before{content:"";display:none}.loco-clearfix:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}dl.debug dt{font-weight:bold}dl.debug dt,dl.debug dd{white-space:pre}.wrap #loco-editor .is-table .wg-tr:nth-child(even){background-color:rgba(0,115,170,0.05)}.wrap #loco-editor .wg-split-x>nav.wg-tabs>a.active,.wrap #loco-editor .is-table .wg-cols>div>div.selected{background-color:#0073aa}.wrap #loco-editor .is-editable>.wg-content>textarea:focus,.wrap #loco-editor .is-editable>.wg-content.has-focus .ace_scroller,.wrap #loco-editor .is-editable>.wg-content.has-focus .mce-content-body{border-color:#5b9dd9;-webkit-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);-moz-box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8);box-shadow:inset 0 0 0.6em rgba(30,140,190,0.8)}form button.loco-loading.button-primary[disabled]:before{background:transparent url(../img/skins/fresh/spin-primary-button.gif) 0 0 no-repeat !important}
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.1.3);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.1.3) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.1.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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor div.ta-mirror{position:absolute;top:0;border:solid 1px transparent;color:transparent;padding:0.4em 0.6em;pointer-events:none}#loco-editor div.ta-mirror span{position:relative}#loco-editor div.ta-mirror span:after{color:#ccc;white-space:pre;display:inline-block;position:absolute;top:0;line-height:normal}#loco-editor div.ta-mirror .crlf:after{content:"\00AC"}#loco-editor div.ta-mirror .eof:after{content:"\00B6"}#loco-editor div.ta-mirror .x20:after{content:"\00B7";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"\27F6"}#loco-editor div.ta-mirror,#loco-editor .has-mirror textarea{white-space:pre-wrap;word-wrap:break-word;word-spacing:0px}#loco-editor .has-mirror ::-webkit-input-placeholder{color:transparent}#loco-editor .has-mirror :-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror ::-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror :-ms-input-placeholder{color:transparent}#loco-editor .has-mirror .ielt10 .placeheld{color:transparent}#loco-editor div.ta-mirror{left:0;text-align:left}#loco-editor div.ta-mirror span:after{left:0}#loco-editor div.ta-mirror .eol:after{padding-left:0.2em}#loco-editor [dir="RTL"] div.ta-mirror{left:auto;right:0;text-align:right}#loco-editor [dir="RTL"] div.ta-mirror span:after{right:0}#loco-editor [dir="RTL"] div.ta-mirror .eol:after{padding-left:0;padding-right:0.2em}#loco-editor .has-proxy>textarea{display:none !important}#loco-editor .has-proxy .ace_editor{height:100%;font-size:13px !important;line-height:1.4 !important}#loco-editor .has-proxy .ace_editor .ace_marker-layer .ace_bracket{display:none}#loco-editor .has-proxy .ace_print-margin{display:none}#loco-editor .ace_printf{color:#b90690;background-color:#edf1be}#loco-editor .ace_locked{color:#808080}#loco-editor .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.1.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.1.3);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif?v=2.1.3) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif?v=2.1.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 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor .wg-cell,#loco-editor .wg-cell>div{clear:both;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;outline:none}#loco-editor .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}#loco-editor .wg-split{background:#eee}#loco-editor .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}#loco-editor .wg-split-x>div>.not-first>*{margin-left:6px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:6px}#loco-editor .wg-split>div>.has-title .wg-content{margin-top:0}#loco-editor .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}#loco-editor .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}#loco-editor .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}#loco-editor .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png?v=2.1.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.1.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:"\25b2"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"\25bc"}#loco-editor .is-table .wg-thead .wg-sortable:hover>header:after{color:#000}#loco-editor .is-field>.wg-content{cursor:text;padding:0;line-height:normal;overflow:hidden;overflow-y:hidden}#loco-editor .is-field>.wg-content>div,#loco-editor .is-field>.wg-content>textarea{font-size:14px;line-height:1.4;border:1px solid #ddd;width:100%;height:100%;padding:8px 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-editor .is-field>.wg-content textarea{resize:none;overflow:auto;display:block}#loco-editor .is-field>.wg-content>.ace_editor{padding:0;border-width:0}#loco-editor .is-field>.wg-content>div[contenteditable]{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-readonly>.wg-content{cursor:default}#loco-editor .is-readonly>.wg-content>div,#loco-editor .is-readonly>.wg-content>textarea,#loco-editor .is-readonly>.wg-content>textarea[readonly]{background:#f8f8f8;text-shadow:0 1px #fff;color:inherit}#loco-editor .is-readonly>.wg-content .ace_scroller{cursor:default;background:#f8f8f8}#loco-editor .is-readonly>.wg-content .ace_cursor-layer{display:none}#loco-editor .is-editable>.wg-content[dir="RTL"] .ace_editor .ace_line{direction:ltr;unicode-bidi:bidi-override}#loco-editor .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center;cursor:default}#loco-editor .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:0.5em 1em;margin-top:0.2em;color:#000;text-decoration:none;-webkit-border-radius:0.2em 0.2em 0 0;-moz-border-radius:0.2em 0.2em 0 0;-ms-border-radius:0.2em 0.2em 0 0;-o-border-radius:0.2em 0.2em 0 0;border-radius:0.2em 0.2em 0 0;background-color:#f3f7fd}#loco-editor .wg-split-x>nav.wg-tabs>a:hover{background-color:#fff}#loco-editor .wg-split-x>nav.wg-tabs>a.active{background-color:#3db63d;color:#fff}#loco-editor .wg-split>div>.has-nav>.wg-body{margin-top:0px}#loco-editor .wg-dead{visibility:hidden}@media all and (max-width: 768px){#loco-editor .wg-split-x>div>.not-first>*{margin-left:20px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:20px}#loco-editor .wg-split-x>div>.not-first:before{width:20px}#loco-editor .wg-split-y>div>.not-first:before{height:20px}#loco-editor .is-table .wg-thead header{padding-left:20px}}#loco-editor .is-table .po-fuzzy{color:#b59829;font-weight:bold}#loco-editor .is-table .po-empty{color:#1f507a;font-weight:bold}#loco-editor .is-table .po-flagged{color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div:before{font-family:loco;vertical-align:inherit;display:inline-block;content:" ";width:1.3em;line-height:1}#loco-editor .is-table .wg-cols>div:first-child>div.po-flagged:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-2:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-3:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-fuzzy:before,#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-4:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-5:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-6:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-comment:before{content:"\e613";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"\e612";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .is-table .wg-cols>div>div.selected.po-flagged{background-color:#bd2c00}#loco-editor .is-table .wg-cols>div>div.selected.po-fuzzy{background-color:#b59829}#loco-editor .is-table .wg-cols>div>div.selected.po-empty{background-color:#999}#loco-editor #po-list .wg-content{padding:0}#loco-editor #po-source>.wg-body>.has-title>header{background:transparent;font-weight:normal;float:left;clear:none;min-width:3.4em}#loco-editor #po-source>.wg-body>.has-title>.wg-content{clear:none}#loco-editor .wg-cell>p.notes,#loco-editor .wg-cell>p.errors{font-size:13px;margin:0;padding:5px 10px;cursor:default !important}#loco-editor .wg-cell>p.notes{color:#333}#loco-editor .wg-cell>p.errors{color:#cc0000}#loco-editor .has-title>header{font-weight:bold;line-height:1.2em;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:4px 6px}#loco-editor .has-title>header .lang{margin-right:6px;margin-bottom:1px}#loco-editor .trg-rtl #po-list-tbody .wg-cols>div[for="po-list-col-target"]>div,#loco-editor .src-rtl #po-list-tbody .wg-cols>div[for="po-list-col-source"]>div{direction:rtl;padding-left:0;padding-right:10px;text-align:right}#loco-editor #po-source>.wg-body>.has-title>h2{min-width:4.5em}#loco-editor .is-table .wg-td{font-size:13px}#loco-editor-inner{min-height:600px;font-size:14px;clear:both}#loco-editor-inner>div.loco-loading{height:100px;background:transparent url(../img/spin-editor-button.gif?v=2.1.3) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco.wrap #loco-toolbar{font-size:14px;height:50px}#loco.wrap #loco-toolbar form{display:block;float:left;clear:none;padding:0;margin:0}#loco.wrap #loco-toolbar form.aux{float:right;margin-right:5px}#loco.wrap #loco-toolbar fieldset{display:block;position:relative;float:left;clear:none}#loco.wrap #loco-toolbar button,#loco.wrap #loco-toolbar input[type="text"]{display:block;position:relative;float:left;clear:none;margin:5px 0 0 5px;height:36px;text-align:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco.wrap #loco-toolbar input[type="text"]{padding:0 10px;font-size:14px;line-height:normal}#loco.wrap #loco-toolbar .invalid input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap #loco-toolbar .loco-clearable{padding:0 20px}#loco.wrap #loco-toolbar .loco-clearable.invalid a.clear:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear{right:25px;line-height:2}#loco.wrap #loco-toolbar .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar .loco-clearable a.clear:hover:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear:active:before{color:#000}#loco.wrap #loco-toolbar button{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar button.has-icon:before{width:16px;padding:0}#loco.wrap #loco-toolbar button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif?v=2.1.3) 0 0 no-repeat}#loco.wrap #loco-toolbar button.only-icon{width:40px}
1
+ #loco-editor{border:solid 1px #ccc}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor div.ta-mirror{position:absolute;top:0;border:solid 1px transparent;color:transparent;padding:0.4em 0.6em;pointer-events:none}#loco-editor div.ta-mirror span{position:relative}#loco-editor div.ta-mirror span:after{color:#ccc;white-space:pre;display:inline-block;position:absolute;top:0;line-height:normal}#loco-editor div.ta-mirror .crlf:after{content:"\00AC"}#loco-editor div.ta-mirror .eof:after{content:"\00B6"}#loco-editor div.ta-mirror .x20:after{content:"\00B7";color:#aaa}#loco-editor div.ta-mirror .x9:after{content:"\27F6"}#loco-editor div.ta-mirror,#loco-editor .has-mirror textarea{white-space:pre-wrap;word-wrap:break-word;word-spacing:0px}#loco-editor .has-mirror ::-webkit-input-placeholder{color:transparent}#loco-editor .has-mirror :-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror ::-moz-placeholder{color:transparent;opacity:1}#loco-editor .has-mirror :-ms-input-placeholder{color:transparent}#loco-editor .has-mirror .ielt10 .placeheld{color:transparent}#loco-editor div.ta-mirror{left:0;text-align:left}#loco-editor div.ta-mirror span:after{left:0}#loco-editor div.ta-mirror .eol:after{padding-left:0.2em}#loco-editor [dir="RTL"] div.ta-mirror{left:auto;right:0;text-align:right}#loco-editor [dir="RTL"] div.ta-mirror span:after{right:0}#loco-editor [dir="RTL"] div.ta-mirror .eol:after{padding-left:0;padding-right:0.2em}#loco-editor .has-proxy>textarea{display:none !important}#loco-editor .has-proxy .ace_editor{height:100%;font-size:13px !important;line-height:1.4 !important}#loco-editor .has-proxy .ace_editor .ace_marker-layer .ace_bracket{display:none}#loco-editor .has-proxy .ace_print-margin{display:none}#loco-editor .ace_printf{color:#b90690;background-color:#edf1be}#loco-editor .ace_locked{color:#808080}#loco-editor .resizer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0 6px 0;background:#f0f0f0 url(../img/wg/splity.png) center bottom no-repeat;border:1px solid #ddd;overflow:hidden;cursor:move;cursor:row-resize;cursor:s-resize}#loco-editor .resizer>*{height:100%;border:none}#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2.gif);background-repeat:no-repeat;min-height:16px}#loco-editor ._ajax_loader_f2x4{background:transparent url(../img/ajax-loader-f2-x4.gif) 0 0 no-repeat;min-height:75px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2 / 1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){#loco-editor ._ajax_loader_f2{background-image:url(../img/ajax-loader-f2-x2.gif);background-size:16px}}#loco-editor ._green_glow_inner,#loco-editor .is-editable>.wg-content>textarea:focus,#loco-editor .is-editable>.wg-content.has-focus .ace_scroller,#loco-editor .is-editable>.wg-content.has-focus .wysihtml-editor,#loco-editor .is-editable>.wg-content.has-focus .mce-content-body{-webkit-box-shadow:inset 0 0 10px 0 #3db63d;-moz-box-shadow:inset 0 0 10px 0 #3db63d;box-shadow:inset 0 0 10px 0 #3db63d}#loco-editor ._green_glow_outer{-webkit-box-shadow:0 0 0.5em 0 #3db63d;-moz-box-shadow:0 0 0.5em 0 #3db63d;box-shadow:0 0 0.5em 0 #3db63d}#loco-editor .loco-font,#loco-editor .is-table .wg-thead .wg-sortable>header:after{font-family:'loco';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#loco-editor .wg-cell,#loco-editor .wg-cell>div{clear:both;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;outline:none}#loco-editor .wg-cell{left:0;top:0;padding:0;margin:0;overflow:hidden}#loco-editor .wg-split{background:#eee}#loco-editor .wg-body:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}#loco-editor .wg-split-x>div>.not-first>*{margin-left:6px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:6px}#loco-editor .wg-split>div>.has-title .wg-content{margin-top:0}#loco-editor .wg-split-x>div>.wg-cell{float:left;clear:none;height:100%}#loco-editor .wg-split-x>div{cursor:move;cursor:ew-resize;cursor:col-resize}#loco-editor .wg-split>div>.not-first:before{display:block;position:absolute;overflow:hidden;content:" "}#loco-editor .wg-split-x>div>.not-first:before{width:6px;height:100%;background:transparent url(../img/wg/splitx.png) center center no-repeat}#loco-editor .wg-split-y>div{cursor:move;cursor:ns-resize;cursor:row-resize}#loco-editor .wg-split-y>div>.not-first:before{height:6px;width:100%;background:transparent url(../img/wg/splity.png) center center no-repeat}#loco-editor .wg-split>div.locked{cursor:default}#loco-editor .wg-split-x>div.locked>.not-first>*{margin-left:0px}#loco-editor .wg-split-y>div.locked>.not-first>*{margin-top:0px}#loco-editor .wg-split>div.locked>.not-first:before{display:none}#loco-editor .has-title>header{background:#e2e2e2;cursor:default !important;margin:0;white-space:nowrap}#loco-editor .wg-content{background:#fff;cursor:default;padding:4px 6px;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco-editor .wg-toolbar{top:0;right:0;margin-top:6px;position:absolute}#loco-editor .wg-toolbar>span{color:#fff;background:#000;display:block;padding:0 6px;cursor:default !important}#loco-editor .wg-toolbar>span:active{color:#000;background-color:#fff}#loco-editor .wg-content,#loco-editor .wg-tbody>div{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-table{background-color:#fff}#loco-editor .is-table .wg-thead .has-title>header{font-weight:normal;background:transparent;padding:4px 0;margin:0 0 0 10px}#loco-editor .is-table .wg-thead>div>.not-first:before{background-position:center center}#loco-editor .is-table .wg-thead{background:#e2e2e2;border-bottom:solid 1px #ccc}#loco-editor .is-table .wg-tbody{background-image:url(data:image/gif;base64,R0lGODlhAQAsAIABAPz8/P///yH5BAEAAAEALAAAAAABACwAAAIIjI+pAe0PIygAOw==);position:relative}#loco-editor .is-table .wg-cols>div{float:left;clear:none}#loco-editor .is-table .wg-cols>div>div{white-space:nowrap;line-height:1.7em;padding-left:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;background-color:#fff}#loco-editor .is-table .wg-cols>div>div:nth-child(even){background-color:#f7f7f7}#loco-editor .is-table .wg-cols>div>div.selected{background-color:#3db63d;color:#fff}#loco-editor .is-table .wg-cols>div>div.selected::selection{background-color:#fff;color:#000}#loco-editor .is-table .wg-cols>div:first-child>div{padding-left:4px}#loco-editor .is-table .wg-dead{clear:both}#loco-editor .is-table .wg-thead .wg-sortable>header{cursor:pointer !important}#loco-editor .is-table .wg-thead .wg-sortable>header:after{padding:0 0 0 5px;color:#999}#loco-editor .is-table .wg-thead .wg-sortable.wg-asc>header:after{content:"\25b2"}#loco-editor .is-table .wg-thead .wg-sortable.wg-desc>header:after{content:"\25bc"}#loco-editor .is-table .wg-thead .wg-sortable:hover>header:after{color:#000}#loco-editor .is-field>.wg-content{cursor:text;padding:0;line-height:normal;overflow:hidden;overflow-y:hidden}#loco-editor .is-field>.wg-content>div,#loco-editor .is-field>.wg-content>textarea{font-size:14px;line-height:1.4;border:1px solid #ddd;width:100%;height:100%;padding:8px 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}#loco-editor .is-field>.wg-content textarea{resize:none;overflow:auto;display:block}#loco-editor .is-field>.wg-content>.ace_editor{padding:0;border-width:0}#loco-editor .is-field>.wg-content>div[contenteditable]{overflow:scroll;overflow-x:hidden;overflow-y:auto}#loco-editor .is-readonly>.wg-content{cursor:default}#loco-editor .is-readonly>.wg-content>div,#loco-editor .is-readonly>.wg-content>textarea,#loco-editor .is-readonly>.wg-content>textarea[readonly]{background:#f8f8f8;text-shadow:0 1px #fff;color:inherit}#loco-editor .is-readonly>.wg-content .ace_scroller{cursor:default;background:#f8f8f8}#loco-editor .is-readonly>.wg-content .ace_cursor-layer{display:none}#loco-editor .is-editable>.wg-content[dir="RTL"] .ace_editor .ace_line{direction:ltr;unicode-bidi:bidi-override}#loco-editor .wg-split-x>nav.wg-tabs{white-space:nowrap;text-align:center;cursor:default}#loco-editor .wg-split-x>nav.wg-tabs>a{display:inline-block;padding:0.5em 1em;margin-top:0.2em;color:#000;text-decoration:none;-webkit-border-radius:0.2em 0.2em 0 0;-moz-border-radius:0.2em 0.2em 0 0;-ms-border-radius:0.2em 0.2em 0 0;-o-border-radius:0.2em 0.2em 0 0;border-radius:0.2em 0.2em 0 0;background-color:#f3f7fd}#loco-editor .wg-split-x>nav.wg-tabs>a:hover{background-color:#fff}#loco-editor .wg-split-x>nav.wg-tabs>a.active{background-color:#3db63d;color:#fff}#loco-editor .wg-split>div>.has-nav>.wg-body{margin-top:0px}#loco-editor .wg-dead{visibility:hidden}@media all and (max-width: 768px){#loco-editor .wg-split-x>div>.not-first>*{margin-left:20px}#loco-editor .wg-split-y>div>.not-first>*{margin-top:20px}#loco-editor .wg-split-x>div>.not-first:before{width:20px}#loco-editor .wg-split-y>div>.not-first:before{height:20px}#loco-editor .is-table .wg-thead header{padding-left:20px}}#loco-editor .is-table .po-fuzzy{color:#b59829;font-weight:bold}#loco-editor .is-table .po-empty{color:#1f507a;font-weight:bold}#loco-editor .is-table .po-flagged{color:#bd2c00}#loco-editor .is-table .wg-cols>div:first-child>div:before{font-family:loco;vertical-align:inherit;display:inline-block;content:" ";width:1.3em;line-height:1}#loco-editor .is-table .wg-cols>div:first-child>div.po-flagged:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-2:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-3:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-fuzzy:before,#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-4:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-5:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-flag-6:before{content:""}#loco-editor .is-table .wg-cols>div:first-child>div.po-comment:before{content:"\e613";color:#999}#loco-editor .is-table .wg-cols>div:first-child>div.po-unsaved:before{content:"\e612";color:#f1d040}#loco-editor .is-table .wg-cols>div:first-child>div.selected:before{color:#fff !important}#loco-editor .is-table .wg-cols>div>div.selected.po-flagged{background-color:#bd2c00}#loco-editor .is-table .wg-cols>div>div.selected.po-fuzzy{background-color:#b59829}#loco-editor .is-table .wg-cols>div>div.selected.po-empty{background-color:#999}#loco-editor #po-list .wg-content{padding:0}#loco-editor #po-source>.wg-body>.has-title>header{background:transparent;font-weight:normal;float:left;clear:none;min-width:3.4em}#loco-editor #po-source>.wg-body>.has-title>.wg-content{clear:none}#loco-editor .wg-cell>p.notes,#loco-editor .wg-cell>p.errors{font-size:13px;margin:0;padding:5px 10px;cursor:default !important}#loco-editor .wg-cell>p.notes{color:#333}#loco-editor .wg-cell>p.errors{color:#cc0000}#loco-editor .has-title>header{font-weight:bold;line-height:1.2em;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:4px 6px}#loco-editor .has-title>header .lang{margin-right:6px;margin-bottom:1px}#loco-editor .trg-rtl #po-list-tbody .wg-cols>div[for="po-list-col-target"]>div,#loco-editor .src-rtl #po-list-tbody .wg-cols>div[for="po-list-col-source"]>div{direction:rtl;padding-left:0;padding-right:10px;text-align:right}#loco-editor #po-source>.wg-body>.has-title>h2{min-width:4.5em}#loco-editor .is-table .wg-td{font-size:13px}#loco-editor-inner{min-height:600px;font-size:14px;clear:both}#loco-editor-inner>div.loco-loading{height:100px;background:transparent url(../img/spin-editor-button.gif) center 20px no-repeat}#loco-editor-inner h2{color:#000;line-height:1}#loco.wrap #loco-toolbar{font-size:14px;height:50px}#loco.wrap #loco-toolbar form{display:block;float:left;clear:none;padding:0;margin:0}#loco.wrap #loco-toolbar form.aux{float:right;margin-right:5px}#loco.wrap #loco-toolbar fieldset{display:block;position:relative;float:left;clear:none}#loco.wrap #loco-toolbar button,#loco.wrap #loco-toolbar input[type="text"]{display:block;position:relative;float:left;clear:none;margin:5px 0 0 5px;height:36px;text-align:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#loco.wrap #loco-toolbar input[type="text"]{padding:0 10px;font-size:14px;line-height:normal}#loco.wrap #loco-toolbar .invalid input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap #loco-toolbar .loco-clearable{padding:0 20px}#loco.wrap #loco-toolbar .loco-clearable.invalid a.clear:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear{right:25px;line-height:2}#loco.wrap #loco-toolbar .loco-clearable a.clear:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar .loco-clearable a.clear:hover:before{color:#cc0000}#loco.wrap #loco-toolbar .loco-clearable a.clear:active:before{color:#000}#loco.wrap #loco-toolbar button{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#loco.wrap #loco-toolbar button.has-icon:before{width:16px;padding:0}#loco.wrap #loco-toolbar button.has-icon.loco-loading:before{content:" ";height:16px;background:transparent url(../img/spin-editor-button.gif) 0 0 no-repeat}#loco.wrap #loco-toolbar button.only-icon{width:40px}
pub/css/podiff.css CHANGED
@@ -1 +1 @@
1
- #loco.wrap .revisions-diff{padding:10px;min-height:20px}#loco.wrap table.diff{border-collapse:collapse}#loco.wrap table.diff td{white-space:nowrap;overflow:hidden;font:normal 12px/17px 'Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro',monospace;padding:2px}#loco.wrap table.diff td>span{color:#aaa}#loco.wrap table.diff td>span:after{content:". "}#loco.wrap table.diff tbody{border-top:1px dashed #ccc}#loco.wrap table.diff tbody:first-child{border-top:none}#loco.wrap .revisions.loading .diff-meta{color:#eee}#loco.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif?v=2.1.3) center center no-repeat}#loco.wrap .revisions-meta{clear:both;padding:10px 12px;margin:0;position:relative;top:10px}#loco.wrap .revisions-meta .diff-meta{clear:none;float:left;width:50%;padding:0;min-height:auto}#loco.wrap .revisions-meta .diff-meta button{margin-top:5px}#loco.wrap .revisions-meta .diff-meta-current{float:right;text-align:right}#loco.wrap .revisions-meta time{color:#72777c}#loco.wrap .revisions-control-frame{margin:10px 0}#loco.wrap .revisions-diff-frame{margin-top:20px}
1
+ #loco.wrap .revisions-diff{padding:10px;min-height:20px}#loco.wrap table.diff{border-collapse:collapse}#loco.wrap table.diff td{white-space:nowrap;overflow:hidden;font:normal 12px/17px 'Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro',monospace;padding:2px}#loco.wrap table.diff td>span{color:#aaa}#loco.wrap table.diff td>span:after{content:". "}#loco.wrap table.diff tbody{border-top:1px dashed #ccc}#loco.wrap table.diff tbody:first-child{border-top:none}#loco.wrap .revisions.loading .diff-meta{color:#eee}#loco.wrap .revisions.loading .loading-indicator span.spinner{visibility:visible;background:#fff url(../img/spin-modal.gif) center center no-repeat}#loco.wrap .revisions-meta{clear:both;padding:10px 12px;margin:0;position:relative;top:10px}#loco.wrap .revisions-meta .diff-meta{clear:none;float:left;width:50%;padding:0;min-height:auto}#loco.wrap .revisions-meta .diff-meta button{margin-top:5px}#loco.wrap .revisions-meta .diff-meta-current{float:right;text-align:right}#loco.wrap .revisions-meta time{color:#72777c}#loco.wrap .revisions-control-frame{margin:10px 0}#loco.wrap .revisions-diff-frame{margin-top:20px}
pub/css/poview.css CHANGED
@@ -1 +1 @@
1
- #loco.wrap #loco-po{padding-right:0;overflow:auto}#loco.wrap #loco-po.loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif?v=2.1.3) center center no-repeat}#loco.wrap #loco-po.loco-loading ol.msgcat{display:none}#loco.wrap ol.msgcat{margin-left:3em;padding-top:1em;border-top:1px dashed #ccc}#loco.wrap ol.msgcat:first-child{padding-top:0;border-top:none}#loco.wrap ol.msgcat li{color:#aaa;margin:0;padding:0 0 0 1em;font:normal 12px/17px 'Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro',monospace;border-left:1px solid #EEE}#loco.wrap ol.msgcat li>*{color:#333;white-space:pre}#loco.wrap ol.msgcat li>.po-comment{color:#3CC200}#loco.wrap ol.msgcat li>.po-refs{color:#0073aa}#loco.wrap ol.msgcat li>.po-refs a{color:inherit;text-decoration:none}#loco.wrap ol.msgcat li>.po-refs a:hover{text-decoration:underline}#loco.wrap ol.msgcat li>.po-flags{color:#77904a}#loco.wrap ol.msgcat li>.po-flags em{font-style:normal}#loco.wrap ol.msgcat li>.po-word{color:#000}#loco.wrap ol.msgcat li>.po-junk{font-style:italic;color:#CCC}#loco.wrap ol.msgcat li>.po-string>span{color:#C931C7}#loco.wrap form.loco-filter{top:0;right:0;position:absolute}#loco.wrap .loco-invalid form.loco-filter input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap .loco-invalid ol.msgcat{list-style-type:none}#loco.wrap .loco-invalid ol.msgcat li{color:#000}.loco-modal{min-width:90% !important;min-height:100px}#loco-po-ref ol li{color:#aaa;margin:0;white-space:pre;padding:0 0 0 1em;font:normal 12px/17px Consolas,Monaco,monospace;background:transparent;border-left:1px solid #EEE}#loco-po-ref ol li code{margin:0;padding:0;display:inline;background:inherit}#loco-po-ref ol li.highlighted{color:#666;background-color:#f8eec7}#loco-po-ref ol li.highlighted code.T_CONSTANT_ENCAPSED_STRING{color:#C931C7}
1
+ #loco.wrap #loco-po{padding-right:0;overflow:auto}#loco.wrap #loco-po.loco-loading{min-height:100px;background:#fff url(../img/spin-modal.gif) center center no-repeat}#loco.wrap #loco-po.loco-loading ol.msgcat{display:none}#loco.wrap ol.msgcat{margin-left:3em;padding-top:1em;border-top:1px dashed #ccc}#loco.wrap ol.msgcat:first-child{padding-top:0;border-top:none}#loco.wrap ol.msgcat li{color:#aaa;margin:0;padding:0 0 0 1em;font:normal 12px/17px 'Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro',monospace;border-left:1px solid #EEE}#loco.wrap ol.msgcat li>*{color:#333;white-space:pre}#loco.wrap ol.msgcat li>.po-comment{color:#3CC200}#loco.wrap ol.msgcat li>.po-refs{color:#0073aa}#loco.wrap ol.msgcat li>.po-refs a{color:inherit;text-decoration:none}#loco.wrap ol.msgcat li>.po-refs a:hover{text-decoration:underline}#loco.wrap ol.msgcat li>.po-flags{color:#77904a}#loco.wrap ol.msgcat li>.po-flags em{font-style:normal}#loco.wrap ol.msgcat li>.po-word{color:#000}#loco.wrap ol.msgcat li>.po-junk{font-style:italic;color:#CCC}#loco.wrap ol.msgcat li>.po-string>span{color:#C931C7}#loco.wrap form.loco-filter{top:0;right:0;position:absolute}#loco.wrap .loco-invalid form.loco-filter input[type="text"]:focus{border-color:#cc0000;-webkit-box-shadow:0 0 2px rgba(153,0,0,0.5);-moz-box-shadow:0 0 2px rgba(153,0,0,0.5);box-shadow:0 0 2px rgba(153,0,0,0.5)}#loco.wrap .loco-invalid ol.msgcat{list-style-type:none}#loco.wrap .loco-invalid ol.msgcat li{color:#000}.loco-modal{min-width:90% !important;min-height:100px}#loco-po-ref ol li{color:#aaa;margin:0;white-space:pre;padding:0 0 0 1em;font:normal 12px/17px Consolas,Monaco,monospace;background:transparent;border-left:1px solid #EEE}#loco-po-ref ol li code{margin:0;padding:0;display:inline;background:inherit}#loco-po-ref ol li.highlighted{color:#666;background-color:#f8eec7}#loco-po-ref ol li.highlighted code.T_CONSTANT_ENCAPSED_STRING{color:#C931C7}
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: timwhitlock
3
  Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, PO, MO, productivity, multilingual, internationalization
4
  Requires at least: 4.1
5
  Requires PHP: 5.2.4
6
- Tested up to: 4.9.5
7
- Stable tag: 2.1.3
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -75,6 +75,9 @@ Try our [Guides and Tutorials](https://localise.biz/wordpress/plugin#guides) and
75
  Please see [getting help with Loco Translate](https://localise.biz/wordpress/plugin/support) and note that personal support by email is not available for this plugin.
76
  Help is provided via the [plugin support forum](https://wordpress.org/support/plugin/loco-translate) only.
77
 
 
 
 
78
 
79
 
80
  == Screenshots ==
@@ -89,6 +92,10 @@ Help is provided via the [plugin support forum](https://wordpress.org/support/pl
89
 
90
  == Changelog ==
91
 
 
 
 
 
92
  = 2.1.3 =
93
  * Added loco_locale_name filter and updated locale data
94
  * Fixed editor column sorting to update as values change
@@ -253,7 +260,7 @@ Help is provided via the [plugin support forum](https://wordpress.org/support/pl
253
 
254
  == Upgrade Notice ==
255
 
256
- = 2.1.3 =
257
  * Various bug fixes and improvements
258
 
259
 
3
  Tags: translation, translators, localization, localisation, l10n, i18n, Gettext, PO, MO, productivity, multilingual, internationalization
4
  Requires at least: 4.1
5
  Requires PHP: 5.2.4
6
+ Tested up to: 4.9.6
7
+ Stable tag: 2.1.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
75
  Please see [getting help with Loco Translate](https://localise.biz/wordpress/plugin/support) and note that personal support by email is not available for this plugin.
76
  Help is provided via the [plugin support forum](https://wordpress.org/support/plugin/loco-translate) only.
77
 
78
+ = Is it GDPR compliant? =
79
+
80
+ Sure thing. See the [plugin privacy notice](https://localise.biz/wordpress/plugin/privacy).
81
 
82
 
83
  == Screenshots ==
92
 
93
  == Changelog ==
94
 
95
+ = 2.1.4 =
96
+ * Bumped WP compatibility to 4.9.6
97
+ * Hooked in privacy policy suggestion
98
+
99
  = 2.1.3 =
100
  * Added loco_locale_name filter and updated locale data
101
  * Fixed editor column sorting to update as values change
260
 
261
  == Upgrade Notice ==
262
 
263
+ = 2.1.4 =
264
  * Various bug fixes and improvements
265
 
266
 
src/admin/bundle/LocaleController.php CHANGED
@@ -125,7 +125,7 @@ class Loco_admin_bundle_LocaleController extends Loco_mvc_AdminController {
125
  }
126
 
127
  // files may be available for language even if not installed (i.e. no core files on disk)
128
- if( ! $installed || ! isset($translations['core']) ){
129
  Loco_error_AdminNotices::warn( __('No core translation files are installed for this language','loco-translate') )
130
  ->addLink('https://codex.wordpress.org/Installing_WordPress_in_Your_Language', __('Documentation','loco-translate') );
131
  }
125
  }
126
 
127
  // files may be available for language even if not installed (i.e. no core files on disk)
128
+ if( ! $installed || ! isset($translations['core']) && 'en_US' !== $tag ){
129
  Loco_error_AdminNotices::warn( __('No core translation files are installed for this language','loco-translate') )
130
  ->addLink('https://codex.wordpress.org/Installing_WordPress_in_Your_Language', __('Documentation','loco-translate') );
131
  }
src/admin/config/DebugController.php CHANGED
@@ -67,7 +67,7 @@ class Loco_admin_config_DebugController extends Loco_admin_config_BaseController
67
  'json' => json_decode('"\\u039f\\u039a \\u2713"'),
68
  'mbstring' => loco_check_extension('mbstring'),
69
  ) );
70
-
71
  // PHP / env memory settings:
72
  $memory = new Loco_mvc_PostParams( array(
73
  'WP_MEMORY_LIMIT' => $this->memory_size( loco_constant('WP_MEMORY_LIMIT') ),
@@ -75,8 +75,13 @@ class Loco_admin_config_DebugController extends Loco_admin_config_BaseController
75
  'PHP memory_limit' => $this->memory_size( ini_get('memory_limit') ),
76
  'PHP post_max_size' => $this->memory_size( ini_get('post_max_size') ),
77
  //'PHP upload_max_filesize' => $this->memory_size( ini_get('upload_max_filesize') ),
78
- 'PHP max_execution_time' => ini_get('max_execution_time') ?: '0',
79
  ) );
 
 
 
 
 
80
 
81
  // Ajaxing:
82
  $this->enqueueScript('debug');
67
  'json' => json_decode('"\\u039f\\u039a \\u2713"'),
68
  'mbstring' => loco_check_extension('mbstring'),
69
  ) );
70
+
71
  // PHP / env memory settings:
72
  $memory = new Loco_mvc_PostParams( array(
73
  'WP_MEMORY_LIMIT' => $this->memory_size( loco_constant('WP_MEMORY_LIMIT') ),
75
  'PHP memory_limit' => $this->memory_size( ini_get('memory_limit') ),
76
  'PHP post_max_size' => $this->memory_size( ini_get('post_max_size') ),
77
  //'PHP upload_max_filesize' => $this->memory_size( ini_get('upload_max_filesize') ),
78
+ 'PHP max_execution_time' => (string) ini_get('max_execution_time'),
79
  ) );
80
+
81
+ // Check if raising memory limit works (wp>=4.6)
82
+ if( function_exists('wp_is_ini_value_changeable') && wp_is_ini_value_changeable('memory_limit') ){
83
+ $memory['PHP memory_limit'] .= ' (changeable)';
84
+ }
85
 
86
  // Ajaxing:
87
  $this->enqueueScript('debug');
src/compat/JsonSerializable.php CHANGED
@@ -4,6 +4,7 @@
4
  /**
5
  * Placeholder for missing interface in PHP < 5.4.
6
  * Can't be invoked automatically, so always do: json_encode( $obj->jsonSerialize() )
 
7
  */
8
  if( ! interface_exists('JsonSerializable') ){
9
  interface JsonSerializable {
@@ -15,7 +16,8 @@ if( ! interface_exists('JsonSerializable') ){
15
 
16
  /**
17
  * Redundant interface so this file will autoload when JsonSerializable is referenced
 
18
  */
19
  interface Loco_compat_JsonSerializable extends JsonSerializable {
20
 
21
- }
4
  /**
5
  * Placeholder for missing interface in PHP < 5.4.
6
  * Can't be invoked automatically, so always do: json_encode( $obj->jsonSerialize() )
7
+ * Note that this shim is also present in WordPress >= 4.4.0
8
  */
9
  if( ! interface_exists('JsonSerializable') ){
10
  interface JsonSerializable {
16
 
17
  /**
18
  * Redundant interface so this file will autoload when JsonSerializable is referenced
19
+ * @internal
20
  */
21
  interface Loco_compat_JsonSerializable extends JsonSerializable {
22
 
23
+ }
src/hooks/AdminHooks.php CHANGED
@@ -19,7 +19,6 @@ class Loco_hooks_AdminHooks extends Loco_hooks_Hookable {
19
  }
20
 
21
 
22
-
23
  /**
24
  * {@inheritdoc}
25
  */
@@ -55,6 +54,23 @@ class Loco_hooks_AdminHooks extends Loco_hooks_Hookable {
55
  }
56
 
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
  /**
60
  * "admin_menu" callback.
@@ -70,7 +86,6 @@ class Loco_hooks_AdminHooks extends Loco_hooks_Hookable {
70
  }
71
 
72
 
73
-
74
  /**
75
  * plugin_action_links action callback
76
  */
19
  }
20
 
21
 
 
22
  /**
23
  * {@inheritdoc}
24
  */
54
  }
55
 
56
 
57
+ /**
58
+ * "admin_init" callback.
59
+ */
60
+ public function on_admin_init(){
61
+ // currently no better hook than `admin_init` for adding privacy statement.
62
+ // could use "load-tools.php" action, but WordPress could change that in future.
63
+ // this should fire just before WP_Privacy_Policy_Content::privacy_policy_guide is called
64
+ if( function_exists('wp_add_privacy_policy_content') ) {
65
+ $url = apply_filters('loco_external','https://localise.biz/wordpress/plugin/privacy');
66
+ wp_add_privacy_policy_content(
67
+ __('Loco Translate','loco-translate'),
68
+ esc_html( __("This plugin doesn't collect any data from public website visitors.",'loco-translate') ).'<br />'.
69
+ sprintf( __('Administrators and auditors may wish to review Loco\'s <a href="%s">plugin privacy notice</a>.','loco-translate'), esc_url($url) )
70
+ );
71
+ }
72
+ }
73
+
74
 
75
  /**
76
  * "admin_menu" callback.
86
  }
87
 
88
 
 
89
  /**
90
  * plugin_action_links action callback
91
  */
src/mvc/AdminController.php CHANGED
@@ -126,12 +126,9 @@ abstract class Loco_mvc_AdminController extends Loco_mvc_Controller {
126
  * "loco_external" filter callback, campaignizes external links
127
  */
128
  public function filter_loco_external( $url ){
129
- static $query;
130
- if( ! isset($query) ){
131
- $query = http_build_query( array( 'utm_campaign' => 'wp', 'utm_source' => 'admin', 'utm_content' => $this->get('_route') ), null, '&' );
132
- }
133
  $u = parse_url( $url );
134
  if( isset($u['host']) && 'localise.biz' === $u['host'] ){
 
135
  $url = 'https://localise.biz'.$u['path'];
136
  if( isset($u['query']) ){
137
  $url .= '?'. $u['query'].'&'.$query;
126
  * "loco_external" filter callback, campaignizes external links
127
  */
128
  public function filter_loco_external( $url ){
 
 
 
 
129
  $u = parse_url( $url );
130
  if( isset($u['host']) && 'localise.biz' === $u['host'] ){
131
+ $query = http_build_query( array( 'utm_medium' => 'plugin', 'utm_campaign' => 'wp', 'utm_source' => 'admin', 'utm_content' => $this->get('_route') ), null, '&' );
132
  $url = 'https://localise.biz'.$u['path'];
133
  if( isset($u['query']) ){
134
  $url .= '?'. $u['query'].'&'.$query;
src/output/Buffer.php CHANGED
@@ -17,7 +17,6 @@ class Loco_output_Buffer {
17
  */
18
  private $output = '';
19
 
20
-
21
  /**
22
  * @return string
23
  */
@@ -25,7 +24,7 @@ class Loco_output_Buffer {
25
  return $this->output;
26
  }
27
 
28
-
29
  /**
30
  * @return Loco_output_Buffer
31
  */
@@ -44,7 +43,6 @@ class Loco_output_Buffer {
44
  }
45
 
46
 
47
-
48
  /**
49
  * @return Loco_output_Buffer
50
  */
@@ -58,7 +56,6 @@ class Loco_output_Buffer {
58
  }
59
 
60
 
61
-
62
  /**
63
  * @return Loco_output_Buffer
64
  */
@@ -72,7 +69,6 @@ class Loco_output_Buffer {
72
  }
73
 
74
 
75
-
76
  /**
77
  * Check the current script has not produced unbuffered output
78
  * @throws Loco_error_Exception
@@ -92,7 +88,6 @@ class Loco_output_Buffer {
92
  }
93
 
94
 
95
-
96
  /**
97
  * @internal
98
  * @param int highest buffer to flush
@@ -119,7 +114,6 @@ class Loco_output_Buffer {
119
  }
120
 
121
 
122
-
123
  /**
124
  * Destroy all output buffers
125
  * @return void
@@ -133,4 +127,4 @@ class Loco_output_Buffer {
133
  }
134
  }
135
 
136
- }
17
  */
18
  private $output = '';
19
 
 
20
  /**
21
  * @return string
22
  */
24
  return $this->output;
25
  }
26
 
27
+
28
  /**
29
  * @return Loco_output_Buffer
30
  */
43
  }
44
 
45
 
 
46
  /**
47
  * @return Loco_output_Buffer
48
  */
56
  }
57
 
58
 
 
59
  /**
60
  * @return Loco_output_Buffer
61
  */
69
  }
70
 
71
 
 
72
  /**
73
  * Check the current script has not produced unbuffered output
74
  * @throws Loco_error_Exception
88
  }
89
 
90
 
 
91
  /**
92
  * @internal
93
  * @param int highest buffer to flush
114
  }
115
 
116
 
 
117
  /**
118
  * Destroy all output buffers
119
  * @return void
127
  }
128
  }
129
 
130
+ }
src/output/DiffRenderer.php CHANGED
@@ -5,13 +5,11 @@ require_once ABSPATH . WPINC . '/Text/Diff/Renderer.php';
5
  require_once ABSPATH . WPINC . '/Text/Diff/Renderer/inline.php';
6
  require_once ABSPATH . WPINC . '/wp-diff.php';
7
 
8
-
9
  /**
10
  * Diff renderer extending that which WordPress uses for post revisions.
11
  */
12
  class Loco_output_DiffRenderer extends WP_Text_Diff_Renderer_Table {
13
 
14
-
15
  /**
16
  * {@inheritdoc}
17
  */
@@ -24,7 +22,6 @@ class Loco_output_DiffRenderer extends WP_Text_Diff_Renderer_Table {
24
  }
25
 
26
 
27
-
28
  /**
29
  * Render diff of two files, presumed to be PO or POT
30
  * @return string HTML table
@@ -44,7 +41,6 @@ class Loco_output_DiffRenderer extends WP_Text_Diff_Renderer_Table {
44
  }
45
 
46
 
47
-
48
  /**
49
  * {@inheritdoc}
50
  */
@@ -53,7 +49,6 @@ class Loco_output_DiffRenderer extends WP_Text_Diff_Renderer_Table {
53
  }
54
 
55
 
56
-
57
  /**
58
  * {@inheritdoc}
59
  */
@@ -62,7 +57,6 @@ class Loco_output_DiffRenderer extends WP_Text_Diff_Renderer_Table {
62
  }
63
 
64
 
65
-
66
  /**
67
  * {@inheritdoc}
68
  */
@@ -71,7 +65,6 @@ class Loco_output_DiffRenderer extends WP_Text_Diff_Renderer_Table {
71
  }
72
 
73
 
74
-
75
  /**
76
  * {@inheritdoc}
77
  */
5
  require_once ABSPATH . WPINC . '/Text/Diff/Renderer/inline.php';
6
  require_once ABSPATH . WPINC . '/wp-diff.php';
7
 
 
8
  /**
9
  * Diff renderer extending that which WordPress uses for post revisions.
10
  */
11
  class Loco_output_DiffRenderer extends WP_Text_Diff_Renderer_Table {
12
 
 
13
  /**
14
  * {@inheritdoc}
15
  */
22
  }
23
 
24
 
 
25
  /**
26
  * Render diff of two files, presumed to be PO or POT
27
  * @return string HTML table
41
  }
42
 
43
 
 
44
  /**
45
  * {@inheritdoc}
46
  */
49
  }
50
 
51
 
 
52
  /**
53
  * {@inheritdoc}
54
  */
57
  }
58
 
59
 
 
60
  /**
61
  * {@inheritdoc}
62
  */
65
  }
66
 
67
 
 
68
  /**
69
  * {@inheritdoc}
70
  */