Plugin Directory

Changeset 3433719


Ignore:
Timestamp:
01/06/2026 02:54:55 PM (3 months ago)
Author:
timwhitlock
Message:

Nonce refresh on heartbeat, plus autoloader tweaks

Location:
loco-translate/trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • loco-translate/trunk/languages/loco-translate.pot

    r3317498 r3433719  
    44"Project-Id-Version: Loco Translate 2.8.1-dev\n"
    55"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/loco-translate/\n"
    6 "POT-Creation-Date: 2025-06-25 08:58+0000\n"
     6"POT-Creation-Date: 2026-01-06 14:53+0000\n"
    77"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    88"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1414"Content-Transfer-Encoding: 8bit\n"
    1515"X-Generator: Loco https://localise.biz/\n"
    16 "X-Loco-Version: 2.8.1-dev; wp-6.8.1; php-8.3.14\n"
     16"X-Loco-Version: 2.8.1-dev; wp-6.9; php-8.3.27\n"
    1717"X-Domain: loco-translate"
    1818
     
    290290msgstr ""
    291291
    292 #: src/mvc/AjaxRouter.php:175
     292#: src/mvc/AjaxRouter.php:166
    293293msgid "Ajax controller returned empty JSON"
    294294msgstr ""
    295295
    296296#. Fatal error where %s represents an unexpected value
    297 #: src/mvc/AjaxRouter.php:170
     297#: src/mvc/AjaxRouter.php:161
    298298#, php-format
    299299msgid "Ajax route not found: \"%s\""
     
    401401msgstr ""
    402402
     403#: src/admin/config/ApisController.php:79
     404msgid "Chat Completions"
     405msgstr ""
     406
    403407#: src/js/Strings.php:139
    404408msgid "Check console output for debugging information"
     
    506510
    507511#. Page title for core WordPress translations
    508 #: src/mvc/AdminRouter.php:56
     512#: src/mvc/AdminRouter.php:55
    509513msgid "Core translations &lsaquo; Loco"
    510514msgstr ""
     
    535539msgstr ""
    536540
    537 #: src/mvc/AdminRouter.php:77 src/error/Debug.php:19
     541#: src/mvc/AdminRouter.php:76 src/error/Debug.php:19
    538542#: src/admin/config/DebugController.php:12
    539 #: src/admin/bundle/BaseController.php:107
    540543msgid "Debug"
    541544msgstr ""
     
    594597msgstr ""
    595598
    596 #: src/mvc/AjaxRouter.php:198
     599#: src/mvc/AjaxRouter.php:189
    597600msgid "Download action not found"
    598601msgstr ""
    599602
    600 #: src/mvc/AjaxRouter.php:203
     603#: src/mvc/AjaxRouter.php:194
    601604msgid "Download controller returned empty output"
    602605msgstr ""
     
    10221025msgstr ""
    10231026
    1024 #: src/mvc/AdminRouter.php:42
     1027#: src/mvc/AdminRouter.php:41
    10251028msgid "Home"
    10261029msgstr ""
     
    11301133msgstr ""
    11311134
    1132 #: src/mvc/AdminRouter.php:59
     1135#: src/mvc/AdminRouter.php:58
    11331136msgid "Languages"
    11341137msgstr ""
    11351138
    11361139#. Page title for installed languages page
    1137 #: src/mvc/AdminRouter.php:61
     1140#: src/mvc/AdminRouter.php:60
    11381141msgid "Languages &lsaquo; Loco"
    11391142msgstr ""
     
    11871190
    11881191#. Name of the plugin
    1189 #: src/mvc/AdminRouter.php:37 src/hooks/AdminHooks.php:88
     1192#: src/mvc/AdminRouter.php:36 src/hooks/AdminHooks.php:88
    11901193msgid "Loco Translate"
    11911194msgstr ""
     
    12161219
    12171220#. Page title for plugin home screen
    1218 #: src/mvc/AdminRouter.php:39
     1221#: src/mvc/AdminRouter.php:38
    12191222msgid "Loco, Translation Management"
    12201223msgstr ""
     
    14141417msgstr ""
    14151418
    1416 #: src/mvc/AdminRouter.php:243
     1419#: src/mvc/AdminRouter.php:240
    14171420msgid "Page not found"
    14181421msgstr ""
     
    14541457msgstr ""
    14551458
    1456 #: src/mvc/AdminRouter.php:66 src/admin/config/ApisController.php:69
     1459#: src/mvc/AdminRouter.php:65 src/admin/config/ApisController.php:69
    14571460#: src/admin/config/PrefsController.php:42
    14581461#: src/admin/config/VersionController.php:22
     
    14621465
    14631466#. Page title for plugin translations
    1464 #: src/mvc/AdminRouter.php:51
     1467#: src/mvc/AdminRouter.php:50
    14651468msgid "Plugin translations &lsaquo; Loco"
    14661469msgstr ""
    14671470
    1468 #: src/mvc/AdminRouter.php:49 src/admin/Navigation.php:30
     1471#: src/mvc/AdminRouter.php:48 src/admin/Navigation.php:30
    14691472#: src/admin/bundle/LocaleController.php:154
    14701473msgid "Plugins"
     
    15591562msgstr ""
    15601563
     1564#: src/admin/config/ApisController.php:78
     1565msgid "Provider"
     1566msgstr ""
     1567
    15611568#: tpl/admin/common/inc-fsconn.php:27
    15621569msgid "Read only"
     
    16811688msgstr ""
    16821689
    1683 #: src/mvc/AdminRouter.php:67 src/mvc/AdminRouter.php:72
     1690#: src/mvc/AdminRouter.php:66 src/mvc/AdminRouter.php:71
    16841691#: tpl/ajax/modal-apis-empty.php:15 src/admin/file/EditController.php:182
    16851692#: tpl/admin/common/inc-fsconn.php:18 tpl/admin/common/inc-fsconn.php:43
     
    18671874
    18681875#. Page title for theme translations
    1869 #: src/mvc/AdminRouter.php:46
     1876#: src/mvc/AdminRouter.php:45
    18701877msgid "Theme translations &lsaquo; Loco"
    18711878msgstr ""
    18721879
    1873 #: src/mvc/AdminRouter.php:44 src/admin/Navigation.php:27
     1880#: src/mvc/AdminRouter.php:43 src/admin/Navigation.php:27
    18741881#: src/admin/bundle/LocaleController.php:149
    18751882msgid "Themes"
     
    21512158msgstr ""
    21522159
    2153 #: src/mvc/AdminRouter.php:71 src/admin/config/PrefsController.php:13
     2160#: src/mvc/AdminRouter.php:70 src/admin/config/PrefsController.php:13
    21542161#: src/admin/config/BaseController.php:19
    21552162msgid "User options"
     
    22142221msgstr ""
    22152222
    2216 #: src/mvc/AdminRouter.php:54
     2223#: src/mvc/AdminRouter.php:53
    22172224msgid "WordPress"
    22182225msgstr ""
  • loco-translate/trunk/loco.php

    r3433545 r3433719  
    8888 * @return mixed return value from included file
    8989 */
    90 function loco_include( string $relpath ){
     90function loco_include( string $relpath, bool $strict = false ){
    9191    $path = loco_plugin_root().'/'.$relpath;
    92     if( ! file_exists($path) ){
    93         $message = 'File not found: '.$path;
    94         // debug specifics to error log in case full call stack not visible
    95         if( 'cli' !== PHP_SAPI ) {
    96             error_log( sprintf( '[Loco.debug] Failed on loco_include(%s). !file_exists(%s)', var_export($relpath,true), var_export($path,true) ) );
    97         }
    98         // handle circular file inclusion error if error class not found
    99         if( loco_class_exists('Loco_error_Exception') ){
    100             throw new Loco_error_Exception($message);
     92    if( file_exists($path) ){
     93        return include $path;
     94    }
     95    if( loco_debugging() && 'cli' !== PHP_SAPI ) {
     96        error_log( sprintf( '[Loco.debug] Failed on loco_include(%s). !file_exists(%s)', var_export($relpath,true), var_export($path,true) ) );
     97    }
     98    if( $strict ){
     99        if( class_exists('Loco_error_Exception') ){
     100            throw new Loco_error_Exception('File not found: '.$relpath);
    101101        }
    102102        else {
    103             throw new Exception($message.'; additionally src/error/Exception.php not loadable');
     103            throw new Exception('File not found: '.$relpath.'; additionally src/error/Exception.php not loadable');
    104104        }
    105105    }
    106     return include $path;
     106    return null;
    107107}
    108108
     
    152152
    153153/**
    154  * class_exists wrapper that fails silently.
    155  * TODO Scrap this and let the normal autoloader fail silently.
     154 * @deprecated Just call class_exists
    156155 */
    157156function loco_class_exists( string $class ): bool {
    158     try {
    159         return class_exists($class);
    160     }
    161     catch( Throwable $e ){
    162         return false;
    163     }
     157    return class_exists($class);
    164158}
    165159
  • loco-translate/trunk/pub/js/min/admin.js

    r3433545 r3433719  
    55const w = {};
    66return {
    7 register: function(t, E) {
    8 w[t] = E;
    9 },
    10 require: function(t) {
     7register: function(r, E) {
     8w[r] = E;
     9},
     10require: function(r) {
    1111var E;
    12 if (!(E = w[t])) throw Error("Bad module [" + t + "]");
     12if (!(E = w[r])) throw Error("Bad module [" + r + "]");
    1313return E;
    1414},
    15 include: function(t) {
    16 return w[t];
     15include: function(r) {
     16return w[r];
    1717},
    1818noop: function() {}
    1919};
    2020}();
    21 D.register("1", function(w, t, E) {
     21D.register("1", function(w, r, E) {
    2222function y(p) {
    23 const u = typeof p;
    24 if ("string" === u) if (/[^ <>!=()%^&|?:n0-9]/.test(p)) console.error("Invalid plural: " + p); else return new Function("n", "return " + p);
    25 "function" !== u && (p = function(e) {
     23const t = typeof p;
     24if ("string" === t) if (/[^ <>!=()%^&|?:n0-9]/.test(p)) console.error("Invalid plural: " + p); else return new Function("n", "return " + p);
     25"function" !== t && (p = function(e) {
    2626return 1 != e;
    2727});
     
    2929}
    3030w.init = function(p) {
    31 function u(l, m, r) {
    32 return (l = g[l]) && l[r] ? l[r] : m || "";
     31function t(l, m, q) {
     32return (l = g[l]) && l[q] ? l[q] : m || "";
    3333}
    3434function e(l) {
    35 return u(l, l, 0);
     35return t(l, l, 0);
    3636}
    3737function b(l, m) {
    38 return u(m + "" + l, l, 0);
    39 }
    40 function k(l, m, r) {
    41 r = Number(p(r));
    42 isNaN(r) && (r = 0);
    43 return u(l, r ? m : l, r);
     38return t(m + "" + l, l, 0);
     39}
     40function k(l, m, q) {
     41q = Number(p(q));
     42isNaN(q) && (q = 0);
     43return t(l, q ? m : l, q);
    4444}
    4545p = y(p);
     
    6464return w;
    6565}({}, K, M));
    66 D.register("2", function(w, t, E) {
     66D.register("2", function(w, r, E) {
    6767w.ie = function() {
    6868return !1;
     
    7373return w;
    7474}({}, K, M));
    75 D.register("3", function(w, t, E) {
    76 Number.prototype.format = function(y, p, u) {
     75D.register("3", function(w, r, E) {
     76Number.prototype.format = function(y, p, t) {
    7777var e = Math.pow(10, y || 0);
    7878y = [];
     
    8585y.unshift(e.substring(k - 3, k));
    8686} while (0 < (k -= 3));
    87 e = y.join(u || ",");
     87e = y.join(t || ",");
    8888if (b) {
    8989{
    90 u = b;
    91 y = u.length;
     90t = b;
     91y = t.length;
    9292let g;
    93 for (;"0" === u.charAt(--y); ) g = y;
    94 g && (u = u.substring(0, g));
    95 b = u;
     93for (;"0" === t.charAt(--y); ) g = y;
     94g && (t = t.substring(0, g));
     95b = t;
    9696}
    9797b && (e += (p || ".") + b);
     
    100100};
    101101Number.prototype.percent = function(y) {
    102 let p = 0, u = this && y ? this / y * 100 : 0;
    103 if (0 === u) return "0";
    104 if (100 === u) return "100";
    105 if (99 < u) u = Math.min(u, 99.9), y = u.format(++p); else if (.5 > u) {
    106 u = Math.max(u, 1e-4);
     102let p = 0, t = this && y ? this / y * 100 : 0;
     103if (0 === t) return "0";
     104if (100 === t) return "100";
     105if (99 < t) t = Math.min(t, 99.9), y = t.format(++p); else if (.5 > t) {
     106t = Math.max(t, 1e-4);
    107107do {
    108 y = u.format(++p);
     108y = t.format(++p);
    109109} while ("0" === y && 4 > p);
    110110y = y.substring(1);
    111 } else y = u.format(0);
     111} else y = t.format(0);
    112112return y;
    113113};
    114114return w;
    115115}({}, K, M));
    116 D.register("4", function(w, t, E) {
     116D.register("4", function(w, r, E) {
    117117Array.prototype.indexOf || (Array.prototype.indexOf = function(y) {
    118118if (null == this) throw new TypeError();
    119 var p = Object(this), u = p.length >>> 0;
    120 if (0 === u) return -1;
     119var p = Object(this), t = p.length >>> 0;
     120if (0 === t) return -1;
    121121var e = 0;
    1221221 < arguments.length && (e = Number(arguments[1]), e != e ? e = 0 : 0 != e && Infinity != e && -Infinity != e && (e = (0 < e || -1) * Math.floor(Math.abs(e))));
    123 if (e >= u) return -1;
    124 for (e = 0 <= e ? e : Math.max(u - Math.abs(e), 0); e < u; e++) if (e in p && p[e] === y) return e;
     123if (e >= t) return -1;
     124for (e = 0 <= e ? e : Math.max(t - Math.abs(e), 0); e < t; e++) if (e in p && p[e] === y) return e;
    125125return -1;
    126126});
    127127return w;
    128128}({}, K, M));
    129 D.register("5", function(w, t, E) {
    130 E = t.JSON;
     129D.register("5", function(w, r, E) {
     130E = r.JSON;
    131131E || (E = {
    132132parse: A.parseJSON,
    133133stringify: null
    134 }, t.JSON = E);
     134}, r.JSON = E);
    135135w.parse = E.parse;
    136136w.stringify = E.stringify;
    137137return w;
    138138}({}, K, M));
    139 D.register("6", function(w, t, E) {
     139D.register("6", function(w, r, E) {
    140140w.trim = function(y, p) {
    141141for (p || (p = " \n"); y && -1 !== p.indexOf(y.charAt(0)); ) y = y.substring(1);
     
    147147};
    148148w.vsprintf = function(y, p) {
    149 let u = 0;
     149let t = 0;
    150150return y.replace(/%(?:([1-9][0-9]*)\$)?([sud%])/g, function(e, b, k) {
    151151if ("%" === k) return "%";
    152 e = b ? p[Number(b) - 1] : p[u++];
     152e = b ? p[Number(b) - 1] : p[t++];
    153153return null != e ? String(e) : "s" === k ? "" : "0";
    154154});
     
    156156return w;
    157157}({}, K, M));
    158 D.register("1a", function(w, t, E) {
     158D.register("1a", function(w, r, E) {
    159159function y(p) {
    160 return function(u, e) {
    161 let b = u[p] || 0;
    162 for (;(u = u.offsetParent) && u !== (e || E.body); ) b += u[p] || 0;
     160return function(t, e) {
     161let b = t[p] || 0;
     162for (;(t = t.offsetParent) && t !== (e || E.body); ) b += t[p] || 0;
    163163return b;
    164164};
     
    166166w.top = y("offsetTop");
    167167w.left = y("offsetLeft");
    168 w.el = function(p, u) {
     168w.el = function(p, t) {
    169169p = E.createElement(p || "div");
    170 u && (p.className = u);
     170t && (p.className = t);
    171171return p;
    172172};
     
    179179return w;
    180180}({}, K, M));
    181 D.register("7", function(w, t, E) {
     181D.register("7", function(w, r, E) {
    182182function y(c, d, h) {
    183183function n() {
    184184v();
    185 z = setTimeout(d, h);
     185C = setTimeout(d, h);
    186186}
    187187function v() {
    188 z && clearTimeout(z);
    189 z = 0;
    190 }
    191 let z = 0;
     188C && clearTimeout(C);
     189C = 0;
     190}
     191let C = 0;
    192192n();
    193193A(c).on("mouseenter", v).on("mouseleave", n);
     
    203203c.slideUp(d, function() {
    204204c.remove();
    205 A(t).triggerHandler("resize");
     205A(r).triggerHandler("resize");
    206206});
    207207});
    208208return c;
    209209}
    210 function u(c, d) {
     210function t(c, d) {
    211211function h(G) {
    212 r[C] = null;
     212q[B] = null;
    213213p(A(c), 250);
    214 z && z.die();
     214C && C.die();
    215215var H;
    216216if (H = G) G.stopPropagation(), G.preventDefault(), H = !1;
     
    218218}
    219219function n(G) {
    220 z && z.die();
    221 return z = y(c, h, G);
     220C && C.die();
     221return C = y(c, h, G);
    222222}
    223223const v = A(c);
    224 let z, C, B, F = v.find("button");
     224let C, B, z, F = v.find("button");
    2252250 === F.length && (v.addClass("is-dismissible"), F = A('<button type="button" class="notice-dismiss"> </a>').appendTo(v));
    226226F.off("click").on("click", h);
    227 A(t).triggerHandler("resize");
     227A(r).triggerHandler("resize");
    228228m();
    229 C = r.length;
    230 r.push(h);
    231 d && (z = n(d));
     229B = q.length;
     230q.push(h);
     231d && (C = n(d));
    232232return {
    233233link: function(G, H) {
     
    235235H = A(c).find("nav");
    236236G = A("<nav></nav>").append(A("<a></a>").attr("href", G).text(J));
    237 B ? (B.push(G.html()), H.html(B.join("<span> | </span>"))) : (B = [ G.html() ],
     237z ? (z.push(G.html()), H.html(z.join("<span> | </span>"))) : (z = [ G.html() ],
    238238A(c).addClass("has-nav").append(G));
    239239return this;
    240240},
    241241stick: function() {
    242 z && z.die();
    243 z = null;
    244 r[C] = null;
     242C && C.die();
     243C = null;
     244q[B] = null;
    245245return this;
    246246},
     
    262262function b(c, d, h, n) {
    263263c = e(h, d, c).css("opacity", "0").fadeTo(500, 1);
    264 A(t).triggerHandler("resize");
    265 return u(c, n);
     264A(r).triggerHandler("resize");
     265return t(c, n);
    266266}
    267267function k(c) {
    268 return b(c, q, "warning");
     268return b(c, u, "warning");
    269269}
    270270function g() {
    271271A("#loco-notices").find("div.notice").each(function(c, d) {
    272272-1 === d.className.indexOf("jshide") && (c = -1 === d.className.indexOf("notice-success") ? null : 5e3,
    273 u(d, c));
    274 });
    275 }
    276 const l = t.console || {
     273t(d, c));
     274});
     275}
     276const l = r.console || {
    277277log: function() {}
    278278}, m = Date.now || function() {
    279279return new Date().getTime();
    280280};
    281 let r = [], x, q, f, a;
     281let q = [], x, u, f, a;
    282282w.error = function(c) {
    283283return b(c, x, "error");
     
    299299w.clear = function() {
    300300let c = -1;
    301 const d = r, h = d.length;
     301const d = q, h = d.length;
    302302for (;++c < h; ) {
    303303const n = d[c];
    304304n && n.call && n();
    305305}
    306 r = [];
     306q = [];
    307307return w;
    308308};
     
    311311(w[c.type] || w.error).call(w, c.message);
    312312};
    313 w.convert = u;
     313w.convert = t;
    314314w.init = function(c) {
    315315x = c._("Error");
    316 q = c._("Warning");
     316u = c._("Warning");
    317317f = c._("Notice");
    318318a = c._("OK");
     
    322322return w;
    323323}({}, K, M));
    324 D.register("8", function(w, t, E) {
    325 function y(q) {
    326 let f = A("<pre>" + q + "</pre>").text();
    327 f && (f = f.replace(/[\r\n]+/g, "\n").replace(/(^|\n)\s+/g, "$1").replace(/\s+$/, ""));
    328 f || (f = q) || (f = "Blank response from server");
    329 return f;
    330 }
    331 function p(q) {
    332 return (q = q.split(/[\r\n]/)[0]) ? (q = q.replace(/ +in +\S+ on line \d+/, ""),
    333 q = q.replace(/^[()! ]+Fatal error:\s*/, "")) : r._("Server returned invalid data");
    334 }
    335 function u(q) {
    336 t.console && console.error && console.error('No nonce for "' + q + '"');
     324D.register("8", function(w, r, E) {
     325function y(f) {
     326let a = A("<pre>" + f + "</pre>").text();
     327a && (a = a.replace(/[\r\n]+/g, "\n").replace(/(^|\n)\s+/g, "$1").replace(/\s+$/, ""));
     328a || (a = f) || (a = "Blank response from server");
     329return a;
     330}
     331function p(f) {
     332return (f = f.split(/[\r\n]/)[0]) ? (f = f.replace(/ +in +\S+ on line \d+/, ""),
     333f = f.replace(/^[()! ]+Fatal error:\s*/, "")) : x._("Server returned invalid data");
     334}
     335function t(f) {
     336r.console && console.error && console.error('No nonce for "' + f + '"');
    337337return "";
    338338}
    339 function e(q, f, a) {
    340 q[f] = a;
    341 }
    342 function b(q, f, a) {
    343 q.push({
    344 name: f,
    345 value: a
    346 });
    347 }
    348 function k(q, f, a) {
    349 q.append(f, a);
    350 }
    351 function g(q, f, a, c) {
    352 function d(n, v, z) {
    353 if ("abort" !== v) {
    354 var C = r || {
    355 _: function(O) {
    356 return O;
    357 }
    358 }, B = n.status || 0, F = n.responseText || "", G = y(F), H = n.getResponseHeader("Content-Type") || "Unknown type", J = n.getResponseHeader("Content-Length") || F.length;
    359 "success" === v && z ? h.error(z) : (h.error(p(G) + ".\n" + C._("Check console output for debugging information")),
    360 h.log("Ajax failure for " + q, {
    361 status: B,
    362 error: v,
    363 message: z,
    364 output: F
    365 }), "parsererror" === v && (z = "Response not JSON"), h.log([ C._("Provide the following text when reporting a problem") + ":", "----", "Status " + B + ' "' + (z || C._("Unknown error")) + '" (' + H + " " + J + " bytes)", G, "====" ].join("\n")));
    366 a && a.call && a(n, v, z);
    367 x = n;
    368 }
    369 }
    370 c.url = l;
    371 c.dataType = "json";
    372 const h = D.require("7").clear();
    373 x = null;
    374 return A.ajax(c).fail(d).done(function(n, v, z) {
    375 const C = n && n.data, B = n && n.notices, F = B && B.length;
    376 !C || n.error ? d(z, v, n && n.error && n.error.message) : f && f(C, v, z);
    377 for (n = -1; ++n < F; ) h.raise(B[n]);
    378 });
    379 }
    380 const l = t.ajaxurl || "/wp-admin/admin-ajax.php";
    381 let m = {}, r, x;
    382 w.init = function(q) {
    383 m = q.nonces || m;
     339function e(f, a, c) {
     340f[a] = c;
     341}
     342function b(f, a, c) {
     343f.push({
     344name: a,
     345value: c
     346});
     347}
     348function k(f, a, c) {
     349f.append(a, c);
     350}
     351function g(f, a, c, d) {
     352function h(v, C, B) {
     353if ("abort" !== C) {
     354var z = x || {
     355_: function(R) {
     356return R;
     357}
     358}, F = v.status || 0, G = v.responseText || "", H = y(G), J = v.getResponseHeader("Content-Type") || "Unknown type", O = v.getResponseHeader("Content-Length") || G.length;
     359"success" === C && B ? n.error(B) : (n.error(p(H) + ".\n" + z._("Check console output for debugging information")),
     360n.log("Ajax failure for " + f, {
     361status: F,
     362error: C,
     363message: B,
     364output: G
     365}), "parsererror" === C && (B = "Response not JSON"), n.log([ z._("Provide the following text when reporting a problem") + ":", "----", "Status " + F + ' "' + (B || z._("Unknown error")) + '" (' + J + " " + O + " bytes)", H, "====" ].join("\n")));
     366c && c.call && c(v, C, B);
     367u = v;
     368}
     369}
     370d.url = m;
     371d.dataType = "json";
     372const n = D.require("7").clear();
     373u = null;
     374return A.ajax(d).fail(h).done(function(v, C, B) {
     375const z = v && v.data, F = v && v.notices, G = F && F.length;
     376!z || v.error ? h(B, C, v && v.error && v.error.message) : a && a(z, C, B);
     377for (v = -1; ++v < G; ) n.raise(F[v]);
     378});
     379}
     380function l(f) {
     381A(f).on("heartbeat-send", function(a, c) {
     382c["loco-translate"] = {
     383nonces: q
     384};
     385}).on("heartbeat-tick", function(a, c) {
     386q = c["loco-translate"] && c["loco-translate"].nonces || {};
     387});
     388}
     389const m = r.ajaxurl || "/wp-admin/admin-ajax.php";
     390let q = {}, x, u;
     391w.init = function(f) {
     392q = f.nonces || q;
     393l(E);
    384394return w;
    385395};
    386 w.localise = function(q) {
    387 r = q;
     396w.localise = function(f) {
     397x = f;
    388398return w;
    389399};
    390400w.xhr = function() {
    391 return x;
     401return u;
    392402};
    393403w.strip = y;
    394404w.parse = p;
    395 w.submit = function(q, f, a) {
    396 function c(z, C) {
    397 C.disabled ? C.setAttribute("data-was-disabled", "true") : C.disabled = !0;
    398 }
    399 function d(z, C) {
    400 C.getAttribute("data-was-disabled") || (C.disabled = !1);
    401 }
    402 function h(z) {
    403 z.find(".button-primary").removeClass("loading");
    404 z.find("button").each(d);
    405 z.find("input").each(d);
    406 z.find("select").each(d);
    407 z.find("textarea").each(d);
    408 z.removeClass("disabled loading");
    409 }
    410 const n = A(q), v = n.serialize();
    411 (function(z) {
    412 z.find(".button-primary").addClass("loading");
    413 z.find("button").each(c);
    414 z.find("input").each(c);
    415 z.find("select").each(c);
    416 z.find("textarea").each(c);
    417 z.addClass("disabled loading");
    418 })(n);
    419 return g(q.route.value, function(z, C, B) {
    420 h(n);
    421 f && f(z, C, B);
    422 }, function(z, C, B) {
    423 h(n);
    424 a && a(z, C, B);
     405w.submit = function(f, a, c) {
     406function d(B, z) {
     407z.disabled ? z.setAttribute("data-was-disabled", "true") : z.disabled = !0;
     408}
     409function h(B, z) {
     410z.getAttribute("data-was-disabled") || (z.disabled = !1);
     411}
     412function n(B) {
     413B.find(".button-primary").removeClass("loading");
     414B.find("button").each(h);
     415B.find("input").each(h);
     416B.find("select").each(h);
     417B.find("textarea").each(h);
     418B.removeClass("disabled loading");
     419}
     420const v = A(f), C = v.serialize();
     421(function(B) {
     422B.find(".button-primary").addClass("loading");
     423B.find("button").each(d);
     424B.find("input").each(d);
     425B.find("select").each(d);
     426B.find("textarea").each(d);
     427B.addClass("disabled loading");
     428})(v);
     429return g(f.route.value, function(B, z, F) {
     430n(v);
     431a && a(B, z, F);
     432}, function(B, z, F) {
     433n(v);
     434c && c(B, z, F);
    425435}, {
    426 type: q.method,
    427 data: v
    428 });
    429 };
    430 w.post = function(q, f, a, c) {
    431 let d = !0, h = f || {}, n = m[q] || u(q);
    432 t.FormData && h instanceof FormData ? (d = !1, f = k) : f = Array.isArray(h) ? b : e;
    433 f(h, "action", "loco_json");
    434 f(h, "route", q);
    435 f(h, "loco-nonce", n);
    436 return g(q, a, c, {
     436type: f.method,
     437data: C
     438});
     439};
     440w.post = function(f, a, c, d) {
     441let h = !0, n = a || {}, v = q[f] || t(f);
     442r.FormData && n instanceof FormData ? (h = !1, a = k) : a = Array.isArray(n) ? b : e;
     443a(n, "action", "loco_json");
     444a(n, "route", f);
     445a(n, "loco-nonce", v);
     446return g(f, c, d, {
    437447type: "post",
    438 data: h,
    439 processData: d,
    440 contentType: d ? "application/x-www-form-urlencoded; charset=UTF-8" : !1
    441 });
    442 };
    443 w.get = function(q, f, a, c) {
    444 f = f || {};
    445 const d = m[q] || u(q);
    446 f.action = "loco_json";
    447 f.route = q;
    448 f["loco-nonce"] = d;
    449 return g(q, a, c, {
     448data: n,
     449processData: h,
     450contentType: h ? "application/x-www-form-urlencoded; charset=UTF-8" : !1
     451});
     452};
     453w.get = function(f, a, c, d) {
     454a = a || {};
     455const h = q[f] || t(f);
     456a.action = "loco_json";
     457a.route = f;
     458a["loco-nonce"] = h;
     459return g(f, c, d, {
    450460type: "get",
    451 data: f
    452 });
    453 };
    454 w.setNonce = function(q, f) {
    455 m[q] = f;
     461data: a
     462});
     463};
     464w.setNonce = function(f, a) {
     465q[f] = a;
    456466return w;
    457467};
     
    530540yih: 1
    531541});
    532 D.register("9", function(w, t, E) {
     542D.register("9", function(w, r, E) {
    533543function y() {}
    534544const p = D.require("1b");
    535 let u;
     545let t;
    536546w.init = function() {
    537547return new y();
     
    546556};
    547557w.parse = function(e) {
    548 e = (u || (u = /^([a-z]{2,3})(?:[-_]([a-z]{2}))?(?:[-_]([a-z0-9]{3,8}))?$/i)).exec(e);
     558e = (t || (t = /^([a-z]{2,3})(?:[-_]([a-z]{2}))?(?:[-_]([a-z0-9]{3,8}))?$/i)).exec(e);
    549559if (!e) return null;
    550560const b = new y();
     
    554564return b;
    555565};
    556 t = y.prototype;
    557 t.isValid = function() {
     566r = y.prototype;
     567r.isValid = function() {
    558568return !!this.lang;
    559569};
    560 t.isKnown = function() {
     570r.isKnown = function() {
    561571const e = this.lang;
    562572return e && "zxx" !== e;
    563573};
    564 t.toString = function(e) {
     574r.toString = function(e) {
    565575e = e || "_";
    566576let b = this.lang || "zxx";
     
    569579return b;
    570580};
    571 t.getIcon = function() {
     581r.getIcon = function() {
    572582let e = 3, b = [];
    573583const k = [ "variant", "region", "lang" ];
     
    578588return b.join(" ");
    579589};
    580 t.isRTL = function() {
     590r.isRTL = function() {
    581591return !!p[String(this.lang).toLowerCase()];
    582592};
    583 t = null;
     593r = null;
    584594return w;
    585595}({}, K, M));
     
    9961006"ӯ": "у"
    9971007});
    998 D.register("a", function(w, t, E) {
     1008D.register("a", function(w, r, E) {
    9991009w.init = function() {
    10001010function y(a) {
    1001 return r[a] || a;
     1011return q[a] || a;
    10021012}
    10031013function p(a, c, d) {
     
    10091019if (v && null == d[v]) {
    10101020const F = [];
    1011 var z = v.length;
     1021var C = v.length;
    10121022let G = 0;
    10131023do {
    1014 var C = q.exec(v);
    1015 if (C) {
    1016 C = C[0];
    1017 var B = C.length;
    1018 if (G) for (let H = 0; H < G; H++) F[H] += C; else if (B === z) {
    1019 null == d[C] && (c.push(C), d[C] = !0);
     1024var B = u.exec(v);
     1025if (B) {
     1026B = B[0];
     1027var z = B.length;
     1028if (G) for (let H = 0; H < G; H++) F[H] += B; else if (z === C) {
     1029null == d[B] && (c.push(B), d[B] = !0);
    10201030continue a;
    10211031}
    1022 F.push(C);
     1032F.push(B);
    10231033G++;
    1024 v = v.substring(B);
     1034v = v.substring(z);
    10251035if ("" === v) break;
    10261036}
    1027 if (C = f.exec(v)) {
    1028 C = C[0];
    1029 if (G) for (B = 0; B < G; B++) F[B] += C; else F.push(C), G++;
    1030 v = v.substring(C.length);
     1037if (B = f.exec(v)) {
     1038B = B[0];
     1039if (G) for (z = 0; z < G; z++) F[z] += B; else F.push(B), G++;
     1040v = v.substring(B.length);
    10311041}
    10321042} while ("" !== v);
    1033 for (v = 0; v < F.length; v++) z = F[v], null == d[z] && (c.push(z), d[z] = !0);
     1043for (v = 0; v < F.length; v++) C = F[v], null == d[C] && (c.push(C), d[C] = !0);
    10341044}
    10351045}
    10361046return c;
    10371047}
    1038 function u(a) {
     1048function t(a) {
    10391049return p(a, [], {});
    10401050}
     
    10491059}
    10501060let k = [], g = [], l = "";
    1051 const m = /[^a-z0-9]/g, r = D.require("1c"), x = /\s+/, q = /^[\d\p{L}]+/u, f = /^[^\d\p{L}]+/u;
     1061const m = /[^a-z0-9]/g, q = D.require("1c"), x = /\s+/, u = /^[\d\p{L}]+/u, f = /^[^\d\p{L}]+/u;
    10521062return {
    1053 split: u,
     1063split: t,
    10541064find: function(a, c) {
    1055 const d = [], h = [], n = String(a || "").toLowerCase().replace(m, y).split(" "), v = n.length, z = l && a.substring(0, l.length) === l ? g : k, C = z.length, B = !!c;
     1065const d = [], h = [], n = String(a || "").toLowerCase().replace(m, y).split(" "), v = n.length, C = l && a.substring(0, l.length) === l ? g : k, B = C.length, z = !!c;
    10561066let F = -1, G = 0;
    1057 a: for (;++F < C; ) {
    1058 const H = z[F], J = H && H.length;
     1067a: for (;++F < B; ) {
     1068const H = C[F], J = H && H.length;
    10591069if (J) {
    10601070b: for (let O = 0; O < v; O++) {
     
    10641074}
    10651075h[F] = H;
    1066 d.push(B ? c[F] : F);
     1076d.push(z ? c[F] : F);
    10671077} else G++;
    10681078}
     
    10721082},
    10731083add: function(a, c) {
    1074 k[a] = u(c);
     1084k[a] = t(c);
    10751085l && b();
    10761086},
     
    11021112return w;
    11031113}({}, K, M));
    1104 D.register("b", function(w, t, E) {
     1114D.register("b", function(w, r, E) {
    11051115w.listen = function(y, p) {
    1106 function u() {
    1107 q[g ? "show" : "hide"]();
     1116function t() {
     1117u[g ? "show" : "hide"]();
    11081118}
    11091119function e(f) {
    1110 x && r.setAttribute("size", 2 + f.length);
     1120x && q.setAttribute("size", 2 + f.length);
    11111121g = f;
    1112 u();
     1122t();
    11131123return f;
    11141124}
     
    11181128}
    11191129function k(f) {
    1120 let a = r.value;
     1130let a = q.value;
    11211131a !== g ? (l && clearTimeout(l), e(a), f ? l = setTimeout(b, f) : b()) : l && null == f && (clearTimeout(l),
    11221132b());
    11231133}
    11241134let g, l, m = 150;
    1125 const r = y instanceof jQuery ? y[0] : y, x = 1 === Number(r.size), q = A('<a href="#clear" tabindex="-1" class="icon clear"><span>clear</span></a>').on("click", function(f) {
     1135const q = y instanceof jQuery ? y[0] : y, x = 1 === Number(q.size), u = A('<a href="#clear" tabindex="-1" class="icon clear"><span>clear</span></a>').on("click", function(f) {
    11261136f.preventDefault();
    1127 r.value = "";
     1137q.value = "";
    11281138k();
    1129 A(r).triggerHandler("blur");
     1139A(q).triggerHandler("blur");
    11301140return !1;
    11311141});
    1132 e(r.value);
    1133 A(r).on("input", function() {
     1142e(q.value);
     1143A(q).on("input", function() {
    11341144k(m);
    11351145return !0;
     
    11371147k(null);
    11381148return !0;
    1139 }).after(q);
    1140 u();
     1149}).after(u);
     1150t();
    11411151return {
    11421152delay: function(f) {
     
    11451155},
    11461156ping: function(f) {
    1147 f ? (l && clearTimeout(l), e(r.value), b(), f = void 0) : f = k();
     1157f ? (l && clearTimeout(l), e(q.value), b(), f = void 0) : f = k();
    11481158return f;
    11491159},
     
    11511161if (null == f) return g;
    11521162l && clearTimeout(l);
    1153 r.value = e(f);
    1154 u();
     1163q.value = e(f);
     1164t();
    11551165},
    11561166el: function() {
    1157 return r;
     1167return q;
    11581168},
    11591169blur: function(f) {
    1160 return A(r).on("blur", f);
     1170return A(q).on("blur", f);
    11611171},
    11621172destroy: function() {
     
    11671177return w;
    11681178}({}, K, M));
    1169 D.register("c", function(w, t, E) {
     1179D.register("c", function(w, r, E) {
    11701180function y(b, k) {
    11711181return "function" == typeof b ? b.call(k) : b;
     
    11811191fade: !0,
    11821192offset: 5,
    1183 delayIn: u,
     1193delayIn: t,
    11841194delayOut: e,
    11851195anchor: b.attr("data-anchor"),
     
    11901200};
    11911201w.delays = function(b, k) {
    1192 u = b || 150;
     1202t = b || 150;
    11931203e = k || 100;
    11941204};
     
    11991209k.data("tipsy").setTitle(b);
    12001210};
    1201 let u, e;
     1211let t, e;
    12021212w.delays();
    12031213A(E.body).on("overlayOpened overlayClosing", function(b) {
     
    12241234height: k[0].offsetHeight
    12251235});
    1226 let r;
     1236let q;
    12271237switch (m.charAt(0)) {
    12281238case "n":
    1229 r = {
     1239q = {
    12301240top: k.top + k.height + this.options.offset,
    12311241left: k.left + k.width / 2 - b / 2
     
    12341244
    12351245case "s":
    1236 r = {
     1246q = {
    12371247top: k.top - l - this.options.offset,
    12381248left: k.left + k.width / 2 - b / 2
     
    12411251
    12421252case "e":
    1243 r = {
     1253q = {
    12441254top: k.top + k.height / 2 - l / 2,
    12451255left: k.left - b - this.options.offset
     
    12481258
    12491259case "w":
    1250 r = {
     1260q = {
    12511261top: k.top + k.height / 2 - l / 2,
    12521262left: k.left + k.width + this.options.offset
    12531263};
    12541264}
    1255 2 === m.length && ("w" === m.charAt(1) ? r.left = k.left + k.width / 2 - 15 : r.left = k.left + k.width / 2 - b + 15);
    1256 g.css(r).addClass("tipsy-" + m);
     12652 === m.length && ("w" === m.charAt(1) ? q.left = k.left + k.width / 2 - 15 : q.left = k.left + k.width / 2 - b + 15);
     1266g.css(q).addClass("tipsy-" + m);
    12571267g.find(".tipsy-arrow")[0].className = "tipsy-arrow tipsy-arrow-" + m.charAt(0);
    12581268this.options.className && g.addClass(y(this.options.className, this.$element[0]));
     
    13011311A.fn.tipsy = function(b) {
    13021312function k(x) {
    1303 var q = A.data(x, "tipsy");
    1304 q || (q = new p(x, A.fn.tipsy.elementOptions(x, b)), A.data(x, "tipsy", q));
    1305 return q;
     1313var u = A.data(x, "tipsy");
     1314u || (u = new p(x, A.fn.tipsy.elementOptions(x, b)), A.data(x, "tipsy", u));
     1315return u;
    13061316}
    13071317function g() {
    1308 var x = k(this), q = b.delayIn;
     1318var x = k(this), u = b.delayIn;
    13091319x.hoverState = "in";
    1310 0 == q ? x.show() : (x.fixTitle(), setTimeout(function() {
     13200 == u ? x.show() : (x.fixTitle(), setTimeout(function() {
    13111321"in" == x.hoverState && x.show();
    1312 }, q));
     1322}, u));
    13131323}
    13141324function l() {
    1315 var x = k(this), q = b.delayOut;
     1325var x = k(this), u = b.delayOut;
    13161326x.hoverState = "out";
    1317 0 == q ? x.hide() : (x.tip().removeClass("in"), setTimeout(function() {
     13270 == u ? x.hide() : (x.tip().removeClass("in"), setTimeout(function() {
    13181328"out" == x.hoverState && x.hide();
    1319 }, q));
     1329}, u));
    13201330}
    13211331b = A.extend({}, A.fn.tipsy.defaults, b);
     
    13241334});
    13251335if ("manual" != b.trigger) {
    1326 var m = b.live ? "live" : "bind", r = "hover" == b.trigger ? "mouseleave" : "blur";
    1327 this[m]("hover" == b.trigger ? "mouseenter" : "focus", g)[m](r, l);
     1336var m = b.live ? "live" : "bind", q = "hover" == b.trigger ? "mouseleave" : "blur";
     1337this[m]("hover" == b.trigger ? "mouseenter" : "focus", g)[m](q, l);
    13281338}
    13291339return this;
     
    13481358};
    13491359A.fn.tipsy.autoNS = function() {
    1350 return A(this).offset().top > A(E).scrollTop() + A(t).height() / 2 ? "s" : "n";
     1360return A(this).offset().top > A(E).scrollTop() + A(r).height() / 2 ? "s" : "n";
    13511361};
    13521362A.fn.tipsy.autoWE = function() {
    1353 return A(this).offset().left > A(E).scrollLeft() + A(t).width() / 2 ? "e" : "w";
     1363return A(this).offset().left > A(E).scrollLeft() + A(r).width() / 2 ? "e" : "w";
    13541364};
    13551365A.fn.tipsy.autoBounds = function(b, k) {
    13561366return function() {
    1357 var g = k[0], l = 1 < k.length ? k[1] : !1, m = A(E).scrollTop() + b, r = A(E).scrollLeft() + b, x = A(this);
     1367var g = k[0], l = 1 < k.length ? k[1] : !1, m = A(E).scrollTop() + b, q = A(E).scrollLeft() + b, x = A(this);
    13581368x.offset().top < m && (g = "n");
    1359 x.offset().left < r && (l = "w");
    1360 A(t).width() + A(E).scrollLeft() - x.offset().left < b && (l = "e");
    1361 A(t).height() + A(E).scrollTop() - x.offset().top < b && (g = "s");
     1369x.offset().left < q && (l = "w");
     1370A(r).width() + A(E).scrollLeft() - x.offset().left < b && (l = "e");
     1371A(r).height() + A(E).scrollTop() - x.offset().top < b && (g = "s");
    13621372return g + (l ? l : "");
    13631373};
     
    13651375return w;
    13661376}({}, K, M));
    1367 D.register("28", function(w, t, E) {
     1377D.register("28", function(w, r, E) {
    13681378"".localeCompare || (String.prototype.localeCompare = function() {
    13691379return 0;
     
    13731383});
    13741384"".padStart || (String.prototype.padStart = function(y, p) {
    1375 let u = this.valueOf();
    1376 for (;y > u.length; ) u = p + u;
    1377 return u;
     1385let t = this.valueOf();
     1386for (;y > t.length; ) t = p + t;
     1387return t;
    13781388});
    13791389"".padEnd || (String.prototype.padEnd = function(y, p) {
    1380 let u = this.valueOf();
    1381 for (;y > u.length; ) u += p;
    1382 return u;
     1390let t = this.valueOf();
     1391for (;y > t.length; ) t += p;
     1392return t;
    13831393});
    13841394w.html = function() {
     
    13891399return '<a href="' + l + '" target="' + (m.indexOf(k) ? "_blank" : "_top") + '">' + m + "</a>";
    13901400}
    1391 let u, e, b, k, g = function() {
    1392 u = /[<>&]/g;
     1401let t, e, b, k, g = function() {
     1402t = /[<>&]/g;
    13931403e = /(\r\n|\n|\r)/g;
    13941404b = /(?:https?):\/\/(\S+)/gi;
     
    13981408return function(l, m) {
    13991409g && g();
    1400 l = l.replace(u, y);
     1410l = l.replace(t, y);
    14011411m && (l = l.replace(b, p).replace(e, "<br />"));
    14021412return l;
     
    14051415return w;
    14061416}({}, K, M));
    1407 D.register("29", function(w, t, E) {
     1417D.register("29", function(w, r, E) {
    14081418function y() {}
    1409 let p, u;
     1419let p, t;
    14101420const e = D.require("1b");
    14111421w.init = function() {
     
    14211431};
    14221432w.parse = function(b) {
    1423 p || (u = /[-_+]/, p = /^([a-z]{2,3})(?:-([a-z]{4}))?(?:-([a-z]{2}|[0-9]{3}))?(?:-([0-9][a-z0-9]{3,8}|[a-z0-9]{5,8}))?(?:-([a-z]-[-a-z]+))?$/i);
    1424 b = String(b).split(u).join("-");
     1433p || (t = /[-_+]/, p = /^([a-z]{2,3})(?:-([a-z]{4}))?(?:-([a-z]{2}|[0-9]{3}))?(?:-([0-9][a-z0-9]{3,8}|[a-z0-9]{5,8}))?(?:-([a-z]-[-a-z]+))?$/i);
     1434b = String(b).split(t).join("-");
    14251435b = p.exec(b);
    14261436if (!b) return null;
     
    14331443return k;
    14341444};
    1435 t = y.prototype;
    1436 t.isValid = function() {
     1445r = y.prototype;
     1446r.isValid = function() {
    14371447return !!this.lang;
    14381448};
    1439 t.toString = function(b) {
     1449r.toString = function(b) {
    14401450b = b || "-";
    14411451let k, g = this.lang || "zxx";
     
    14461456return g;
    14471457};
    1448 t.getIcon = function() {
     1458r.getIcon = function() {
    14491459let b = 4, k = [];
    14501460const g = [ "variant", "region", "script", "lang" ];
     
    14561466return k.join(" ");
    14571467};
    1458 t.isRTL = function() {
     1468r.isRTL = function() {
    14591469return !!e[String(this.script || this.lang).toLowerCase()];
    14601470};
    1461 t = null;
     1471r = null;
    14621472return w;
    14631473}({}, K, M));
    1464 D.register("2a", function(w, t, E) {
     1474D.register("2a", function(w, r, E) {
    14651475function y(b) {
    1466 t.console && console.error && console.error(b);
     1476r.console && console.error && console.error(b);
    14671477}
    14681478function p() {
    14691479y("Method not implemented");
    14701480}
    1471 function u() {}
     1481function t() {}
    14721482function e(b) {}
    1473 u.prototype.toString = function() {
     1483t.prototype.toString = function() {
    14741484return "[Undefined]";
    14751485};
     
    14771487let k, g, l = !0;
    14781488for (k in this) g = this[k], g === p ? (y(b + "." + k + "() must be implemented"),
    1479 l = !1) : g instanceof u && (y(b + "." + k + " must be defined"), l = !1);
     1489l = !1) : g instanceof t && (y(b + "." + k + " must be defined"), l = !1);
    14801490return l;
    14811491};
     
    14861496for (;0 !== l--; ) g[b[l]] = p;
    14871497}
    1488 if (k) for (b = k.length; 0 !== b--; ) g[k[b]] = new u();
     1498if (k) for (b = k.length; 0 !== b--; ) g[k[b]] = new t();
    14891499return g;
    14901500};
     
    14951505return w;
    14961506}({}, K, M));
    1497 D.register("31", function(w, t, E) {
    1498 let y = 0, p = t.requestAnimationFrame, u = t.cancelAnimationFrame;
    1499 if (!p || !u) for (const b in {
     1507D.register("31", function(w, r, E) {
     1508let y = 0, p = r.requestAnimationFrame, t = r.cancelAnimationFrame;
     1509if (!p || !t) for (const b in {
    15001510ms: 1,
    15011511moz: 1,
    15021512webkit: 1,
    15031513o: 1
    1504 }) if (p = t[b + "RequestAnimationFrame"]) if (u = t[b + "CancelAnimationFrame"] || t[b + "CancelRequestAnimationFrame"]) break;
    1505 p && u || (p = function(b) {
     1514}) if (p = r[b + "RequestAnimationFrame"]) if (t = r[b + "CancelAnimationFrame"] || r[b + "CancelRequestAnimationFrame"]) break;
     1515p && t || (p = function(b) {
    15061516var k = e();
    15071517const g = Math.max(0, 16 - (k - y)), l = k + g;
    1508 k = t.setTimeout(function() {
     1518k = r.setTimeout(function() {
    15091519b(l);
    15101520}, g);
    15111521y = l;
    15121522return k;
    1513 }, u = function(b) {
     1523}, t = function(b) {
    15141524clearTimeout(b);
    15151525});
     
    15261536return {
    15271537stop: function() {
    1528 m && u(m);
     1538m && t(m);
    15291539m = null;
    15301540}
     
    15331543return w;
    15341544}({}, K, M));
    1535 D.register("2e", function(w, t, E) {
    1536 function y(r, x, q, f) {
     1545D.register("2e", function(w, r, E) {
     1546function y(q, x, u, f) {
    15371547if (e) {
    1538 const a = q;
    1539 q = function(c) {
     1548const a = u;
     1549u = function(c) {
    15401550if ((c.MSPOINTER_TYPE_TOUCH || "touch") === c.pointerType) return a(c);
    15411551};
    15421552}
    1543 r.addEventListener(x, q, f);
     1553q.addEventListener(x, u, f);
    15441554return {
    15451555unbind: function() {
    1546 r.removeEventListener(x, q, f);
    1547 }
    1548 };
    1549 }
    1550 function p(r) {
    1551 r.preventDefault();
    1552 r.stopPropagation();
     1556q.removeEventListener(x, u, f);
     1557}
     1558};
     1559}
     1560function p(q) {
     1561q.preventDefault();
     1562q.stopPropagation();
    15531563return !1;
    15541564}
    1555 let u;
    1556 const e = !!t.navigator.msPointerEnabled, b = e ? "MSPointerDown" : "touchstart", k = e ? "MSPointerMove" : "touchmove", g = e ? "MSPointerUp" : "touchend";
    1557 w.ok = function(r) {
    1558 null == u && (u = "function" === typeof E.body.addEventListener);
    1559 u && r && r(w);
    1560 return u;
     1565let t;
     1566const e = !!r.navigator.msPointerEnabled, b = e ? "MSPointerDown" : "touchstart", k = e ? "MSPointerMove" : "touchmove", g = e ? "MSPointerUp" : "touchend";
     1567w.ok = function(q) {
     1568null == t && (t = "function" === typeof E.body.addEventListener);
     1569t && q && q(w);
     1570return t;
    15611571};
    15621572w.ms = function() {
    15631573return e;
    15641574};
    1565 w.dragger = function(r, x) {
    1566 function q(d) {
    1567 r.addEventListener(d, a[d], !1);
     1575w.dragger = function(q, x) {
     1576function u(d) {
     1577q.addEventListener(d, a[d], !1);
    15681578}
    15691579function f(d) {
    1570 r.removeEventListener(d, a[d], !1);
     1580q.removeEventListener(d, a[d], !1);
    15711581}
    15721582const a = {};
     
    15761586x(d, n, c);
    15771587});
    1578 q(k);
    1579 q(g);
     1588u(k);
     1589u(g);
    15801590return !0;
    15811591};
     
    15961606return p(d);
    15971607};
    1598 q(b);
     1608u(b);
    15991609let c = {
    16001610kill: function() {
     
    16021612f(k);
    16031613f(g);
    1604 r = c = x = null;
     1614q = c = x = null;
    16051615}
    16061616};
    16071617return c;
    16081618};
    1609 w.swiper = function(r, x, q) {
     1619w.swiper = function(q, x, u) {
    16101620function f(F) {
    1611 r.addEventListener(F, v[F], !1);
     1621q.addEventListener(F, v[F], !1);
    16121622}
    16131623function a(F) {
    1614 r.removeEventListener(F, v[F], !1);
     1624q.removeEventListener(F, v[F], !1);
    16151625}
    16161626function c() {
     
    16181628d = null;
    16191629}
    1620 let d, h, n, v = {}, z = [], C = [], B = [];
     1630let d, h, n, v = {}, C = [], B = [], z = [];
    16211631v[b] = function(F) {
    16221632h = !1;
     
    16241634const G = m();
    16251635l(F, function(H, J) {
    1626 z[H] = G;
    1627 C[H] = J.clientX;
    1628 B[H] = J.clientY;
    1629 });
    1630 n = r.scrollLeft;
     1636C[H] = G;
     1637B[H] = J.clientX;
     1638z[H] = J.clientY;
     1639});
     1640n = q.scrollLeft;
    16311641return !0;
    16321642};
    16331643v[g] = function(F) {
    16341644l(F, function(G, H) {
    1635 const J = m() - z[G];
    1636 G = C[G] - H.clientX;
     1645const J = m() - C[G];
     1646G = B[G] - H.clientX;
    16371647x(Math.abs(G) / J, G ? 0 > G ? -1 : 1 : 0);
    16381648});
     
    16431653let G, H;
    16441654null == n || l(F, function(J, O) {
    1645 G = C[J] - O.clientX;
    1646 H = B[J] - O.clientY;
     1655G = B[J] - O.clientX;
     1656H = z[J] - O.clientY;
    16471657});
    16481658if (H && Math.abs(H) > Math.abs(G)) return h = !0;
    1649 G && (h = !0, r.scrollLeft = Math.max(0, n + G));
     1659G && (h = !0, q.scrollLeft = Math.max(0, n + G));
    16501660return p(F);
    16511661};
    1652 if (!e || q) f(b), f(k), f(g), e && (r.className += " mstouch");
     1662if (!e || u) f(b), f(k), f(g), e && (q.className += " mstouch");
    16531663return {
    16541664kill: function() {
     
    16651675},
    16661676snap: function(F) {
    1667 e && !q && (r.style["-ms-scroll-snap-points-x"] = "snapInterval(0px," + F + "px)",
    1668 r.style["-ms-scroll-snap-type"] = "mandatory", r.style["-ms-scroll-chaining"] = "none");
     1677e && !u && (q.style["-ms-scroll-snap-points-x"] = "snapInterval(0px," + F + "px)",
     1678q.style["-ms-scroll-snap-type"] = "mandatory", q.style["-ms-scroll-chaining"] = "none");
    16691679},
    16701680scroll: function(F, G, H) {
    16711681c();
    1672 let J = r.scrollLeft;
     1682let J = q.scrollLeft;
    16731683const O = F > J ? 1 : -1, R = Math[1 === O ? "min" : "max"], I = Math.round(16 * G * O);
    16741684return d = D.require("31").loop(function(Q) {
    1675 Q && (J = Math.max(0, R(F, J + I)), r.scrollLeft = J, F === J && (c(), H && H(J)));
    1676 }, r);
    1677 }
    1678 };
    1679 };
    1680 w.start = function(r, x) {
    1681 return y(r, b, x, !1);
    1682 };
    1683 w.move = function(r, x) {
    1684 return y(r, k, x, !1);
    1685 };
    1686 w.end = function(r, x) {
    1687 return y(r, g, x, !1);
    1688 };
    1689 const l = w.each = function(r, x) {
    1690 if (e) (r.MSPOINTER_TYPE_TOUCH || "touch") === r.pointerType && x(0, r); else {
    1691 r = (r.originalEvent || r).changedTouches || [];
    1692 for (var q = -1; ++q < r.length; ) x(q, r[q]);
     1685Q && (J = Math.max(0, R(F, J + I)), q.scrollLeft = J, F === J && (c(), H && H(J)));
     1686}, q);
     1687}
     1688};
     1689};
     1690w.start = function(q, x) {
     1691return y(q, b, x, !1);
     1692};
     1693w.move = function(q, x) {
     1694return y(q, k, x, !1);
     1695};
     1696w.end = function(q, x) {
     1697return y(q, g, x, !1);
     1698};
     1699const l = w.each = function(q, x) {
     1700if (e) (q.MSPOINTER_TYPE_TOUCH || "touch") === q.pointerType && x(0, q); else {
     1701q = (q.originalEvent || q).changedTouches || [];
     1702for (var u = -1; ++u < q.length; ) x(u, q[u]);
    16931703}
    16941704}, m = Date.now || function() {
     
    16971707return w;
    16981708}({}, K, M));
    1699 D.register("32", function(w, t, E) {
     1709D.register("32", function(w, r, E) {
    17001710w.init = function(y) {
    17011711function p() {
     
    17031713return !0;
    17041714}
    1705 function u() {
     1715function t() {
    17061716const l = k;
    17071717l.textContent = y.value;
     
    17151725const b = y.parentNode;
    17161726let k = b.insertBefore(E.createElement("div"), y);
    1717 A(y).on("input", u).on("scroll", p);
     1727A(y).on("input", t).on("scroll", p);
    17181728A(b).addClass("has-mirror");
    17191729k.className = "ta-mirror";
    17201730const g = y.offsetWidth - y.clientWidth;
    172117312 < g && (k.style.marginRight = String(g - 2) + "px");
    1722 u();
     1732t();
    17231733p();
    17241734return {
    17251735kill: function() {
    1726 A(y).off("input", u).off("scroll", p);
     1736A(y).off("input", t).off("scroll", p);
    17271737b.removeChild(k);
    17281738k = null;
     
    17331743return w;
    17341744}({}, K, M));
    1735 D.register("23", function(w, t, E) {
     1745D.register("23", function(w, r, E) {
    17361746function y(e, b) {
    17371747e = p[e] || [];
    1738 b = b && t[b];
     1748b = b && r[b];
    17391749const k = e.length;
    17401750let g = -1, l = 0;
     
    17461756}
    17471757const p = {};
    1748 let u = "";
     1758let t = "";
    17491759w.load = function(e, b, k) {
    17501760function g() {
    1751 r && (clearTimeout(r), r = null);
     1761q && (clearTimeout(q), q = null);
    17521762x && (x.onreadystatechange = null, x = x = x.onload = null);
    17531763e && (delete p[e], e = null);
    17541764}
    1755 function l(q, f) {
    1756 q = x && x.readyState;
    1757 if (f || !q || "loaded" === q || "complete" === q) f || y(e, k), g();
     1765function l(u, f) {
     1766u = x && x.readyState;
     1767if (f || !u || "loaded" === u || "complete" === u) f || y(e, k), g();
    17581768}
    17591769function m() {
     
    17611771g();
    17621772}
    1763 if (k && t[k]) "function" === typeof b && b(t[k]); else if (null != p[e]) p[e].push(b); else {
     1773if (k && r[k]) "function" === typeof b && b(r[k]); else if (null != p[e]) p[e].push(b); else {
    17641774p[e] = [ b ];
    1765 var r = setTimeout(m, 4e3), x = E.createElement("script");
     1775var q = setTimeout(m, 4e3), x = E.createElement("script");
    17661776x.setAttribute("src", e);
    17671777x.setAttribute("async", "true");
     
    17751785w.stat = function(e) {
    17761786var b;
    1777 if (!(b = u)) {
     1787if (!(b = t)) {
    17781788{
    17791789b = E.getElementsByTagName("script");
     
    17831793const m = b[g].getAttribute("src");
    17841794if (m) {
    1785 const r = m.indexOf("/lib/vendor");
    1786 if (-1 !== r) {
    1787 l = m.substring(0, r);
     1795const q = m.indexOf("/lib/vendor");
     1796if (-1 !== q) {
     1797l = m.substring(0, q);
    17881798break;
    17891799}
     
    17921802b = l || "/static";
    17931803}
    1794 b = u = b;
     1804b = t = b;
    17951805}
    17961806return b + e;
     
    18011811return w;
    18021812}({}, K, M));
    1803 D.register("10", function(w, t, E) {
    1804 function y(m, r) {
     1813D.register("10", function(w, r, E) {
     1814function y(m, q) {
    18051815m.setReadOnly(!1);
    1806 m.on("change", function(x, q) {
    1807 return r.val(q.getValue());
     1816m.on("change", function(x, u) {
     1817return q.val(u.getValue());
    18081818});
    18091819m.on("focus", function() {
    1810 return r.focus();
     1820return q.focus();
    18111821});
    18121822m.on("blur", function() {
    1813 return r.blur();
     1823return q.blur();
    18141824});
    18151825}
     
    18191829m.off("blur");
    18201830}
    1821 function u(m) {
     1831function t(m) {
    18221832p(m);
    18231833m.setReadOnly(!0);
     
    18251835m.setHighlightActiveLine(!1);
    18261836}
    1827 function e(m, r) {
     1837function e(m, q) {
    18281838function x() {
    18291839this.HighlightRules = f;
    18301840}
    18311841m = m.require;
    1832 const q = m("ace/lib/oop"), f = b(r);
    1833 q.inherits(f, m("ace/mode/text_highlight_rules").TextHighlightRules);
    1834 q.inherits(x, m("ace/mode/text").Mode);
     1842const u = m("ace/lib/oop"), f = b(q);
     1843u.inherits(f, m("ace/mode/text_highlight_rules").TextHighlightRules);
     1844u.inherits(x, m("ace/mode/text").Mode);
    18351845return new x();
    18361846}
    18371847function b(m) {
    18381848return function() {
    1839 let r = {
     1849let q = {
    18401850start: [ {
    18411851token: "empty_line",
     
    18611871} ]
    18621872}, x = k(m);
    1863 "icu" === m ? r = {
    1864 start: r.start.concat([ {
     1873"icu" === m ? q = {
     1874start: q.start.concat([ {
    18651875token: "icu-quoted",
    18661876regex: /'([{}][^']*)?'/
     
    18951905defaultToken: "icu"
    18961906} ]
    1897 } : x && r.start.push({
     1907} : x && q.start.push({
    18981908token: "printf",
    18991909regex: x
    19001910});
    1901 this.$rules = r;
     1911this.$rules = q;
    19021912};
    19031913}
     
    19301940}
    19311941let g, l = "auto";
    1932 w.init = function(m, r, x) {
    1933 let q, f = !1, a = x || l, c = m.parentNode, d = c.appendChild(E.createElement("div"));
     1942w.init = function(m, q, x) {
     1943let u, f = !1, a = x || l, c = m.parentNode, d = c.appendChild(E.createElement("div"));
    19341944A(c).addClass("has-proxy has-ace");
    19351945D.require("23").load("https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ace.js", function(h) {
    19361946if (d) {
    19371947if (!h) throw Error("Failed to load code editor");
    1938 q = h.edit(d);
    1939 var n = q.session, v = q.renderer;
    1940 q.$blockScrolling = Infinity;
    1941 q.setShowInvisibles(f);
    1942 q.setWrapBehavioursEnabled(!1);
    1943 q.setBehavioursEnabled(!1);
    1944 q.setHighlightActiveLine(!1);
     1948u = h.edit(d);
     1949var n = u.session, v = u.renderer;
     1950u.$blockScrolling = Infinity;
     1951u.setShowInvisibles(f);
     1952u.setWrapBehavioursEnabled(!1);
     1953u.setBehavioursEnabled(!1);
     1954u.setHighlightActiveLine(!1);
    19451955n.setUseSoftTabs(!1);
    19461956v.setShowGutter(!0);
     
    19481958v.setScrollMargin(8);
    19491959n.setMode(e(h, a));
    1950 q.setValue(m.value, -1);
     1960u.setValue(m.value, -1);
    19511961n.setUseWrapMode(!0);
    1952 r ? y(q, r) : u(q);
     1962q ? y(u, q) : t(u);
    19531963}
    19541964}, "ace");
    19551965return {
    19561966kill: function() {
    1957 q && (p(q), q.destroy(), q = null);
     1967u && (p(u), u.destroy(), u = null);
    19581968d && (c.removeChild(d), A(c).removeClass("has-proxy has-ace"), d = null);
    19591969return this;
    19601970},
    19611971disable: function() {
    1962 q && u(q);
    1963 r = null;
     1972u && t(u);
     1973q = null;
    19641974return this;
    19651975},
    19661976enable: function(h) {
    1967 r = h;
    1968 q && y(q, h);
     1977q = h;
     1978u && y(u, h);
    19691979return this;
    19701980},
    19711981resize: function() {
    1972 q && q.resize();
     1982u && u.resize();
    19731983return this;
    19741984},
    19751985val: function(h) {
    1976 q && h !== q.getValue() && q.setValue(h, -1);
     1986u && h !== u.getValue() && u.setValue(h, -1);
    19771987return this;
    19781988},
    19791989invs: function(h) {
    19801990h = h || !1;
    1981 f !== h && (f = h, q && q.setShowInvisibles(h));
     1991f !== h && (f = h, u && u.setShowInvisibles(h));
    19821992return this;
    19831993},
    19841994strf: function(h) {
    19851995h = h || l;
    1986 h !== a && (a = h, q && q.session.setMode(e(t.ace, h)));
     1996h !== a && (a = h, u && u.session.setMode(e(r.ace, h)));
    19871997return this;
    19881998},
    19891999focus: function() {
    1990 q && q.focus();
    1991 return this;
    1992 }
    1993 };
    1994 };
    1995 w.strf = function(m, r) {
     2000u && u.focus();
     2001return this;
     2002}
     2003};
     2004};
     2005w.strf = function(m, q) {
    19962006l = m;
    1997 g = r;
     2007g = q;
    19982008return w;
    19992009};
    20002010return w;
    20012011}({}, K, M));
    2002 D.register("33", function(w, t, E) {
     2012D.register("33", function(w, r, E) {
    20032013function y(b, k) {
    20042014function g() {
     
    20212031b.off("blur");
    20222032}
    2023 function u(b) {
     2033function t(b) {
    20242034p(b);
    20252035b.setMode("readonly");
     
    20352045function g(h) {
    20362046x = h;
    2037 q = "<p>" === h.substring(0, 3) && "</p>" === h.substring(h.length - 4);
     2047u = "<p>" === h.substring(0, 3) && "</p>" === h.substring(h.length - 4);
    20382048return h.replace(/(<\/?)script/gi, "$1loco:script");
    20392049}
     
    20442054n = this._getContent(n);
    20452055n = n.replace(/(<\/?)loco:script/gi, "$1script");
    2046 if (!q && "<p>" === n.substring(0, 3) && "</p>" === n.substring(n.length - 4)) {
     2056if (!u && "<p>" === n.substring(0, 3) && "</p>" === n.substring(n.length - 4)) {
    20472057const v = n.substring(3, n.length - 4);
    20482058if (v === x || -1 === v.indexOf("</p>")) n = v;
     
    20542064return this._setContent(g(n), v);
    20552065};
    2056 k ? (y(h, k), k.reset()) : u(h);
     2066k ? (y(h, k), k.reset()) : t(h);
    20572067A(c).removeClass("loading");
    20582068}
    2059 let m, r = !1, x = "", q = !1, f = b.parentNode, a = f.parentNode, c = f.appendChild(E.createElement("div")), d = a.insertBefore(E.createElement("nav"), f);
     2069let m, q = !1, x = "", u = !1, f = b.parentNode, a = f.parentNode, c = f.appendChild(E.createElement("div")), d = a.insertBefore(E.createElement("nav"), f);
    20602070d.id = "_tb" + String(++e);
    20612071A(f).addClass("has-proxy has-mce");
     
    21242134},
    21252135disable: function() {
    2126 m && u(m);
     2136m && t(m);
    21272137k = null;
    21282138return this;
     
    21342144invs: function(h) {
    21352145h = h || !1;
    2136 r !== h && (r = h, A(f)[h ? "addClass" : "removeClass"]("show-invs"));
     2146q !== h && (q = h, A(f)[h ? "addClass" : "removeClass"]("show-invs"));
    21372147return this;
    21382148}
     
    21412151return w;
    21422152}({}, K, M));
    2143 D.register("34", function(w, t, E) {
     2153D.register("34", function(w, r, E) {
    21442154w.init = function(y, p) {
    2145 function u(a) {
     2155function t(a) {
    21462156x !== a && (f.textContent = a.format(0), x = a, a = 0 === a ? "empty" : 0 === p || a < p ? "lt" : p === a ? "eq" : "gt",
    2147 a !== r && (r = a, q.className = "wg-count is-" + a));
     2157a !== q && (q = a, u.className = "wg-count is-" + a));
    21482158}
    21492159function e(a) {
    2150 m && (q.removeChild(m), m = null);
    2151 0 < a && (m = q.appendChild(g.el("span").appendChild(g.txt(" / " + a.format(0)))));
     2160m && (u.removeChild(m), m = null);
     21610 < a && (m = u.appendChild(g.el("span").appendChild(g.txt(" / " + a.format(0)))));
    21522162p = a;
    21532163}
    21542164function b(a, c) {
    2155 u(c.length);
     2165t(c.length);
    21562166}
    21572167function k() {
    2158 r = "";
     2168q = "";
    21592169x = -1;
    2160 u(y.val().length);
     2170t(y.val().length);
    21612171}
    21622172const g = D.require("1a"), l = A(y.parent()).on("changing", b);
    2163 let m, r, x, q = g.el("div"), f = q.appendChild(g.el("span"));
    2164 l.append(q);
     2173let m, q, x, u = g.el("div"), f = u.appendChild(g.el("span"));
     2174l.append(u);
    21652175e(p);
    21662176k();
     
    21722182kill: function() {
    21732183const a = l && l[0];
    2174 a && q && q.parentNode === a && (l.off("changing", b), a.removeChild(q));
     2184a && u && u.parentNode === a && (l.off("changing", b), a.removeChild(u));
    21752185}
    21762186};
     
    21782188return w;
    21792189}({}, K, M));
    2180 D.register("2f", function(w, t, E) {
     2190D.register("2f", function(w, r, E) {
    21812191function y(e) {
    21822192function b() {
    2183 f && (r.off("input", k), f = !1);
     2193f && (q.off("input", k), f = !1);
    21842194}
    21852195function k() {
    21862196const c = e.value;
    2187 c !== a && (r.trigger("changing", [ c, a ]), a = c);
     2197c !== a && (q.trigger("changing", [ c, a ]), a = c);
    21882198}
    21892199function g() {
    21902200k();
    2191 f && q !== a && r.trigger("changed", [ a ]);
     2201f && u !== a && q.trigger("changed", [ a ]);
    21922202}
    21932203function l() {
    2194 u = e;
    2195 q = a;
    2196 f || (r.on("input", k), f = !0);
    2197 r.trigger("editFocus");
     2204t = e;
     2205u = a;
     2206f || (q.on("input", k), f = !0);
     2207q.trigger("editFocus");
    21982208x.addClass("has-focus");
    21992209return !0;
    22002210}
    22012211function m() {
    2202 u === e && (u = null);
    2203 r.trigger("editBlur");
     2212t === e && (t = null);
     2213q.trigger("editBlur");
    22042214x.removeClass("has-focus");
    22052215f && (g(), b());
    22062216return !0;
    22072217}
    2208 const r = A(e), x = A(e.parentNode);
    2209 let q, f = !1, a = e.value;
    2210 r.on("blur", m).on("focus", l);
     2218const q = A(e), x = A(e.parentNode);
     2219let u, f = !1, a = e.value;
     2220q.on("blur", m).on("focus", l);
    22112221return {
    22122222val: function(c) {
    2213 a !== c && (e.value = c, r.triggerHandler("input"), a = c);
     2223a !== c && (e.value = c, q.triggerHandler("input"), a = c);
    22142224return !0;
    22152225},
    22162226kill: function() {
    22172227b();
    2218 r.off("blur", m).off("focus", l);
     2228q.off("blur", m).off("focus", l);
    22192229},
    22202230fire: function() {
     
    22262236focus: l,
    22272237reset: function() {
    2228 q = a = e.value;
     2238u = a = e.value;
    22292239}
    22302240};
     
    22332243this.e = e;
    22342244}
    2235 let u;
     2245let t;
    22362246w._new = function(e) {
    22372247return new p(e);
     
    22422252return b;
    22432253};
    2244 t = p.prototype;
    2245 t.destroy = function() {
     2254r = p.prototype;
     2255r.destroy = function() {
    22462256this.unlisten();
    22472257const e = this.p;
     
    22502260this.e = null;
    22512261};
    2252 t.reload = function(e, b) {
     2262r.reload = function(e, b) {
    22532263let k = this.l;
    22542264this.nocount();
     
    22582268return this;
    22592269};
    2260 t.val = function(e) {
     2270r.val = function(e) {
    22612271const b = this.e;
    22622272if (null == e) return b.value;
     
    22672277return this;
    22682278};
    2269 t.fire = function() {
     2279r.fire = function() {
    22702280this.l && this.l.fire();
    22712281return this;
    22722282};
    2273 t.ping = function() {
     2283r.ping = function() {
    22742284this.l && this.l.ping();
    22752285return this;
    22762286};
    2277 t.focus = function() {
     2287r.focus = function() {
    22782288const e = this.p;
    22792289e ? e.focus() : A(this.e).focus();
    22802290};
    2281 t.focused = function() {
    2282 return u && u === this.el;
    2283 };
    2284 t.parent = function() {
     2291r.focused = function() {
     2292return t && t === this.el;
     2293};
     2294r.parent = function() {
    22852295return this.e.parentNode;
    22862296};
    2287 t.attr = function(e, b) {
     2297r.attr = function(e, b) {
    22882298const k = this.e;
    22892299if (1 === arguments.length) return k.getAttribute(e);
     
    22912301return this;
    22922302};
    2293 t.editable = function() {
     2303r.editable = function() {
    22942304return !!this.l;
    22952305};
    2296 t.enable = function() {
     2306r.enable = function() {
    22972307const e = this.p;
    22982308this.e.removeAttribute("readonly");
     
    23012311return this;
    23022312};
    2303 t.disable = function() {
     2313r.disable = function() {
    23042314const e = this.p;
    23052315this.e.setAttribute("readonly", !0);
     
    23082318return this;
    23092319};
    2310 t.listen = function() {
     2320r.listen = function() {
    23112321const e = this.l;
    23122322e && e.kill();
     
    23142324return this;
    23152325};
    2316 t.unlisten = function() {
     2326r.unlisten = function() {
    23172327const e = this.l;
    23182328e && (e.kill(), this.l = null);
    23192329return this;
    23202330};
    2321 t.setInvs = function(e, b) {
     2331r.setInvs = function(e, b) {
    23222332const k = this.i || !1;
    23232333if (b || k !== e) this._i && (this._i.kill(), delete this._i), (b = this.p) && b.invs ? b.invs(e) : e && (this._i = D.require("32").init(this.e)),
     
    23252335return this;
    23262336};
    2327 t.getInvs = function() {
     2337r.getInvs = function() {
    23282338return this.i || !1;
    23292339};
    2330 t.setMode = function(e) {
     2340r.setMode = function(e) {
    23312341let b = this.p, k = this.i || !1;
    23322342e !== (this.m || "") && (this.m = e, b && b.kill(), this.p = b = "code" === e ? D.require("10").init(this.e, this.l, this["%"]) : "html" === e ? D.require("33").init(this.e, this.l) : null,
    2333 this.setInvs(k, !0), u && this.focus());
    2334 return this;
    2335 };
    2336 t.setStrf = function(e) {
     2343this.setInvs(k, !0), t && this.focus());
     2344return this;
     2345};
     2346r.setStrf = function(e) {
    23372347this["%"] = e;
    23382348"code" === this.m && this.p.strf(e);
    23392349return this;
    23402350};
    2341 t.name = function(e) {
     2351r.name = function(e) {
    23422352this.e.setAttribute("name", e);
    23432353return this;
    23442354};
    2345 t.placeholder = function(e) {
     2355r.placeholder = function(e) {
    23462356this.e.setAttribute("placeholder", e);
    23472357return this;
    23482358};
    2349 t.redraw = function() {
     2359r.redraw = function() {
    23502360const e = this.p;
    23512361e && e.resize && e.resize();
    23522362};
    2353 t.counter = function(e) {
     2363r.counter = function(e) {
    23542364let b = this.c;
    23552365b ? b.ping(e) : this.c = D.require("34").init(this, e);
     
    23582368return this;
    23592369};
    2360 t.nocount = function() {
     2370r.nocount = function() {
    23612371const e = this.c;
    23622372e && (e.kill(), this.c = null, this.e.removeAttribute("maxlength"));
     
    23642374return w;
    23652375}({}, K, M));
    2366 D.register("30", function(w, t, E) {
     2376D.register("30", function(w, r, E) {
    23672377function y(f) {
    2368 const a = t.console;
     2378const a = r.console;
    23692379a && a.error && a.error(f);
    23702380}
     
    23742384return a;
    23752385}
    2376 function u(f) {
     2386function t(f) {
    23772387return function() {
    23782388f.resize();
     
    24152425}
    24162426return function(h) {
    2417 const n = a || 0, v = c ? -1 : 1, z = f.rows || [];
    2418 h.sort(function(C, B) {
    2419 return v * (z[C] || d(C)).cellVal(n).localeCompare((z[B] || d(B)).cellVal(n));
     2427const n = a || 0, v = c ? -1 : 1, C = f.rows || [];
     2428h.sort(function(B, z) {
     2429return v * (C[B] || d(B)).cellVal(n).localeCompare((C[z] || d(z)).cellVal(n));
    24202430});
    24212431};
     
    24282438this.length = 0;
    24292439}
    2430 function r(f, a, c) {
     2440function q(f, a, c) {
    24312441let d = E.createElement("div");
    24322442d.className = c || "";
     
    24432453return new l(f);
    24442454};
    2445 var q = l.prototype;
    2446 q.init = function(f) {
     2455var u = l.prototype;
     2456u.init = function(f) {
    24472457let a = this.w, c = a.id;
    24482458var d = a.splity(c + "-thead", c + "-tbody"), h = d[0];
    24492459d = d[1];
    2450 let n = [], v = [], z = [], C = [];
     2460let n = [], v = [], C = [], B = [];
    24512461if (f) this.ds = f, this.idxs = v, this._idxs = null; else if (!(f = this.ds)) throw Error("No datasource");
    24522462h.css.push("wg-thead");
    24532463d.css.push("wg-tbody");
    24542464f.eachCol(function(O, R, I) {
    2455 z[O] = c + "-col-" + R;
    2456 C[O] = I || R;
    2457 });
    2458 var B = p();
    2459 let F = -1, G = z.length, H = p("wg-cols"), J = h.splitx.apply(h, z);
    2460 for (;++F < G; ) J[F].header(C[F]), H.appendChild(B.cloneNode(!1)).setAttribute("for", z[F]);
     2465C[O] = c + "-col-" + R;
     2466B[O] = I || R;
     2467});
     2468var z = p();
     2469let F = -1, G = C.length, H = p("wg-cols"), J = h.splitx.apply(h, C);
     2470for (;++F < G; ) J[F].header(B[F]), H.appendChild(z.cloneNode(!1)).setAttribute("for", C[F]);
    24612471f.eachRow(function(O, R, I) {
    2462 n[O] = new r(O, R, I);
     2472n[O] = new q(O, R, I);
    24632473v[O] = O;
    24642474});
     
    24662476this.cols = H;
    24672477this.ww = null;
    2468 this.root = B = d.body;
     2478this.root = z = d.body;
    24692479this.head = h;
    2470 h.redraw = u(this);
     2480h.redraw = t(this);
    24712481a.css.push("is-table");
    24722482a.restyle();
     
    24762486this.redrawDirty();
    24772487this.render();
    2478 A(B).attr("tabindex", "-1").on("keydown", k(this)).on("mousedown", e(this)).on("scroll", b(this));
    2479 return this;
    2480 };
    2481 q.clear = function() {
     2488A(z).attr("tabindex", "-1").on("keydown", k(this)).on("mousedown", e(this)).on("scroll", b(this));
     2489return this;
     2490};
     2491u.clear = function() {
    24822492const f = this.pages || [];
    24832493let a = f.length;
     
    24882498return this;
    24892499};
    2490 q.render = function() {
    2491 let f, a = [], c = this.rows || [], d = -1, h, n = this.idxs, v = n.length, z = this.idxr = {}, C = this.r, B = this._r, F = this.root, G = this.cols;
     2500u.render = function() {
     2501let f, a = [], c = this.rows || [], d = -1, h, n = this.idxs, v = n.length, C = this.idxr = {}, B = this.r, z = this._r, F = this.root, G = this.cols;
    24922502for (;++d < v; ) {
    24932503if (0 === d % 100) {
     
    25002510}
    25012511h = n[d];
    2502 z[h] = d;
     2512C[h] = d;
    25032513H = c[h];
    25042514if (null == H) throw Error("Render error, no data at [" + h + "]");
     
    25112521this.redrawDirty();
    25122522this.redraw();
    2513 null == C ? null != B && (H = c[B]) && H.page && (delete this._r, this.select(B, !0)) : (H = c[C]) && H.page ? this.select(C, !0) : (this.deselect(!1),
    2514 this._r = C);
    2515 return this;
    2516 };
    2517 q.resize = function() {
     2523null == B ? null != z && (H = c[z]) && H.page && (delete this._r, this.select(z, !0)) : (H = c[B]) && H.page ? this.select(B, !0) : (this.deselect(!1),
     2524this._r = B);
     2525return this;
     2526};
     2527u.resize = function() {
    25182528let f = -1, a = this.ww || (this.ww = []);
    25192529var c = this.w;
    2520 let d = c.cells[0], h = d.body.childNodes, n = h.length, v = this.pages || [], z = v.length;
     2530let d = c.cells[0], h = d.body.childNodes, n = h.length, v = this.pages || [], C = v.length;
    25212531for (c.redraw.call(d); ++f < n; ) a[f] = h[f].style.width;
    2522 if (z) {
     2532if (C) {
    25232533c = this.mx;
    25242534for (f = this.mn; f <= c; f++) v[f].widths(a);
     
    25262536}
    25272537};
    2528 q.redrawDirty = function() {
     2538u.redrawDirty = function() {
    25292539let f = !1;
    25302540var a = this.root;
     
    25352545return f;
    25362546};
    2537 q.redraw = function() {
     2547u.redraw = function() {
    25382548let f = 0, a = -1, c = null, d = null, h = this.ww;
    25392549var n = this.sy;
    2540 let v = this.mn, z = this.mx, C = Math.max(0, n - 100);
     2550let v = this.mn, C = this.mx, B = Math.max(0, n - 100);
    25412551n = this.vh + n + 100;
    2542 let B, F = this.pages || [], G = F.length;
    2543 for (;++a < G && !(f > n); ) B = F[a], f += B.height(), f < C || (null === c && (c = a),
    2544 d = a, B.rendered || B.render(h));
     2552let z, F = this.pages || [], G = F.length;
     2553for (;++a < G && !(f > n); ) z = F[a], f += z.height(), f < B || (null === c && (c = a),
     2554d = a, z.rendered || z.render(h));
    25452555if (v !== c) {
    25462556if (null !== v && c > v) for (a = v; a < c; a++) {
    2547 B = F[a];
    2548 if (!B) throw Error("Shit!");
    2549 B.rendered && B.sleep();
     2557z = F[a];
     2558if (!z) throw Error("Shit!");
     2559z.rendered && z.sleep();
    25502560}
    25512561this.mn = c;
    25522562}
    2553 if (z !== d) {
    2554 if (null !== z && d < z) for (a = z; a > d; a--) B = F[a], B.rendered && B.sleep();
     2563if (C !== d) {
     2564if (null !== C && d < C) for (a = C; a > d; a--) z = F[a], z.rendered && z.sleep();
    25552565this.mx = d;
    25562566}
    25572567};
    2558 q.selected = function() {
     2568u.selected = function() {
    25592569return this.r;
    25602570};
    2561 q.thead = function() {
     2571u.thead = function() {
    25622572return this.w.cells[0];
    25632573};
    2564 q.tbody = function() {
     2574u.tbody = function() {
    25652575return this.w.cells[1];
    25662576};
    2567 q.tr = function(f) {
     2577u.tr = function(f) {
    25682578return (f = this.row(f)) ? f.cells() : [];
    25692579};
    2570 q.row = function(f) {
     2580u.row = function(f) {
    25712581return this.rows[f];
    25722582};
    2573 q.td = function(f, a) {
     2583u.td = function(f, a) {
    25742584return this.tr(f)[a];
    25752585};
    2576 q.next = function(f, a, c) {
     2586u.next = function(f, a, c) {
    25772587null == c && (c = this.r || 0);
    25782588const d = this.idxs, h = d.length;
     
    25842594null) : c;
    25852595};
    2586 q.selectNext = function(f, a, c) {
     2596u.selectNext = function(f, a, c) {
    25872597f = this.next(f, a, null);
    25882598null != f && this.r !== f && this.select(f, c);
    25892599return this;
    25902600};
    2591 q.deselect = function(f) {
     2601u.deselect = function(f) {
    25922602const a = this.r;
    25932603null != a && (this.r = null, A(this.tr(a)).removeClass("selected"), this.w.fire("wgRowDeselect", [ a, f ]));
    25942604return this;
    25952605};
    2596 q.selectRow = function(f, a) {
     2606u.selectRow = function(f, a) {
    25972607return this.select(this.idxs[f], a);
    25982608};
    2599 q.select = function(f, a) {
     2609u.select = function(f, a) {
    26002610const c = this.rows[f];
    26012611var d = c && c.page;
     
    26142624return this;
    26152625};
    2616 q.unfilter = function() {
     2626u.unfilter = function() {
    26172627this._idxs && (this.idxs = this._sort(this._idxs), this._idxs = null, this.clear().render());
    26182628return this;
    26192629};
    2620 q.filter = function(f) {
     2630u.filter = function(f) {
    26212631this._idxs || (this._idxs = this.idxs);
    26222632this.idxs = this._sort(f);
    26232633return this.clear().render();
    26242634};
    2625 q.each = function(f) {
     2635u.each = function(f) {
    26262636let a, c = -1;
    26272637const d = this.rows || [], h = this.idxs || [], n = h.length;
     
    26292639return this;
    26302640};
    2631 q.sortable = function(f) {
     2641u.sortable = function(f) {
    26322642const a = this.sc || (this.sc = new m(this));
    26332643a.has(f) || a.add(f);
    26342644return this;
    26352645};
    2636 q._re_sort = function(f) {
     2646u._re_sort = function(f) {
    26372647let a = -1, c = this.sc, d = c.active;
    26382648for (this.sc = c = new m(this); ++a < f; ) c.add(a);
     
    26402650return this;
    26412651};
    2642 q._sort = function(f, a) {
     2652u._sort = function(f, a) {
    26432653a ? (this.s = a, a(f)) : (a = this.s) && a(f);
    26442654return f;
    26452655};
    2646 q.sort = function(f, a) {
     2656u.sort = function(f, a) {
    26472657this._sort(this.idxs, g(this, f, a));
    26482658this.sc.activate(f, a);
    26492659return this;
    26502660};
    2651 q = null;
    2652 q = m.prototype;
    2653 q.has = function(f) {
     2661u = null;
     2662u = m.prototype;
     2663u.has = function(f) {
    26542664return null != this[f];
    26552665};
    2656 q.add = function(f) {
     2666u.add = function(f) {
    26572667const a = this, c = a.t.head.cells[f];
    26582668a[f] = {
     
    26682678return a;
    26692679};
    2670 q.toggle = function(f) {
     2680u.toggle = function(f) {
    26712681this.t.sort(f, !this[f].desc).clear().render();
    26722682return this;
    26732683};
    2674 q.activate = function(f, a) {
     2684u.activate = function(f, a) {
    26752685let c, d = this.active, h = this[f], n = this.t.head.cells;
    26762686d && (c = n[d.idx]) && (c.removeClass(d.css), d !== h && c.restyle());
     
    26792689return this;
    26802690};
    2681 q = null;
    2682 q = r.prototype;
    2683 q.render = function(f) {
     2691u = null;
     2692u = q.prototype;
     2693u.render = function(f) {
    26842694let a, c = [], d = this._, h = this.length;
    26852695if (d) {
     
    26912701return this;
    26922702};
    2693 q.update = function(f, a) {
     2703u.update = function(f, a) {
    26942704a = a || this.c[f] || {};
    26952705f = (this.d[f] || function() {})() || " ";
     
    26972707return a;
    26982708};
    2699 q.cells = function() {
     2709u.cells = function() {
    27002710return this.c || [ this._ ];
    27012711};
    2702 q.data = function() {
     2712u.data = function() {
    27032713const f = [], a = this.length;
    27042714let c = -1;
     
    27062716return f;
    27072717};
    2708 q.destroy = function() {
     2718u.destroy = function() {
    27092719this.page = null;
    27102720this.rendered = !1;
    27112721};
    2712 q.cellVal = function(f) {
     2722u.cellVal = function(f) {
    27132723f = this.d[f]() || "";
    27142724return String(f.textContent || f);
    27152725};
    2716 q = null;
    2717 q = x.prototype;
    2718 q.size = function() {
     2726u = null;
     2727u = x.prototype;
     2728u.size = function() {
    27192729return this.rows.length;
    27202730};
    2721 q.insert = function(f) {
     2731u.insert = function(f) {
    27222732const a = this.h, c = p("wg-dead");
    27232733c.style.height = String(a) + "px";
     
    27252735return this.dead = c;
    27262736};
    2727 q.top = function() {
     2737u.top = function() {
    27282738return (this.rendered ? this.live : this.dead).offsetTop;
    27292739};
    2730 q.height = function() {
     2740u.height = function() {
    27312741let f = this.h;
    27322742null == f && (this.h = f = this.rendered ? this.live.firstChild.offsetHeight : this.dead.offsetHeight);
     
    27342744return f;
    27352745};
    2736 q.render = function(f) {
     2746u.render = function(f) {
    27372747let a, c = -1, d = this.rows, h = d.length;
    2738 const n = this.dead, v = this.live, z = v.childNodes;
    2739 for (;++c < h; ) a = d[c], a.rendered || a.render(z);
     2748const n = this.dead, v = this.live, C = v.childNodes;
     2749for (;++c < h; ) a = d[c], a.rendered || a.render(C);
    27402750h = f.length;
    2741 for (c = 0; c < h; c++) z[c].style.width = f[c];
     2751for (c = 0; c < h; c++) C[c].style.width = f[c];
    27422752n.parentNode.replaceChild(v, n);
    27432753this.rendered = !0;
     
    27452755return this;
    27462756};
    2747 q.sleep = function() {
     2757u.sleep = function() {
    27482758const f = this.height(), a = this.live, c = this.dead;
    27492759c.style.height = String(f) + "px";
     
    27532763return this;
    27542764};
    2755 q.sleepH = function(f) {
     2765u.sleepH = function(f) {
    27562766f *= this.rows.length;
    27572767const a = this.dead;
     
    27602770return this;
    27612771};
    2762 q.widths = function(f) {
     2772u.widths = function(f) {
    27632773const a = this.live.childNodes;
    27642774let c = f.length;
     
    27662776return this;
    27672777};
    2768 q.destroy = function() {
     2778u.destroy = function() {
    27692779var f = this.rendered ? this.live : this.dead;
    27702780const a = this.rows;
     
    27742784return w;
    27752785}({}, K, M));
    2776 D.register("2b", function(w, t, E) {
     2786D.register("2b", function(w, r, E) {
    27772787function y(d, h) {
    27782788var n = d.id;
    2779 let v = n && q[n], z = v && v.parent();
    2780 if (!v || !z) return null;
    2781 var C = 1 === z.dir;
    2782 n = C ? "X" : "Y";
    2783 let B = "page" + n;
    2784 C = C ? x : r;
    2785 let F = C(z.el);
     2789let v = n && u[n], C = v && v.parent();
     2790if (!v || !C) return null;
     2791var B = 1 === C.dir;
     2792n = B ? "X" : "Y";
     2793let z = "page" + n;
     2794B = B ? x : q;
     2795let F = B(C.el);
    27862796n = h["offset" + n];
    2787 let G = z.el, H = G.className;
    2788 null == n && (n = h[B] - C(d));
     2797let G = C.el, H = G.className;
     2798null == n && (n = h[z] - B(d));
    27892799n && (F += n);
    27902800G.className = H + " is-resizing";
     
    27942804},
    27952805move: function(J) {
    2796 z.resize(J[B] - F, v);
     2806C.resize(J[z] - F, v);
    27972807return !0;
    27982808}
     
    28152825return e(d);
    28162826}
    2817 function u(d, h) {
     2827function t(d, h) {
    28182828const n = h.type;
    28192829"touchmove" === n ? c && c.move(h) : "touchstart" === n ? c = y(d.target, h) : "touchend" === n && c && (c.done(),
     
    28472857this._cn = n;
    28482858this.css = v.concat("wg-cell");
    2849 q[h] = this;
     2859u[h] = this;
    28502860this.clear();
    28512861}
    2852 const l = D.include("2d") || D.require("2"), m = D.require("1a"), r = m.top, x = m.left, q = {};
     2862const l = D.include("2d") || D.require("2"), m = D.require("1a"), q = m.top, x = m.left, u = {};
    28532863let f, a = 0, c = !1;
    28542864w.init = function(d) {
     
    28562866h.redraw();
    28572867D.require("2e").ok(function(n) {
    2858 n.dragger(d, u);
     2868n.dragger(d, t);
    28592869});
    28602870A(d).on("mousedown", p);
    28612871return h;
    28622872};
    2863 t = g.prototype;
    2864 t.fire = function(d, h) {
     2873r = g.prototype;
     2874r.fire = function(d, h) {
    28652875d = A.Event(d);
    28662876d.cell = this;
     
    28682878return this;
    28692879};
    2870 t.each = function(d) {
     2880r.each = function(d) {
    28712881let h = -1;
    28722882const n = this.cells, v = n.length;
     
    28742884return this;
    28752885};
    2876 t.indexOf = function(d) {
    2877 return (d = q[d.id || String(d)]) && d.pid === this.id ? d.index : -1;
    2878 };
    2879 t.on = function() {
     2886r.indexOf = function(d) {
     2887return (d = u[d.id || String(d)]) && d.pid === this.id ? d.index : -1;
     2888};
     2889r.on = function() {
    28802890return this.$("on", arguments);
    28812891};
    2882 t.off = function() {
     2892r.off = function() {
    28832893return this.$("off", arguments);
    28842894};
    2885 t.find = function(d) {
     2895r.find = function(d) {
    28862896return A(this.el).find(d);
    28872897};
    2888 t.$ = function(d, h) {
     2898r.$ = function(d, h) {
    28892899A.fn[d].apply(A(this.el), h);
    28902900return this;
    28912901};
    2892 t.addClass = function(d) {
     2902r.addClass = function(d) {
    28932903this.css.push(d);
    28942904return this;
    28952905};
    2896 t.removeClass = function(d) {
     2906r.removeClass = function(d) {
    28972907d = this.css.indexOf(d);
    28982908-1 !== d && this.css.splice(d, 1);
    28992909return this;
    29002910};
    2901 t.parent = function() {
    2902 return this.pid && q[this.pid];
    2903 };
    2904 t.splitx = function() {
     2911r.parent = function() {
     2912return this.pid && u[this.pid];
     2913};
     2914r.splitx = function() {
    29052915return this._split(1, arguments);
    29062916};
    2907 t.splity = function() {
     2917r.splity = function() {
    29082918return this._split(2, arguments);
    29092919};
    2910 t._split = function(d, h) {
     2920r._split = function(d, h) {
    29112921(this.length || this.field) && this.clear();
    29122922let n = -1;
    2913 let v = h.length, z = 1 / v, C = 0;
     2923let v = h.length, C = 1 / v, B = 0;
    29142924for (;++n < v; ) {
    2915 var B = m.el();
    2916 this.body.appendChild(B);
    2917 var F = B;
     2925var z = m.el();
     2926this.body.appendChild(z);
     2927var F = z;
    29182928{
    29192929var G = h[n];
    29202930let H = 1, J = G;
    2921 for (;q[G]; ) G = J + "-" + ++H;
     2931for (;u[G]; ) G = J + "-" + ++H;
    29222932}
    29232933F.id = G;
    2924 B = new g(B);
    2925 B.index = n;
    2926 B.pid = this.id;
    2927 B._locale(this.lang, this.rtl);
    2928 B.pos = C;
    2929 C += z;
    2930 this.cells.push(B);
     2934z = new g(z);
     2935z.index = n;
     2936z.pid = this.id;
     2937z._locale(this.lang, this.rtl);
     2938z.pos = B;
     2939B += C;
     2940this.cells.push(z);
    29312941this.length++;
    29322942}
     
    29352945return this.cells;
    29362946};
    2937 t.count = function() {
     2947r.count = function() {
    29382948return this.cells && this.cells.length || 0;
    29392949};
    2940 t.destroy = function() {
     2950r.destroy = function() {
    29412951this.clear();
    2942 delete q[this.id];
     2952delete u[this.id];
    29432953const d = this.el;
    29442954d.innerHTML = "";
     
    29482958return this;
    29492959};
    2950 t.exists = function() {
    2951 return this === q[this.id];
    2952 };
    2953 t.clear = function() {
    2954 const d = this.el, h = this.cells, n = this.field, v = this.body, z = this.nav;
    2955 let C = this.length || 0;
    2956 for (;0 !== C--; ) delete q[h[C].destroy().id];
     2960r.exists = function() {
     2961return this === u[this.id];
     2962};
     2963r.clear = function() {
     2964const d = this.el, h = this.cells, n = this.field, v = this.body, C = this.nav;
     2965let B = this.length || 0;
     2966for (;0 !== B--; ) delete u[h[B].destroy().id];
    29572967this.cells = [];
    29582968this.length = 0;
    2959 z && (d.removeChild(z), this.nav = null);
     2969C && (d.removeChild(C), this.nav = null);
    29602970v && (n && (n.destroy(), this.counter = this.field = null), this.table && (this.table = null),
    29612971d === v.parentNode && d.removeChild(v));
     
    29642974return this;
    29652975};
    2966 t.resize = function(d, h) {
     2976r.resize = function(d, h) {
    29672977if (!h && (h = this.cells[1], !h)) return;
    29682978var n = h.index;
    2969 let v = this.cells, z = A(this.el)[1 === this.dir ? "width" : "height"](), C = v[n + 1];
     2979let v = this.cells, C = A(this.el)[1 === this.dir ? "width" : "height"](), B = v[n + 1];
    29702980n = v[n - 1];
    2971 h.pos = Math.min((C ? C.pos * z : z) - ((h.body || h.el.firstChild).offsetTop || 0), Math.max(n ? n.pos * z : 0, d)) / z;
     2981h.pos = Math.min((B ? B.pos * C : C) - ((h.body || h.el.firstChild).offsetTop || 0), Math.max(n ? n.pos * C : 0, d)) / C;
    29722982this.redraw();
    29732983this.fire("wgResize");
    29742984return this;
    29752985};
    2976 t.distribute = function(d) {
     2986r.distribute = function(d) {
    29772987let h = -1, n = 0, v;
    2978 const z = this.cells, C = d.length;
    2979 for (;++h < C && (v = z[++n]); ) v.pos = Math.max(0, Math.min(1, d[h]));
     2988const C = this.cells, B = d.length;
     2989for (;++h < B && (v = C[++n]); ) v.pos = Math.max(0, Math.min(1, d[h]));
    29802990this.redraw();
    29812991return this;
    29822992};
    2983 t.distribution = function() {
     2993r.distribution = function() {
    29842994let d = [], h = 0;
    29852995const n = this.cells, v = n.length - 1;
     
    29872997return d;
    29882998};
    2989 t.restyle = function() {
     2999r.restyle = function() {
    29903000var d = this.css.concat();
    299130010 === this.index ? d.push("first") : d.push("not-first");
     
    29983008return this;
    29993009};
    3000 t.redraw = function(d) {
     3010r.redraw = function(d) {
    30013011this.restyle();
    30023012const h = this.el;
    30033013var n = this.body, v = this.field;
    30043014if (n) {
    3005 var z = h.clientWidth || 0, C = h.clientHeight || 0, B = n.offsetTop || 0;
    3006 C = B > C ? 0 : C - B;
    3007 if (this._h !== C) {
    3008 this._h = C;
    3009 n.style.height = String(C) + "px";
     3015var C = h.clientWidth || 0, B = h.clientHeight || 0, z = n.offsetTop || 0;
     3016B = z > B ? 0 : B - z;
     3017if (this._h !== B) {
     3018this._h = B;
     3019n.style.height = String(B) + "px";
    30103020var F = v;
    30113021}
    3012 this._w !== z && (this._w = z, F = v);
     3022this._w !== C && (this._w = C, F = v);
    30133023F && F.redraw();
    30143024}
    30153025n = this.length;
    3016 z = 1;
    3017 C = this.nav;
    3018 for (B = 2 === this.dir ? "height" : "width"; 0 !== n--; ) v = this.cells[n], C ? F = 1 : (v.fixed && (v.pos = v.fixed / A(h)[B]()),
    3019 F = z - v.pos, z = v.pos), v.el.style[B] = String(100 * F) + "%", v.redraw(d);
    3020 return this;
    3021 };
    3022 t.contents = function(d, h) {
     3026C = 1;
     3027B = this.nav;
     3028for (z = 2 === this.dir ? "height" : "width"; 0 !== n--; ) v = this.cells[n], B ? F = 1 : (v.fixed && (v.pos = v.fixed / A(h)[z]()),
     3029F = C - v.pos, C = v.pos), v.el.style[z] = String(100 * F) + "%", v.redraw(d);
     3030return this;
     3031};
     3032r.contents = function(d, h) {
    30233033const n = this.el;
    30243034let v = this.body;
     
    30313041return this;
    30323042};
    3033 t.textarea = function(d, h) {
     3043r.textarea = function(d, h) {
    30343044let n = this.field;
    30353045if (n) {
     
    30443054return n;
    30453055};
    3046 t.locale = function(d) {
     3056r.locale = function(d) {
    30473057d = D.require("29").cast(d);
    30483058return this._locale(String(d), d.isRTL());
    30493059};
    3050 t._locale = function(d, h, n) {
     3060r._locale = function(d, h, n) {
    30513061const v = this.body;
    30523062if (n || d !== this.lang) this.lang = d, v && v.setAttribute("lang", d);
     
    30543064return this;
    30553065};
    3056 t.editable = function() {
     3066r.editable = function() {
    30573067let d = this.field;
    30583068if (d) return d.editable() ? d : null;
     
    30653075return d;
    30663076};
    3067 t.eachTextarea = function(d) {
     3077r.eachTextarea = function(d) {
    30683078const h = this.field;
    30693079h ? d(h) : this.each(function(n) {
     
    30723082return this;
    30733083};
    3074 t.append = function(d) {
     3084r.append = function(d) {
    30753085d && (d.nodeType ? l.init(this.body.appendChild(d)) : l.init(A(d).appendTo(this.body)));
    30763086return this;
    30773087};
    3078 t.prepend = function(d) {
     3088r.prepend = function(d) {
    30793089const h = this.body;
    30803090if (d.nodeType) {
     
    30843094return this;
    30853095};
    3086 t.before = function(d) {
     3096r.before = function(d) {
    30873097const h = this.body;
    30883098d.nodeType ? l.init(this.el.insertBefore(d, h)) : l.init(A(d).insertBefore(h));
    30893099return this;
    30903100};
    3091 t.header = function(d, h) {
     3101r.header = function(d, h) {
    30923102if (null == d && null == h) return this.el.getElementsByTagName("header")[0];
    30933103this.t = m.txt(d || "");
     
    30963106return this;
    30973107};
    3098 t.toolbar = function() {
     3108r.toolbar = function() {
    30993109const d = this.header(), h = d.getElementsByTagName("nav");
    31003110return 0 === h.length ? d.appendChild(m.el("nav")) : h[0];
    31013111};
    3102 t.title = function(d) {
     3112r.title = function(d) {
    31033113const h = this.t;
    31043114if (h) return h.nodeValue = d || "", h;
     
    31063116return this.t;
    31073117};
    3108 t.titled = function() {
     3118r.titled = function() {
    31093119return this.t && this.t.nodeValue;
    31103120};
    3111 t.bodyY = function() {
    3112 return r(this.body, this.el);
    3113 };
    3114 t.scrollY = function(d) {
     3121r.bodyY = function() {
     3122return q(this.body, this.el);
     3123};
     3124r.scrollY = function(d) {
    31153125if (la === d) return this.body.scrollTop;
    31163126this.body.scrollTop = d;
    31173127};
    3118 t.tabulate = function(d) {
     3128r.tabulate = function(d) {
    31193129let h = this.table;
    31203130h ? h.clear() : h = D.require("30").create(this);
     
    31223132return this.table = h;
    31233133};
    3124 t.lock = function() {
     3134r.lock = function() {
    31253135this.body.className += " locked";
    31263136return this;
    31273137};
    3128 t.scrollTo = function(d, h) {
     3138r.scrollTo = function(d, h) {
    31293139let n = this.body;
    31303140var v = n.scrollTop;
    3131 let z = r(d, n);
    3132 if (v > z) v = z; else {
    3133 const C = n.clientHeight;
    3134 d = z + A(d).outerHeight();
    3135 if (C + v < d) v = d - C; else return;
     3141let C = q(d, n);
     3142if (v > C) v = C; else {
     3143const B = n.clientHeight;
     3144d = C + A(d).outerHeight();
     3145if (B + v < d) v = d - B; else return;
    31363146}
    31373147h ? n.scrollTop = v : A(n).stop(!0).animate({
     
    31393149}, 250);
    31403150};
    3141 t.navigize = function(d, h) {
     3151r.navigize = function(d, h) {
    31423152function n(H) {
    3143 const J = C[H], O = z[H], R = A(J.el).show();
     3153const J = B[H], O = C[H], R = A(J.el).show();
    31443154O.addClass("active");
    31453155F = H;
     
    31483158return R;
    31493159}
    3150 const v = this, z = [], C = v.cells;
    3151 let B = v.nav, F;
    3152 B && v.el.removeChild(B);
    3153 B = v.nav = v.el.insertBefore(m.el("nav", "wg-tabs"), v.body);
    3154 const G = A(B).on("click", function(H) {
     3160const v = this, C = [], B = v.cells;
     3161let z = v.nav, F;
     3162z && v.el.removeChild(z);
     3163z = v.nav = v.el.insertBefore(m.el("nav", "wg-tabs"), v.body);
     3164const G = A(z).on("click", function(H) {
    31553165const J = A(H.target).data("idx");
    31563166if (null == J) return !0;
    31573167if (null != F) {
    31583168{
    3159 const O = z[F];
    3160 A(C[F].el).hide();
     3169const O = C[F];
     3170A(B[F].el).hide();
    31613171O.removeClass("active");
    31623172}
     
    31683178null == h && (h = G.data("idx") || 0);
    31693179v.each(function(H, J) {
    3170 z[J] = A('<a href="#' + H.id + '"></a>').data("idx", J).text(d[J]).appendTo(G);
     3180C[J] = A('<a href="#' + H.id + '"></a>').data("idx", J).text(d[J]).appendTo(G);
    31713181H.pos = 0;
    31723182A(H.el).hide();
    31733183});
    3174 n(C[h] ? h : 0);
     3184n(B[h] ? h : 0);
    31753185v.lock();
    31763186v.redraw();
    31773187return v;
    31783188};
    3179 t.navigated = function() {
     3189r.navigated = function() {
    31803190const d = this.nav;
    31813191if (d) return A(d).data("idx");
    31823192};
    3183 t = null;
     3193r = null;
    31843194return w;
    31853195}({}, K, M));
    3186 D.register("1d", function(w, t, E) {
     3196D.register("1d", function(w, r, E) {
    31873197function y(a, c) {
    31883198a.stopPropagation();
    3189 r = c;
     3199q = c;
    31903200return !0;
    31913201}
     
    31943204return [ null, [ c[5] ], [ c[1], c[5] ], [ c[1], c[3], c[5] ], [ c[1], c[3], c[4], c[5] ], [ c[1], c[2], c[3], c[4], c[5] ] ][a] || c;
    31953205}
    3196 function u(a) {
     3206function t(a) {
    31973207const c = [];
    31983208a && (a.saved() || c.push("po-unsaved"), a.fuzzy() ? c.push("po-fuzzy") : a.hasFlag() && c.push("po-flagged"),
     
    32273237D.require("3");
    32283238const l = D.require("28").html, m = D.require("6").sprintf;
    3229 let r, x;
     3239let q, x;
    32303240w.extend = function(a) {
    32313241return a.prototype = new g();
     
    32353245return w;
    32363246};
    3237 const q = function() {
     3247const u = function() {
    32383248const a = E.createElement("p"), c = /(src|href|on[a-z]+)\s*=/gi;
    32393249return function(d) {
     
    32803290}
    32813291const d = D.require("2b").init(a);
    3282 A(t).on("resize", c);
     3292A(r).on("resize", c);
    32833293this.redraw = c;
    32843294A(a).on("wgFocus wgBlur", y);
    32853295this.destroy = function() {
    32863296d.destroy();
    3287 A(t).off("resize", c);
     3297A(r).off("resize", c);
    32883298};
    32893299this.rootDiv = a;
     
    33103320f.next = function(a, c, d) {
    33113321const h = this.listTable, n = this.po;
    3312 let v = h.selected(), z = v, C;
     3322let v = h.selected(), C = v, B;
    33133323for (;null != (v = h.next(a, d, v)); ) {
    3314 if (z === v) {
     3324if (C === v) {
    33153325v = null;
    33163326break;
    33173327}
    3318 if (c && (C = n.row(v), C.translated(0))) continue;
     3328if (c && (B = n.row(v), B.translated(0))) continue;
    33193329break;
    33203330}
     
    33633373f.filter = function(a, c) {
    33643374const d = this.listTable, h = this.lastFound, n = this.lastSearch || "";
    3365 let v, z;
    3366 a ? (z = this.dict.find(a), v = z.length, v === h && 0 === a.indexOf(n) ? c = !0 : d.filter(z)) : (v = this.po.length,
     3375let v, C;
     3376a ? (C = this.dict.find(a), v = C.length, v === h && 0 === a.indexOf(n) ? c = !0 : d.filter(C)) : (v = this.po.length,
    33673377d.unfilter());
    33683378this.lastFound = v;
     
    33853395var c = this.po.indexOf(a);
    33863396if ((c = this.listTable.tr(c)) && c.length) {
    3387 var d = u(a);
     3397var d = t(a);
    33883398a = c[0].className;
    33893399d = a.replace(/(?:^| +)po-[a-z]+/g, "") + " " + d;
     
    33953405if (this.dirty || a) {
    33963406const d = [], h = [], n = this.listTable;
    3397 c.each(function(v, z, C) {
    3398 z.err && d.push(z);
    3399 z.saved() || (z.save(), (z = (v = n.row(C)) && v.page) && z.live ? h[z.i] = z.live : v && A(v.cells()).removeClass("po-unsaved"));
     3407c.each(function(v, C, B) {
     3408C.err && d.push(C);
     3409C.saved() || (C.save(), (C = (v = n.row(B)) && v.page) && C.live ? h[C.i] = C.live : v && A(v.cells()).removeClass("po-unsaved"));
    34003410});
    34013411h.length && A(h).find("div.po-unsaved").removeClass("po-unsaved");
     
    34313441const d = a.po;
    34323442var h = d && d.locale() || a.targetLocale, n = d && d.source() || a.sourceLocale;
    3433 const v = h && h.isRTL(), z = d && d.length || 0;
     3443const v = h && h.isRTL(), C = d && d.length || 0;
    34343444if (!d || !d.row) return c && c.clear().header("Error").contents("Invalid messages list"),
    34353445!1;
    34363446a.setLocales(n, h);
    3437 a.lastSearch && (a.lastSearch = "", a.lastFound = z, a.fire("poFilter", [ "", z ]));
     3447a.lastSearch && (a.lastSearch = "", a.lastFound = C, a.fire("poFilter", [ "", C ]));
    34383448n = (h = a.listTable) && h.thead().distribution();
    3439 let C = [];
     3449let B = [];
    34403450a.listTable = h = c.tabulate({
    3441 eachCol: function(B) {
     3451eachCol: function(z) {
    34423452const F = a.getListColumns(), G = a.getListHeadings();
    34433453for (const H in F) {
    34443454const J = F[H];
    3445 B(J, H, G[J]);
    3446 }
    3447 },
    3448 eachRow: function(B) {
     3455z(J, H, G[J]);
     3456}
     3457},
     3458eachRow: function(z) {
    34493459d.each(function(F, G) {
    3450 a.validate(G) && C.push(G);
    3451 B(G.idx, a.getListEntry(G), u(G));
     3460a.validate(G) && B.push(G);
     3461z(G.idx, a.getListEntry(G), t(G));
    34523462});
    34533463},
     
    34553465});
    34563466c = a.getListColumns();
    3457 for (const B in c) h.sortable(c[B]);
     3467for (const z in c) h.sortable(c[z]);
    34583468n && h.thead().distribute(n);
    34593469h.tbody().$(v ? "addClass" : "removeClass", [ "is-rtl" ]);
    3460 a.invalid = C.length ? C : null;
    3461 return !!z;
     3470a.invalid = B.length ? B : null;
     3471return !!C;
    34623472};
    34633473f.load = function(a, c) {
     
    35023512const d = [];
    35033513var h = this.labels, n = a.context();
    3504 let v = [], z = a.tags(), C = z && z.length;
     3514let v = [], C = a.tags(), B = C && C.length;
    35053515n && (v.push("<span>" + l(h[4]) + "</span>"), v.push('<mark class="ctxt">' + l(n) + "</mark>"));
    3506 if (C && this.getTag) for (v.push("<span>Tagged:</span>"), h = -1; ++h < C; ) (n = this.getTag(z[h])) && v.push("<mark>" + l(n.mod_name) + "</mark>");
     3516if (B && this.getTag) for (v.push("<span>Tagged:</span>"), h = -1; ++h < B; ) (n = this.getTag(C[h])) && v.push("<mark>" + l(n.mod_name) + "</mark>");
    35073517v.length && d.push('<p class="tags">' + v.join(" ") + "</p>");
    3508 if (this.getMono() && (n = a.refs()) && (z = n.split(/\s/), C = z.length)) {
    3509 for (v = []; 0 <= --C; ) n = z[C], v.push("<code>" + l(n) + "</code>");
     3518if (this.getMono() && (n = a.refs()) && (C = n.split(/\s/), B = C.length)) {
     3519for (v = []; 0 <= --B; ) n = C[B], v.push("<code>" + l(n) + "</code>");
    35103520d.push('<p class="has-icon icon-file">' + v.join(" ") + "</p>");
    35113521}
     
    35363546N.titled() !== P && e(N, P, L || "en");
    35373547P = !1;
    3538 B.setSrcMeta(a, N) && (P = !0);
     3548z.setSrcMeta(a, N) && (P = !0);
    35393549if (a.plural()) {
    35403550P = -1;
     
    35593569N.on("changing", function(S, P) {
    35603570a.source(P, L);
    3561 0 === L && B.updateListCell(a, "source");
    3562 B.unsave(a, L);
     35710 === L && z.updateListCell(a, "source");
     3572z.unsave(a, L);
    35633573}).on("changed", function() {
    3564 0 === L && B.po.reIndex(a);
    3565 B.dict && B.rebuildSearch();
    3566 B.fire("poUpdate", [ a ]);
     35740 === L && z.po.reIndex(a);
     3575z.dict && z.rebuildSearch();
     3576z.fire("poUpdate", [ a ]);
    35673577});
    35683578}
     
    35753585L.titled() !== U && e(L, U, S);
    35763586U = !1;
    3577 !N && B.setSrcMeta(a, L) && (U = !0);
    3578 B.setTrgMeta(a, P, L) && (U = !0);
    3579 B.setStatus(a, P);
     3587!N && z.setSrcMeta(a, L) && (U = !0);
     3588z.setTrgMeta(a, P, L) && (U = !0);
     3589z.setStatus(a, P);
    35803590if (1 !== S.nplurals && a.pluralized()) {
    35813591N = function(W) {
     
    35933603L.navigize(Y, P || null).on("wgTabSelect", function(W, ca) {
    35943604(W = Z && W.cell.editable()) && W.focus();
    3595 B.setTrgMeta(a, ca, L);
    3596 B.setStatus(a, ca);
    3597 B.fire("poTab", [ ca ]);
     3605z.setTrgMeta(a, ca, L);
     3606z.setStatus(a, ca);
     3607z.fire("poTab", [ ca ]);
    35983608});
    35993609} else U && L.redraw(), L.textarea(a.translation(), Z && !a.disabled(0)).setStrf(J).setMode(ba).setInvs(G),
     
    36033613function S() {
    36043614P = null;
    3605 B.validate(a);
     3615z.validate(a);
    36063616const V = a.errors(L).join(" ");
    3607 U !== V && (U = V, B.setTrgMeta(a, L, N) && N.redraw(), B.reCssRow(a));
     3617U !== V && (U = V, z.setTrgMeta(a, L, N) && N.redraw(), z.reCssRow(a));
    36083618}
    36093619let P, U = a.errors(L).join(" ");
     
    36113621P && (clearTimeout(P), P = null);
    36123622a.translate(Y, L);
    3613 0 === L && B.updateListCell(a, "target");
    3614 a.fuzzy(L) && a.saved(L) ? B.fuzzy(!1, a, L) : B.unsave(a, L);
    3615 "" === Y ? (B.fire("poEmpty", [ !0, a, L ]), B.setStatus(a, L)) : "" === ea && (B.fire("poEmpty", [ !1, a, L ]),
    3616 B.setStatus(a, L));
     36230 === L && z.updateListCell(a, "target");
     3624a.fuzzy(L) && a.saved(L) ? z.fuzzy(!1, a, L) : z.unsave(a, L);
     3625"" === Y ? (z.fire("poEmpty", [ !0, a, L ]), z.setStatus(a, L)) : "" === ea && (z.fire("poEmpty", [ !1, a, L ]),
     3626z.setStatus(a, L));
    36173627P = setTimeout(S, U ? 300 : 1e3);
    36183628}).on("changed", function() {
    3619 B.dict && B.rebuildSearch();
    3620 B.fire("poUpdate", [ a ]);
    3621 });
    3622 }
    3623 function z(N) {
     3629z.dict && z.rebuildSearch();
     3630z.fire("poUpdate", [ a ]);
     3631});
     3632}
     3633function C(N) {
    36243634N.off();
    36253635const L = da[4];
    3626 N.titled() !== L && (e(N, L), B.setStatus(null));
     3636N.titled() !== L && (e(N, L), z.setStatus(null));
    36273637N.textarea(a.context(), !0).setMode(ba).setInvs(G);
    36283638oa && N.on("changing", function(S, P) {
    36293639a.context(P);
    3630 B.updateListCell(a, "source");
    3631 B.unsave(a, ha);
     3640z.updateListCell(a, "source");
     3641z.unsave(a, ha);
    36323642}).on("changed", function() {
    3633 B.po.reIndex(a);
    3634 B.dict && B.rebuildSearch();
    3635 B.fire("poUpdate", [ a ]);
    3636 });
    3637 }
    3638 function C(N) {
     3643z.po.reIndex(a);
     3644z.dict && z.rebuildSearch();
     3645z.fire("poUpdate", [ a ]);
     3646});
     3647}
     3648function B(N) {
    36393649const L = da[5];
    36403650N.titled() !== L && e(N, L);
    36413651N.off().on("changing", function(S, P) {
    36423652a.comment(P);
    3643 B.fire("poComment", [ a, P ]);
    3644 B.unsave(a, ha);
     3653z.fire("poComment", [ a, P ]);
     3654z.unsave(a, ha);
    36453655}).textarea(a.comment(), !0);
    36463656}
    3647 const B = this;
     3657const z = this;
    36483658var F = a.isHTML();
    3649 const G = B.inv || !1, H = this.fmt || null, J = a.format() || null, O = a.is(B.active), R = B.sourceCell, I = B.targetCell, Q = B.contextCell, X = B.commentCell, Z = B.editable.target, ma = B.editable.source, oa = B.editable.context, pa = B.sourceLocale, ka = B.targetLocale, da = B.labels;
    3650 let ha = 0, ba = B.mode, ia = r;
    3651 B.html !== F && (B.html = F, "code" !== B.mode && (ba = F ? "html" : "", B.setMode(ba)));
    3652 B.active = a;
     3659const G = z.inv || !1, H = this.fmt || null, J = a.format() || null, O = a.is(z.active), R = z.sourceCell, I = z.targetCell, Q = z.contextCell, X = z.commentCell, Z = z.editable.target, ma = z.editable.source, oa = z.editable.context, pa = z.sourceLocale, ka = z.targetLocale, da = z.labels;
     3660let ha = 0, ba = z.mode, ia = q;
     3661z.html !== F && (z.html = F, "code" !== z.mode && (ba = F ? "html" : "", z.setMode(ba)));
     3662z.active = a;
    36533663R && d(R, pa);
    3654 Q && z(Q);
     3664Q && C(Q);
    36553665I && ka && (ha = I.navigated() || 0, n(R, I, ka, ha));
    3656 X && C(X);
     3666X && B(X);
    36573667ia && (ia.exists() || (ia = ia.parent()), (F = ia.editable()) && F.focus());
    36583668H !== J && (this.fmt = J);
    3659 O || B.fire("poSelected", [ a, ha ]);
     3669O || z.fire("poSelected", [ a, ha ]);
    36603670};
    36613671f.unloadActive = function() {
     
    36923702};
    36933703f.cellText = function(a) {
    3694 return (a = -1 !== a.indexOf("<") || -1 !== a.indexOf("&") ? q(a) : a.trim()) || " ";
     3704return (a = -1 !== a.indexOf("<") || -1 !== a.indexOf("&") ? u(a) : a.trim()) || " ";
    36953705};
    36963706f.fuzzy = function(a, c, d) {
     
    37763786return w;
    37773787}({}, K, M));
    3778 D.register("1e", function(w, t, E) {
     3788D.register("1e", function(w, r, E) {
    37793789w.init = function() {
    37803790const y = /%([1-9]\d*\$)?[s%]/, p = /%([1-9]\d*\$)?(?:'.|[-+0 ])*\d*(?:\.\d+)?(.|$)/g;
    37813791return {
    3782 parse: function(u, e) {
     3792parse: function(t, e) {
    37833793const b = e && e.count || 0;
    37843794e = e && e.types || {};
    37853795let k = !0, g = 0, l = 0;
    3786 for (var m; null != (m = p.exec(u)); ) {
    3787 const r = m[2];
    3788 if ("%" !== r || "%%" !== m[0]) {
    3789 if ("" === r || -1 === "suxXbcdeEfFgGo".indexOf(r)) {
     3796for (var m; null != (m = p.exec(t)); ) {
     3797const q = m[2];
     3798if ("%" !== q || "%%" !== m[0]) {
     3799if ("" === q || -1 === "suxXbcdeEfFgGo".indexOf(q)) {
    37903800k = !1;
    37913801break;
     
    37933803null == m[1] ? m = ++l : (m = parseInt(m[1]), g = Math.max(g, m));
    37943804null == e[m] && (e[m] = {});
    3795 e[m][r] = !0;
     3805e[m][q] = !0;
    37963806}
    37973807}
     
    38083818};
    38093819},
    3810 sniff: function(u) {
    3811 return y.test(u);
     3820sniff: function(t) {
     3821return y.test(t);
    38123822}
    38133823};
     
    38153825return w;
    38163826}({}, K, M));
    3817 D.register("d", function(w, t, E) {
     3827D.register("d", function(w, r, E) {
    38183828function y() {
    38193829this.init();
     
    38243834return g;
    38253835}
    3826 function u(g) {
     3836function t(g) {
    38273837return p("cloud").attr("title", g.labels[8] + " (Ctrl-U)").on("click", function(l) {
    38283838l.preventDefault();
     
    38433853g = l.setRootCell(g);
    38443854var m = g.splity("po-list", "po-edit");
    3845 let r = m[0], x = m[1];
     3855let q = m[0], x = m[1];
    38463856m = x.splitx("po-trans", "po-comment");
    3847 var q = m[0];
     3857var u = m[0];
    38483858let f = m[1].header("Loading..");
    3849 m = q.splity("po-source", "po-target");
    3850 q = m[0].header("Loading..");
     3859m = u.splity("po-source", "po-target");
     3860u = m[0].header("Loading..");
    38513861m = m[1].header("Loading..");
    38523862g.distribute([ .34 ]);
    38533863x.distribute([ .8 ]);
    3854 l.setListCell(r);
    3855 l.setSourceCell(q);
     3864l.setListCell(q);
     3865l.setSourceCell(u);
    38563866l.setTargetCell(m);
    38573867l.commentCell = f;
     
    38593869return l;
    38603870};
    3861 t = y.prototype = D.require("1d").extend(y);
    3862 t.getListHeadings = function() {
     3871r = y.prototype = D.require("1d").extend(y);
     3872r.getListHeadings = function() {
    38633873const g = this.t(), l = [ g._x("Source text", "Editor") ];
    38643874this.targetLocale && (l[1] = g._x("Translation", "Editor"));
    38653875return l;
    38663876};
    3867 t.getListColumns = function() {
     3877r.getListColumns = function() {
    38683878const g = {
    38693879source: 0
     
    38723882return g;
    38733883};
    3874 t.getListEntry = function(g) {
     3884r.getListEntry = function(g) {
    38753885const l = this.cellText, m = [ function() {
    3876 let r, x = l(g.source() || ""), q = g.context();
    3877 return q ? (r = E.createElement("p"), r.appendChild(E.createElement("mark")).innerText = q,
    3878 r.appendChild(E.createTextNode(" " + x)), r) : x;
     3886let q, x = l(g.source() || ""), u = g.context();
     3887return u ? (q = E.createElement("p"), q.appendChild(E.createElement("mark")).innerText = u,
     3888q.appendChild(E.createTextNode(" " + x)), q) : x;
    38793889} ];
    38803890this.targetLocale && (m[1] = function() {
     
    38833893return m;
    38843894};
    3885 t.stats = function() {
    3886 let g = this.po, l = g.length, m = 0, r = 0, x = 0;
    3887 g.each(function(q, f) {
    3888 f.fuzzy() ? x++ : f.translated() ? m++ : r++;
     3895r.stats = function() {
     3896let g = this.po, l = g.length, m = 0, q = 0, x = 0;
     3897g.each(function(u, f) {
     3898f.fuzzy() ? x++ : f.translated() ? m++ : q++;
    38893899});
    38903900return {
     
    38923902p: m.percent(l) + "%",
    38933903f: x,
    3894 u: r
    3895 };
    3896 };
    3897 t.unlock = function() {
     3904u: q
     3905};
     3906};
     3907r.unlock = function() {
    38983908const g = this.targetLocale;
    38993909this._unlocked || (this.editable = {
     
    39053915this.active && this.loadMessage(this.active));
    39063916};
    3907 t.lock = function() {
     3917r.lock = function() {
    39083918const g = this._unlocked;
    39093919g && (this.targetLocale = g, delete this._unlocked, this.po && this.po.lock(g),
     
    39153925this.active && this.loadMessage(this.active));
    39163926};
    3917 t.locked = function() {
     3927r.locked = function() {
    39183928return !this._unlocked;
    39193929};
    3920 t.setStatus = function(g) {
     3930r.setStatus = function(g) {
    39213931let l = this.$tnav;
    39223932if (null == g) l && (l.remove(), this.$tnav = null); else {
    3923 l || (this.$tnav = l = A("<nav></nav>").append(u(this)).append(e(this)).appendTo(this.targetCell.header()));
     3933l || (this.$tnav = l = A("<nav></nav>").append(t(this)).append(e(this)).appendTo(this.targetCell.header()));
    39243934var m = [];
    39253935g.translated() ? g.fuzzy() && m.push("po-fuzzy") : m.push("po-empty");
     
    39273937}
    39283938};
    3929 t.getSorter = function() {
    3930 function g(r, x) {
    3931 const q = r.weight(), f = x.weight();
    3932 return q === f ? l(r, x) : q > f ? -1 : 1;
    3933 }
    3934 function l(r, x) {
    3935 return r.hash().localeCompare(x.hash());
     3939r.getSorter = function() {
     3940function g(q, x) {
     3941const u = q.weight(), f = x.weight();
     3942return u === f ? l(q, x) : u > f ? -1 : 1;
     3943}
     3944function l(q, x) {
     3945return q.hash().localeCompare(x.hash());
    39363946}
    39373947const m = this;
    3938 return function(r) {
    3939 const x = m.po, q = m.locked() ? g : l;
    3940 r.sort(function(f, a) {
    3941 return q(x.row(f), x.row(a));
    3942 });
    3943 };
    3944 };
    3945 t.validate = function(g) {
     3948return function(q) {
     3949const x = m.po, u = m.locked() ? g : l;
     3950q.sort(function(f, a) {
     3951return u(x.row(f), x.row(a));
     3952});
     3953};
     3954};
     3955r.validate = function(g) {
    39463956g.err = null;
    39473957if (g.untranslated(0)) return 0;
     
    39513961return m;
    39523962};
    3953 t.validateMessagePrintf = function(g, l) {
     3963r.validateMessagePrintf = function(g, l) {
    39543964const m = g.format();
    39553965if ("no-" === m.substring(0, 3)) return 0;
    3956 const r = g.msgid(), x = g.msgidPlural();
     3966const q = g.msgid(), x = g.msgidPlural();
    39573967null == k && (k = D.require("1e").init());
    3958 var q = k;
    3959 if (!("" !== m || q.sniff(r) || "" !== x && q.sniff(x))) return 0;
    3960 let f = 0, a = q.parse(r);
    3961 x && a.valid && (a = q.parse(x, a));
     3968var u = k;
     3969if (!("" !== m || u.sniff(q) || "" !== x && u.sniff(x))) return 0;
     3970let f = 0, a = u.parse(q);
     3971x && a.valid && (a = u.parse(x, a));
    39623972if (!a.valid) return 0;
    39633973let c = a.count;
     
    39673977l[h] = [];
    39683978if ("" !== n) {
    3969 n = q.parse(n);
     3979n = u.parse(n);
    39703980var v = n.count;
    39713981h = l[h];
     
    39743984f++; else {
    39753985v = a.types;
    3976 for (const z in n.types) for (const C in n.types[z]) if (null == v[z] || null == v[z][C]) {
     3986for (const C in n.types) for (const B in n.types[C]) if (null == v[C] || null == v[C][B]) {
    39773987h.push(d.t()._("Mismatching placeholder type; check against source text formatting"));
    39783988f++;
     
    39853995}
    39863996};
    3987 t.handle = {};
     3997r.handle = {};
    39883998let k;
    39893999return w;
    39904000}({}, K, M));
    3991 D.register("e", function(w, t, E) {
     4001D.register("e", function(w, r, E) {
    39924002const y = {
    39934003copy: 66,
     
    4004401440: !0,
    4005401573: !0
    4006 }, u = {
     4016}, t = {
    4007401766: function(e, b) {
    40084018if (e = b.current()) e.normalize(), b.focus().pasteMessage(e);
     
    40354045const m = l.which;
    40364046if (!g[m]) return !0;
    4037 const r = u[m];
    4038 if (!r || l.altKey || l.shiftKey && !p[m] || !1 === r(l, e)) return !0;
     4047const q = t[m];
     4048if (!q || l.altKey || l.shiftKey && !p[m] || !1 === q(l, e)) return !0;
    40394049l.stopPropagation();
    40404050l.preventDefault();
     
    40424052}
    40434053const g = {};
    4044 A(b || t).on("keydown", k);
     4054A(b || r).on("keydown", k);
    40454055return {
    40464056add: function(l, m) {
    4047 u[y[l]] = m;
     4057t[y[l]] = m;
    40484058return this;
    40494059},
     
    40534063},
    40544064disable: function() {
    4055 A(b || t).off("keydown", k);
     4065A(b || r).off("keydown", k);
    40564066e = b = null;
    4057 for (const l in u) g[l] = !1;
     4067for (const l in t) g[l] = !1;
    40584068}
    40594069};
     
    40614071return w;
    40624072}({}, K, M));
    4063 D.register("1f", function(w, t, E) {
     4073D.register("1f", function(w, r, E) {
    40644074function y() {
    40654075this.reIndex([]);
     
    40684078return new y();
    40694079};
    4070 t = y.prototype;
    4071 t.reIndex = function(p) {
    4072 const u = {}, e = p.length;
     4080r = y.prototype;
     4081r.reIndex = function(p) {
     4082const t = {}, e = p.length;
    40734083let b = -1;
    4074 for (;++b < e; ) u[p[b]] = b;
     4084for (;++b < e; ) t[p[b]] = b;
    40754085this.keys = p;
    40764086this.length = b;
    4077 this.ords = u;
    4078 };
    4079 t.key = function(p, u) {
    4080 if (null == u) return this.keys[p];
    4081 const e = this.keys[p], b = this.ords[u];
    4082 if (u !== e) {
     4087this.ords = t;
     4088};
     4089r.key = function(p, t) {
     4090if (null == t) return this.keys[p];
     4091const e = this.keys[p], b = this.ords[t];
     4092if (t !== e) {
    40834093if (null != b) throw Error("Clash with item at [" + b + "]");
    4084 this.keys[p] = u;
     4094this.keys[p] = t;
    40854095delete this.ords[e];
    4086 this.ords[u] = p;
     4096this.ords[t] = p;
    40874097}
    40884098return p;
    40894099};
    4090 t.indexOf = function(p) {
     4100r.indexOf = function(p) {
    40914101p = this.ords[p];
    40924102return null == p ? -1 : p;
    40934103};
    4094 t.add = function(p, u) {
     4104r.add = function(p, t) {
    40954105let e = this.ords[p];
    40964106null == e && (this.keys[this.length] = p, e = this.ords[p] = this.length++);
    4097 this[e] = u;
     4107this[e] = t;
    40984108return e;
    40994109};
    4100 t.get = function(p) {
     4110r.get = function(p) {
    41014111return this[this.ords[p]];
    41024112};
    4103 t.has = function(p) {
     4113r.has = function(p) {
    41044114return null != this.ords[p];
    41054115};
    4106 t.del = function(p) {
     4116r.del = function(p) {
    41074117this.cut(this.ords[p], 1);
    41084118};
    4109 t.cut = function(p, u) {
    4110 u = u || 1;
    4111 const e = [].splice.call(this, p, u);
    4112 this.keys.splice(p, u);
     4119r.cut = function(p, t) {
     4120t = t || 1;
     4121const e = [].splice.call(this, p, t);
     4122this.keys.splice(p, t);
    41134123this.reIndex(this.keys);
    41144124return e;
    41154125};
    4116 t.each = function(p) {
    4117 const u = this.keys, e = this.length;
     4126r.each = function(p) {
     4127const t = this.keys, e = this.length;
    41184128let b = -1;
    4119 for (;++b < e; ) p(u[b], this[b], b);
    4120 return this;
    4121 };
    4122 t.sort = function(p) {
    4123 const u = this.length, e = this.keys, b = this.ords, k = [];
     4129for (;++b < e; ) p(t[b], this[b], b);
     4130return this;
     4131};
     4132r.sort = function(p) {
     4133const t = this.length, e = this.keys, b = this.ords, k = [];
    41244134let g = -1;
    4125 for (;++g < u; ) k[g] = [ this[g], e[g] ];
    4126 k.sort(function(m, r) {
    4127 return p(m[0], r[0]);
    4128 });
    4129 for (g = 0; g < u; g++) {
     4135for (;++g < t; ) k[g] = [ this[g], e[g] ];
     4136k.sort(function(m, q) {
     4137return p(m[0], q[0]);
     4138});
     4139for (g = 0; g < t; g++) {
    41304140var l = k[g];
    41314141this[g] = l[0];
     
    41364146return this;
    41374147};
    4138 t.join = function(p) {
     4148r.join = function(p) {
    41394149return [].join.call(this, p);
    41404150};
    41414151return w;
    41424152}({}, K, M));
    4143 D.register("20", function(w, t, E) {
    4144 function y(p, u) {
    4145 var e = new RegExp("^.{0," + (p - 1) + "}[" + u + "]"), b = new RegExp("^[^" + u + "]+");
     4153D.register("20", function(w, r, E) {
     4154function y(p, t) {
     4155var e = new RegExp("^.{0," + (p - 1) + "}[" + t + "]"), b = new RegExp("^[^" + t + "]+");
    41464156return function(k, g) {
    41474157for (var l = k.length, m; l > p; ) {
     
    41594169}
    41604170w.create = function(p) {
    4161 function u(r) {
    4162 return g[r] || "\\" + r;
     4171function t(q) {
     4172return g[q] || "\\" + q;
    41634173}
    41644174var e = /(?:\r\n|[\r\n\v\f\u2028\u2029])/g, b = /[ \r\n]+/g, k = /[\t\v\f\x07\x08\\"]/g, g = {
     
    41754185}
    41764186return {
    4177 pair: function(r, x) {
    4178 if (!x) return r + ' ""';
    4179 x = x.replace(k, u);
    4180 var q = 0;
     4187pair: function(q, x) {
     4188if (!x) return q + ' ""';
     4189x = x.replace(k, t);
     4190var u = 0;
    41814191x = x.replace(e, function() {
    4182 q++;
     4192u++;
    41834193return "\\n\n";
    41844194});
    4185 if (!(q || p && p < x.length + r.length + 3)) return r + ' "' + x + '"';
    4186 r = [ r + ' "' ];
     4195if (!(u || p && p < x.length + q.length + 3)) return q + ' "' + x + '"';
     4196q = [ q + ' "' ];
    41874197x = x.split("\n");
    4188 if (m) for (var f = -1, a = x.length; ++f < a; ) m(x[f], r); else r = r.concat(x);
    4189 return r.join('"\n"') + '"';
    4190 },
    4191 prefix: function(r, x) {
    4192 r = r.split(e);
    4193 return x + r.join("\n" + x);
    4194 },
    4195 refs: function(r) {
    4196 r = r.replace(b, " ", r);
    4197 l && (r = l(r, []).join("\n#: "));
    4198 return "#: " + r;
     4198if (m) for (var f = -1, a = x.length; ++f < a; ) m(x[f], q); else q = q.concat(x);
     4199return q.join('"\n"') + '"';
     4200},
     4201prefix: function(q, x) {
     4202q = q.split(e);
     4203return x + q.join("\n" + x);
     4204},
     4205refs: function(q) {
     4206q = q.replace(b, " ", q);
     4207l && (q = l(q, []).join("\n#: "));
     4208return "#: " + q;
    41994209}
    42004210};
     
    42024212return w;
    42034213}({}, K, M));
    4204 D.register("2c", function(w, t, E) {
     4214D.register("2c", function(w, r, E) {
    42054215function y() {
    42064216this.length = 0;
     
    42094219return new y();
    42104220};
    4211 t = y.prototype;
    4212 t.push = function(p) {
     4221r = y.prototype;
     4222r.push = function(p) {
    42134223this[this.length++] = p;
    42144224return this;
    42154225};
    4216 t.sort = function(p) {
     4226r.sort = function(p) {
    42174227[].sort.call(this, p);
    42184228return this;
    42194229};
    4220 t.each = function(p) {
    4221 for (var u = -1, e = this.length; ++u < e; ) p(u, this[u]);
     4230r.each = function(p) {
     4231for (var t = -1, e = this.length; ++t < e; ) p(t, this[t]);
    42224232return this;
    42234233};
    42244234return w;
    42254235}({}, K, M));
    4226 D.register("21", function(w, t, E) {
     4236D.register("21", function(w, r, E) {
    42274237function y() {}
    42284238w.extend = function(p) {
    42294239return p.prototype = new y();
    42304240};
    4231 t = y.prototype = D.require("2a").init([ "load" ]);
    4232 t.row = function(p) {
     4241r = y.prototype = D.require("2a").init([ "load" ]);
     4242r.row = function(p) {
    42334243return this.rows[p];
    42344244};
    4235 t.lock = function(p) {
     4245r.lock = function(p) {
    42364246return this.locale(p || {
    42374247lang: "zxx",
     
    42414251});
    42424252};
    4243 t.unlock = function() {
     4253r.unlock = function() {
    42444254const p = this.loc;
    42454255this.loc = null;
    42464256return p;
    42474257};
    4248 t.locale = function(p) {
     4258r.locale = function(p) {
    42494259null == p ? p = this.loc : this.loc = p = D.require("29").cast(p);
    42504260return p;
    42514261};
    4252 t.source = function(p) {
     4262r.source = function(p) {
    42534263null == p ? p = this.src || D.require("29").cast({
    42544264lang: "en",
     
    42594269return p;
    42604270};
    4261 t.each = function(p) {
     4271r.each = function(p) {
    42624272this.rows.each(p);
    42634273return this;
    42644274};
    4265 t.indexOf = function(p) {
     4275r.indexOf = function(p) {
    42664276"object" !== typeof p && (p = this.get(p));
    42674277if (!p) return -1;
     
    42694279return p.idx;
    42704280};
    4271 t.get = function(p) {
     4281r.get = function(p) {
    42724282return this.rows && this.rows.get(p);
    42734283};
    4274 t.has = function(p) {
     4284r.has = function(p) {
    42754285return this.rows && this.rows.has(p);
    42764286};
    4277 t.del = function(p) {
     4287r.del = function(p) {
    42784288p = this.indexOf(p);
    42794289if (-1 !== p) {
    4280 const u = this.rows.cut(p, 1);
    4281 if (u && u.length) return this.length = this.rows.length, this.rows.each(function(e, b, k) {
     4290const t = this.rows.cut(p, 1);
     4291if (t && t.length) return this.length = this.rows.length, this.rows.each(function(e, b, k) {
    42824292b.idx = k;
    42834293}), p;
    42844294}
    42854295};
    4286 t.reIndex = function(p, u) {
     4296r.reIndex = function(p, t) {
    42874297const e = p.hash(), b = this.indexOf(p), k = this.rows.indexOf(e);
    4288 return k === b ? b : -1 !== k ? (u = (u || 0) + 1, p.source("Error, duplicate " + String(u) + ": " + p.source()),
    4289 this.reIndex(p, u)) : this.rows.key(b, e);
    4290 };
    4291 t.sort = function(p) {
     4298return k === b ? b : -1 !== k ? (t = (t || 0) + 1, p.source("Error, duplicate " + String(t) + ": " + p.source()),
     4299this.reIndex(p, t)) : this.rows.key(b, e);
     4300};
     4301r.sort = function(p) {
    42924302this.rows.sort(p);
    42934303return this;
    42944304};
    4295 t.export = function() {
    4296 const p = this.rows, u = p.length, e = D.require("2c").init();
     4305r.export = function() {
     4306const p = this.rows, t = p.length, e = D.require("2c").init();
    42974307let b = -1;
    4298 for (;++b < u; ) e.push(p[b]);
     4308for (;++b < t; ) e.push(p[b]);
    42994309return e;
    43004310};
    43014311return w;
    43024312}({}, K, M));
    4303 D.register("22", function(w, t, E) {
     4313D.register("22", function(w, r, E) {
    43044314function y(e, b, k) {
    43054315if (null == k) return e[b] || "";
     
    43104320this._id = this.id = "";
    43114321}
    4312 function u(e, b) {
     4322function t(e, b) {
    43134323const k = e.length;
    43144324let g = -1;
     
    43184328return e.prototype = new p();
    43194329};
    4320 t = p.prototype;
    4321 t.flag = function(e, b) {
     4330r = p.prototype;
     4331r.flag = function(e, b) {
    43224332const k = this.flg || (this.flg = []);
    43234333if (null != b) k[b] = e; else for (b = Math.max(k.length, this.src.length, this.msg.length); 0 !== b--; ) k[b] = e;
    43244334return this;
    43254335};
    4326 t.flagged = function(e) {
     4336r.flagged = function(e) {
    43274337return (this.flg || [])[e || 0] || 0;
    43284338};
    4329 t.hasFlag = function() {
     4339r.hasFlag = function() {
    43304340const e = this.flg || [];
    43314341let b = e.length;
     
    43334343return !1;
    43344344};
    4335 t.isFlag = function(e) {
     4345r.isFlag = function(e) {
    43364346return 0 < e;
    43374347};
    4338 t.flags = function() {
     4348r.flags = function() {
    43394349const e = {}, b = [], k = this.flg || [];
    43404350let g = k.length;
     
    43454355return b;
    43464356};
    4347 t.flaggedAs = function(e, b) {
     4357r.flaggedAs = function(e, b) {
    43484358const k = this.flg || [];
    43494359if (null != b) return e === k[b] || 0;
     
    43514361return !1;
    43524362};
    4353 t.fuzzy = function(e, b) {
     4363r.fuzzy = function(e, b) {
    43544364const k = this.flaggedAs(4, e);
    43554365null != b && this.flag(b ? 4 : 0, e);
    43564366return k;
    43574367};
    4358 t.source = function(e, b) {
     4368r.source = function(e, b) {
    43594369if (null == e) return this.src[b || 0] || "";
    43604370this.src[b || 0] = e;
    43614371return this;
    43624372};
    4363 t.plural = function(e, b) {
     4373r.plural = function(e, b) {
    43644374if (null == e) return this.src[b || 1] || "";
    43654375this.src[b || 1] = e || "";
    43664376return this;
    43674377};
    4368 t.sourceForms = function() {
     4378r.sourceForms = function() {
    43694379return this.srcF;
    43704380};
    4371 t.targetForms = function() {
     4381r.targetForms = function() {
    43724382return this.msgF;
    43734383};
    4374 t.each = function(e) {
     4384r.each = function(e) {
    43754385const b = this.src, k = this.msg, g = Math.max(b.length, k.length);
    43764386let l = -1;
     
    43784388return this;
    43794389};
    4380 t.eachSrc = function(e) {
    4381 u(this.src, e);
    4382 return this;
    4383 };
    4384 t.eachMsg = function(e) {
    4385 u(this.msg, e);
    4386 return this;
    4387 };
    4388 t.count = function() {
     4390r.eachSrc = function(e) {
     4391t(this.src, e);
     4392return this;
     4393};
     4394r.eachMsg = function(e) {
     4395t(this.msg, e);
     4396return this;
     4397};
     4398r.count = function() {
    43894399return Math.max(this.src.length, this.msg.length);
    43904400};
    4391 t.pluralized = function() {
     4401r.pluralized = function() {
    43924402return 1 < this.src.length || 1 < this.msg.length;
    43934403};
    4394 t.translate = function(e, b) {
     4404r.translate = function(e, b) {
    43954405this.msg[b || 0] = e || "";
    43964406return this;
    43974407};
    4398 t.untranslate = function(e) {
     4408r.untranslate = function(e) {
    43994409if (null != e) this.msg[e] = ""; else {
    44004410const b = this.msg, k = b.length;
     
    44034413return this;
    44044414};
    4405 t.translation = function(e) {
     4415r.translation = function(e) {
    44064416return this.msg[e || 0] || "";
    44074417};
    4408 t.errors = function(e) {
     4418r.errors = function(e) {
    44094419return this.err && this.err[e || 0] || [];
    44104420};
    4411 t.valid = function() {
     4421r.valid = function() {
    44124422return null == this.err;
    44134423};
    4414 t.translated = function(e) {
     4424r.translated = function(e) {
    44154425if (null != e) return !!this.msg[e];
    44164426const b = this.msg, k = b.length;
     
    44184428return !0;
    44194429};
    4420 t.untranslated = function(e) {
     4430r.untranslated = function(e) {
    44214431if (null != e) return !this.msg[e];
    44224432const b = this.msg, k = b.length;
     
    44244434return !0;
    44254435};
    4426 t.comment = function(e) {
     4436r.comment = function(e) {
    44274437return y(this, "cmt", e);
    44284438};
    4429 t.notes = function(e) {
     4439r.notes = function(e) {
    44304440return y(this, "xcmt", e);
    44314441};
    4432 t.refs = function(e) {
     4442r.refs = function(e) {
    44334443return y(this, "rf", e);
    44344444};
    4435 t.format = function(e) {
     4445r.format = function(e) {
    44364446return y(this, "fmt", e);
    44374447};
    4438 t.context = function(e) {
     4448r.context = function(e) {
    44394449return y(this, "ctx", e);
    44404450};
    4441 t.tags = function() {
     4451r.tags = function() {
    44424452return this.tg;
    44434453};
    4444 t.getMax = function(e) {
     4454r.getMax = function(e) {
    44454455return (this.mx || [ 0 ])[e] || 0;
    44464456};
    4447 t.toString = t.toText = function() {
     4457r.toString = r.toText = function() {
    44484458return this.src.concat(this.msg, [ this.id, this.ctx ]).join(" ");
    44494459};
    4450 t.weight = function() {
     4460r.weight = function() {
    44514461let e = 0;
    44524462this.translation() || (e += 2);
     
    44544464return e;
    44554465};
    4456 t.equals = function(e) {
     4466r.equals = function(e) {
    44574467return this === e || this.hash() === e.hash();
    44584468};
    4459 t.hash = function() {
     4469r.hash = function() {
    44604470return this.id;
    44614471};
    4462 t.normalize = function() {
     4472r.normalize = function() {
    44634473let e = -1, b = this.msg.length;
    44644474for (;++e < b; ) this.msg[e] = this.src[Math.min(e, 1)] || "";
    44654475};
    4466 t.disabled = function(e) {
     4476r.disabled = function(e) {
    44674477return !!(this.lck || [])[e || 0];
    44684478};
    4469 t.disable = function(e) {
     4479r.disable = function(e) {
    44704480(this.lck || (this.lck = []))[e || 0] = !0;
    44714481return this;
    44724482};
    4473 t.saved = function(e) {
     4483r.saved = function(e) {
    44744484const b = this.drt;
    44754485if (null == b) return !0;
     
    44784488return !0;
    44794489};
    4480 t.unsave = function(e) {
     4490r.unsave = function(e) {
    44814491(this.drt || (this.drt = []))[e || 0] = !0;
    44824492return this;
    44834493};
    4484 t.save = function(e) {
     4494r.save = function(e) {
    44854495null == e ? this.drt = null : (this.drt || (this.drt = []))[e] = !1;
    44864496return this;
    44874497};
    4488 t.is = function(e) {
     4498r.is = function(e) {
    44894499return e && (e === this || e.idx === this.idx);
    44904500};
    4491 t.isHTML = function(e) {
     4501r.isHTML = function(e) {
    44924502if (null == e) return this.htm || !1;
    44934503this.htm = e;
    44944504};
    4495 t = null;
     4505r = null;
    44964506return w;
    44974507}({}, K, M));
    4498 D.register("f", function(w, t, E) {
     4508D.register("f", function(w, r, E) {
    44994509function y(g) {
    45004510return {
     
    45174527return g;
    45184528}
    4519 function u(g) {
    4520 const l = t.console;
     4529function t(g) {
     4530const l = r.console;
    45214531l && l.error && l.error(g.message || String(g));
    45224532}
     
    45484558}
    45494559var l = new Date();
    4550 const m = l.getUTCFullYear(), r = l.getUTCMonth() + 1, x = l.getUTCDate(), q = l.getUTCHours();
     4560const m = l.getUTCFullYear(), q = l.getUTCMonth() + 1, x = l.getUTCDate(), u = l.getUTCHours();
    45514561l = l.getUTCMinutes();
    4552 return g(m, 4) + "-" + g(r, 2) + "-" + g(x, 2) + " " + g(q, 2) + ":" + g(l, 2) + "+0000";
     4562return g(m, 4) + "-" + g(q, 2) + "-" + g(x, 2) + " " + g(u, 2) + ":" + g(l, 2) + "+0000";
    45534563};
    45544564E.header = function(g, l) {
     
    45644574return this;
    45654575}
    4566 const r = this.locale();
     4576const q = this.locale();
    45674577g = {};
    45684578for (x in m) g[x] = String(m[x]);
    4569 if (r) {
    4570 g.Language = String(r) || "zxx";
    4571 g["Language-Team"] = r.label || g.Language;
    4572 g["Plural-Forms"] = "nplurals=" + (r.nplurals || "2") + "; plural=" + (r.pluraleq || "n!=1") + ";";
     4579if (q) {
     4580g.Language = String(q) || "zxx";
     4581g["Language-Team"] = q.label || g.Language;
     4582g["Plural-Forms"] = "nplurals=" + (q.nplurals || "2") + "; plural=" + (q.pluraleq || "n!=1") + ";";
    45734583var x = "PO-Revision-Date";
    45744584} else g.Language = "", g["Plural-Forms"] = "nplurals=INTEGER; plural=EXPRESSION;",
     
    45864596l && g.context(l);
    45874597l = g.hash();
    4588 this.rows.get(l) ? u("Duplicate message at index " + this.indexOf(g)) : (g.idx = this.rows.add(l, g),
     4598this.rows.get(l) ? t("Duplicate message at index " + this.indexOf(g)) : (g.idx = this.rows.add(l, g),
    45894599this.length = this.rows.length);
    45904600return g;
    45914601};
    45924602E.load = function(g) {
    4593 let l = -1, m, r;
     4603let l = -1, m, q;
    45944604var x;
    4595 let q, f, a, c = (x = this.locale()) && x.nplurals || 2, d = [];
    4596 for (;++l < g.length; ) m = g[l], null == m.parent ? (r = m.source || m.id, x = m.target || "",
    4597 q = m.context, r || q ? (f = new k(r, x), f._id = m._id, q && f.context(q), m.flag && f.flag(m.flag, 0),
     4605let u, f, a, c = (x = this.locale()) && x.nplurals || 2, d = [];
     4606for (;++l < g.length; ) m = g[l], null == m.parent ? (q = m.source || m.id, x = m.target || "",
     4607u = m.context, q || u ? (f = new k(q, x), f._id = m._id, u && f.context(u), m.flag && f.flag(m.flag, 0),
    45984608m.comment && f.comment(m.comment), m.notes && f.notes(m.notes), m.refs && f.refs(m.refs),
    45994609f.format(m.format), m.message = f, this.add(f), m.prev && m.prev[0] && (f.prev(m.prev[0].source, m.prev[0].context),
     
    46024612for (l = -1; ++l < d.length; ) try {
    46034613m = d[l];
    4604 r = m.source || m.id;
     4614q = m.source || m.id;
    46054615f = g[m.parent] && g[m.parent].message;
    4606 if (!f) throw Error("parent missing for plural " + r);
     4616if (!f) throw Error("parent missing for plural " + q);
    46074617a = m.plural;
    4608 1 === a && f.plural(r);
     46181 === a && f.plural(q);
    46094619a >= c || (m.flag && f.flag(m.flag, a), f.translate(m.target || "", a), m.format && !f.format() && f.format(m.format));
    46104620} catch (h) {
    4611 u(h);
     4621t(h);
    46124622}
    46134623return this;
     
    46184628};
    46194629E.toString = function() {
    4620 var g, l = this.locale(), m = [], r = [], x = this.headers(), q = !l, f = l && l.nplurals || 2, a = this.fmtr || e();
     4630var g, l = this.locale(), m = [], q = [], x = this.headers(), u = !l, f = l && l.nplurals || 2, a = this.fmtr || e();
    46214631x[l ? "PO-Revision-Date" : "POT-Creation-Date"] = this.now();
    4622 for (g in x) r.push(g + ": " + x[g]);
    4623 r = new k("", r.join("\n"));
    4624 r.comment(this.headcmt || "");
    4625 q && r.fuzzy(0, !0);
    4626 m.push(r.toString());
     4632for (g in x) q.push(g + ": " + x[g]);
     4633q = new k("", q.join("\n"));
     4634q.comment(this.headcmt || "");
     4635u && q.fuzzy(0, !0);
     4636m.push(q.toString());
    46274637m.push("");
    46284638this.rows.each(function(c, d) {
    4629 c && (m.push(d.cat(a, q, f)), m.push(""));
     4639c && (m.push(d.cat(a, u, f)), m.push(""));
    46304640});
    46314641return m.join("\n");
     
    46494659};
    46504660E.cat = function(g, l, m) {
    4651 var r = [], x;
    4652 (x = this.cmt) && r.push(g.prefix(x, "# "));
    4653 (x = this.xcmt) && r.push(g.prefix(x, "#. "));
    4654 var q = this.rf;
    4655 if (x = this._id) q += (q ? " " : "") + "loco:" + x;
    4656 q && /\S/.test(q) && r.push(g.refs(q));
    4657 !l && this.fuzzy() && r.push("#, fuzzy");
    4658 (x = this.fmt) && r.push("#, " + x + "-format");
    4659 (x = this._ctx) && r.push(g.prefix(g.pair("msgctxt", x), "#| "));
    4660 if (x = this._src) x[0] && r.push(g.prefix(g.pair("msgid", x[0]), "#| ")), x[1] && r.push(g.prefix(g.pair("msgid_plural", x[1]), "#| "));
    4661 (x = this.ctx) && r.push(g.pair("msgctxt", x));
    4662 r.push(g.pair("msgid", this.src[0]));
    4663 if (null == this.src[1]) r.push(g.pair("msgstr", l ? "" : this.msg[0])); else for (q = -1,
    4664 r.push(g.pair("msgid_plural", this.src[1])), x = this.msg || [ "", "" ], m = m || x.length; ++q < m; ) r.push(g.pair("msgstr[" + q + "]", l ? "" : x[q] || ""));
    4665 return r.join("\n");
     4661var q = [], x;
     4662(x = this.cmt) && q.push(g.prefix(x, "# "));
     4663(x = this.xcmt) && q.push(g.prefix(x, "#. "));
     4664var u = this.rf;
     4665if (x = this._id) u += (u ? " " : "") + "loco:" + x;
     4666u && /\S/.test(u) && q.push(g.refs(u));
     4667!l && this.fuzzy() && q.push("#, fuzzy");
     4668(x = this.fmt) && q.push("#, " + x + "-format");
     4669(x = this._ctx) && q.push(g.prefix(g.pair("msgctxt", x), "#| "));
     4670if (x = this._src) x[0] && q.push(g.prefix(g.pair("msgid", x[0]), "#| ")), x[1] && q.push(g.prefix(g.pair("msgid_plural", x[1]), "#| "));
     4671(x = this.ctx) && q.push(g.pair("msgctxt", x));
     4672q.push(g.pair("msgid", this.src[0]));
     4673if (null == this.src[1]) q.push(g.pair("msgstr", l ? "" : this.msg[0])); else for (u = -1,
     4674q.push(g.pair("msgid_plural", this.src[1])), x = this.msg || [ "", "" ], m = m || x.length; ++u < m; ) q.push(g.pair("msgstr[" + u + "]", l ? "" : x[u] || ""));
     4675return q.join("\n");
    46664676};
    46674677E.compare = function(g, l) {
    4668 let m = this.weight(), r = g.weight();
    4669 if (m > r) return 1;
    4670 if (m < r) return -1;
     4678let m = this.weight(), q = g.weight();
     4679if (m > q) return 1;
     4680if (m < q) return -1;
    46714681if (l) {
    46724682m = this.hash().toLowerCase();
    4673 r = g.hash().toLowerCase();
    4674 if (m < r) return 1;
    4675 if (m > r) return -1;
     4683q = g.hash().toLowerCase();
     4684if (m < q) return 1;
     4685if (m > q) return -1;
    46764686}
    46774687return 0;
     
    46854695return w;
    46864696}({}, K, M));
    4687 D.register("11", function(w, t, E) {
     4697D.register("11", function(w, r, E) {
    46884698w.init = function(y, p) {
    4689 function u() {
     4699function t() {
    46904700return g || (g = A('<div id="loco-po-ref"></div>').dialog({
    46914701dialogClass: "loco-modal loco-modal-wide",
     
    46974707}));
    46984708}
    4699 function e(l, m, r) {
    4700 l = A("<p></p>").text(r);
    4701 u().dialog("close").html("").dialog("option", "title", "Error").append(l).dialog("open");
     4709function e(l, m, q) {
     4710l = A("<p></p>").text(q);
     4711t().dialog("close").html("").dialog("option", "title", "Error").append(l).dialog("open");
    47024712}
    47034713function b(l) {
    47044714const m = l && l.code;
    47054715if (m) {
    4706 for (var r = m.length, x = A("<ol></ol>").attr("class", l.type), q = -1; ++q < r; ) A("<li></li>").html(m[q]).appendTo(x);
     4716for (var q = m.length, x = A("<ol></ol>").attr("class", l.type), u = -1; ++u < q; ) A("<li></li>").html(m[u]).appendTo(x);
    470747170 !== l.line && x.find("li").eq(l.line - 1).attr("class", "highlighted");
    4708 u().dialog("close").html("").dialog("option", "title", l.path + ":" + l.line).append(x).dialog("open");
     4718t().dialog("close").html("").dialog("option", "title", l.path + ":" + l.line).append(x).dialog("open");
    47094719}
    47104720}
     
    47174727return {
    47184728load: function(l) {
    4719 u().html('<div class="loco-loading"></div>').dialog("option", "title", "Loading..").off("dialogopen").dialog("open").on("dialogopen", k);
     4729t().html('<div class="loco-loading"></div>').dialog("option", "title", "Loading..").off("dialogopen").dialog("open").on("dialogopen", k);
    47204730l = A.extend({
    47214731ref: l,
     
    47284738return w;
    47294739}({}, K, M));
    4730 D.register("12", function(w, t, E) {
     4740D.register("12", function(w, r, E) {
    47314741function y() {
    47324742this.inf = {};
     
    47364746let l, m;
    47374747return {
    4738 sniff: function(r) {
    4739 if (r === l) return m;
    4740 l = r;
    4741 if (k.test(r) || g.test(r)) if (b.innerHTML = r, b.textContent !== r) return m = !0;
     4748sniff: function(q) {
     4749if (q === l) return m;
     4750l = q;
     4751if (k.test(q) || g.test(q)) if (b.innerHTML = q, b.textContent !== q) return m = !0;
    47424752return m = !1;
    47434753}
     
    47504760return k;
    47514761};
    4752 const u = y.prototype;
    4753 u.init = function(b) {
     4762const t = y.prototype;
     4763t.init = function(b) {
    47544764this.inf = b || {};
    47554765return this;
    47564766};
    4757 u.param = function(b) {
     4767t.param = function(b) {
    47584768return this.inf[b] || "";
    47594769};
    4760 u.key = function() {
     4770t.key = function() {
    47614771return this.param("key") || "";
    47624772};
    4763 u.getId = function() {
     4773t.getId = function() {
    47644774return this.param("id") || "none";
    47654775};
    4766 u.getUrl = function() {
     4776t.getUrl = function() {
    47674777return this.param("url") || "";
    47684778};
    4769 u.toString = function() {
     4779t.toString = function() {
    47704780return this.param("name") || this.getId();
    47714781};
    4772 u.getSrc = function() {
     4782t.getSrc = function() {
    47734783return this.param("src") || "en";
    47744784};
    4775 u.setSrc = function(b) {
     4785t.setSrc = function(b) {
    47764786this.inf.src = this.mapLang(b, this.getLangMap());
    47774787};
    4778 u.stderr = function(b) {
    4779 const k = (t.loco || {}).notices;
     4788t.stderr = function(b) {
     4789const k = (r.loco || {}).notices;
    47804790k && k.error && k.error(String(this) + ": " + String(b));
    47814791};
    4782 u.xhrError = function(b, k, g) {
     4792t.xhrError = function(b, k, g) {
    47834793try {
    4784 const l = b.responseText, m = l && t.JSON.parse(l);
     4794const l = b.responseText, m = l && r.JSON.parse(l);
    47854795g = m && this.parseError(m) || g;
    47864796} catch (l) {}
    47874797return g || this.httpError(b);
    47884798};
    4789 u.httpError = function(b) {
     4799t.httpError = function(b) {
    47904800return (b = b && b.status) && 200 !== b ? "Responded status " + b : "Unknown error";
    47914801};
    4792 u.parseError = function(b) {
     4802t.parseError = function(b) {
    47934803return b && b.error || "";
    47944804};
    4795 u.mapLang = function(b, k) {
     4805t.mapLang = function(b, k) {
    47964806const g = String(b).replace("_", "-").toLowerCase();
    47974807var l = b.lang;
     
    48054815return k[0];
    48064816};
    4807 u.getLangMap = function() {
     4817t.getLangMap = function() {
    48084818return {};
    48094819};
    4810 u.maxChr = function() {
     4820t.maxChr = function() {
    48114821return 0;
    48124822};
    4813 u.fixURL = function(b) {
     4823t.fixURL = function(b) {
    48144824b = b.split("://", 2);
    481548251 === b.length && b.unshift("https");
    48164826return b[0] + "://" + b[1].replace(/\/{2,}/g, "/");
    48174827};
    4818 u.translate = function(b, k, g) {
     4828t.translate = function(b, k, g) {
    48194829return this.batch([ b ], k, this.isHtml(b.source), g);
    48204830};
    4821 u.unwind = function(b, k) {
     4831t.unwind = function(b, k) {
    48224832const g = [], l = b.length;
    48234833for (let m = 0; m < l; m++) g.push(b[m][k]);
    48244834return g;
    48254835};
    4826 u.contextualize = function(b) {
     4836t.contextualize = function(b) {
    48274837return [ b.context || "", b.notes || "" ].join("\n").trim();
    48284838};
    4829 u.verify = function(b) {
     4839t.verify = function(b) {
    48304840return this.translate({
    48314841source: "OK",
     
    48414851});
    48424852};
    4843 u.hash = function() {
     4853t.hash = function() {
    48444854return this.key();
    48454855};
    4846 u._call = function(b) {
     4856t._call = function(b) {
    48474857const k = this;
    48484858k.state = null;
     
    48544864return k.abortable(A.ajax(b));
    48554865};
    4856 u.abortable = function(b) {
     4866t.abortable = function(b) {
    48574867const k = this;
    48584868b.always(function() {
     
    48614871return k.$r = b;
    48624872};
    4863 u.abort = function() {
     4873t.abort = function() {
    48644874const b = this.$r;
    48654875b && b.abort();
    48664876};
    4867 u.isHtml = function(b) {
     4877t.isHtml = function(b) {
    48684878return (e || (e = p())).sniff(b);
    48694879};
     
    48714881return w;
    48724882}({}, K, M));
    4873 D.register("13", function(w, t, E) {
     4883D.register("13", function(w, r, E) {
    48744884function y(p) {
    48754885this.api = p;
     
    48794889return new y(p);
    48804890};
    4881 t = y.prototype;
    4882 t.init = function(p, u) {
     4891r = y.prototype;
     4892r.init = function(p, t) {
    48834893function e(c) {
    48844894let d = {
     
    48934903function b(c, d, h) {
    48944904var n = c.source(null, h);
    4895 if (n && (c.untranslated(h) || u)) {
     4905if (n && (c.untranslated(h) || t)) {
    48964906{
    48974907h = c.notes();
    4898 const z = c.context();
     4908const C = c.context();
    48994909c = n.length;
    49004910var v = g.isHtml(n);
    49014911n = {
    49024912source: n,
    4903 context: z,
     4913context: C,
    49044914notes: h
    49054915};
     
    49074917v = h.items;
    49084918if (f && c > f) x++, c = void 0; else {
    4909 if (h.length + c > q || 50 === v.length) h = e(h), v = h.items;
     4919if (h.length + c > u || 50 === v.length) h = e(h), v = h.items;
    49104920v.push(n);
    49114921h.length += c;
    49124922m += c;
    4913 r += 1;
     4923q += 1;
    49144924c = n;
    49154925}
     
    49194929}
    49204930const k = [], g = this.api;
    4921 let l = [], m = 0, r = 0, x = 0, q = 1e4, f = g.maxChr();
    4922 f && (q = Math.min(q, f));
     4931let l = [], m = 0, q = 0, x = 0, u = 1e4, f = g.maxChr();
     4932f && (u = Math.min(u, f));
    49234933e({
    49244934html: !1
     
    49364946l = [];
    49374947this.chars = m;
    4938 this.length = r;
     4948this.length = q;
    49394949this.batches = k;
    49404950this.locale = a;
    4941 x && g.stderr("Strings over " + q + " characters long will be skipped");
    4942 };
    4943 t.abort = function() {
     4951x && g.stderr("Strings over " + u + " characters long will be skipped");
     4952};
     4953r.abort = function() {
    49444954this.state = "abort";
    49454955return this;
    49464956};
    4947 t.dispatch = function(p) {
    4948 function u(C, B) {
     4957r.dispatch = function(p) {
     4958function t(B, z) {
    49494959if (!b()) return !1;
    4950 if (!B) return !0;
     4960if (!z) return !0;
    49514961c++;
    4952 const F = p.row(C.id), G = C.source;
     4962const F = p.row(B.id), G = B.source;
    49534963let H = 0;
    49544964F.each(function(J, O, R) {
    4955 B !== R && (G === O || 1 < J && F.source(null, 1) === G) && (F.translate(B, J),
     4965z !== R && (G === O || 1 < J && F.source(null, 1) === G) && (F.translate(z, J),
    49564966H++, h++);
    49574967});
    4958 H && r("each", [ F ]);
    4959 }
    4960 function e(C) {
    4961 return function(B, F) {
    4962 u(C[B], F);
     4968H && q("each", [ F ]);
     4969}
     4970function e(B) {
     4971return function(z, F) {
     4972t(B[z], F);
    49634973return !0;
    49644974};
    49654975}
    49664976function b() {
    4967 return "abort" === x.state ? (q && (q.abort(), m()), !1) : !0;
     4977return "abort" === x.state ? (u && (u.abort(), m()), !1) : !0;
    49684978}
    49694979function k() {
    4970 const C = f.shift();
    4971 if (C) {
    4972 const B = C.items;
    4973 B && B.length ? q.batch(B, a, C.html, e(B)).fail(g).always(l) : l();
     4980const B = f.shift();
     4981if (B) {
     4982const z = B.items;
     4983z && z.length ? u.batch(z, a, B.html, e(z)).fail(g).always(l) : l();
    49744984} else m();
    49754985}
     
    49804990function l() {
    49814991d++;
    4982 r("prog", [ d, v ]);
     4992q("prog", [ d, v ]);
    49834993b() && k();
    49844994}
    49854995function m() {
    4986 q = f = null;
    4987 r("done");
    4988 }
    4989 function r(C, B) {
    4990 C = z[C] || [];
    4991 let F = C.length;
    4992 for (;0 <= --F; ) C[F].apply(null, B);
    4993 }
    4994 let x = this, q = x.api, f = x.batches || [], a = x.locale, c = 0, d = 0, h = 0, n = x.length, v = f.length, z = {
     4996u = f = null;
     4997q("done");
     4998}
     4999function q(B, z) {
     5000B = C[B] || [];
     5001let F = B.length;
     5002for (;0 <= --F; ) B[F].apply(null, z);
     5003}
     5004let x = this, u = x.api, f = x.batches || [], a = x.locale, c = 0, d = 0, h = 0, n = x.length, v = f.length, C = {
    49955005done: [],
    49965006each: [],
     
    50005010k();
    50015011return {
    5002 done: function(C) {
    5003 z.done.push(C);
    5004 return this;
    5005 },
    5006 each: function(C) {
    5007 z.each.push(C);
    5008 return this;
    5009 },
    5010 prog: function(C) {
    5011 z.prog.push(C);
     5012done: function(B) {
     5013C.done.push(B);
     5014return this;
     5015},
     5016each: function(B) {
     5017C.each.push(B);
     5018return this;
     5019},
     5020prog: function(B) {
     5021C.prog.push(B);
    50125022return this;
    50135023},
     
    50265036return w;
    50275037}({}, K, M));
    5028 D.register("14", function(w, t, E) {
     5038D.register("14", function(w, r, E) {
    50295039function y() {}
    50305040w.create = function(p) {
    5031 (y.prototype = new p()).batch = function(u, e, b, k) {
     5041(y.prototype = new p()).batch = function(t, e, b, k) {
    50325042function g(x) {
    5033 let q = -1;
    5034 for (;++q < m && !1 !== k(q, x[q], e); );
    5035 }
    5036 const l = t.loco, m = u.length;
    5037 u = {
     5043let u = -1;
     5044for (;++u < m && !1 !== k(u, x[u], e); );
     5045}
     5046const l = r.loco, m = t.length;
     5047t = {
    50385048hook: this.getId(),
    50395049type: b ? "html" : "text",
    50405050locale: String(e),
    50415051source: this.getSrc(),
    5042 sources: u
    5043 };
    5044 const r = A.Deferred();
    5045 this.abortable(l.ajax.post("apis", u, function(x) {
     5052sources: t
     5053};
     5054const q = A.Deferred();
     5055this.abortable(l.ajax.post("apis", t, function(x) {
    50465056g(x && x.targets || []);
    5047 r.resolve();
     5057q.resolve();
    50485058}, function() {
    50495059g([]);
    5050 r.reject();
     5060q.reject();
    50515061}));
    5052 return r.promise();
     5062return q.promise();
    50535063};
    50545064return new y();
     
    50625072jv: [ "jw" ]
    50635073});
    5064 D.register("15", function(w, t, E) {
     5074D.register("15", function(w, r, E) {
    50655075function y() {}
    50665076w.create = function(p) {
     
    50695079return "Google Translate";
    50705080};
    5071 p.parseError = function(u) {
    5072 if (u.error) {
    5073 const e = [], b = u.error.errors || [], k = b.length;
     5081p.parseError = function(t) {
     5082if (t.error) {
     5083const e = [], b = t.error.errors || [], k = b.length;
    50745084let g = -1;
    50755085for (;++g < k; ) e.push(b[g].message || "");
    5076 return "Error " + u.error.code + ": " + e.join(";");
     5086return "Error " + t.error.code + ": " + e.join(";");
    50775087}
    50785088return "";
     
    50815091return D.require("24");
    50825092};
    5083 p.batch = function(u, e, b, k) {
    5084 function g(q) {
     5093p.batch = function(t, e, b, k) {
     5094function g(u) {
    50855095const f = x.length;
    50865096let a = -1;
    5087 for (;++a < f && !1 !== k(a, (q[a] || {}).translatedText || "", e); );
     5097for (;++a < f && !1 !== k(a, (u[a] || {}).translatedText || "", e); );
    50885098}
    50895099const l = this, m = l.getSrc();
    50905100b = b ? "html" : "text";
    5091 const r = l.mapLang(e, l.getLangMap()), x = this.unwind(u, "source");
     5101const q = l.mapLang(e, l.getLangMap()), x = this.unwind(t, "source");
    50925102return l._call({
    5093 url: "https://translation.googleapis.com/language/translate/v2?source=" + m + "&target=" + r + "&format=" + b,
     5103url: "https://translation.googleapis.com/language/translate/v2?source=" + m + "&target=" + q + "&format=" + b,
    50945104method: "POST",
    50955105traditional: !0,
     
    50985108q: x
    50995109}
    5100 }).done(function(q, f, a) {
    5101 q.data ? g(q.data.translations || []) : (l.stderr(l.parseError(q) || l.httpError(a)),
     5110}).done(function(u, f, a) {
     5111u.data ? g(u.data.translations || []) : (l.stderr(l.parseError(u) || l.httpError(a)),
    51025112g([]));
    51035113}).fail(function() {
     
    51135123pt: [ "pt", "pt-pt", "pt-br" ]
    51145124});
    5115 D.register("16", function(w, t, E) {
     5125D.register("16", function(w, r, E) {
    51165126function y() {}
    51175127w.create = function(p) {
    51185128p = y.prototype = new p();
    5119 p.parseError = function(u) {
    5120 var e = u.details || {};
     5129p.parseError = function(t) {
     5130var e = t.details || {};
    51215131let b = e.message;
    51225132e = e.texts;
     
    51245134k += -1 === k.indexOf("?") ? "?" : "&";
    51255135return k + "ref=loco";
    5126 }), "Error " + (u.status || "0") + ": " + b) : "";
     5136}), "Error " + (t.status || "0") + ": " + b) : "";
    51275137};
    51285138p.maxChr = function() {
     
    51325142return D.require("25");
    51335143};
    5134 p.batch = function(u, e, b, k) {
    5135 function g(q) {
     5144p.batch = function(t, e, b, k) {
     5145function g(u) {
    51365146const f = x.length;
    5137 let a = -1, c = (q[0] || {
     5147let a = -1, c = (u[0] || {
    51385148translated: []
    51395149}).translated || [];
    5140 for (;++a < f && (q = c[a] || "", !1 !== k(a, q, e)); );
     5150for (;++a < f && (u = c[a] || "", !1 !== k(a, u, e)); );
    51415151}
    51425152const l = this;
    51435153b = this.getSrc();
    5144 const m = l.param("api") || "https://api.lecto.ai", r = l.mapLang(e, l.getLangMap()), x = this.unwind(u, "source");
     5154const m = l.param("api") || "https://api.lecto.ai", q = l.mapLang(e, l.getLangMap()), x = this.unwind(t, "source");
    51455155return l._call({
    51465156url: l.fixURL(m + "/v1/translate/text"),
    51475157method: "POST",
    51485158data: JSON.stringify({
    5149 to: [ r ],
     5159to: [ q ],
    51505160from: b,
    51515161texts: x
     
    51565166Accept: "application/json"
    51575167}
    5158 }).done(function(q, f, a) {
    5159 q ? g(q.translations || []) : (l.stderr(l.parseError(q) || l.httpError(a)), g([]));
     5168}).done(function(u, f, a) {
     5169u ? g(u.translations || []) : (l.stderr(l.parseError(u) || l.httpError(a)), g([]));
    51605170}).fail(function() {
    51615171g([]);
     
    51795189"zh-tw": [ "zh-hant" ]
    51805190});
    5181 D.register("17", function(w, t, E) {
     5191D.register("17", function(w, r, E) {
    51825192function y() {}
    51835193w.create = function(p) {
     
    51865196return "Microsoft Translator text API";
    51875197};
    5188 p.parseError = function(u) {
    5189 return u && u.error ? u.error.message : "";
     5198p.parseError = function(t) {
     5199return t && t.error ? t.error.message : "";
    51905200};
    51915201p.maxChr = function() {
     
    52015211return this.key() + this.region();
    52025212};
    5203 p.batch = function(u, e, b, k) {
     5213p.batch = function(t, e, b, k) {
    52045214function g(a) {
    52055215let c = -1;
     
    52075217!1 !== k(c, d.text || "", e)); );
    52085218}
    5209 let l = this, m = [], r = l.getSrc();
    5210 u = this.unwind(u, "source");
    5211 let x = u.length, q = -1;
     5219let l = this, m = [], q = l.getSrc();
     5220t = this.unwind(t, "source");
     5221let x = t.length, u = -1;
    52125222b = b ? "html" : "plain";
    52135223let f = l.mapLang(e, l.getLangMap());
    5214 for (;++q < x; ) m.push({
    5215 Text: u[q]
     5224for (;++u < x; ) m.push({
     5225Text: t[u]
    52165226});
    52175227return l._call({
    5218 url: "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=" + r + "&to=" + f + "&textType=" + b,
     5228url: "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=" + q + "&to=" + f + "&textType=" + b,
    52195229method: "POST",
    52205230data: JSON.stringify(m),
     
    52345244return w;
    52355245}({}, K, M));
    5236 D.register("18", function(w, t, E) {
     5246D.register("18", function(w, r, E) {
    52375247w.init = function(y) {
    52385248function p() {
    5239 O || (B.on("click", m), O = A('<div id="loco-fs-creds"></div>').dialog({
     5249O || (z.on("click", m), O = A('<div id="loco-fs-creds"></div>').dialog({
    52405250dialogClass: "request-filesystem-credentials-dialog loco-modal",
    52415251minWidth: 580,
     
    52485258return O;
    52495259}
    5250 function u() {
     5260function t() {
    52515261G && (e(A(a)), G = !1);
    52525262if (h && J) {
     
    52625272}
    52635273function b() {
    5264 if (h) return O && O.dialog("close"), u(), A(y).find('button[type="submit"]').attr("disabled", !1),
    5265 A(t).triggerHandler("resize"), f && f(!0), !0;
     5274if (h) return O && O.dialog("close"), t(), A(y).find('button[type="submit"]').attr("disabled", !1),
     5275A(r).triggerHandler("resize"), f && f(!0), !0;
    52665276v && O ? (G || (A(a).removeClass("jshide").hide().fadeIn(500), G = !0), H && (e(A(F)),
    5267 H = !1)) : u();
     5277H = !1)) : t();
    52685278A(y).find('input[type="submit"]').attr("disabled", !0);
    52695279f && f(!1);
     
    52805290I.preventDefault();
    52815291I = A(I.target).serializeArray();
    5282 q(I);
     5292u(I);
    52835293d = !0;
    52845294return !1;
     
    52945304return !1;
    52955305}
    5296 function r(I) {
     5306function q(I) {
    52975307h = I.authed;
    52985308c = I.method;
     
    53085318Q.find('input[type="submit"]').addClass("button-primary");
    53095319b();
    5310 A(t).triggerHandler("resize");
     5320A(r).triggerHandler("resize");
    53115321} else n.notices.error("Server didn't return credentials, nor a prompt for credentials");
    53125322}
     
    53145324b();
    53155325}
    5316 function q(I) {
     5326function u(I) {
    53175327d = !1;
    5318 n.ajax.setNonce("fsConnect", C).post("fsConnect", I, r, x);
     5328n.ajax.setNonce("fsConnect", B).post("fsConnect", I, q, x);
    53195329return I;
    53205330}
    5321 var f, a = y, c = null, d = !1, h = !1, n = t.loco, v = y.path.value, z = y.auth.value, C = y["loco-nonce"].value, B = A(a).find("button.button-primary"), F = E.getElementById(a.id + "-warn"), G = !1, H = !1, J = "", O;
     5331var f, a = y, c = null, d = !1, h = !1, n = r.loco, v = y.path.value, C = y.auth.value, B = y["loco-nonce"].value, z = A(a).find("button.button-primary"), F = E.getElementById(a.id + "-warn"), G = !1, H = !1, J = "", O;
    53225332n.notices.convert(F).stick();
    53235333if (y.connection_type) {
     
    53255335R.connection_type = y.connection_type.value;
    53265336h = !0;
    5327 } else v && z && q({
     5337} else v && C && u({
    53285338path: v,
    5329 auth: z
     5339auth: C
    53305340});
    53315341b();
     
    53465356connect: function() {
    53475357v = y.path.value;
    5348 z = y.auth.value;
    5349 q(A(y).serializeArray());
     5358C = y.auth.value;
     5359u(A(y).serializeArray());
    53505360return this;
    53515361},
     
    53625372return w;
    53635373}({}, K, M));
    5364 D.register("27", function(w, t, E) {
     5374D.register("27", function(w, r, E) {
    53655375function y(b, k) {
    53665376return function(g) {
     
    53765386};
    53775387}
    5378 function u(b) {
     5388function t(b) {
    53795389return function(k, g) {
    53805390return (k && k[b] || "").localeCompare(g && g[b] || "");
     
    53875397}
    53885398w.sort = function(b, k, g, l) {
    5389 k = "n" === g ? p(k) : u(k);
     5399k = "n" === g ? p(k) : t(k);
    53905400l && (k = e(k));
    53915401return y([].sort, [ k ])(b);
     
    53935403return w;
    53945404}({}, K, M));
    5395 D.register("19", function(w, t, E) {
     5405D.register("19", function(w, r, E) {
    53965406w.init = function(y) {
    53975407function p(a) {
    53985408let c = -1;
    53995409const d = a.length;
    5400 for (A("tr", r).remove(); ++c < d; ) r.appendChild(a[c].$);
    5401 }
    5402 function u(a) {
    5403 g = a ? q.find(a, e) : e.slice(0);
     5410for (A("tr", q).remove(); ++c < d; ) q.appendChild(a[c].$);
     5411}
     5412function t(a) {
     5413g = a ? u.find(a, e) : e.slice(0);
    54045414m && (a = b[m], g = f(g, m, a.type, a.desc));
    54055415p(g);
    54065416}
    5407 let e = [], b = [], k = 0, g, l, m, r = y.getElementsByTagName("tbody")[0];
     5417let e = [], b = [], k = 0, g, l, m, q = y.getElementsByTagName("tbody")[0];
    54085418var x = y.getElementsByTagName("thead")[0];
    5409 let q = D.require("a").init(), f = D.require("27").sort;
    5410 x && r && (A("th", x).each(function(a, c) {
     5419let u = D.require("a").init(), f = D.require("27").sort;
     5420x && q && (A("th", x).each(function(a, c) {
    54115421const d = c.getAttribute("data-sort-type");
    54125422d && (a = k, A(c).addClass("loco-sort").on("click", function(h) {
     
    54145424{
    54155425h = a;
    5416 let n = b[h], v = n.type, z = !(n.desc = !n.desc);
    5417 g = f(g || e.slice(0), h, v, z);
     5426let n = b[h], v = n.type, C = !(n.desc = !n.desc);
     5427g = f(g || e.slice(0), h, v, C);
    54185428p(g);
    54195429l && l.removeClass("loco-desc loco-asc");
    5420 l = A(n.$).addClass(z ? "loco-desc" : "loco-asc").removeClass(z ? "loco-asc" : "loco-desc");
     5430l = A(n.$).addClass(C ? "loco-desc" : "loco-asc").removeClass(C ? "loco-asc" : "loco-desc");
    54215431m = h;
    54225432}
     
    54275437});
    54285438c.hasAttribute("colspan") ? k += Number(c.getAttribute("colspan")) : k++;
    5429 }), A("tr", r).each(function(a, c) {
     5439}), A("tr", q).each(function(a, c) {
    54305440let d, h = [], n = {
    54315441_: a,
     
    54335443}, v = c.getElementsByTagName("td");
    54345444for (d in b) {
    5435 const z = v[d];
    5436 (c = z.textContent.replace(/(^\s+|\s+$)/g, "")) && h.push(c);
    5437 z.hasAttribute("data-sort-value") && (c = z.getAttribute("data-sort-value"));
     5445const C = v[d];
     5446(c = C.textContent.replace(/(^\s+|\s+$)/g, "")) && h.push(c);
     5447C.hasAttribute("data-sort-value") && (c = C.getAttribute("data-sort-value"));
    54385448switch (b[d].type) {
    54395449case "n":
     
    54435453}
    54445454e[a] = n;
    5445 q.index(a, h);
     5455u.index(a, h);
    54465456}), y = A('form.loco-filter input[type="text"]', y.parentNode), y.length && (y = y[0],
    5447 x = A(y.form), 1 < e.length ? D.require("b").listen(y, u) : x.hide(), x.on("submit", function(a) {
     5457x = A(y.form), 1 < e.length ? D.require("b").listen(y, t) : x.hide(), x.on("submit", function(a) {
    54485458a.preventDefault();
    54495459return !1;
     
    54925502};
    54935503T.fs = D.require("18");
    5494 A("#loco-admin.wrap table.wp-list-table").each(function(w, t) {
    5495 D.require("19").init(t);
     5504A("#loco-admin.wrap table.wp-list-table").each(function(w, r) {
     5505D.require("19").init(r);
    54965506});
    54975507T.validate = function(w) {
  • loco-translate/trunk/readme.txt

    r3433545 r3433719  
    109109* Added support for other chat completion APIs via `vendor` config field
    110110* Fixed single colon usage bug during chat completions
     111* Autoloader no longer throws when Loco_ class not found
     112* Refreshing Ajax nonces on WordPress heartbeat
    111113* Bumped WordPress compatibility to 6.9
    112114
  • loco-translate/trunk/src/ajax/SaveController.php

    r2613726 r3433719  
    99     */
    1010    public function render(){
    11        
     11
    1212        $post = $this->validate();
    13        
     13
     14
    1415        // path parameter must not be empty
    1516        $path = $post->path;
  • loco-translate/trunk/src/data/CompiledData.php

    r2876492 r3433719  
    4545    private function __construct( $name ){
    4646        $path = 'lib/data/'.$name.'.php';
    47         $this->data = loco_include( $path );
     47        $this->data = loco_include( $path, true );
    4848        $this->name = $name;
    4949    }
  • loco-translate/trunk/src/hooks/AdminHooks.php

    r3051619 r3433719  
    4545        // @codeCoverageIgnoreStart
    4646        if( loco_doing_ajax() ){
    47             $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
     47            $action = $_REQUEST['action'] ?? '';
    4848            // initialize Ajax router before hook fired so we can handle output buffering
    49             if( 'loco_' === substr($action,0,5)  && isset($_REQUEST['route']) ){
     49            if( isset($_REQUEST['route']) && str_starts_with($action,'loco_') ){
    5050                spl_autoload_register( [__CLASS__,'autoload_compat'] );
    5151                $this->router = new Loco_mvc_AjaxRouter;
     
    150150    /**
    151151     * pre_update_option_{$option} filter callback for $option = "active_plugins"
    152      * @param array|null $value Active plugins
    153      * @return array
    154      */
    155     public function filter_pre_update_option_active_plugins( $value = null ){
     152     */
     153    public function filter_pre_update_option_active_plugins( ?array $value = null ){
    156154        $this->purge_wp_cache();
    157155        return $value;
     
    161159    /**
    162160     * pre_update_site_option_{$option} filter callback for $option = "active_sitewide_plugins"
    163      * @param array|null $value Active sitewide plugins
    164      * @return array
    165      */
    166     public function filter_pre_update_site_option_active_sitewide_plugins( $value = null ){
     161     */
     162    public function filter_pre_update_site_option_active_sitewide_plugins( ?array $value = null ){
    167163        $this->purge_wp_cache();
    168164        return $value;
     165    }
     166
     167
     168    /**
     169     * heartbeat_received filter callback
     170     */
     171    public function filter_heartbeat_received( ?array $response = null, ?array $data = null ){
     172        if( is_array($data) && array_key_exists('loco-translate',$data) ){
     173            $nonces = $data['loco-translate']['nonces'] ?? [];
     174            foreach( $nonces as $action => $value ){
     175                // Refresh nonce if it's either expired, or in its second tick.
     176                // Ajax controllers check user permissions before nonce is checked.
     177                if( 1 !== wp_verify_nonce($value,$action) ){
     178                    $nonces[$action] = wp_create_nonce($action);
     179                }
     180            }
     181            $response['loco-translate']['nonces'] = $nonces;
     182        }
     183        return $response;
    169184    }
    170185
  • loco-translate/trunk/src/mvc/AdminRouter.php

    r3082470 r3433719  
    77    /**
    88     * Current admin page controller
    9      * @var Loco_mvc_AdminController
    10      */
    11     private $ctrl;
     9     */
     10    private ?Loco_mvc_AdminController $ctrl = null;
    1211
    1312
     
    3231        $render = [ $this, 'renderPage' ];
    3332       
    34         // main loco pages, hooking only if has permission
     33        // main loco pages, hooking only if user has permission
    3534        if( $user->has_cap($cap) ){
    3635
     
    8786     */
    8887    public function on_current_screen( WP_Screen $screen ){
    89         $action = isset($_GET['action']) ? $_GET['action'] : null;
    90         $this->initPage( $screen, $action );
     88        $this->initPage( $screen, $_GET['action']??'' );
    9189    }
    9290
     
    9694     * This is called early (before renderPage) so controller can listen on other hooks.
    9795     *
    98      * @param string $action
    9996     * @return Loco_mvc_AdminController|null
    10097     */
    101     public function initPage( WP_Screen $screen, $action = '' ){
     98    public function initPage( WP_Screen $screen, string $action = '' ){
    10299        $class = null;
    103100        $args =  [];
     
    268265     * @return string
    269266     */
    270     public static function generate( $route, array $args = [] ){
     267    public static function generate( string $route, array $args = [] ){
    271268        $url = null;
    272         $page = null;
    273269        $action = null;
    274270        // empty action targets plugin root
     
    298294                throw new UnexpectedValueException( sprintf('Invalid admin route: %s', json_encode($route) ) );
    299295            }
    300             else {
    301                 class_exists($class,true); // <- autoloader will throw if not class found
     296            else if( ! class_exists($class) ){
     297                throw new Loco_error_Exception('File not found for '.$class);
    302298            }
    303299        }
  • loco-translate/trunk/src/mvc/AjaxRouter.php

    r3233141 r3433719  
    77    /**
    88     * Current ajax controller
    9      * @var Loco_mvc_AjaxController
    10      */
    11     private $ctrl;
    12 
    13     /**
    14      * @var Loco_output_Buffer
    15      */
    16     private $buffer;
     9     */
     10    private ?Loco_mvc_AjaxController $ctrl = null;
     11
     12    /**
     13     * Buffer for collecting unintentional output
     14     */
     15    private ?Loco_output_Buffer $buffer = null;
    1716
    1817    /**
     
    2221     * @return string
    2322     */
    24     public static function generate( $route, array $args = [] ){
     23    public static function generate( string $route, array $args = [] ){
    2524        // validate route autoload if debugging
    26         if( loco_debugging() ){
    27             class_exists( self::routeToClass($route) );
     25        if( loco_debugging() && ! class_exists( self::routeToClass($route) ) ){
     26            throw new Exception('Loco class not found for '.$route);
    2827        }
    2928        $args +=  [
     
    5049     */
    5150    public function on_init(){
    52         try {
    53             $class = self::routeToClass( $_REQUEST['route'] );
    54             // autoloader will throw error if controller class doesn't exist
     51        $this->ctrl = null;
     52        $class = self::routeToClass( $_REQUEST['route'] );
     53        if( class_exists($class) ){
    5554            $this->ctrl = new $class;
    5655            $this->ctrl->_init( $_REQUEST );
     
    5958            do_action('loco_ajax_init', $this->ctrl );
    6059        }
    61         catch( Loco_error_Exception $e ){
    62             $this->ctrl = null;
    63             // throw $e; // <- debug
    64         }
    6560    }
    6661
    6762   
    68     /**
    69      * @param string $route
    70      * @return string
    71      */
    72     private static function routeToClass( $route ){
     63    private static function routeToClass( string $route ):string {
    7364        $route = explode( '-', $route );
    7465        // convert route to class name, e.g. "foo-bar" => "Loco_ajax_foo_BarController"
     
    166157            // respond with deferred failure from initAjax
    167158            if( ! $this->ctrl ){
    168                 $route = isset($_REQUEST['route']) ? $_REQUEST['route'] : '';
     159                $route = $_REQUEST['route'] ?? '';
    169160                // translators: Fatal error where %s represents an unexpected value
    170161                throw new Loco_error_Exception( sprintf( __('Ajax route not found: "%s"','loco-translate'), $route ) );
  • loco-translate/trunk/src/mvc/Controller.php

    r3092998 r3433719  
    8282            }
    8383            else {
    84                 throw new Loco_error_Exception('Failed security check for '.$name);
     84                throw new Loco_error_Exception('Failed security check. Please refresh the page');
    8585            }
    8686        }
     
    117117    /**
    118118     * number_format_i18n filter callback because our admin screens assume number_format_i18n() returns unescaped text, not HTML.
    119      * @param string
     119     * @param string $formatted
    120120     * @return string
    121121     */
  • loco-translate/trunk/src/test/WordPressTestCase.php

    r3269005 r3433719  
    212212        $router->on_admin_menu();
    213213        $screen = get_current_screen();
    214         $action = isset($_GET['action']) ? $_GET['action'] : null;
     214        $action = $_GET['action'] ?? '';
    215215        $router->initPage( $screen, $action );
    216216        $html = get_echo( [$router,'renderPage'] );
Note: See TracChangeset for help on using the changeset viewer.