Plugin Directory

Changeset 2919322

Timestamp:
05/30/2023 10:00:29 PM (14 months ago)
Author:
magicroundabout
Message:

Update to version 1.13.3 from GitHub

Location:
turbo-admin
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • turbo-admin/tags/1.13.3/dist/main.min.js

    r2871191 r2919322  
    808808  var import_fuse_6_4_6 = __toModule(require_fuse_6_4_6());
    809809
     810
     811
     812
     813
     814
     815
     816
     817
     818
     819
     820
     821
     822
     823
    810824  // src/types/class-turbo-admin-menu-item.js
    811825  var TurboAdminMenuItem = class {
    812826    title = "";
     827
    813828    action = "";
    814829    parentTitle = "";
     
    816831    constructor(title, action, parentTitle, noCache = false) {
    817832      this.title = title;
     833
    818834      this.action = action;
    819835      this.parentTitle = parentTitle;
    820836      this.noCache = noCache;
     837
     838
     839
     840
     841
     842
    821843    }
    822844    sameAs(item) {
     
    10911113    searchCallback;
    10921114    defaultItemsCallback = null;
    1093     constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {
     1115    showInPaletteSearch = true;
     1116    constructor(keyword, displayName, searchCallback, defaultItemsCallback = null, showInPaletteSearch = true) {
    10941117      this.keyword = keyword;
    10951118      this.displayName = displayName;
    10961119      this.searchCallback = searchCallback;
    10971120      this.defaultItemsCallback = defaultItemsCallback;
     1121
    10981122    }
    10991123  };
     
    11271151      this.paletteItemsBackup = null;
    11281152      this.paletteItemIndexBackup = null;
     1153
    11291154      this.searchMode = null;
    11301155      this.paletteItems = [];
     
    11431168      }
    11441169      this.paletteFuseOptions = {
    1145         keys: ["innerText"]
     1170        keys: ["innerText"],
     1171        shouldSort: true
    11461172      };
    11471173      this.paletteFuse = new import_fuse_6_4_6.default(this.paletteItems, this.paletteFuseOptions);
     
    11751201        const a = document.createElement("a");
    11761202        li.appendChild(a);
    1177         a.href = item.action;
    1178         let title = item.title;
    1179         if (item.parentTitle) {
    1180           title = item.parentTitle + ": " + title;
    1181         }
    1182         a.innerHTML = title;
     1203        if (item.actionType === "url") {
     1204          a.href = item.action;
     1205          let title = item.title;
     1206          if (item.parentTitle) {
     1207            title = item.parentTitle + ": " + title;
     1208          }
     1209          a.innerHTML = title;
     1210        } else if (item.actionType === "search-mode") {
     1211          a.href = "#";
     1212          a.innerHTML = item.title;
     1213          li.dataset.actionType = item.actionType;
     1214          li.dataset.searchMode = item.action.searchMode;
     1215        }
    11831216        this.addPaletteListItem(li);
    11841217      });
     
    13911424      }
    13921425    }
     1426
     1427
     1428
     1429
     1430
     1431
     1432
     1433
     1434
    13931435    leaveSearchMode() {
    13941436      const searchMode = this.searchMode;
     
    13961438      this.removeSearchModeTag();
    13971439      this.restorePaletteData();
    1398       this.paletteInputElement.value = searchMode.keyword;
    1399       this.maybeHighlightInputKeyword("");
    1400       this.paletteSearchAndUpdate();
    14011440    }
    14021441    backupPaletteData() {
     
    14041443      this.paletteItemsBackup = this.paletteItems;
    14051444      this.paletteItemIndexBackup = this.itemIndex;
     1445
    14061446    }
    14071447    restorePaletteData() {
     
    14091449      this.paletteItems = this.paletteItemsBackup;
    14101450      this.itemIndex = this.paletteItemIndexBackup;
     1451
     1452
     1453
    14111454    }
    14121455    addSearchModeTag(title) {
     
    15621605        return;
    15631606      }
     1607
     1608
     1609
     1610
    15641611      this.actOnItem(this.selectedItem, metaPressed);
    15651612    }
     
    16271674  var class_turbo_admin_palette_default = TurboAdminPalette;
    16281675
    1629   // src/types/class-item-definition.js
    1630   var ItemDefinition = class {
    1631     detectType = "dom";
    1632     detectSelector = "";
    1633     detectSelectorNone = "";
    1634     detectPattern = "";
    1635     itemTitleFunction = null;
    1636     itemUrlFunction = null;
    1637     noCache = false;
    1638   };
    1639   var class_item_definition_default = ItemDefinition;
    1640 
    16411676  // src/types/class-turbo-admin-plugin.js
    16421677  var TurboAdminPlugin = class {
     
    16621697      this.searchModes.forEach(globalThis.turboAdmin.registerSearchMode);
    16631698    }
     1699
     1700
     1701
     1702
     1703
     1704
     1705
     1706
     1707
     1708
     1709
     1710
     1711
     1712
     1713
     1714
     1715
     1716
     1717
    16641718    async getAdditionalItemDefinitions() {
     1719
     1720
     1721
    16651722      return [];
    16661723    }
     
    21632220    constructor() {
    21642221      super("WP Content");
     2222
     2223
     2224
     2225
     2226
     2227
     2228
    21652229      const postTypeKeys = Object.keys(globalThis.contentApi.postTypes);
    2166       for (let i = 0; i < postTypeKeys.length; i++) {
    2167         const thisPostTypeKey = postTypeKeys[i];
     2230      const filteredPostTypeKeys = postTypeKeys.filter((key) => !ignoredPostTypes.includes(key));
     2231      for (let i = 0; i < filteredPostTypeKeys.length; i++) {
     2232        const thisPostTypeKey = filteredPostTypeKeys[i];
    21682233        const thisPostType = globalThis.contentApi.postTypes[thisPostTypeKey];
    21692234        this.searchModes.push(this.makePostTypeSearchMode(thisPostType));
     
    21712236      this.searchModes.push(new class_search_mode_default("id", "Post ID", this.postById.bind(this)));
    21722237      this.searchModes.push(new class_search_mode_default("search", "All post types", this.contentSearch.bind(this)));
    2173       this.searchModes.push(new class_search_mode_default("find", "All post types", this.contentSearch.bind(this)));
     2238      this.searchModes.push(new class_search_mode_default("find", "All post types", this.contentSearch.bind(this)));
    21742239    }
    21752240    shouldActivate() {
     
    22972362  };
    22982363  var class_turbo_admin_users_default = TurboAdminUserSearch;
     2364
     2365
     2366
     2367
     2368
     2369
     2370
     2371
     2372
     2373
     2374
     2375
     2376
     2377
     2378
     2379
     2380
     2381
     2382
     2383
     2384
     2385
     2386
     2387
     2388
     2389
     2390
     2391
     2392
     2393
     2394
     2395
     2396
     2397
     2398
     2399
     2400
     2401
     2402
     2403
     2404
     2405
     2406
     2407
     2408
     2409
     2410
     2411
     2412
     2413
     2414
     2415
     2416
     2417
     2418
     2419
     2420
     2421
     2422
     2423
     2424
     2425
     2426
     2427
     2428
     2429
     2430
     2431
     2432
     2433
     2434
     2435
     2436
     2437
     2438
     2439
     2440
     2441
     2442
     2443
     2444
     2445
     2446
     2447
     2448
     2449
     2450
     2451
     2452
     2453
     2454
     2455
     2456
     2457
     2458
     2459
    22992460
    23002461  // src/plugins/class-turbo-admin-mu-sites.js
     
    24222583      new class_turbo_admin_mu_sites_default();
    24232584      new class_turbo_admin_oxygen_buillder_default();
     2585
     2586
     2587
     2588
    24242589      this.wp = globalThis.taWp;
    24252590      this.menu = [];
     
    24322597            } else {
    24332598              this.menu = JSON.parse(savedMenu);
    2434               if (!this.menu.some((item) => item.action.endsWith("upload.php"))) {
     2599              if (!this.menu.some((item) => item.action.endsWith("upload.php"))) {
    24352600                this.menuNeedsRefresh = true;
    24362601              }
     
    25052670      const pluginKeys = Object.keys(this.plugins);
    25062671      for (let i = 0; i < pluginKeys.length; i++) {
     2672
    25072673        extraItems = extraItems.concat(await this.plugins[pluginKeys[i]].getAdditionalItemDefinitions());
    25082674      }
     
    25112677          detectType: "dom",
    25122678          detectSelector: "body.wp-admin #wp-admin-bar-view-site a",
     2679
    25132680          itemTitleFunction: () => "View/visit site",
    25142681          itemUrlFunction: (element) => element.href
     
    25172684          detectType: "dom",
    25182685          detectSelector: "#wp-admin-bar-dashboard a",
     2686
    25192687          itemTitleFunction: (element) => element.textContent,
    25202688          itemUrlFunction: (element) => element.href
     
    25232691          detectType: "dom",
    25242692          detectSelector: "#wpadminbar",
     2693
    25252694          itemTitleFunction: () => "Logout",
    25262695          itemUrlFunction: () => document.getElementById("wp-admin-bar-logout")?.querySelector("a")?.href
     
    25292698          detectType: "dom",
    25302699          detectSelector: "#wp-admin-bar-edit a",
     2700
    25312701          itemTitleFunction: (item) => item.textContent,
    25322702          itemUrlFunction: (item) => item.href,
     
    25362706          detectType: "dom",
    25372707          detectSelector: "#wp-admin-bar-view a",
     2708
    25382709          itemTitleFunction: (item) => item.textContent,
    25392710          itemUrlFunction: (item) => item.href,
     
    25432714          detectType: "dom",
    25442715          detectSelector: "#wp-admin-bar-new-content .ab-submenu a",
     2716
    25452717          itemTitleFunction: (item) => "New " + item.textContent,
    25462718          itemUrlFunction: (item) => item.href
     
    25492721          detectType: "dom",
    25502722          detectSelector: "#wp-admin-bar-customize a",
     2723
    25512724          itemTitleFunction: (item) => item.textContent,
    25522725          itemUrlFunction: (item) => item.href
     
    25552728          detectType: "dom",
    25562729          detectSelectorNone: "#wpadminbar, #loginform",
     2730
    25572731          itemTitleFunction: () => "Log in",
    25582732          itemUrlFunction: () => {
     
    25662740          detectType: "dom",
    25672741          detectSelector: "#backtoblog a",
     2742
    25682743          itemTitleFunction: () => "View/visit site",
    25692744          itemUrlFunction: (element) => element.href
     
    25722747          detectType: "dom",
    25732748          detectSelector: "#wp-admin-bar-my-sites #wp-admin-bar-network-admin > a",
     2749
    25742750          itemTitleFunction: () => "Network Admin",
    25752751          itemUrlFunction: (element) => element.href
     
    25782754          detectType: "dom",
    25792755          detectSelector: "#wp-admin-bar-my-sites #wp-admin-bar-network-admin .ab-submenu a",
     2756
    25802757          itemTitleFunction: (element) => "Network Admin: " + element.textContent,
    25812758          itemUrlFunction: (element) => element.href
     
    25852762        let detected = false;
    25862763        let elements = null;
    2587         if (item.detectType === "url") {
     2764        if (item.detectType === "none") {
     2765          detected = true;
     2766          elements = document.querySelectorAll("body");
     2767        } else if (item.detectType === "url") {
    25882768          detected = Boolean(window.location.href.includes(item.detectPattern));
    25892769          elements = document.querySelectorAll("body");
     
    26022782        }
    26032783        elements.forEach((element) => {
    2604           const newItem = new class_turbo_admin_menu_item_default(item.itemTitleFunction(element), item.itemUrlFunction(element), "", item?.noCache);
     2784          const newItem = );
    26052785          if (this.menu.some((menuItem) => {
    26062786            return newItem.sameAs(menuItem);
     
    29613141  };
    29623142  window.turboAdminIsExtension = function() {
    2963     return typeof chrome.storage !== "undefined";
     3143    return ;
    29643144  };
    29653145  async function taInit(settings) {
  • turbo-admin/tags/1.13.3/dist/main.min.js.map

    r2871191 r2919322  
    11{
    22  "version": 3,
    3   "sources": ["../src/fuse-6.4.6.js", "../src/class-turbo-admin-palette.js", "../src/types/class-turbo-admin-menu-item.js", "../src/class-storage.js", "../src/apis/class-content-api.js", "../src/types/class-submenu-item.js", "../src/types/class-content-item.js", "../src/types/class-search-mode.js", "../src/types/class-item-definition.js", "../src/types/class-turbo-admin-plugin.js", "../src/class-turbo-admin-wp-block-editor-fullscreen-kill.js", "../src/class-turbo-admin-wp-block-editor-welcome-guide-kill.js", "../src/class-turbo-admin-wp-notices.js", "../src/class-list-table-shortcuts.js", "../src/plugins/class-turbo-admin-barkeeper.js", "../src/plugins/class-turbo-admin-content-search.js", "../src/plugins/class-turbo-admin-plugins.js", "../src/plugins/class-turbo-admin-users.js", "../src/plugins/class-turbo-admin-mu-sites.js", "../src/plugins/class-turbo-admin-oxygen-buillder.js", "../src/class-turbo-admin.js", "../src/class-wp.js", "../src/apis/class-woocommerce-api.js", "../src/apis/class-gravity-forms-api.js", "../src/main.js"],
    4   "sourcesContent": ["/**\n * Fuse.js v6.4.6 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2021 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\nvar e, t; e = this, t = function () { \"use strict\"; function e(t) { return (e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e })(t) } function t(e, t) { if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\") } function n(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) } } function r(e, t, r) { return t && n(e.prototype, t), r && n(e, r), e } function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter((function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable }))), n.push.apply(n, r) } return n } function c(e) { for (var t = 1; t < arguments.length; t++) { var n = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(n), !0).forEach((function (t) { i(e, t, n[t]) })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : o(Object(n)).forEach((function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)) })) } return e } function a(e, t) { if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\"); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), t && u(e, t) } function s(e) { return (s = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) { return e.__proto__ || Object.getPrototypeOf(e) })(e) } function u(e, t) { return (u = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e })(e, t) } function h(e, t) { return !t || \"object\" != typeof t && \"function\" != typeof t ? function (e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e }(e) : t } function f(e) { var t = function () { if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1; if (Reflect.construct.sham) return !1; if (\"function\" == typeof Proxy) return !0; try { return Date.prototype.toString.call(Reflect.construct(Date, [], (function () { }))), !0 } catch (e) { return !1 } }(); return function () { var n, r = s(e); if (t) { var i = s(this).constructor; n = Reflect.construct(r, arguments, i) } else n = r.apply(this, arguments); return h(this, n) } } function l(e) { return function (e) { if (Array.isArray(e)) return d(e) }(e) || function (e) { if (\"undefined\" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e) }(e) || function (e, t) { if (e) { if (\"string\" == typeof e) return d(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); return \"Object\" === n && e.constructor && (n = e.constructor.name), \"Map\" === n || \"Set\" === n ? Array.from(e) : \"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? d(e, t) : void 0 } }(e) || function () { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\") }() } function d(e, t) { (null == t || t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n < t; n++)r[n] = e[n]; return r } function v(e) { return Array.isArray ? Array.isArray(e) : \"[object Array]\" === b(e) } function g(e) { return \"string\" == typeof e } function y(e) { return \"number\" == typeof e } function p(e) { return !0 === e || !1 === e || function (e) { return m(e) && null !== e }(e) && \"[object Boolean]\" == b(e) } function m(t) { return \"object\" === e(t) } function k(e) { return null != e } function M(e) { return !e.trim().length } function b(e) { return null == e ? void 0 === e ? \"[object Undefined]\" : \"[object Null]\" : Object.prototype.toString.call(e) } var x = function (e) { return \"Invalid value for key \".concat(e) }, L = function (e) { return \"Pattern length exceeds max of \".concat(e, \".\") }, S = Object.prototype.hasOwnProperty, w = function () { function e(n) { var r = this; t(this, e), this._keys = [], this._keyMap = {}; var i = 0; n.forEach((function (e) { var t = _(e); i += t.weight, r._keys.push(t), r._keyMap[t.id] = t, i += t.weight })), this._keys.forEach((function (e) { e.weight /= i })) } return r(e, [{ key: \"get\", value: function (e) { return this._keyMap[e] } }, { key: \"keys\", value: function () { return this._keys } }, { key: \"toJSON\", value: function () { return JSON.stringify(this._keys) } }]), e }(); function _(e) { var t = null, n = null, r = null, i = 1; if (g(e) || v(e)) r = e, t = O(e), n = j(e); else { if (!S.call(e, \"name\")) throw new Error(function (e) { return \"Missing \".concat(e, \" property in key\") }(\"name\")); var o = e.name; if (r = o, S.call(e, \"weight\") && (i = e.weight) <= 0) throw new Error(function (e) { return \"Property 'weight' in key '\".concat(e, \"' must be a positive integer\") }(o)); t = O(o), n = j(o) } return { path: t, id: n, weight: i, src: r } } function O(e) { return v(e) ? e : e.split(\".\") } function j(e) { return v(e) ? e.join(\".\") : e } var A = c({}, { isCaseSensitive: !1, includeScore: !1, keys: [], shouldSort: !0, sortFn: function (e, t) { return e.score === t.score ? e.idx < t.idx ? -1 : 1 : e.score < t.score ? -1 : 1 } }, {}, { includeMatches: !1, findAllMatches: !1, minMatchCharLength: 1 }, {}, { location: 0, threshold: .6, distance: 100 }, {}, { useExtendedSearch: !1, getFn: function (e, t) { var n = [], r = !1; return function e(t, i, o) { if (k(t)) if (i[o]) { var c = t[i[o]]; if (!k(c)) return; if (o === i.length - 1 && (g(c) || y(c) || p(c))) n.push(function (e) { return null == e ? \"\" : function (e) { if (\"string\" == typeof e) return e; var t = e + \"\"; return \"0\" == t && 1 / e == -1 / 0 ? \"-0\" : t }(e) }(c)); else if (v(c)) { r = !0; for (var a = 0, s = c.length; a < s; a += 1)e(c[a], i, o + 1) } else i.length && e(c, i, o + 1) } else n.push(t) }(e, g(t) ? t.split(\".\") : t, 0), r ? n : n[0] }, ignoreLocation: !1, ignoreFieldNorm: !1 }), I = /[^ ]+/g; function C() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 3, t = new Map, n = Math.pow(10, e); return { get: function (e) { var r = e.match(I).length; if (t.has(r)) return t.get(r); var i = 1 / Math.sqrt(r), o = parseFloat(Math.round(i * n) / n); return t.set(r, o), o }, clear: function () { t.clear() } } } var E = function () { function e() { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r; t(this, e), this.norm = C(3), this.getFn = i, this.isCreated = !1, this.setIndexRecords() } return r(e, [{ key: \"setSources\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.docs = e } }, { key: \"setIndexRecords\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.records = e } }, { key: \"setKeys\", value: function () { var e = this, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.keys = t, this._keysMap = {}, t.forEach((function (t, n) { e._keysMap[t.id] = n })) } }, { key: \"create\", value: function () { var e = this; !this.isCreated && this.docs.length && (this.isCreated = !0, g(this.docs[0]) ? this.docs.forEach((function (t, n) { e._addString(t, n) })) : this.docs.forEach((function (t, n) { e._addObject(t, n) })), this.norm.clear()) } }, { key: \"add\", value: function (e) { var t = this.size(); g(e) ? this._addString(e, t) : this._addObject(e, t) } }, { key: \"removeAt\", value: function (e) { this.records.splice(e, 1); for (var t = e, n = this.size(); t < n; t += 1)this.records[t].i -= 1 } }, { key: \"getValueForItemAtKeyId\", value: function (e, t) { return e[this._keysMap[t]] } }, { key: \"size\", value: function () { return this.records.length } }, { key: \"_addString\", value: function (e, t) { if (k(e) && !M(e)) { var n = { v: e, i: t, n: this.norm.get(e) }; this.records.push(n) } } }, { key: \"_addObject\", value: function (e, t) { var n = this, r = { i: t, $: {} }; this.keys.forEach((function (t, i) { var o = n.getFn(e, t.path); if (k(o)) if (v(o)) !function () { for (var e = [], t = [{ nestedArrIndex: -1, value: o }]; t.length;) { var c = t.pop(), a = c.nestedArrIndex, s = c.value; if (k(s)) if (g(s) && !M(s)) { var u = { v: s, i: a, n: n.norm.get(s) }; e.push(u) } else v(s) && s.forEach((function (e, n) { t.push({ nestedArrIndex: n, value: e }) })) } r.$[i] = e }(); else if (!M(o)) { var c = { v: o, n: n.norm.get(o) }; r.$[i] = c } })), this.records.push(r) } }, { key: \"toJSON\", value: function () { return { keys: this.keys, records: this.records } } }]), e }(); function $(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r, o = new E({ getFn: i }); return o.setKeys(e.map(_)), o.setSources(t), o.create(), o } function R(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.errors, r = void 0 === n ? 0 : n, i = t.currentLocation, o = void 0 === i ? 0 : i, c = t.expectedLocation, a = void 0 === c ? 0 : c, s = t.distance, u = void 0 === s ? A.distance : s, h = t.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r / e.length; if (f) return l; var d = Math.abs(a - o); return u ? l + d / u : d ? 1 : l } function F() { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : A.minMatchCharLength, n = [], r = -1, i = -1, o = 0, c = e.length; o < c; o += 1) { var a = e[o]; a && -1 === r ? r = o : a || -1 === r || ((i = o - 1) - r + 1 >= t && n.push([r, i]), r = -1) } return e[o - 1] && o - r >= t && n.push([r, o - 1]), n } function P(e) { for (var t = {}, n = 0, r = e.length; n < r; n += 1) { var i = e.charAt(n); t[i] = (t[i] || 0) | 1 << r - n - 1 } return t } var N = function () { function e(n) { var r = this, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, o = i.location, c = void 0 === o ? A.location : o, a = i.threshold, s = void 0 === a ? A.threshold : a, u = i.distance, h = void 0 === u ? A.distance : u, f = i.includeMatches, l = void 0 === f ? A.includeMatches : f, d = i.findAllMatches, v = void 0 === d ? A.findAllMatches : d, g = i.minMatchCharLength, y = void 0 === g ? A.minMatchCharLength : g, p = i.isCaseSensitive, m = void 0 === p ? A.isCaseSensitive : p, k = i.ignoreLocation, M = void 0 === k ? A.ignoreLocation : k; if (t(this, e), this.options = { location: c, threshold: s, distance: h, includeMatches: l, findAllMatches: v, minMatchCharLength: y, isCaseSensitive: m, ignoreLocation: M }, this.pattern = m ? n : n.toLowerCase(), this.chunks = [], this.pattern.length) { var b = function (e, t) { r.chunks.push({ pattern: e, alphabet: P(e), startIndex: t }) }, x = this.pattern.length; if (x > 32) { for (var L = 0, S = x % 32, w = x - S; L < w;)b(this.pattern.substr(L, 32), L), L += 32; if (S) { var _ = x - 32; b(this.pattern.substr(_), _) } } else b(this.pattern, 0) } } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.options, n = t.isCaseSensitive, r = t.includeMatches; if (n || (e = e.toLowerCase()), this.pattern === e) { var i = { isMatch: !0, score: 0 }; return r && (i.indices = [[0, e.length - 1]]), i } var o = this.options, c = o.location, a = o.distance, s = o.threshold, u = o.findAllMatches, h = o.minMatchCharLength, f = o.ignoreLocation, d = [], v = 0, g = !1; this.chunks.forEach((function (t) { var n = t.pattern, i = t.alphabet, o = t.startIndex, y = function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, i = r.location, o = void 0 === i ? A.location : i, c = r.distance, a = void 0 === c ? A.distance : c, s = r.threshold, u = void 0 === s ? A.threshold : s, h = r.findAllMatches, f = void 0 === h ? A.findAllMatches : h, l = r.minMatchCharLength, d = void 0 === l ? A.minMatchCharLength : l, v = r.includeMatches, g = void 0 === v ? A.includeMatches : v, y = r.ignoreLocation, p = void 0 === y ? A.ignoreLocation : y; if (t.length > 32) throw new Error(L(32)); for (var m, k = t.length, M = e.length, b = Math.max(0, Math.min(o, M)), x = u, S = b, w = d > 1 || g, _ = w ? Array(M) : []; (m = e.indexOf(t, S)) > -1;) { var O = R(t, { currentLocation: m, expectedLocation: b, distance: a, ignoreLocation: p }); if (x = Math.min(O, x), S = m + k, w) for (var j = 0; j < k;)_[m + j] = 1, j += 1 } S = -1; for (var I = [], C = 1, E = k + M, $ = 1 << k - 1, P = 0; P < k; P += 1) { for (var N = 0, D = E; N < D;) { var z = R(t, { errors: P, currentLocation: b + D, expectedLocation: b, distance: a, ignoreLocation: p }); z <= x ? N = D : E = D, D = Math.floor((E - N) / 2 + N) } E = D; var K = Math.max(1, b - D + 1), q = f ? M : Math.min(b + D, M) + k, W = Array(q + 2); W[q + 1] = (1 << P) - 1; for (var J = q; J >= K; J -= 1) { var T = J - 1, U = n[e.charAt(T)]; if (w && (_[T] = +!!U), W[J] = (W[J + 1] << 1 | 1) & U, P && (W[J] |= (I[J + 1] | I[J]) << 1 | 1 | I[J + 1]), W[J] & $ && (C = R(t, { errors: P, currentLocation: T, expectedLocation: b, distance: a, ignoreLocation: p })) <= x) { if (x = C, (S = T) <= b) break; K = Math.max(1, 2 * b - S) } } var V = R(t, { errors: P + 1, currentLocation: b, expectedLocation: b, distance: a, ignoreLocation: p }); if (V > x) break; I = W } var B = { isMatch: S >= 0, score: Math.max(.001, C) }; if (w) { var G = F(_, d); G.length ? g && (B.indices = G) : B.isMatch = !1 } return B }(e, n, i, { location: c + o, distance: a, threshold: s, findAllMatches: u, minMatchCharLength: h, includeMatches: r, ignoreLocation: f }), p = y.isMatch, m = y.score, k = y.indices; p && (g = !0), v += m, p && k && (d = [].concat(l(d), l(k))) })); var y = { isMatch: g, score: g ? v / this.chunks.length : 1 }; return g && r && (y.indices = d), y } }]), e }(), D = function () { function e(n) { t(this, e), this.pattern = n } return r(e, [{ key: \"search\", value: function () { } }], [{ key: \"isMultiMatch\", value: function (e) { return z(e, this.multiRegex) } }, { key: \"isSingleMatch\", value: function (e) { return z(e, this.singleRegex) } }]), e }(); function z(e, t) { var n = e.match(t); return n ? n[1] : null } var K = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e === this.pattern; return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"exact\" } }, { key: \"multiRegex\", get: function () { return /^=\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^=(.*)$/ } }]), i }(D), q = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = -1 === e.indexOf(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)$/ } }]), i }(D), W = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^\\^(.*)$/ } }]), i }(D), J = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!\\^(.*)$/ } }]), i }(D), T = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [e.length - this.pattern.length, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)\\$$/ } }]), i }(D), U = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)\\$$/ } }]), i }(D), V = function (e) { a(i, e); var n = f(i); function i(e) { var r, o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = o.location, a = void 0 === c ? A.location : c, s = o.threshold, u = void 0 === s ? A.threshold : s, h = o.distance, f = void 0 === h ? A.distance : h, l = o.includeMatches, d = void 0 === l ? A.includeMatches : l, v = o.findAllMatches, g = void 0 === v ? A.findAllMatches : v, y = o.minMatchCharLength, p = void 0 === y ? A.minMatchCharLength : y, m = o.isCaseSensitive, k = void 0 === m ? A.isCaseSensitive : m, M = o.ignoreLocation, b = void 0 === M ? A.ignoreLocation : M; return t(this, i), (r = n.call(this, e))._bitapSearch = new N(e, { location: a, threshold: u, distance: f, includeMatches: d, findAllMatches: g, minMatchCharLength: p, isCaseSensitive: k, ignoreLocation: b }), r } return r(i, [{ key: \"search\", value: function (e) { return this._bitapSearch.searchIn(e) } }], [{ key: \"type\", get: function () { return \"fuzzy\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)$/ } }]), i }(D), B = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { for (var t, n = 0, r = [], i = this.pattern.length; (t = e.indexOf(this.pattern, n)) > -1;)n = t + i, r.push([t, n - 1]); var o = !!r.length; return { isMatch: o, score: o ? 0 : 1, indices: r } } }], [{ key: \"type\", get: function () { return \"include\" } }, { key: \"multiRegex\", get: function () { return /^'\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^'(.*)$/ } }]), i }(D), G = [K, B, W, J, U, T, q, V], H = G.length, Q = / +(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/; function X(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return e.split(\"|\").map((function (e) { for (var n = e.trim().split(Q).filter((function (e) { return e && !!e.trim() })), r = [], i = 0, o = n.length; i < o; i += 1) { for (var c = n[i], a = !1, s = -1; !a && ++s < H;) { var u = G[s], h = u.isMultiMatch(c); h && (r.push(new u(h, t)), a = !0) } if (!a) for (s = -1; ++s < H;) { var f = G[s], l = f.isSingleMatch(c); if (l) { r.push(new f(l, t)); break } } } return r })) } var Y = new Set([V.type, B.type]), Z = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = r.isCaseSensitive, o = void 0 === i ? A.isCaseSensitive : i, c = r.includeMatches, a = void 0 === c ? A.includeMatches : c, s = r.minMatchCharLength, u = void 0 === s ? A.minMatchCharLength : s, h = r.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r.findAllMatches, d = void 0 === l ? A.findAllMatches : l, v = r.location, g = void 0 === v ? A.location : v, y = r.threshold, p = void 0 === y ? A.threshold : y, m = r.distance, k = void 0 === m ? A.distance : m; t(this, e), this.query = null, this.options = { isCaseSensitive: o, includeMatches: a, minMatchCharLength: u, findAllMatches: d, ignoreLocation: f, location: g, threshold: p, distance: k }, this.pattern = o ? n : n.toLowerCase(), this.query = X(this.pattern, this.options) } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.query; if (!t) return { isMatch: !1, score: 1 }; var n = this.options, r = n.includeMatches; e = n.isCaseSensitive ? e : e.toLowerCase(); for (var i = 0, o = [], c = 0, a = 0, s = t.length; a < s; a += 1) { var u = t[a]; o.length = 0, i = 0; for (var h = 0, f = u.length; h < f; h += 1) { var d = u[h], v = d.search(e), g = v.isMatch, y = v.indices, p = v.score; if (!g) { c = 0, i = 0, o.length = 0; break } if (i += 1, c += p, r) { var m = d.constructor.type; Y.has(m) ? o = [].concat(l(o), l(y)) : o.push(y) } } if (i) { var k = { isMatch: !0, score: c / i }; return r && (k.indices = o), k } } return { isMatch: !1, score: 1 } } }], [{ key: \"condition\", value: function (e, t) { return t.useExtendedSearch } }]), e }(), ee = []; function te(e, t) { for (var n = 0, r = ee.length; n < r; n += 1) { var i = ee[n]; if (i.condition(e, t)) return new i(e, t) } return new N(e, t) } var ne = \"$and\", re = \"$or\", ie = \"$path\", oe = \"$val\", ce = function (e) { return !(!e[ne] && !e[re]) }, ae = function (e) { return !!e[ie] }, se = function (e) { return !v(e) && m(e) && !ce(e) }, ue = function (e) { return i({}, ne, Object.keys(e).map((function (t) { return i({}, t, e[t]) }))) }; function he(e, t) { var n = t.ignoreFieldNorm, r = void 0 === n ? A.ignoreFieldNorm : n; e.forEach((function (e) { var t = 1; e.matches.forEach((function (e) { var n = e.key, i = e.norm, o = e.score, c = n ? n.weight : null; t *= Math.pow(0 === o && c ? Number.EPSILON : o, (c || 1) * (r ? 1 : i)) })), e.score = t })) } function fe(e, t) { var n = e.matches; t.matches = [], k(n) && n.forEach((function (e) { if (k(e.indices) && e.indices.length) { var n = { indices: e.indices, value: e.value }; e.key && (n.key = e.key.src), e.idx > -1 && (n.refIndex = e.idx), t.matches.push(n) } })) } function le(e, t) { t.score = e.score } function de(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.includeMatches, i = void 0 === r ? A.includeMatches : r, o = n.includeScore, c = void 0 === o ? A.includeScore : o, a = []; return i && a.push(fe), c && a.push(le), e.map((function (e) { var n = e.idx, r = { item: t[n], refIndex: n }; return a.length && a.forEach((function (t) { t(e, r) })), r })) } var ve = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = arguments.length > 2 ? arguments[2] : void 0; t(this, e), this.options = c({}, A, {}, r), this.options.useExtendedSearch, this._keyStore = new w(this.options.keys), this.setCollection(n, i) } return r(e, [{ key: \"setCollection\", value: function (e, t) { if (this._docs = e, t && !(t instanceof E)) throw new Error(\"Incorrect 'index' type\"); this._myIndex = t || $(this.options.keys, this._docs, { getFn: this.options.getFn }) } }, { key: \"add\", value: function (e) { k(e) && (this._docs.push(e), this._myIndex.add(e)) } }, { key: \"remove\", value: function () { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : function () { return !1 }, t = [], n = 0, r = this._docs.length; n < r; n += 1) { var i = this._docs[n]; e(i, n) && (this.removeAt(n), n -= 1, r -= 1, t.push(i)) } return t } }, { key: \"removeAt\", value: function (e) { this._docs.splice(e, 1), this._myIndex.removeAt(e) } }, { key: \"getIndex\", value: function () { return this._myIndex } }, { key: \"search\", value: function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.limit, r = void 0 === n ? -1 : n, i = this.options, o = i.includeMatches, c = i.includeScore, a = i.shouldSort, s = i.sortFn, u = i.ignoreFieldNorm, h = g(e) ? g(this._docs[0]) ? this._searchStringList(e) : this._searchObjectList(e) : this._searchLogical(e); return he(h, { ignoreFieldNorm: u }), a && h.sort(s), y(r) && r > -1 && (h = h.slice(0, r)), de(h, this._docs, { includeMatches: o, includeScore: c }) } }, { key: \"_searchStringList\", value: function (e) { var t = te(e, this.options), n = this._myIndex.records, r = []; return n.forEach((function (e) { var n = e.v, i = e.i, o = e.n; if (k(n)) { var c = t.searchIn(n), a = c.isMatch, s = c.score, u = c.indices; a && r.push({ item: n, idx: i, matches: [{ score: s, value: n, norm: o, indices: u }] }) } })), r } }, { key: \"_searchLogical\", value: function (e) { var t = this, n = function (e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.auto, i = void 0 === r || r, o = function e(n) { var r = Object.keys(n), o = ae(n); if (!o && r.length > 1 && !ce(n)) return e(ue(n)); if (se(n)) { var c = o ? n[ie] : r[0], a = o ? n[oe] : n[c]; if (!g(a)) throw new Error(x(c)); var s = { keyId: j(c), pattern: a }; return i && (s.searcher = te(a, t)), s } var u = { children: [], operator: r[0] }; return r.forEach((function (t) { var r = n[t]; v(r) && r.forEach((function (t) { u.children.push(e(t)) })) })), u }; return ce(e) || (e = ue(e)), o(e) }(e, this.options), r = this._myIndex.records, i = {}, o = []; return r.forEach((function (e) { var r = e.$, c = e.i; if (k(r)) { var a = function e(n, r, i) { if (!n.children) { var o = n.keyId, c = n.searcher, a = t._findMatches({ key: t._keyStore.get(o), value: t._myIndex.getValueForItemAtKeyId(r, o), searcher: c }); return a && a.length ? [{ idx: i, item: r, matches: a }] : [] } switch (n.operator) { case ne: for (var s = [], u = 0, h = n.children.length; u < h; u += 1) { var f = e(n.children[u], r, i); if (!f.length) return []; s.push.apply(s, l(f)) } return s; case re: for (var d = [], v = 0, g = n.children.length; v < g; v += 1) { var y = e(n.children[v], r, i); if (y.length) { d.push.apply(d, l(y)); break } } return d } }(n, r, c); a.length && (i[c] || (i[c] = { idx: c, item: r, matches: [] }, o.push(i[c])), a.forEach((function (e) { var t, n = e.matches; (t = i[c].matches).push.apply(t, l(n)) }))) } })), o } }, { key: \"_searchObjectList\", value: function (e) { var t = this, n = te(e, this.options), r = this._myIndex, i = r.keys, o = r.records, c = []; return o.forEach((function (e) { var r = e.$, o = e.i; if (k(r)) { var a = []; i.forEach((function (e, i) { a.push.apply(a, l(t._findMatches({ key: e, value: r[i], searcher: n }))) })), a.length && c.push({ idx: o, item: r, matches: a }) } })), c } }, { key: \"_findMatches\", value: function (e) { var t = e.key, n = e.value, r = e.searcher; if (!k(n)) return []; var i = []; if (v(n)) n.forEach((function (e) { var n = e.v, o = e.i, c = e.n; if (k(n)) { var a = r.searchIn(n), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: n, idx: o, norm: c, indices: h }) } })); else { var o = n.v, c = n.n, a = r.searchIn(o), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: o, norm: c, indices: h }) } return i } }]), e }(); return ve.version = \"6.4.6\", ve.createIndex = $, ve.parseIndex = function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.getFn, r = void 0 === n ? A.getFn : n, i = e.keys, o = e.records, c = new E({ getFn: r }); return c.setKeys(i), c.setIndexRecords(o), c }, ve.config = A, function () { ee.push.apply(ee, arguments) }(Z), ve }, \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = e || self).Fuse = t();\n", "/*\n * Some notes on how this works...\n *\n * paletteData is passed into the constructor and is the initial list of items\n * these are TurboAdminMenuItem objects\n *\n * At any point, buildPaletteItems() can be called to turn the paletteData\n * into an array of \"li\" nodes.\n *\n * updatePaletteItems inserts the paletteItems into the \"ul\" list and sets the\n * selectedElement\n *\n * The selectedItem is always one of the paletteItems\n *\n * paletteSearch rebuilds the paletteItems from the paletteData using\n * buildPaletteItems, and then filters the list with FuseJS\n */\n\nimport Fuse from './fuse-6.4.6.js';\nimport TurboAdminMenuItem from './types/class-turbo-admin-menu-item';\nimport ContentApi from './apis/class-content-api.js';\nimport SearchMode from './types/class-search-mode.js';\nimport ContentItem from './types/class-content-item.js';\n\nexport default class TurboAdminPalette {\n\n\tconstructor(paletteData, options) {\n\n\t\tturboAdminLog('Initialising TurboAdmin');\n\n        this.options = options;\n\n        /** @type {HTMLDivElement} */\n        this.paletteElement      = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteInnerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette'));\n\t\t/** @type {HTMLInputElement} */\n        this.paletteInputElement = /** @type {HTMLInputElement} */ (document.getElementById('ta-command-palette-input'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteItemsContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-items-container'));\n\t\t/** @type {HTMLUListElement} */\n        this.paletteItemsElement = /** @type {HTMLUListElement} */ (document.getElementById('ta-command-palette-items'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteSubmenuContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-submenu-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTag = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-search-mode-tag'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTabNotice = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-tab-notice'));\n        /** @type {HTMLSpanElement} */\n        this.paletteSearchModeTabNoticeText = /** @type {HTMLSpanElement} */ (document.getElementById('ta-command-palette-tab-notice-text'));\n        /** @type {HTMLDivElement} */\n        this.paletteNoticeElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-notice'));\n\n\n        // Add a class if the menu needs refreshing with a visit to the Dashboard\n        if (globalThis.turboAdmin.menuNeedsRefresh) {\n            this.showPaletteNotice('Menu needs refreshing. Visit the Dashboard to refresh.');\n        }\n\n        // We need this when injecting items. We use it to help generate edit URLs. Not the best way but\n        // works for now.\n        /** @type {HTMLUListElement} */\n        this.profileLinkElem = document.getElementById('wp-admin-bar-edit-profile');\n        /** @type {null|String} */\n        this.profileLink = null;\n        if (this.profileLinkElem) {\n            this.profileLink = this.profileLinkElem.querySelector('a').href;\n        }\n\n\t\t// Get palette data\n\t\tthis.paletteData = paletteData;\n\n        // Backup of the palette data for use when we enter a different search mode\n\t\tthis.paletteDataBackup = null;\n\t\tthis.paletteItemsBackup = null;\n        this.paletteItemIndexBackup = null;\n\n        // Current search modes/keyword\n        this.searchMode = null;\n\n        // paletteItems is the list of 'li' elements used to build the palette\n        this.paletteItems = [];\n\n        // itemIndex is a \"cache\" of URLs used to check if we already\n        // have an item in the palette\n        this.itemIndex = {};\n\n        // Convert into LI elements\n        this.buildPaletteItems();\n\n\n\t\tthis.selectedItem = this.paletteItems[0];\n        this.openedSubMenu = null;\n        this.selectedSubItem = null;\n\n\t\t// Add them to the DOM\n\t\tthis.updatePaletteItems();\n\n        // Set state\n        this.navigating = false;\n        this.debounceTimeout;\n\n\t\tthis.paletteFuseOptions = [];\n\t\tthis.paletteFuse = null;\n\n\t\tif (typeof (Fuse) !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.paletteFuseOptions = {\n\t\t\tkeys: ['innerText'],\n\t\t}\n\n\t\tthis.paletteFuse = new Fuse(this.paletteItems, this.paletteFuseOptions);\n\n\t\tdocument.addEventListener('keydown', e => this.handleGlobalKey(e));\n\n\t\tthis.paletteElement.addEventListener('click', e => {\n\t\t\tthis.checkForPaletteItemClick(e);\n            this.checkForClickToClose(e);\n\t\t});\n\n        this.paletteItemsElement.addEventListener('mouseover', e => {\n            this.setHoveredItem(e.target);\n        });\n\t}\n\n    htmlDecode(input) {\n        var doc = new DOMParser().parseFromString(input, \"text/html\");\n        return doc.documentElement.textContent;\n    }\n\n    isMac() {\n        return navigator.platform.startsWith('Mac');\n    }\n\n    metaPressed(e) {\n        return this.isMac() ? e.metaKey : e.ctrlKey;\n    }\n\n    inSearchMode() {\n        return this.searchMode !== null;\n    }\n\n\t/**\n     * This converts this.paletteData into a list of paletteListItems in this.paletteItems\n     *\n     * It also builds the itemIndex\n     */\n    buildPaletteItems() {\n        this.paletteItems = [];\n        this.itemIndex = {};\n\n\t\tthis.paletteData.forEach(item => {\n\t\t\tconst li = document.createElement('li');\n\t\t\tconst a = document.createElement('a');\n\t\t\tli.appendChild(a);\n\t\t\ta.href = item.action;\n\t\t\tlet title = item.title;\n\t\t\tif (item.parentTitle) {\n\t\t\t\ttitle = item.parentTitle + \": \" + title;\n\t\t\t}\n\t\t\ta.innerHTML = title;\n            this.addPaletteListItem(li);\n\t\t});\n\t}\n\n    // This takes a 'li' element and adds it to the paletteItems.\n    // It also updates any caches and stuff.\n    addPaletteListItem(listItem) {\n        this.paletteItems.push(listItem);\n\n        const link = listItem.querySelector('a');\n        if (link) {\n            this.itemIndex[link.href] = 1;\n        }\n    }\n\n    contentItemExists(url) {\n        return Boolean(this.itemIndex[url]);\n    }\n\n    /**\n     * Clears and sets the content items\n     *\n     * @param {ContentItem[]} contentItems\n     */\n    setContentItems(contentItems) {\n        this.paletteItems = [];\n        this.itemIndex = [];\n        this.injectContentItems(contentItems, false);\n    }\n\n    /**\n     * Content items have:\n     *  title\n     *  subtype\n     *  url\n     *  (we should also make the sub-menu definable, but that's not done yet)\n     *\n     * @param {ContentItem[]} contentItems\n     */\n    injectContentItems(contentItems, andRunSearch = true) {\n        turboAdminLog('Injecting items');\n\n        if (contentItems.length > 0) {\n            contentItems.forEach(this.injectItem.bind(this));\n        }\n\n        if (andRunSearch) {\n            // Reset the search to work on the new items\n            this.paletteFuse = new Fuse(this.paletteItems, this.paletteFuseOptions);\n            this.paletteItems = this.paletteFuse.search(this.paletteInputElement.value).map(i => i.item);\n        }\n\n        this.updatePaletteItems();\n    }\n\n    /**\n     * Injects a single content item into the palette\n     *\n     * @param {ContentItem} item\n     */\n    injectItem(item) {\n        const itemTitle = item.title;\n        // const itemTitle = item.title.rendered;\n        const itemType = item.subtype;\n        const itemUrl = item.url;\n\n        // turboAdminLog('Adding item: ' + itemTitle);\n\n        // // Check if item already exists\n        if (this.contentItemExists(itemUrl)) {\n            turboAdminLog('Not adding duplicate');\n            return;\n        }\n\n        let title = itemTitle;\n\n        if (itemType) {\n            const itemTypeName = globalThis.contentApi.postTypes[itemType] ? globalThis.contentApi.postTypes[itemType].name : itemType;\n            title += ` (${itemTypeName})`;\n        }\n\n        const li = document.createElement('li');\n        const a = document.createElement('a');\n        let subMenu = null;\n\n        // Loop over submenu items OR add link.\n        if (item.submenuItems.length > 0) {\n\n            // Prepare the outer sub-menu elements\n            subMenu = document.createElement('div');\n            const subMenuTitle = document.createElement('div');\n            const subMenuItems = document.createElement('ul');\n            subMenu.classList.add('ta-submenu');\n            subMenuTitle.classList.add('ta-submenu-title');\n\n            subMenuTitle.textContent = this.htmlDecode(itemTitle);\n            subMenuItems.classList.add('ta-submenu-items');\n            subMenu.appendChild(subMenuTitle);\n\n            for (let i = 0; i < item.submenuItems.length; i++) {\n                const subMenuItem = item.submenuItems[i]\n                // TODO: Abstract this so sub-menus can be defined by plugins?\n                const subMenuListItem = document.createElement('li');\n                const subMenuLink = document.createElement('a');\n                subMenuLink.innerText = subMenuItem.title;\n                subMenuLink.href = subMenuItem.url;\n                for (let a = 0; a < subMenuItem.attributes.length; a++) {\n                    subMenuLink.setAttribute(\n                        subMenuItem.attributes[a].name,\n                        subMenuItem.attributes[a].value\n                    )\n                }\n                subMenuListItem.appendChild(subMenuLink);\n                subMenuItems.appendChild(subMenuListItem);\n            }\n\n            // Add the sub-menu items UL to the sub-menu element.\n            subMenu.appendChild(subMenuItems);\n\n            li.classList.add('ta-has-child-menu');\n        }\n\n        a.href = itemUrl;\n        a.innerHTML = title;\n\n        li.appendChild(a);\n        if (subMenu !== null) {\n            li.appendChild(subMenu);\n        }\n\n        this.addPaletteListItem(li);\n    }\n\n\t/**\n     * Handle global keypresses (at document level). Note that other key presses\n     * are handled by paletteActions()\n     *\n     * @param {KeyboardEvent} e\n     */\n    async handleGlobalKey(e) {\n\t\tif (this.shortcutKeysPressed(e)) {\n            e.preventDefault();\n            e.stopPropagation();\n\t\t\tif (this.paletteShown()) {\n\t\t\t\tthis.hidePalette();\n\t\t\t} else {\n\t\t\t\tthis.showPalette();\n\t\t\t}\n            return;\n\t\t}\n\n\t\tif (e.code === 'Escape' && this.paletteShown()) {\n\t\t\tif (this.isSubMenuOpen()){\n                this.closeSubMenu();\n            } else if (this.inSearchMode()) {\n                this.leaveSearchMode();\n            } else {\n                this.hidePalette();\n            }\n            return;\n\t\t}\n\n        if (this.paletteShown()) {\n            await this.paletteActions(e);\n\t\t}\n\t}\n\n\tshortcutKeysPressed(keyEvent) {\n        // The reduce here works through all the different possible key combos\n        // (more than one can be specified in options)\n\t\tconst keysPressed = this.options.shortcutKeys.reduce(\n\t\t\t(keyPressed, combo) => {\n\t\t\t\tif (keyPressed) {\n\t\t\t\t\treturn keyPressed;\n\t\t\t\t}\n                return ((!navigator.platform.startsWith('Mac')) || (combo.meta === keyEvent.metaKey))\n                    && (combo.alt === keyEvent.altKey)\n                    && (combo.shift === keyEvent.shiftKey)\n                    && (combo.ctrl === keyEvent.ctrlKey)\n                    && (\n                        keyEvent.code === 'Key' + combo.key.toUpperCase()\n                        || ( combo.key === ' ' && keyEvent.code.toUpperCase() === 'SPACE' )\n                    );\n            }, false);\n\t\treturn keysPressed;\n\t}\n\n    /*\n     * Adds the tab hint for a keyword once it has been typed.\n     */\n    maybeHighlightInputKeyword(newKey) {\n        // Do nothing if we are in a search-mode\n        if (this.inSearchMode()) {\n            return;\n        }\n\n        // This is fired on \"keyDown\", so the value isn't update with the new key yet.\n        // But don't do this for special keys, and catch backspace too.\n        let newInputValue = this.paletteInputElement.value;\n        if (newKey.length === 1) {\n            newInputValue += newKey;\n        }\n        if (newKey === 'Backspace') {\n            newInputValue = newInputValue.slice(0, -1);\n        }\n        // turboAdminLog(`Checking palette input value ${newInputValue} for keyword`);\n        if (this.isKeyword(newInputValue)) {\n            this.paletteSearchModeTabNoticeText.innerText = `Search for ${newInputValue}`;\n            this.paletteSearchModeTabNotice.classList.add('active');\n        } else {\n            this.unhighlightInputKeyword();\n        }\n    }\n\n    unhighlightInputKeyword() {\n        this.paletteSearchModeTabNotice.classList.remove('active');\n    }\n\n    async debouncedPaletteSearchAndUpdate() {\n        // If we're not in a search mode then search immediately\n        if (! this.inSearchMode()) {\n            this.debounceTimeout = null;\n            await this.paletteSearchAndUpdate();\n            return;\n        }\n\n        // If timer is null, reset it to 500ms and run your functions.\n        // Otherwise, wait until timer is cleared\n\n        // Cancel the existing timeout\n        clearTimeout(this.debounceTimeout)\n\n        this.debounceTimeout = setTimeout(async function () {\n            // Reset timeout\n            this.debounceTimeout = null;\n\n            // Run the search function\n            await this.paletteSearchAndUpdate();\n        }.bind(this), 750);\n    }\n\n    /**\n     * Check if a string is a search mode keyword\n     *\n     * @param {string} inputString\n     * @returns {boolean}\n     */\n    isKeyword(inputString) {\n        return Object.keys(globalThis.turboAdmin.searchModes).includes(inputString);\n    }\n\n    /**\n     * Show the palette notice with the specified text\n     *\n     * @param {string} text\n     */\n    showPaletteNotice(text) {\n        this.paletteNoticeElement.classList.add('active');\n        this.paletteNoticeElement.innerText = text;\n    }\n\n    /**\n     * Hide the palette notice\n     */\n    hidePaletteNotice() {\n        this.paletteNoticeElement.classList.remove('active');\n    }\n\n\t/**\n     * Handle (non-global) keypresses on the palette\n     *\n     * @param {KeyboardEvent} e\n     * @returns {Promise}\n     */\n    async paletteActions(e) {\n\t\tif (e.code === 'ArrowDown' && this.paletteShown()) {\n\t\t\te.preventDefault();\n\t\t\tthis.moveDown();\n\t\t\treturn;\n\t\t}\n\t\tif (e.code === 'ArrowUp' && this.paletteShown()) {\n\t\t\te.preventDefault();\n\t\t\tthis.moveUp();\n\t\t\treturn;\n\t\t}\n\t\tif (e.code === 'Enter' && this.paletteShown()) {\n            e.preventDefault();\n            this.doAction(this.metaPressed(e));\n            return;\n\t\t}\n\n        /*\n         * Only the actions above can be done in sub-menus.\n         */\n        if (this.isSubMenuOpen()) {\n            return;\n        }\n\n        /*\n         * Check for a keyword being typed and add a UI hint.\n         */\n        this.maybeHighlightInputKeyword(e.key);\n\n        /*\n         * Tabbing looks for a search mode keyword.\n         */\n        if (! this.inSearchMode() && (e.code === 'Tab' || e.key === ':')) {\n            turboAdminLog('Checking for search mode');\n            let inputValue = this.paletteInputElement.value;\n            if (this.isKeyword(inputValue)) {\n                turboAdminLog('Found search mode ' + inputValue)\n                e.preventDefault();\n                // TODO: Work on this.\n                await this.enterSearchMode(\n                    globalThis.turboAdmin.searchModes[inputValue]);\n                return;\n            }\n        }\n\n        /*\n         * Backspace may exit us from a search mode\n         */\n        if (this.inSearchMode() && e.code === 'Backspace' && this.paletteInputElement.value === '') {\n            e.preventDefault();\n            this.leaveSearchMode();\n            return;\n        }\n\n\t\tawait this.debouncedPaletteSearchAndUpdate();\n\t}\n\n    /**\n     * Puts the palette into a specific search mode - used when a keyword is selected\n     *\n     * @param {SearchMode} searchMode\n     */\n    async enterSearchMode(searchMode) {\n        turboAdminLog('Entering search mode for keyword ' + searchMode.keyword);\n        this.backupPaletteData();\n\n        this.paletteData = [];\n        this.paletteItems = [];\n        this.itemIndex = [];\n\n        // Remove the notice if it's there\n        this.hidePaletteNotice();\n\n        this.searchMode = searchMode;\n        this.paletteInputElement.value = '';\n        this.addSearchModeTag(searchMode.displayName);\n        this.unhighlightInputKeyword();\n        this.updatePaletteItems();\n        // This is similar to code in paletteSearch - maybe we could extract/abstract it?\n        if (searchMode.defaultItemsCallback !== null) {\n            this.paletteInnerElement.classList.add('loading');\n            const results = await searchMode.defaultItemsCallback();\n            this.setContentItems(results);\n            // this.injectContentItems(results);\n            this.paletteInnerElement.classList.remove('loading');\n        }\n    }\n\n    /**\n     * Leaves the current search mode\n     */\n    leaveSearchMode() {\n        const searchMode = this.searchMode;\n        // It's important what we set this to - see inSearchMode()\n        this.searchMode = null;\n        this.removeSearchModeTag();\n        this.restorePaletteData();\n        this.paletteInputElement.value = searchMode.keyword;\n        this.maybeHighlightInputKeyword('');\n        this.paletteSearchAndUpdate();\n    }\n\n    /**\n     * Backups up the palette data to a local variable so that it can be\n     * restored later.\n     */\n    backupPaletteData() {\n        this.paletteDataBackup = this.paletteData;\n        this.paletteItemsBackup = this.paletteItems;\n        this.paletteItemIndexBackup = this.itemIndex;\n    }\n\n    /**\n     * Restores the save palette data - does not rebuild anything\n     */\n    restorePaletteData() {\n        this.paletteData = this.paletteDataBackup;\n        this.paletteItems = this.paletteItemsBackup;\n        this.itemIndex = this.paletteItemIndexBackup;\n    }\n\n    /**\n     * Adds the search mode tag with the specified title.\n     *\n     * @param {string} title\n     */\n    addSearchModeTag(title) {\n        this.paletteSearchModeTag.classList.add('active');\n        this.paletteSearchModeTag.innerText = title;\n    }\n\n    /**\n     * Removes the search mode tag\n     */\n    removeSearchModeTag() {\n        this.paletteSearchModeTag.classList.remove('active');\n    }\n\n    isPaletteOpen() {\n        return this.paletteElement?.classList.contains('active');\n    }\n\n\tshowPalette() {\n        // Bail if already shown (this can be triggered by a focus event)\n        if (this.isPaletteOpen()) {\n            return;\n        }\n\n        this.paletteInputElement.value = '';\n\t\tthis.paletteInputElement?.focus();\n\t\tthis.paletteElement?.classList.add('active');\n        // This is needed in admin-bar mode otherwise it gets a weird already-scrolled thing when\n        // the palette opens.\n        setTimeout(() => this.paletteItemsElement.scrollTop = 0, 100);\n\t}\n\n\thidePalette() {\n        this.navigating = false;\n\t\tthis.paletteElement?.classList.remove('active');\n        this.paletteInputElement.value = '';\n        this.paletteInputElement.blur();\n        if (this.isSubMenuOpen()) {\n            this.closeSubMenu();\n        }\n        if (this.searchMode !== null) {\n            this.leaveSearchMode();\n        }\n\t}\n\n\tpaletteShown() {\n\t\treturn this.paletteElement?.classList.contains('active');\n\t}\n\n    checkForPaletteItemClick(e) {\n        if (e.target.tagName === 'A') {\n            e.preventDefault();\n            if (this.isSubMenuOpen()) {\n                this.selectedSubItem = e.target.closest('li');\n            } else {\n                this.selectedItem = e.target.closest('li');\n            }\n            this.setSelectedElement();\n\n            this.doAction(this.metaPressed(e));\n        }\n    }\n\n\tcheckForClickToClose(e) {\n\t\tif (e.target.id === this.paletteElement.id) {\n\t\t\tthis.hidePalette();\n\t\t}\n\t}\n\n\tsetSelectedElement() {\n        if (this.isSubMenuOpen()) {\n            this.paletteSubmenuContainerElement?.querySelectorAll('.ta-submenu li.selected')?.forEach(e => e.classList.remove('selected'));\n            this.selectedSubItem.classList.add('selected');\n        } else {\n            this.paletteItemsElement?.querySelectorAll('li.selected')?.forEach(e => e.classList.remove('selected'));\n            if (this.selectedItem) {\n                this.selectedItem.classList.add('selected');\n                this.scrollList();\n            }\n        }\n\t}\n\n\tscrollList() {\n\t\t// Scrolling up\n\t\tif (this.selectedItem.offsetTop < this.paletteItemsElement.scrollTop) {\n\t\t\tthis.paletteItemsElement.scrollTop = this.selectedItem.offsetTop;\n\t\t}\n\t\t// Scrolling down\n\t\tif (this.selectedItem.offsetTop + this.selectedItem.offsetHeight > this.paletteItemsElement.offsetHeight + this.paletteItemsElement.scrollTop) {\n\t\t\tthis.paletteItemsElement.scrollTop = this.selectedItem.offsetTop + this.selectedItem.offsetHeight - this.paletteItemsElement.offsetHeight;\n\t\t}\n\t}\n\n    setHoveredItem(element) {\n        // Only do this for li's\n        if ('LI' === element.tagName) {\n            this.navigating = true;\n            if (this.isSubMenuOpen()) {\n                this.selectedSubItem = element;\n            } else {\n                this.selectedItem = element;\n            }\n            this.setSelectedElement();\n        }\n    }\n\n\tmoveDown() {\n        if (this.isSubMenuOpen()) {\n            const nextItem = this.selectedSubItem.nextElementSibling;\n            this.navigating = true;\n            if (nextItem) {\n                this.selectedSubItem = nextItem;\n                this.setSelectedElement();\n            }\n        } else {\n            const nextItem = this.selectedItem.nextElementSibling;\n            this.navigating = true;\n            if (nextItem) {\n                this.selectedItem = nextItem;\n                this.setSelectedElement();\n            }\n        }\n\t}\n\n\tmoveUp() {\n        if (this.isSubMenuOpen()) {\n            const prevItem = this.selectedSubItem.previousElementSibling;\n            this.navigating = true;\n            if (prevItem) {\n                this.selectedSubItem = prevItem;\n                this.setSelectedElement();\n            }\n        } else {\n            const prevItem = this.selectedItem.previousElementSibling;\n            this.navigating = true;\n            if (prevItem) {\n                this.selectedItem = prevItem;\n                this.setSelectedElement();\n            }\n        }\n    }\n\n    isSubMenuOpen() {\n        return null !== this.openedSubMenu;\n    }\n\n    openSubMenu(subMenuElement) {\n        this.paletteSubmenuContainerElement.replaceChildren(subMenuElement);\n        // Set height in case main menu is smaller than sub menu\n        const subMenuHeight = this.paletteSubmenuContainerElement.offsetHeight;\n        this.paletteItemsContainerElement.style.minHeight = subMenuHeight + \"px\";\n        this.paletteSubmenuContainerElement.classList.add('active');\n\n        this.selectedSubItem = subMenuElement.querySelector('li');\n        this.openedSubMenu = subMenuElement;\n        this.setSelectedElement();\n\n        this.paletteInputElement.disabled = true;\n        // Blur the input so that keys can continue to be captured\n        this.paletteInputElement.blur();\n    }\n\n    closeSubMenu(subMenuElement = null) {\n        if (null === subMenuElement) {\n            subMenuElement = document.querySelector('.ta-submenu.active');\n        }\n        this.paletteSubmenuContainerElement.classList.remove('active');\n        this.selectedSubItem.classList.remove('active');\n        this.paletteItemsContainerElement.style.minHeight = 'auto';\n        this.selectedSubItem = null;\n        this.openedSubMenu = null;\n        this.paletteInputElement.disabled = false;\n        this.paletteInputElement.focus();\n    }\n\n\tdoAction(metaPressed = false) {\n        if (this.isSubMenuOpen()) {\n            this.actOnItem(this.selectedSubItem, metaPressed);\n            return;\n        }\n        if (this.selectedItem.classList.contains('ta-has-child-menu')) {\n            const subMenu = this.selectedItem.querySelector('.ta-submenu');\n            this.openSubMenu(subMenu);\n            return;\n        }\n\n        this.actOnItem(this.selectedItem, metaPressed);\n    }\n\n    actOnItem(item, metaPressed) {\n        this.hidePalette();\n        const link = item.querySelector('a');\n        const url = link.href;\n\n        // link.href will be interpolated by the browser, so if it's empty it will be the current page\n        // use getAttribute instead to work out if its empty\n        if (link.getAttribute('href') === '') {\n            return;\n        }\n\n        if ('clipboard' === link.dataset.action) {\n            navigator.clipboard.writeText(url);\n            return;\n        }\n\n        if (metaPressed) {\n            window.open(url, '_blank');\n        } else {\n            window.location = url;\n        }\n    }\n\n\tselectedItemDisplayed() {\n\t\treturn Array.from(this.paletteItemsElement.childNodes).includes(this.selectedItem);\n\t}\n\n\tasync paletteSearchAndUpdate() {\n\t\tawait this.paletteSearch();\n\t\tthis.updatePaletteItems();\n\t}\n\n\tasync paletteSearch() {\n        // Get the value...\n        // const response = await globalThis.contentApi.get('posts', { search: this.paletteInputElement.value, per_page: 100, status: ['publish', 'future', 'draft', 'pending', 'private'] });\n\n        if (! this.searchMode) {\n            this.buildPaletteItems();\n\n            if (this.paletteInputElement.value !== '') {\n                // Reset the search to work on the new items\n                this.paletteFuse = new Fuse(this.paletteItems, this.paletteFuseOptions);\n                this.paletteItems = this.paletteFuse.search(this.paletteInputElement.value).map(i => i.item);\n            }\n            return;\n        }\n\n        if (this.paletteInputElement.value.length === 0) {\n            this.paletteInnerElement.classList.add('loading');\n            let results = [];\n            if (this.searchMode.defaultItemsCallback !== null) {\n                results = await this.searchMode.defaultItemsCallback();\n            }\n            this.setContentItems(results);\n            // this.injectContentItems(results);\n            this.paletteInnerElement.classList.remove('loading');\n        } else {\n            // This is copied to enterSearchMode. Should probably be extracted.\n            this.paletteInnerElement.classList.add('loading');\n            const results = await this.searchMode.searchCallback(this.paletteInputElement.value);\n            this.setContentItems(results);\n            // this.injectContentItems(results);\n            this.paletteInnerElement.classList.remove('loading');\n        }\n\n        /**\n         * OLD CODE BELOW\n         */\n        // Content search - don't search everything!\n        // if (globalThis.contentApi.active && this.postTypes !== [] && this.paletteInputElement.value.length > 2) {\n        //     this.paletteInnerElement.classList.add('loading');\n\n        //     globalThis.contentApi.getPosts(this.paletteInputElement.value)\n        //         .then(\n        //             results => {\n        //                     this.injectContentItems(results);\n        //                     this.paletteInnerElement.classList.remove('loading');\n        //             }\n        //         )\n        // }\n\t}\n\n\tupdatePaletteItems() {\n\t\tconst newItems = document.createElement('ul');\n\t\tnewItems.id = 'ta-command-palette-items';\n\n\t\tthis.paletteItems.forEach(i => {\n\t\t\tnewItems.appendChild(i);\n\t\t})\n\n\t\tthis.paletteItemsElement.replaceChildren(...newItems.children);\n\n\t\tif (!this.navigating || !this.selectedItemDisplayed()) {\n\t\t\tthis.selectedItem = this.paletteItems[0];\n\t\t}\n\n\t\tthis.setSelectedElement();\n\t}\n\n}\n", "/**\n * Menu items are the items ready to appear in the palette.\n *\n * These are standard items, not content items. Though this should probably be standardised.\n */\nexport default class TurboAdminMenuItem {\n\n    /**\n     * The title of the item\n     *\n     * @type {string}\n     */\n    title = '';\n\n    /**\n     * The action of the item is the URL to visit when the item is clicked\n     *\n     * @type {string}\n     */\n    action = '';\n\n    /**\n     * The parent title is the title of the parent item under which the current item\n     * was found in the WordPress menu.\n     *\n     * e.g. in Posts -> Add Post, \"Posts\" is the parent item.\n     *\n     * @type {string}\n     */\n    parentTitle = '';\n\n    /**\n     * True if the item is not to be cached. Used for things like post-specific links like \"Edit post\"\n     *\n     * @type {boolean}\n     */\n    noCache = false;\n\n\tconstructor(title, action, parentTitle, noCache = false) {\n\t\tthis.title = title;\n\t\tthis.action = action;\n\t\tthis.parentTitle = parentTitle;\n        this.noCache = noCache;\n\t}\n\n    sameAs(item) {\n        return item.title === this.title &&\n            item.action === this.action &&\n            item.parentTitle === this.parentTitle;\n    }\n}\n", "/**\n * This class is an abstraction of the browser extension storage API\n * (see https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)\n * but that falls back to using regular localStorage if we're not in a\n * browser extension.\n *\n * This exists so that the same API can be used from both the browser\n * extension AND the plugin version of Turbo Admin.\n *\n * Note that for the extension, data saved is \"global\" to the extension\n * and is NOT site specific.\n */\nexport default class Storage {\n\n    /**\n     * Constructor - detects where code is running and sets the local\n     * store appropriately.\n     */\n    constructor() {\n        /** @type {null|storageStorageArea|WindowLocalStorage} */\n        this.store = null;\n\n        if (this.inExtension()) {\n            this.store = chrome.storage.local;\n        } else {\n            this.store = window.localStorage;\n        }\n    }\n\n    /**\n     * Returns true if we are in the extension.\n     */\n    inExtension() {\n        return window.turboAdminIsExtension();\n    }\n\n    /**\n     * Set/save extension data. Must be passed an object with key/value\n     * pairs.\n     *\n     * @param {Object} dataObject\n     */\n    async set(dataObject) {\n        if (this.inExtension()) {\n            await this.store.set(dataObject);\n        } else {\n            const keys = Object.keys(dataObject);\n            keys.forEach(key => this.store.setItem(key, JSON.stringify(dataObject[key])));\n        }\n    }\n\n    /**\n     * Get data from the extension's storage.\n     *\n     * Note that fetched data will be a object with the key as a\n     * property.\n     *\n     * @param {String} key\n     * @returns {Promise<Object>}\n     */\n    async get(key) {\n        if (this.inExtension()) {\n            return await this.store.get(key);\n        } else {\n            let returnObj = {};\n            let item = this.store.getItem(key);\n            if (! item) {\n                return returnObj;\n            }\n            let itemObject = null;\n            try {\n                itemObject = JSON.parse(this.store.getItem(key));\n            } catch (e) {\n                itemObject = null;\n            }\n            returnObj[key] = itemObject;\n            return returnObj;\n        }\n    }\n}\n", "import Storage from '../class-storage.js';\n\nexport default class ContentApi {\n\n    constructor() {\n        // this.discoverApiRoot().then(e => null);\n        // turboAdminLog('Discovered API base: ', this.apiBase);\n        this.active = false;\n        this.store = new Storage();\n        this.postTypes = [];\n\n        // This is used to \"cache\" duplicate requests.\n        // It's an object because it will have search strings as keys\n        this.cache = {};\n    }\n\n    async discoverApiRoot() {\n        turboAdminLog('Discovering API root');\n        let wpApiSettings = null;\n        this.storageKey = 'wpApiSettings.' + globalThis.taWp.home;\n\n        // Could be in the wp-api-request-js-extra (on wp-admin side)\n        const wpApiSettingsScript = document.getElementById('wp-api-request-js-extra');\n        if (wpApiSettingsScript) {\n            const wpApiSettingsString = wpApiSettingsScript.innerHTML.match(/var\\s+wpApiSettings\\s+=\\s+(.+);/)[1];\n            const wpApiSettings = JSON.parse(wpApiSettingsString);\n            const objectToSave = {};\n            objectToSave[this.storageKey] = wpApiSettings;\n            await this.store.set(objectToSave);\n            this.apiRoot = wpApiSettings.root;\n            this.apiBase = this.apiRoot + wpApiSettings.versionString;\n            this.apiNonce = wpApiSettings.nonce;\n            // Clear the nonce if one is set and we're not logged in\n            this.maybeExpireNonce(wpApiSettings);\n            this.active = true;\n            return;\n        }\n\n        // Getting from extension storage returns a object with the key\n        // as the key. Which is weird.\n        wpApiSettings = await this.store.get(this.storageKey);\n        if (wpApiSettings\n            && Object.keys(wpApiSettings).length !== 0\n            && wpApiSettings[this.storageKey]\n            && 'object' === typeof(wpApiSettings[this.storageKey])) {\n            // Get the key'ed item out of the object\n            wpApiSettings = wpApiSettings[this.storageKey];\n            this.apiRoot = wpApiSettings.root;\n            this.apiBase = this.apiRoot + wpApiSettings.versionString;\n            this.apiNonce = wpApiSettings.nonce;\n            // Clear the nonce if one is set and we're not logged in\n            this.maybeExpireNonce(wpApiSettings);\n            this.active = true;\n            return;\n        }\n\n        // Could be in <link rel=\"https://api.w.org/\" href=\"https://something/wp-json/\">\n        if (globalThis.taWp.apiLinkUrl) {\n            this.apiRoot = globalThis.taWp.apiLinkUrl;\n            // Just guess this\n            this.apiBase = this.apiRoot + 'wp/v2/';\n            this.active = true;\n            return;\n        }\n        // This should be very rare. I should only really see it in development.\n        turboAdminLog('API Route Discovery failed');\n        // Making best guess\n        this.apiBase = globalThis.taWp.home + '/wp-json/wp/v2/';\n        // TODO: This can't display as the palette isn't created yet.\n        // globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('Can\\'t find the WP API. Try visiting the dashboard to refresh things.');\n    }\n\n    async discoverPostTypes() {\n        turboAdminLog('Discovering post types');\n        if (! this.active) {\n            turboAdminLog('Not active');\n            this.postTypes = [];\n            return;\n        }\n\n        const postTypes = await this.store.get('ta-post-types');\n\n        // Check local storage cache\n        if (postTypes && postTypes['ta-post-types'] && postTypes['ta-post-types']['expiry'] > Date.now()) {\n            turboAdminLog('Using cached post types: ', postTypes['ta-post-types']['data']);\n            this.postTypes = postTypes['ta-post-types']['data'];\n            return;\n        }\n\n        this.postTypes = await this.getPostTypes();\n        turboAdminLog('Discovered post types: ', this.postTypes);\n\n        // Cache for 10 minutes\n        const expiry = Date.now() + (10 * 60 * 1000);\n        this.store.set({\n            'ta-post-types': {\n                expiry: expiry,\n                data: this.postTypes\n            }\n        });\n    }\n\n    userLoggedIn() {\n        return document.body.classList.contains('logged-in') ||\n            document.body.classList.contains('wp-admin');\n    }\n\n    async maybeExpireNonce(wpApiSettings) {\n        if (wpApiSettings?.nonce && ! this.userLoggedIn()) {\n            // Clear apiSetting nonce\n            this.apiNonce = null;\n            wpApiSettings.nonce = null;\n            const objectToSave = {};\n            objectToSave[this.storageKey] = wpApiSettings;\n            await this.store.set(objectToSave);\n        }\n    }\n\n    makeParamString(data) {\n        const params = new URLSearchParams();\n\n        Object.keys(data).forEach(paramKey => {\n            // Handle arrays\n            if (Array.isArray(data[paramKey])) {\n                const arrayParamKey = paramKey + '[]';\n                data[paramKey].forEach( item => params.append(arrayParamKey, item));\n            } else {\n                params.append(paramKey, data[paramKey]);\n            }\n        });\n\n        return params.toString();\n    }\n\n    statuses() {\n        if (this.apiNonce) {\n            return [\"publish\", \"future\", \"draft\", \"pending\", \"private\"];\n        } else {\n            return [\"publish\"];\n        }\n    }\n\n    async getPostTypes() {\n        // Check the cache\n        if (undefined !== this.cache['postsTypes']) {\n            return this.cache['postTypes'];\n        }\n\n        // Fetch results\n        const response = await this.get('types');\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['postTypes'] = result;\n\n        return result;\n    }\n\n    async getPosts(searchString, postType = 'any') {\n        // Check the cache\n        const cacheKey =  `posts-${postType}-${searchString}`;\n        if (undefined !== this.cache[cacheKey]) {\n            return this.cache[cacheKey];\n        }\n\n        // Fetch results\n        const response = await this.get(\n            // \"posts\",\n            \"search\",\n            {\n                search: searchString,\n                per_page: 100,\n                // status: this.statuses(),\n                type: 'post',\n                subtype: postType\n            }\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache[cacheKey] = result;\n\n        return result;\n    }\n\n    /**\n     * We can't use the API to get a post of any post type. So we hack this a bit.\n     *\n     * @param {number} postId\n     * @returns {Promise<any>}\n     */\n    async doesPostExist(postId) {\n        // Check the cache\n        if (undefined !== this.cache['post-' + postId]) {\n            return this.cache['post-' + postId];\n        }\n\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        const response = await fetch(`${globalThis.taWp.siteUrl}/post.php?post=${postId}&action=edit`, init);\n\n        this.cache['post-' + postId] = response;\n\n        return response?.status === 200;\n    }\n\n    async getPlugins(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['plugins-' + searchString]) {\n            return this.cache['plugins-' + searchString];\n        }\n\n        let requestOptions = {};\n\n        if (searchString) {\n            requestOptions.search = searchString;\n        }\n\n        // Fetch results\n        const response = await this.get(\n            \"plugins\",\n            requestOptions\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['plugins-' + searchString] = result;\n\n        return result;\n    }\n\n    async getUsers(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['users-' + searchString]) {\n            return this.cache['users-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.get(\n            \"users\",\n            {\n                search: searchString,\n                per_page: 100,\n                context: 'edit' // view / embed / edit\n            }\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['users-' + searchString] = result;\n\n        return result;\n    }\n\n    async get(path, data = {}) {\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        // Add the nonce if there is one\n        if (this.apiNonce) {\n            data._wpnonce = this.apiNonce;\n        }\n\n        const params = this.makeParamString(data);\n\n        const response = await fetch(`${this.apiBase}${path}/?${params}`, init);\n\n        if (response.status < 200 || response.status >= 300) {\n            // TODO: Set a \"deferred\" notice to show when the palette is created?\n            if (globalThis.turboAdmin && globalThis.turboAdmin.turboAdminPalette) {\n                globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('WordPress API Error. Try visiting the dashboard to refresh things.');\n            } else {\n                // Always log this as people may look\n                turboAdminLog( 'TURBO ADMIN: WordPress API Error. Try visiting the WordPress Dashboard to refresh things.' );\n            }\n        }\n\n        return response;\n    }\n\n}\n", "export default class SubmenuItem {\n    /**\n     * The title of the item\n     *\n     * @type {string}\n     */\n    title;\n\n    /**\n     * The URL of the item\n     * @type {string}\n     */\n    url;\n\n    /**\n     * A list of attributes to go on the A tag (not the LI tag)\n     *\n     * @type {array}\n     */\n    attributes = [];\n\n    /**\n     * Create a submenu item\n     *\n     * @param {string} title The title of the item\n     * @param {string} url The URL of the item\n     */\n    constructor(title, url) {\n        this.title = title;\n        this.url = url;\n    }\n\n    /**\n     * Add an attribute\n     *\n     * @param {string} name The attribute name\n     * @param {string} value The attribute value\n     */\n    addAttribute(name, value) {\n        this.attributes.push({\n            name: name,\n            value: value\n        });\n    }\n}\n", "import SubmenuItem from \"./class-submenu-item\";\n\nexport default class ContentItem {\n    /**\n     * The title of the item\n     *\n     * @type {string}\n     */\n    title = '';\n\n    /**\n     * The subtype of the item. e.g. for posts, this will be the post type.\n     * Used to display extra information about the item.\n     *\n     * @type {string}\n     */\n    subtype = '';\n\n    /**\n     * The URL of the item. Leave empty if there is a sub-menu.\n     *\n     * @type {string}\n     */\n    url = '';\n\n    /**\n     * The sub-menu items, if any.\n     *\n     * This should be an empty array if the item itself has a URL\n     *\n     * @type {SubmenuItem[]}\n     */\n    submenuItems = [];\n}\n", "import ContentItem from \"./class-content-item\";\n\nexport default class SearchMode {\n    /**\n     * The keyword string used to initiate the search\n     *\n     * @type {string}\n     */\n    keyword = '';\n\n    /**\n     * The dispay name used for the search\n     *\n     * @type {string}\n     */\n    displayName = '';\n\n    /**\n     * jsDoc defintion for a `searchCallback`\n     *\n     * @callback SearchCallback\n     * @param {string} [searchString]\n     * @returns {Promise<ContentItem[]>}\n     */\n\n    /**\n     * Callback to get search items\n     *\n     * @type {SearchCallback}\n     */\n    searchCallback;\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @type {SearchCallback|null}\n     */\n    defaultItemsCallback = null;\n\n    /**\n     * Constructs a new search mode\n     *\n     * @param {string} keyword\n     * @param {string} displayName\n     * @param {SearchCallback} searchCallback\n     * @param {SearchCallback} defaultItemsCallback\n     */\n    constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {\n        this.keyword = keyword;\n        this.displayName = displayName;\n        this.searchCallback = searchCallback;\n        this.defaultItemsCallback = defaultItemsCallback;\n    }\n}\n", "/**\n * An item definition specifies how to detect a palette item from the Dashboard's Dom\n *\n * These are all processed on initialisation to generate menu items.\n *\n * Note that a single definition may generate multiple menu items if the selectors used\n * discover multiple items.\n */\nexport default class ItemDefinition {\n    /**\n     * This callback is displayed as part of the Requester class.\n    * @callback menuItemCallback\n    * @param {HTMLElement} element\n    * @returns {string}\n    */\n\n    /**\n     * The method of detecting items. Can be:\n     *  - 'dom' for checking if a DOM element exists (requires detectSelector or detectSelectorNone)\n     *  - 'url' if the current URL is being checked (requires detectPattern)\n     *\n     * @type {string}\n     */\n    detectType = 'dom';\n\n    /**\n     * [OPTIONAL] A CSS selector used to find items in the DOM\n     *\n     * @type {string}\n     */\n    detectSelector = '';\n\n    /**\n     * [OPTIONAL] A CSS selector used to check for an absence of items in the DOM\n     *\n     * @type {string}\n     */\n    detectSelectorNone = '';\n\n    /**\n     * [OPTIONAL] A string to find in the current URL to detect the item\n     *\n     * @type {string}\n     */\n    detectPattern = '';\n\n    /**\n     * A callback used to generate a menu item title from a detected element. Should be passed an\n     * HTML element and should return a string\n     *\n     * @type {menuItemCallback|null}\n     */\n     itemTitleFunction = null;\n\n    /**\n     * A callback used to generate a menu item link URL from a detected element. Should be passed an\n     * HTML element and should return a string\n     *\n     * @type {menuItemCallback|null}\n     */\n     itemUrlFunction = null;\n\n     /**\n      * True if the item is not to be cached. Used for things like post-specific links like \"Edit post\"\n      *\n      * @type {boolean}\n      */\n     noCache = false;\n}\n", "import SearchMode from \"./class-search-mode\";\nimport ItemDefinition from \"./class-item-definition\";\n\n/**\n * This is an abstract class that should be extended by plugins\n * @module TurboAdminPlugin\n */\nexport default class TurboAdminPlugin {\n    /** @type {string} */\n    name = '';\n\n    /** @type {SearchMode[]} */\n    searchModes = [];\n\n    /** @type {boolean} */\n    activated = false;\n\n    constructor(pluginName) {\n        this.name = pluginName;\n        this.registerPlugin();\n    }\n\n    /**\n     * Register the plugin with Turbo Admin\n     */\n    registerPlugin() {\n        turboAdminLog('Inside plugin - requested registration of ' + this.name);\n        globalThis.turboAdmin.registerPlugin(this);\n    }\n\n    /**\n     * Returns true if the plugin should activate\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        return false;\n    }\n\n    /**\n     * Activates the plugin\n     * @return {void}\n     */\n    activate() {\n        this.activated = true;\n        this.registerSearchModes();\n    }\n\n    /**\n     * Register the search keywords with Turbo Admin - each will be registered\n     * with the whole plugin object.\n     */\n    registerSearchModes() {\n        this.searchModes.forEach(globalThis.turboAdmin.registerSearchMode);\n    }\n\n    /**\n     * Get additional menu items to be added to the main menu\n     *\n     * @return {Promise<ItemDefinition[]>}\n     */\n    async getAdditionalItemDefinitions() {\n        return [];\n    }\n\n    /**\n     * Save plugin setting to persistent storage\n     */\n    saveSetting(key, value) {\n\n    }\n\n}\n", "/**\n * It's impossible to change the setting to off, because the\n * extension's content script runs in a sandbox and can't access\n * the wp object. But we can just toggle the class every time.\n */\nexport default class TurboAdminWpBlockEditorFullscreenKill {\n\n    constructor() {\n\n        // Don't run on the site editor screen\n        if (document.body.classList.contains( 'site-editor-php' )) {\n            return;\n        }\n\n        const attrObserver = new MutationObserver((mutations) => {\n            mutations.forEach(mu => {\n                // Check if we already killed fullscreen\n                // if (document.body.classList.contains('turbo-admin-killed-fullscreen')) {\n                //     return;\n                // }\n\n                if (mu.type !== \"attributes\" && mu.attributeName !== \"class\") {\n                    return;\n                }\n\n                if (mu.target.classList.contains('is-fullscreen-mode')) {\n                    this.killFullScreenEditor();\n                }\n            });\n        });\n\n        attrObserver.observe(document.body, { attributes: true });\n\n        // Also attempt a kill now in case it's already appeared.\n        this.killFullScreenEditor();\n    }\n\n    killFullScreenEditor() {\n        if (! document.body.classList.contains('is-fullscreen-mode')) {\n            return;\n        }\n\n        document.body.classList.remove('is-fullscreen-mode');\n        document.body.classList.add('turbo-admin-killed-fullscreen');\n\n        const newStyles = document.createElement('style');\n        newStyles.innerHTML = \"body.turbo-admin-killed-fullscreen .edit-post-fullscreen-mode-close { display: none; }\";\n        document.body.appendChild(newStyles);\n    }\n}\n", "/**\n *\n */\nexport default class TurboAdminWpBlockEditorWelcomeGuideKill {\n\n    constructor() {\n\n        const attrObserver = new MutationObserver((mutations) => {\n            mutations.forEach(mu => {\n                // Check if we already killed the modal\n                if (document.body.classList.contains('ta-killed-post-welcome-guide')) {\n                    return;\n                }\n\n                if (mu.type !== \"attributes\" && mu.attributeName !== \"class\") {\n                    return;\n                }\n\n                if (! mu.target.classList.contains('modal-open')) {\n                    return;\n                }\n\n                const welcomeGuide = document.querySelector('.edit-post-welcome-guide');\n                if (welcomeGuide) {\n                    this.killWelcomeGuide();\n                }\n            });\n        });\n\n        attrObserver.observe(document.body, { attributes: true });\n\n        // Also attempt a kill now in case it's already appeared.\n        this.killWelcomeGuide();\n    }\n\n    killWelcomeGuide() {\n        const welcomeGuide = document.querySelector('.edit-post-welcome-guide');\n        if (welcomeGuide) {\n            const closeButton = welcomeGuide.querySelector('.components-modal__header button');\n            if (closeButton) {\n                closeButton.click();\n                /*\n                 * Also add a class to body so we don't do it again - subsequent modals\n                 * will need to be shown as they will have been user-initiated.\n                 */\n                document.body.classList.add('ta-killed-post-welcome-guide');\n            }\n        }\n    }\n}\n", "export default class TurboAdminWpNotices {\n\n    // TODO: Handle empty IDS. Can we identify unique selectors?\n    // See spinup!\n    // Also need to only show move to panel if we can (i.e. if there's a way\n    // to identify it))\n    constructor(rememberedNoticeIds) {\n\n        // Bail if we aren't in the admin\n        if (! document.querySelector('body.wp-admin')) {\n            return;\n        }\n\n        /*\n        * These are the global notice selectors\n        */\n        this.noticeSelectors = [\n            '#wpbody-content > .notice',\n            '#wpbody-content > .wrap > .notice',\n            '#wpbody-content > .wrap > .updated',\n            '#gf_dashboard_message', // Gravity forms\n            '.jitm-banner', //\n            '.fs-notice', // I get this in Replyable\n            '#updraft-dashnotice', // Updraft backups\n            '.woocommerce-message', // WooCommerce\n            '#akismet_setup_prompt', // Akismet\n            '#wf-onboarding-plugin-header', // WordFence onboard\n            '.llar-notice-review' // Limit Login Attempts reloaded\n        ];\n\n        /*\n         * These selectors are allowed (unless explicitly denied)\n         */\n        this.allowedClasses = [\n            '.notice-success',\n            '.notice-error',\n            '.notice-failure',\n            '.updated',\n        ]\n\n        this.noticesPanelInner = null;\n\n        if (rememberedNoticeIds) {\n            this.rememberedNoticeIds = rememberedNoticeIds.length > 0 ? rememberedNoticeIds : [];\n        } else {\n            this.rememberedNoticeIds = [];\n        }\n\n        const toolbar = document.getElementById('wpadminbar');\n\n        if (!toolbar) {\n            return;\n        }\n\n        if (rememberedNoticeIds && rememberedNoticeIds.length > 0) {\n            rememberedNoticeIds.forEach(id => {\n                if ('string' === typeof(id) && id.length > 0) {\n                    this.noticeSelectors.push('#' + id);\n                }\n            });\n        }\n\nturboAdminLog('Notice Selectors', this.noticeSelectors);\n        const notices = document.querySelectorAll(this.noticeSelectors.join(','));\nturboAdminLog('Notices', notices);\n\n        // Add buttons to notices that can be moved\n        notices.forEach(notice => {\n            this.maybeAddIdToNotice(notice);\n            this.maybeAddMoveButtonToNotice.call(this, notice);\n        });\n\n        const noticesToHide = Array.from(notices).filter( this.noticeShouldBeHidden.bind(this) );\n\n        turboAdminLog('Notices to hide', noticesToHide)\n\n        /**\n         * Build the notices wrapper\n         */\n        /** @type {HTMLDivElement} */\n        const noticesLinkWrapper = document.createElement('div');\n        noticesLinkWrapper.id = 'ta-notices-link-wrap';\n        noticesLinkWrapper.classList.add('hide-if-no-js', 'screen-meta-toggle');\n        noticesLinkWrapper.style.margin='0 0 0 6px';\n        noticesLinkWrapper.style.float='left';\n        if (noticesToHide.length === 0) {\n            noticesLinkWrapper.style.display='none';\n        }\n\n        /**\n         * Add button\n         */\n        /** @type {HTMLButtonElement} */\n        const noticesButton = document.createElement('button');\n        noticesButton.type='button';\n        noticesButton.id='ta-notices-link';\n        noticesButton.classList.add('button', 'show-settings');\n        noticesButton.innerHTML='Notices <span id=\"ta-notice-count\">' + noticesToHide.length + '</span>';\n        noticesButton.setAttribute('aria-controls', 'ta-notices-wrap');\n\n        // This should replicate the functionality from wp-admin/js/common.js\n        // as closely as possible. But note that we can't access the common.js\n        // functions.\n        noticesButton.addEventListener('click', this.toggleNoticesPanel.bind(this), false);\n\n        /**\n         * Add button to the link wrapper\n         */\n        noticesLinkWrapper.appendChild(noticesButton);\n\n        /**\n         * Add the link wrapper to the screen-meta-links section\n         */\n        const screenMetaLinks = document.getElementById('screen-meta-links');\n        screenMetaLinks.appendChild(noticesLinkWrapper);\n\n        /**\n         * Build the panel\n         */\n        const noticesPanel = document.createElement('div');\n\n        noticesPanel.id='ta-notices-wrap';\n        noticesPanel.style.display='none';\n        noticesPanel.dataset.open='no';\n\n        this.noticesPanelInner = document.createElement('div');\n        this.noticesPanelInner.id = 'ta-notices-panel-inner';\n\n        noticesToHide.forEach(this.hideNotice.bind(this));\n\n        /**\n         * Add wrap to the meta area\n         */\n        noticesPanel.appendChild(this.noticesPanelInner);\n        const screenMeta = document.getElementById('screen-meta');\n        screenMeta.appendChild(noticesPanel);\n\n        // Set up events on the new screen-meta item\n        // if (window.screenMeta) {\n        //     window.screenMeta.init();\n        // }\n\n        // Add a mutation observer to check for notices added by JavaScript\n        // this.addObserver();\n    }\n\n    addObserver() {\n        const observer = new MutationObserver( this.handleMutations.bind(this) );\n        observer.observe(document.getElementById('wpbody-content'), {\n            childList: true,\n            subtree: true\n        });\n    }\n\n    handleMutations(mutations, observer) {\n        mutations.forEach( mutation => {\n            if (mutation.type === 'childList') {\n                mutation.addedNodes.forEach( node => {\n                    if (node.nodeType === Node.ELEMENT_NODE) {\n                        console.log('MUTATING!!!' + node.id);\n                        // this.maybeAddIdToNotice(node);\n                        // this.maybeAddMoveButtonToNotice(node);\n                        // this.maybeHideNotice(node);\n                    }\n                });\n            }\n        });\n    }\n\n    // Does the allowedClasses list say that this notice should be shown?\n    keepNotice(noticeElem) {\n        return noticeElem.matches(this.allowedClasses.join(', '));\n    }\n\n    rememberNotice(ev) {\n        const noticesLinkWrap = document.getElementById('ta-notices-link-wrap');\n        const panel = document.getElementById('wp-admin-bar-ta-notices');\n        const panelInner = document.getElementById('ta-notices-panel-inner');\n        const countElem = document.getElementById('ta-notice-count');\n        const count = parseInt(countElem.innerText, 10);\n        const notice = ev.target.closest(this.noticeSelectors.join(','));\n        const noticeId = notice.id;\n        turboAdminLog(`Remembering ${noticeId}`);\n        panelInner.appendChild(notice);\n        if (count === 0) {\n            noticesLinkWrap.style.display = 'block';\n        }\n\n        this.updateScreenMetaHeight();\n\n        countElem.innerText = parseInt(countElem.innerText, 10) + 1;\n\n        this.saveRememberedNotice(noticeId);\n    }\n\n    noticeShouldBeHidden(notice) {\n        if (this.rememberedNoticeIds.includes(notice.id)) {\n            return true;\n        }\n\n        if (this.keepNotice(notice)) {\n            return false;\n        }\n\n        // Invisible\n        if (\n            notice.offsetHeight === 0 ||\n            notice.offsetWidth === 0\n        ) {\n            return false;\n        }\n\n        return true;\n    }\n\n    saveRememberedNotice(noticeId) {\n        this.rememberedNoticeIds.push(noticeId);\n\n        if ('object' === typeof(browser)) {\n            chrome.runtime.sendMessage({\n                'action': 'rememberNotice',\n                'noticeId': noticeId,\n            });\n        } else {\n            window.localStorage.setItem('rememberedNoticeIds', JSON.stringify(this.rememberedNoticeIds));\n        }\n    }\n\n    forgetNotice(ev) {\n        const noticesLinkWrap = document.getElementById('ta-notices-link-wrap');\n        const panelInner = document.getElementById('ta-notices-panel-inner');\n        const countElem = document.getElementById('ta-notice-count');\n        const count = parseInt(countElem.innerText, 10);\n        const notice = ev.target.closest(this.noticeSelectors.join(','));\n        const noticeId = notice.id;\n        turboAdminLog(`Forgetting ${noticeId}`);\n\n        notice.remove();\n\n        const message = document.createElement('div');\n        const p = document.createElement('p');\n        message.classList.add('notice', 'ta-forget-notice-message');\n        p.textContent = 'Notice will be back in dashboard on next page load';\n        message.appendChild(p);\n        panelInner.appendChild(message);\n\n        this.updateScreenMetaHeight();\n\n        // I was going to to this, but we need to keep the notice about\n        // where the notice has gone.\n        // if (count === 1) {\n        //     noticesLinkWrap.style.display = 'none';\n        // }\n\n        countElem.innerText = (count - 1).toString();\n        this.saveForgottenNotice(noticeId);\n    }\n\n    saveForgottenNotice(noticeId) {\n        this.rememberedNoticeIds.push(noticeId);\n\n        if ('object' === typeof(browser)) {\n            chrome.runtime.sendMessage({\n                'action': 'rememberNotice',\n                'noticeId': noticeId,\n            });\n        } else {\n            this.rememberedNoticeIds = this.rememberedNoticeIds.filter( id => id !== noticeId );\n            window.localStorage.setItem('rememberedNoticeIds', JSON.stringify(this.rememberedNoticeIds));\n        }\n    }\n\n    /*\n     * For notices without IDs we'll see if we can add an ID that's a hash of their classlist\n     */\n    maybeAddIdToNotice(noticeElem) {\n        if (noticeElem.id && noticeElem.id !== '' && noticeElem.id !=='message') {\n            return;\n        }\n\n        const classes = noticeElem.classList;\n        noticeElem.id = Array.from(noticeElem.classList).join('-');\n    }\n\n    /**\n     * Add buttons to notices that we want to be able to move to the panel\n     */\n    maybeAddMoveButtonToNotice(noticeElem) {\n        if (this.keepNotice(noticeElem)) {\n            const rememberButton = document.createElement('button');\n            rememberButton.classList.add('ta-remember-notice-button');\n            rememberButton.innerText = 'Move to panel';\n\n            const forgetButton = document.createElement('button');\n            forgetButton.classList.add('ta-forget-notice-button');\n            forgetButton.innerText = 'Move to dashboard';\n\n            noticeElem.classList.add('ta-added-pos-relative');\n\n            noticeElem.appendChild(rememberButton);\n            noticeElem.appendChild(forgetButton);\n\n            rememberButton.addEventListener('click', this.rememberNotice.bind(this), false, true);\n            forgetButton.addEventListener('click', this.forgetNotice.bind(this), false, true);\n        }\n    }\n\n    maybeHideNotice(noticeElem) {\n        if (this.noticeShouldBeHidden(noticeElem) && !noticeElem.classList.contains('ta-notice-hidden')) {\n            this.hideNotice(noticeElem);\n        }\n    }\n\n    hideNotice(noticeElem) {\n        noticeElem.classList.add('ta-notice-hidden');\n        // WPCore's common.js will re-add the notice below the dashboard header unless it has a .inline class.\n        // It does: $( 'div.updated, div.error, div.notice' ).not( '.inline, .below-h2' ).insertAfter( $headerEnd );\n        noticeElem.classList.add('inline');\n        // See Toolbelt's implementation: https://github.com/BinaryMoon/wp-toolbelt/blob/dev/modules/tidy-notifications/src/js/script.js\n        this.noticesPanelInner.append(noticeElem);\n    }\n\n    /**\n     * Detect if WordPress has already applied event handlers to our new screen meta button.\n     *\n     * If it has then WordPress/backbone.js will handle the animation and we won't have to.\n     *\n     * @returns {boolean}\n     */\n    wordpressScreenMetaEventsExist() {\n        return 'object' === typeof(window.screenMeta) && window.screenMeta.toggles.filter('#ta-notices-link').length > 0;\n    }\n\n    updateScreenMetaHeight() {\n        // Don't do this if we're relying on backbone's animation\n        if (this.wordpressScreenMetaEventsExist()) {\n            return;\n        }\n\n        const screenMeta = document.getElementById('screen-meta');\n        const noticesPanel = document.getElementById('ta-notices-wrap');\n        const height = noticesPanel.offsetHeight;\n        screenMeta.style.maxHeight = height.toString(10) + 'px';\n    }\n\n    toggleNoticesPanel(ev) {\n        // We may be in the plugin in which case we don't want to run our handler if there's\n        // a backbone handler on the button.\n        if (this.wordpressScreenMetaEventsExist()) {\n            return;\n        }\n        // Otherwise we mimic the swipe down animation.\n        const animationSeconds = 0.3;\n        const screenMeta = document.getElementById('screen-meta');\n        const noticesPanel = document.getElementById('ta-notices-wrap');\n        if (noticesPanel.dataset.open === 'no') {\n            this.toggleOtherScreenMetaTabs();\n            // Don't ask... just DON'T ask!\n            noticesPanel.dataset.open = 'yes';\n            screenMeta.style.transition = `max-height ${animationSeconds.toString(10)}s`;\n            screenMeta.style.maxHeight = '0';\n            screenMeta.style.overflow = 'hidden';\n            screenMeta.style.display = 'block';\n            noticesPanel.style.display = 'block';\n            const height = noticesPanel.offsetHeight;\n            screenMeta.style.maxHeight = height.toString(10) + 'px';\n            // setTimeout(() => {\n            //     // Nothing to do here.\n            // }, animationSeconds * 1000);\n        } else {\n            noticesPanel.dataset.open = 'no';\n            const height = noticesPanel.offsetHeight;\n            screenMeta.style.maxHeight = '0';\n            setTimeout(() => {\n                noticesPanel.style.display = '';\n                screenMeta.style.display = '';\n                screenMeta.style.transition = '';\n                screenMeta.style.overflow = '';\n                screenMeta.style.maxHeight = '';\n                this.toggleOtherScreenMetaTabs();\n            }, animationSeconds * 1000);\n        }\n\n    }\n\n    toggleOtherScreenMetaTabs() {\n        const otherTabs = document.querySelectorAll('#screen-meta-links .screen-meta-toggle:not(#ta-notices-link-wrap)');\n        otherTabs.forEach( (tab) => {\n            if (tab.style.visibility === 'hidden') {\n                tab.style.visibility = '';\n            } else {\n                tab.style.visibility = 'hidden';\n            }\n        } );\n    }\n}\n", "export default class ListTableShortcuts {\n\n    constructor() {\n        /**\n         * @type {ListTableShortcuts}\n         */\n        const me = this;\n\n        /**\n         * @type {null|HTMLElement}\n         */\n        this.currentRow = null;\n\n        /**\n         * @type {number}\n         */\n        this.currentRowIndex = 0;\n\n        /**\n         * @type {HTMLTableElement}\n         */\n        this.listTable = document.querySelector('.wp-list-table');\n\n        if (! this.listTable) {\n            return;\n        }\n\n        /**\n         * @type {NodeListOf<HTMLTableRowElement>}\n         */\n        this.tableRows = this.listTable.querySelectorAll('tbody#the-list > tr');\n\n        document.addEventListener('keyup', e => this.handleKeyup(e));\n    }\n\n    /**\n     *\n     * @param {KeyboardEvent} ev\n     */\n    handleKeyup(ev) {\n        if (document.activeElement.tagName !== 'BODY') {\n            return;\n        }\n\n        if (ev.key === 'j') {\n            this.tableMoveDown();\n        } else if (ev.key === 'k') {\n            this.tableMoveUp();\n        } else if (ev.key.toLowerCase() === 'enter' && this.currentRow !== null) {\n            this.openTableRowItem();\n        }\n\n    }\n\n    tableMoveDown() {\n        this.preTableChange();\n\n        // Move down\n        if (this.currentRow === null) {\n            this.currentRowIndex = 0;\n        } else if (this.currentRowIndex < this.tableRows.length - 1) {\n            this.currentRowIndex++;\n        }\n        this.updateTable();\n    }\n\n    tableMoveUp() {\n        this.preTableChange();\n\n        if (this.currentRowIndex > 0) {\n            this.currentRowIndex--;\n        }\n\n        this.updateTable();\n    }\n\n    preTableChange() {\n        if (this.currentRow !== null) {\n            this.tableRows[this.currentRowIndex].classList.remove('ta-active-table-row');\n        }\n    }\n\n    updateTable() {\n        this.currentRow = this.tableRows[this.currentRowIndex];\n\n        if (! this.tableRows[this.currentRowIndex].classList.contains('ta-active-table-row')) {\n            this.tableRows[this.currentRowIndex].classList.add('ta-active-table-row');\n        }\n    }\n\n    openTableRowItem() {\n        turboAdminLog(this);\n        /** @type {HTMLAnchorElement} */\n        const link = this.currentRow.querySelector('a.row-title');\n        if (link) {\n            link.click();\n        }\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\n\nexport default class TurboAdminBarkeeper extends TurboAdminPlugin {\n    constructor() {\n        super('Barkeeper');\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        if (true !== globalThis.turboAdmin.options['barkeeper']) {\n            return false;\n        }\n        // Bail if we aren't in the admin\n        if (! document.getElementById('wpadminbar')) {\n            return false;\n        }\n        // Bail if we don't have the left-hand admin bar (some users only have right-hand side)\n        if (! document.getElementById('wp-admin-bar-root-default')) {\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n\n        this.exclusionIds = [\n            'wp-admin-bar-menu-toggle',\n            'wp-admin-bar-wp-logo',\n            'wp-admin-bar-site-name',\n            'wp-admin-bar-updates',\n        ];\n\n        this.selectorsToHide = [\n            '#wp-admin-bar-root-default > li',\n            '.monsterinsights-adminbar-menu-item',\n        ];\n\n        this.barkeeperState = this.getBarkeeperState();\n\n        this.root = document.getElementById('wp-admin-bar-root-default');\n        if (! this.root) {\n            return;\n        }\n        this.itemsToHide = document.querySelectorAll( this.selectorsToHide.join(', ') );\n\n        Array.from(this.itemsToHide).forEach( element => {\n            if (this.exclusionIds.includes(element.id)) {\n                return;\n            }\n            element.classList.add('ta-barkeeper-collapsable');\n        });\n\n        if (this.barkeeperState === 'closed') {\n            this.root.classList.toggle('ta-barkeeper-closed');\n        }\n\n        // Add toggle\n        this.button = document.createElement('button');\n        this.button.id = 'ta-barkeeper-toggle';\n        this.button.innerText = '<';\n\n        this.button.addEventListener('click', e => {\n            this.root.classList.toggle('ta-barkeeper-closed');\n\n            this.barkeeperState = this.barkeeperState === 'open' ? 'closed' : 'open';\n\n            this.setBarkeeperState(this.barkeeperState);\n        });\n\n        this.root.insertAdjacentElement('afterend', this.button);\n\n        this.setupObserver();\n    }\n\n    /**\n     * Some awkward plugins add themselves into the bar using JS\n     */\n    setupObserver() {\n        this.observer = new MutationObserver( mutations => {\n            mutations.forEach( mutation => {\n                if (mutation.type === 'childList') {\n                    mutation.addedNodes.forEach( node => {\n                        if (node.classList && node.classList.contains('ta-barkeeper-collapsable')) {\n                            return;\n                        }\n                        if (node.id && this.exclusionIds.includes(node.id)) {\n                            return;\n                        }\n                        // Check is the node matches any of the selectors\n                        if (node.matches(this.selectorsToHide.join(', '))) {\n                            node.classList.add('ta-barkeeper-collapsable');\n                            return;\n                        }\n                    });\n                }\n            });\n        });\n\n        this.observer.observe(this.root, {\n            childList: true,\n            subtree: true,\n        });\n    }\n\n    getBarkeeperState() {\n        if (window.turboAdminIsExtension()) {\n            return globalThis.turboAdmin.options['barkeeper-state'];\n        } else {\n            return window.localStorage.getItem('turbo-admin-barkeeper-state');\n        }\n    }\n\n    setBarkeeperState(state) {\n        if (window.turboAdminIsExtension()) {\n            chrome.runtime.sendMessage({\n                'action': 'barkeeperSetState',\n                'barkeeperState': this.barkeeperState,\n            });\n        } else {\n            window.localStorage.setItem('turbo-admin-barkeeper-state', state);\n        }\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\n\nexport default class TurboAdminContentSearch extends TurboAdminPlugin {\n    constructor() {\n        super('WP Content');\n\n        // Register a search mode for each post type\n        const postTypeKeys = Object.keys(globalThis.contentApi.postTypes);\n        for (let i = 0; i < postTypeKeys.length; i++) {\n            const thisPostTypeKey = postTypeKeys[i];\n            const thisPostType = globalThis.contentApi.postTypes[thisPostTypeKey];\n            // turboAdminLog('Adding search mode for post type', thisPostType);\n            this.searchModes.push( this.makePostTypeSearchMode(thisPostType) );\n        }\n\n        // Register ID search mode\n        this.searchModes.push( new SearchMode('id', 'Post ID', this.postById.bind(this)) );\n\n        // Register search all post types mode\n        this.searchModes.push( new SearchMode('search', 'All post types', this.contentSearch.bind(this)) );\n        this.searchModes.push( new SearchMode('find', 'All post types', this.contentSearch.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // TODO: Is this right? Should we check for API access?\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * This is a generator for a post-type specific SearchMode object\n     *\n     * @param {Object} postType\n     */\n    makePostTypeSearchMode(postType) {\n        // TODO: interpret the post type name\n        return new SearchMode(postType.slug, postType.name, (searchString) => this.contentSearch(searchString, postType.slug));\n    }\n\n    /**\n     * @param {string} searchString\n     * @param {string} postType This is passed to the API as a subtype. 'any' by default.\n     * @returns {Promise<ContentItem[]>}\n     */\n    async contentSearch(searchString, postType = 'any') {\n        /**\n         * Possible actual code\n         */\n        const results = await globalThis.contentApi.getPosts(searchString, postType);\n\n        if (! Array.isArray(results)) {\n            return [];\n        }\n\n        return results.map(result => {\n                            const item = new ContentItem;\n                            item.title = result.title;\n                            item.subtype = result.subtype;\n                            item.url = result.url;\n\n                            item.submenuItems = item.submenuItems.concat(this.makeSubmenuItems(result.id, item))\n\n                            return item;\n                        });\n    }\n\n    /**\n     * @param {string} postId\n     * @returns {Promise<ContentItem[]>}\n     */\n    async postById(postId) {\n        if (! postId.trim().match(/^\\d+$/)) {\n            return [];\n        }\n        const postExists = await globalThis.contentApi.doesPostExist(postId);\n\n        const resultAsContentItem = new ContentItem;\n\n        if (! postExists) {\n            resultAsContentItem.title = 'Post does not exist or is not visible';\n            return [ resultAsContentItem ];\n        }\n\n        resultAsContentItem.title = `Post ID: ${postId}`;\n        resultAsContentItem.url = globalThis.taWp.home + `/?p=${postId}`;\n\n        resultAsContentItem.submenuItems = resultAsContentItem.submenuItems.concat(this.makeSubmenuItems(postId, resultAsContentItem));\n\n        return [ resultAsContentItem ];\n    }\n\n    /**\n     * Makes an array of submenu items from a content item\n     *\n     * @param {number} postId\n     * @param {ContentItem} contentItem\n     * @returns {SubmenuItem[]}\n      */\n    makeSubmenuItems(postId, contentItem) {\n        const itemsToReturn = [];\n        itemsToReturn.push(\n            new SubmenuItem(\n                'View',\n                contentItem.url\n            )\n        );\n\n        // TODO: Make a better way to detect if we are logged in.\n        if (globalThis.turboAdmin.turboAdminPalette.profileLink) {\n            // Need to get edit URL. This seems like the best way for now.\n            const editLink = globalThis.taWp.siteUrl + `/post.php?post=${postId}&action=edit`;\n            itemsToReturn.push(\n                new SubmenuItem(\n                    'Edit',\n                    editLink\n                )\n            )\n\n            // Add oxygen link if needed.\n            if (globalThis.turboAdmin.hasActivatedPlugin('OxygenBuilder')) {\n                const oxygenLink = globalThis.taWp.home + `?page_id=${postId}&ct_builder=true&ct_inner=true`;\n                itemsToReturn.push(\n                    new SubmenuItem(\n                        'Edit with Oxygen',\n                        oxygenLink\n                    )\n                );\n            }\n        }\n\n        const copyLinkItem = new SubmenuItem( 'Copy link', contentItem.url);\n        copyLinkItem.addAttribute('data-action', 'clipboard')\n        itemsToReturn.push(copyLinkItem);\n\n        return itemsToReturn;\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\n\nexport default class TurboAdminPluginSearch extends TurboAdminPlugin {\n    constructor() {\n        super('WP Plugins');\n\n        this.searchModes.push( new SearchMode('plugin', 'Plugins', this.pluginSearch, this.defaultPluginItems.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // TODO: Is this right? Should we check for API access?\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @returns {Promise<ContentItem[]>}\n     */\n    async defaultPluginItems() {\n        return await this.pluginSearch('');\n    }\n\n    /**\n     * @param {string} searchString\n     * @returns {Promise<ContentItem[]>}\n     */\n    async pluginSearch(searchString) {\n        /**\n         * Possible actual code\n         */\n        const results = await globalThis.contentApi.getPlugins(searchString);\n\n        if (! Array.isArray(results)) {\n            return [];\n        }\n\n        return results.map(result => {\n                            // siteUrl is at globalThis.turboAdmin.wp.siteUrl\n                            const item = new ContentItem;\n                            item.title = result.name;\n                            item.subtype = 'Plugin';\n                            // TODO: Maybe set this to be a search on the plugin screen?\n                            // Plugin \"slug\" is in result.name\n\n                            const itemViewUrlParams = new URLSearchParams();\n                            itemViewUrlParams.set('plugin_status', 'all');\n                            itemViewUrlParams.set('s', result.name);\n                            item.submenuItems.push(\n                                new SubmenuItem(\n                                    'View',\n                                    globalThis.taWp.siteUrl + '/plugins.php?' + itemViewUrlParams.toString()\n                                )\n                            );\n                            // Activate: /wp-admin/plugins.php?action=activate&plugin=order-simulator-woocommerce%2Fwoocommerce-order-simulator.php&plugin_status=all&paged=1&s&_wpnonce=3714a01759\n\n                            return item;\n                        });\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\n\nexport default class TurboAdminUserSearch extends TurboAdminPlugin {\n    constructor() {\n        super('WP Users');\n\n        this.searchModes.push( new SearchMode('user', 'Users', this.userSearch, this.defaultUserItems.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // TODO: Is this right? Should we check for API access?\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @returns {Promise<ContentItem[]>}\n     */\n     async defaultUserItems() {\n        return await this.userSearch('');\n    }\n\n    /**\n     * @param {string} searchString\n     * @returns {Promise<ContentItem[]>}\n     */\n    async userSearch(searchString) {\n        /**\n         * Possible actual code\n         */\n        const results = await globalThis.contentApi.getUsers(searchString);\n\n        if (! Array.isArray(results)) {\n            return [];\n        }\n\n        return results.map(result => {\n                            const item = new ContentItem;\n                            if (result.first_name && result.last_name) {\n                                item.title = `${result.first_name} ${result.last_name} - `;\n                            }\n                            item.title += result.email;\n                            item.subtype = result.roles[0];\n                            item.url = globalThis.taWp.siteUrl + `/user-edit.php?user_id=${result.id}`;\n                            return item;\n                        });\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\n\nexport default class TurboAdminMUSites extends TurboAdminPlugin {\n    constructor() {\n        super('WP Multisite Sites');\n\n        this.searchModes.push( new SearchMode('site', 'Sites', this.siteSearch.bind(this), this.defaultSiteItems.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        return Boolean(document.querySelector('#wp-admin-bar-my-sites'));\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @returns {Promise<ContentItem[]>}\n     */\n     async defaultSiteItems() {\n        return await this.siteSearch('');\n    }\n\n    /**\n     * @param {string} searchString\n     * @returns {Promise<ContentItem[]>}\n     */\n    async siteSearch(searchString) {\n        // {\n        //     'detectType': 'dom',\n        //     'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-my-sites-list .ab-submenu a',\n        //     'itemTitleFunction': (element) => \"Sites: \" + element.closest('.menupop').querySelector('a').innerText + ' - ' + element.innerText,\n        //     'itemUrlFunction': (element) => element.href\n        // },\n\n        const sites = document.querySelectorAll('#wp-admin-bar-my-sites #wp-admin-bar-my-sites-list > li');\n\n        if (sites.length === 0) {\n            return [];\n        }\n\n        const sitesArray = Array.from(sites);\n        const sitesLinks = sitesArray.map(site => site.querySelector('a'));\n        const filteredSites = sitesLinks.filter(site => site.innerText.toLowerCase().includes(searchString.toLowerCase()));\n\n        return filteredSites.map(site => {\n            const item = new ContentItem;\n            item.title = site.innerText;\n            item.subtype = 'Site';\n            item.url = site.href;\n\n            item.submenuItems = item.submenuItems.concat(this.makeSubmenuItems(site));\n\n            return item;\n        });\n    }\n\n    makeSubmenuItems(siteElement) {\n        const submenuItems = [];\n\n        const submenu = siteElement.nextElementSibling.querySelector(`.ab-submenu`);\n        if (! submenu) {\n            return [];\n        }\n\n        const submenuLinks = submenu.querySelectorAll('a');\n        if (submenuLinks.length === 0) {\n            return [];\n        }\n\n        const submenuLinksArray = Array.from(submenuLinks);\n        submenuLinksArray.forEach(link => {\n            const submenuItem = new SubmenuItem(link.innerText, link.href);\n            submenuItems.push(submenuItem);\n        });\n\n        return submenuItems;\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\nimport ItemDefinition from '../types/class-item-definition.js';\n\nexport default class TurboAdminOxygenBuilder extends TurboAdminPlugin {\n    constructor() {\n        super('OxygenBuilder');\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // Check for presence of Oxygen Page builder\n        /** @type {HTMLElement|string|Number} */\n        let oxygenLinkElem = document.getElementById('toplevel_page_ct_dashboard_page');\n        // Also check for a menu bar item\n        if (! oxygenLinkElem) {\n            oxygenLinkElem = document.getElementById('wp-admin-bar-oxygen_admin_bar_menu');\n        }\n        // Check to see if Oxygen link is cached\n        if (! oxygenLinkElem) {\n            oxygenLinkElem = Number(window.localStorage.getItem('ta-has-oxygen-builder'));\n        }\n\n        const hasOxygenBuilder = Boolean(oxygenLinkElem);\n\n        // Save Oxygen builder status\n        window.localStorage.setItem('ta-has-oxygen-builder', hasOxygenBuilder ? '1' : '0' );\n\n        return hasOxygenBuilder;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Get additional menu items to be added to the main menu\n     *\n     * @return {Promise<ItemDefinition[]>}\n     */\n     async getAdditionalItemDefinitions() {\n        const editDefinition = new ItemDefinition();\n        editDefinition.detectType = 'dom';\n        editDefinition.detectSelector = '#ct-edit-template-builder';\n        editDefinition.itemTitleFunction = () => 'Edit with Oxygen';\n        editDefinition.itemUrlFunction = (element) => element.href;\n        editDefinition.noCache = true;\n\n        // It's worth noting that the Oxygen Builder doesn't use a /wp-admin URL\n        // and so kinda appears to Turbo Admin to be a \"front-end\" page and it\n        // doesn't refresh the menu items.\n        const backToWpDefinition = new ItemDefinition();\n        backToWpDefinition.detectType = 'dom';\n        backToWpDefinition.detectSelector = '.oxygen-back-to-wp-menu .oxygen-toolbar-button-dropdown a:not(:last-of-type)';\n        backToWpDefinition.itemTitleFunction = (element) => 'Back to WP: ' + element.textContent;\n        backToWpDefinition.itemUrlFunction = (element) => {\n            if (element.href) {\n                return element.href;\n            } else {\n                let url = new URL(window.location.href);\n                return url.origin + url.pathname;\n            }\n        };\n        backToWpDefinition.noCache = true;\n\n        return [\n            editDefinition,\n            backToWpDefinition,\n        ];\n    }\n\n}\n", "/*\n * This is the common Turbo Admin library.\n *\n * It's (currently) WordPress-specific, but can be loaded by\n * either the Extension OR the Plugin\n *\n * It takes an options object:\n *\n * options: {\n *   shortcutKeys: [\n *     // Array of shortcut key definitions, like:\n *     {\n *       {\n *         meta: false,\n *         alt: true,\n *         ctrl: true,\n *         shift: true,\n *         key: 'p'\n *       }\n *     }\n *   ],\n *   appendToElement {\n *     // Optional CSS selector to define what to append the palette to\n *     'body'\n *   },\n *   extraItems: [\n *     // Optional array of extra item configs used to generate new item objects\n *     {\n *       'detectType': 'url',\n *       'detectPattern': 'wp-login',\n *       'itemTitle': 'View/visit site',\n *       'itemUrlFunction': () => this.home\n *     },\n *   ],\n *   extraItemsRaw: [\n *     // Optional array of raw item objects to be added\n *     {\n *       'title': ,\n *       'action': ,\n *       'parentTitle': ,\n *     }\n *   ]\n * }\n */\n\nimport TurboAdminPalette from './class-turbo-admin-palette.js';\nimport TurboAdminMenuItem from './types/class-turbo-admin-menu-item.js';\nimport SearchMode from './types/class-search-mode.js';\nimport TurboAdminPlugin from './types/class-turbo-admin-plugin.js';\nimport Acf from './plugins/class-acf.js';\nimport TurboAdminWpBlockEditorFullscreenKill from './class-turbo-admin-wp-block-editor-fullscreen-kill.js';\nimport TurboAdminWpBlockEditorWelcomeGuideKill from './class-turbo-admin-wp-block-editor-welcome-guide-kill.js';\nimport TurboAdminWpNotices from './class-turbo-admin-wp-notices.js';\nimport TurboAdminListTableShortcuts from './class-list-table-shortcuts.js';\nimport TurboAdminBarkeeper from './plugins/class-turbo-admin-barkeeper.js';\nimport TurboAdminContentSearch from './plugins/class-turbo-admin-content-search.js';\nimport TurboAdminPluginSearch from './plugins/class-turbo-admin-plugins.js';\nimport TurboAdminUserSearch from './plugins/class-turbo-admin-users.js';\n// import TurboAdminWoocommerce from './plugins/class-turbo-admin-woocommerce.js';\n// import TurboAdminGravityForms from './plugins/class-turbo-admin-gravity-forms.js';\nimport TurboAdminMUSites from './plugins/class-turbo-admin-mu-sites.js';\nimport TurboAdminOxygenBuilder from './plugins/class-turbo-admin-oxygen-buillder.js';\n\nexport default class TurboAdmin {\n\n    /**\n     * @param {*} options\n     * @returns {TurboAdmin}\n     */\n    constructor(options) {\n        // Sometimes we get a second copy of TA running, like if the plugin is running too.\n        // Is this case we want to skip the initialisation.\n        this.doInit = true;\n\n        if (document.getElementById('ta-command-palette-container')) {\n            console.log('TurboAdmin already initialised - I won\\'t make a second copy!');\n            this.doInit = false;\n            return globalThis.turboAdmin;\n        }\n\n        this.options = options;\n        this.plugins = {};\n\n        // TODO: Something? What should this type be?\n        this.searchModes = {};\n\n        // On the front end we set this if there is no saved menu.\n        this.menuNeedsRefresh = false;\n    }\n\n    /**\n     * Perform initialization - this is all the things that do not need APIs to\n     * get set up.\n     */\n    async init() {\n        if (! this.doInit) {\n            return;\n        }\n\n        // Register all the plugins\n        new TurboAdminBarkeeper();\n        new TurboAdminContentSearch();\n        new TurboAdminPluginSearch();\n        new TurboAdminUserSearch();\n        // new TurboAdminWoocommerce();\n        // new TurboAdminGravityForms();\n        new TurboAdminMUSites();\n        new TurboAdminOxygenBuilder();\n\n        // Grab the global Wp object instance\n        this.wp = globalThis.taWp;\n\n        this.menu = [];\n\n        // Check for saved menu when on front-end\n        if (! this.wp.isBackend) {\n            // Only use the cached items if the current URL matches the last site URL\n            // This handles changes of multi-site site!\n            // We ONLY need to do this on the front-end as the back-end will always\n            // refresh the menu.\n            if (! this.wp.siteChanged) {\n                // Check for .logged-in class on body - if logged in, we can use the saved menu,\n                // if it exists.\n                if (document.body.classList.contains('logged-in')) {\n                    // Get from localStorage\n                    const savedMenu = window.localStorage.getItem('ta-palette-data');\n\n                    // This attempts to see if we have cached items from the back-en\n                    if (null === savedMenu) {\n                        this.menuNeedsRefresh = true;\n                    } else {\n                        this.menu = JSON.parse(savedMenu);\n                        // Check if there is no \"Media\" item  - this should ONLY be in the back-end\n                        if (! this.menu.some(item => item.action.endsWith('upload.php'))) {\n                            this.menuNeedsRefresh = true;\n                        }\n                        // Merge (?) the items?\n                    }\n                }\n            }\n        } else {\n            // On the back end, get the WordPress dashboard menu items\n            this.menu = this.getMenu();\n        }\n\n        // Add other additional items\n        await this.addAdditionalMenuItems();\n        // Add items passed in using extraItemsRaw\n        this.menu = this.menu.concat(this.options.extraItemsRaw ?? []);\n\n        // Add ACF items?\n        // TODO: Make this better. Possible ASYNC somehow?\n        // this.acf = new Acf();\n        // if (this.acf.isAcfInstalled()) {\n        //     const acfLinks = await this.acf.getFieldGroups()\n        //     // console.table(acfItems);\n        //     const acfMenuItems = acfLinks.map(\n        //         item => new TurboAdminMenuItem(\n        //             item.label + ' (ACF)',\n        //             item.link,\n        //             ''\n        //         )\n        //     );\n        //     this.menu = this.menu.concat(acfMenuItems);\n        // }\n\n        // Sort the menu\n        this.menu.sort((a, b) => (a.parentTitle + a.title).localeCompare(b.parentTitle + b.title));\n\n        // Filter out no-cache items and save to localStorage.\n        const itemsToSave = this.menu.filter(item => (! item.noCache));\n        window.localStorage.setItem('ta-palette-data', JSON.stringify(itemsToSave));\n\n        // Add palette markup to the DOM\n        this.addPalette();\n        // Initialise controls on the palette\n        this.turboAdminPalette = new TurboAdminPalette(this.menu, this.options);\n    }\n\n    /**\n     * These are initialization steps that DO needs APIs to be set up.\n     */\n    activatePlugins() {\n        // Initialize all plugins\n        Object.keys(this.plugins).forEach( plugin => {\n            if (this.plugins[plugin].shouldActivate()) {\n                this.plugins[plugin].activate();\n            }\n        })\n\n        if (true === this.options['block-editor-fullscreen-disable']) {\n            // Initialise fullscreen kill\n            this.turboAdminFullscreenKill = new TurboAdminWpBlockEditorFullscreenKill();\n        }\n\n        if (true === this.options['block-editor-welcome-screen-kill']) {\n            this.turboAdminWelcomeKill = new TurboAdminWpBlockEditorWelcomeGuideKill();\n        }\n\n        if (true === this.options['list-table-keyboard-shortcuts']) {\n            this.turboAdminListTableShortcuts = new TurboAdminListTableShortcuts();\n        }\n\n        // Add other things if we're logged in and have an API nonce\n        if (globalThis.contentApi.userLoggedIn()) {\n            // What shall we do?\n        }\n    }\n\n    /**\n     * True if the plugin has been activated\n     *\n     * @param {string} name Name of the plugin to check for\n     * @returns {boolean}\n     */\n    hasActivatedPlugin(name) {\n        return Object.keys(this.plugins).includes(name) &&\n            this.plugins[name].activated;\n    }\n\n    /**\n     * Gather the WordPress dashboard admin (sidebar) menu items\n     *\n     * @returns { TurboAdminMenuItem[] }\n     */\n    getMenu() {\n        const items = [];\n        const menuTop = document.getElementById('adminmenu');\n        if (menuTop) {\n            const topDOMItems = menuTop.querySelectorAll('li.menu-top');\n            topDOMItems.forEach(el => {\n                const a = el.querySelector('a.menu-top');\n                const title = a.querySelector('.wp-menu-name').innerHTML;\n                const action = a.href;\n                const parentTitle = '';\n                const item = new TurboAdminMenuItem(title, action, parentTitle);\n                items.push(item);\n\n                const subMenu = el.querySelector('.wp-submenu');\n                if (!subMenu) {\n                    return;\n                }\n                const subItems = subMenu.querySelectorAll('li a');\n                if (!subItems) {\n                    return;\n                }\n                subItems.forEach(subEl => {\n                    const parentTitle = title;\n                    const childTitle = subEl.innerHTML;\n                    const childAction = subEl.href;\n                    const item = new TurboAdminMenuItem(childTitle, childAction, parentTitle);\n                    items.push(item);\n                })\n            });\n        }\n        return items;\n    }\n\n    /**\n     * Adds additional menu items passed in by configuration to the\n     * menu items list.\n     */\n    async addAdditionalMenuItems() {\n\n        /*\n         * I'd LOVE for this to be config driven\n         *\n         * [\n         *   {\n         *     'detectType': 'url',\n         *     'detectPattern': 'wp-login',\n         *     'itemTitle': 'View/visit site',\n         *     'itemUrlFunction': () => this.home\n         *   },\n         *   {\n         *     'detectType': 'dom',\n         *     'detectSelector': '#wpadminbar',\n         *     'itemTitle': 'Logout',\n         *     'itemUrlFunction': () => logoutUrl\n         *   }\n         *  Can we add actionTypes as well? To do clicks and navigates?\n         * ]\n         */\n\n        // Get passed-in extraItems\n        // Technically this is an array of {ItemDefintion} but more work needed to make that happen.\n        let extraItems = this.options.extraItems ?? [];\n\n        // Get any extra items defined by plugins\n        const pluginKeys = Object.keys(this.plugins);\n\n        for (let i=0; i < pluginKeys.length; i++) {\n            extraItems = extraItems.concat(await this.plugins[pluginKeys[i]].getAdditionalItemDefinitions());\n        }\n\n        // Merge in defaults\n        extraItems = extraItems.concat(\n            [\n                {\n                    'detectType': 'dom',\n                    'detectSelector': 'body.wp-admin #wp-admin-bar-view-site a',\n                    'itemTitleFunction': () => 'View/visit site',\n                    'itemUrlFunction': (element) => element.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-dashboard a',\n                    'itemTitleFunction': (element) => element.textContent,\n                    'itemUrlFunction': (element) => element.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wpadminbar',\n                    'itemTitleFunction': () => 'Logout',\n                    'itemUrlFunction': () => document.getElementById('wp-admin-bar-logout')?.querySelector('a')?.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-edit a',\n                    'itemTitleFunction': (item) => item.textContent,\n                    'itemUrlFunction': (item) => item.href,\n                    'noCache': true,\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-view a',\n                    'itemTitleFunction': (item) => item.textContent,\n                    'itemUrlFunction': (item) => item.href,\n                    'noCache': true,\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-new-content .ab-submenu a',\n                    'itemTitleFunction': (item) => 'New ' + item.textContent,\n                    'itemUrlFunction': (item) => item.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-customize a',\n                    'itemTitleFunction': (item) => item.textContent,\n                    'itemUrlFunction': (item) => item.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelectorNone': '#wpadminbar, #loginform',\n                    'itemTitleFunction': () => \"Log in\",\n                    'itemUrlFunction': () => {\n                        if (globalThis.taWp.home) {\n                            return globalThis.taWp.siteUrl;\n                        }\n                        // Try getting wp-admin\n                        return 'javascript:alert(\\'Sorry, could not detect login URL.\\')';\n                    }\n                },\n                // This is on the login screen\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#backtoblog a',\n                    'itemTitleFunction': () => \"View/visit site\",\n                    'itemUrlFunction': (element) => element.href\n                },\n                // Multisite items\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin > a',\n                    'itemTitleFunction': () => \"Network Admin\",\n                    'itemUrlFunction': (element) => element.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin .ab-submenu a',\n                    'itemTitleFunction': (element) => 'Network Admin: ' + element.textContent,\n                    'itemUrlFunction': (element) => element.href\n                },\n            ]\n        );\n\n        extraItems.forEach(item => {\n            let detected = false;\n            let elements = null;\n            if (item.detectType === 'url') {\n                detected = Boolean(window.location.href.includes(item.detectPattern));\n                // Just grab any old element. We shouldn't need it.\n                elements = document.querySelectorAll('body');\n            } else if (item.detectType === 'dom') {\n                if (item.detectSelector) {\n                    elements = document.querySelectorAll(item.detectSelector);\n                    detected = Boolean(elements);\n                } else if (item.detectSelectorNone) {\n                    elements = document.querySelectorAll(item.detectSelectorNone);\n                    detected = elements.length === 0;\n                    // Need to pass SOMETHING to the loop below\n                    elements = document.querySelectorAll('body');\n                }\n            }\n            if (!detected) {\n                return;\n            }\n\n            elements.forEach(element => {\n                const newItem = new TurboAdminMenuItem(item.itemTitleFunction(element), item.itemUrlFunction(element), '', item?.noCache);\n                // Might already have one so check.\n                if (this.menu.some(menuItem => {\n                    // This must be newItem.sameAs, not menuItem.sameAs because the menuItem\n                    // may have been loaded from saved menu and may not actually be an instance\n                    // of a TurboAdminMenuItem.\n                    return newItem.sameAs(menuItem)\n                } )) {\n                    return;\n                }\n                // We don't already have one. So add it.\n                this.menu.push(newItem);\n            });\n        })\n    }\n\n    /**\n     * Builds the palette HTML and adds it to the DOM.\n     */\n    addPalette() {\n        const container = document.createElement('div');\n        container.id = 'ta-command-palette-container';\n        // Palette\n        const palette = document.createElement('div');\n        palette.id = 'ta-command-palette';\n        // Palette notice\n        const paletteNotice = document.createElement('div');\n        paletteNotice.id = 'ta-command-palette-notice';\n        // Tab notice\n        const tabNotice = document.createElement('div');\n        tabNotice.id = 'ta-command-palette-tab-notice';\n        // Tab notice text\n        const tabNoticeText = document.createElement('span');\n        tabNoticeText.id = 'ta-command-palette-tab-notice-text';\n        // Tab notice \"button\"\n        const tabNoticeButton = document.createElement('span');\n        tabNoticeButton.id = 'ta-command-palette-tab-notice-button';\n        tabNoticeButton.innerText = 'Tab';\n        // Input field\n        const input = document.createElement('input');\n        input.id = \"ta-command-palette-input\";\n        input.name = \"ta-command-palette-input\";\n        input.type = \"text\";\n        // Set this to stop stuff trying to fill it.\n        input.setAttribute('autocomplete', 'off');\n        // Search mode tag\n        const searchModeTag = document.createElement('div');\n        searchModeTag.id = 'ta-command-palette-search-mode-tag';\n        // List container (needed to contain the main list and the submenu list)\n        const listContainer = document.createElement('div');\n        listContainer.id = \"ta-command-palette-items-container\";\n        // List\n        const list = document.createElement('ul');\n        list.id = \"ta-command-palette-items\";\n        // Sub-menu list\n        const submenuContainer = document.createElement('div');\n        submenuContainer.id = \"ta-command-palette-submenu-container\";\n        // Join it all up\n        container.appendChild(palette);\n        palette.appendChild(searchModeTag);\n        palette.appendChild(paletteNotice);\n        tabNotice.appendChild(tabNoticeText);\n        tabNotice.appendChild(tabNoticeButton);\n        palette.appendChild(tabNotice);\n        palette.appendChild(input);\n        listContainer.appendChild(list);\n        listContainer.appendChild(submenuContainer);\n        palette.appendChild(listContainer);\n\n        if (document.getElementById('wpadminbar') && this.options['admin-bar-search'] === true) {\n            const paletteLi = document.createElement('li');\n            paletteLi.appendChild(container);\n            const adminBar = document.getElementById('wp-admin-bar-top-secondary');\n            adminBar.appendChild(paletteLi);\n\n            // Add focus handler\n            input.addEventListener('focus', e => this.turboAdminPalette.showPalette());\n\n            // Add placeholder\n            const placeholder = document.createElement('div');\n            placeholder.id = 'ta-shortcut-key-placeholder';\n            placeholder.innerText = this.buildShortcutKeysString();\n            placeholder.addEventListener('click', e => input.focus());\n\n            palette.insertBefore( placeholder, listContainer );\n        } else {\n            // Container\n            document.querySelector(this.options.appendToElement ?? 'body').appendChild(container);\n        }\n    }\n\n    /**\n     * Register a plugin with Turbo Admin\n     *\n     * @param {TurboAdminPlugin} plugin\n     */\n    registerPlugin(plugin) {\n        turboAdminLog('Registering plugin ' + plugin.name);\n        this.plugins[plugin.name] = plugin;\n    }\n\n    /**\n     * Register a palette search mode and its associated plugin\n     *\n     * this is usually bound to the searchMode, so\n     *\n     * @param {SearchMode} searchMode\n     */\n    registerSearchMode(searchMode) {\n        turboAdminLog('Registering search mode with keyword ' + searchMode.keyword);\n        // Don't use `this` as we are bound!\n        globalThis.turboAdmin.searchModes[searchMode.keyword] = searchMode;\n    }\n\n    /**\n     * Returns a string representation of the palette's keyboard shortcut\n     *\n     * @returns { String }\n     */\n    buildShortcutKeysString () {\n        let keysString = '';\n        let shortcut = this.options.shortcutKeys[0];\n\n        if ( shortcut.meta ) {\n            keysString += 'Cmd-';\n        }\n        if ( shortcut.ctrl ) {\n            keysString += 'Ctrl-';\n        }\n        if ( shortcut.alt ) {\n            keysString += 'Alt-';\n        }\n        if ( shortcut.shift ) {\n            keysString += 'Shift-';\n        }\n        keysString += shortcut.key.toUpperCase();\n        return keysString;\n    }\n\n}\n", "export default class Wp {\n\n    constructor() {\n\n        // Set home and siteUrl\n        this.siteUrl = '';\n        this.home = '';\n        this.loginUrl = '';\n        this.apiLinkUrl = '';\n    }\n\n    async completeInit() {\n        // Fetch previously loaded site URL\n        this.previousUrl = window.localStorage.getItem('ta-palette-data-site');\n\n        // Fetch previously-stored siteUrl and home\n        this.siteUrl = window.localStorage.getItem('ta-palette-data-siteurl');\n        this.home = window.localStorage.getItem('ta-palette-data-home');\n\n        /**\n         * Are we in the back-end?\n         */\n        this.isBackend = this.getIsBackend();\n\n        /**\n         * Figure out all the WP URLs\n         */\n        await this.getUrls();\n\n        /**\n         * Tells you if the best-guess site URL of the current page is different\n         * to that of the previously saved site URL.\n         */\n        this.siteChanged = this.home !== this.previousUrl;\n\n        // Save current site URL for next time\n        window.localStorage.setItem('ta-palette-data-site', this.home);\n    }\n\n    getIsBackend() {\n        return document.body.classList.contains('wp-admin');\n    }\n\n    /**\n     * Return the URL with a trailing slash if it didn't already have one.\n     *\n     * @param {String} url The URL to check\n     * @return {String}    The resulting URL\n     */\n    ensureTrailingSlash( url ) {\n        if (url.endsWith('/')) {\n            return url;\n        } else {\n            return url + '/';\n        }\n    }\n\n    /**\n     * Tests if a URL works and, if redirected, that the final URL contains a given\n     * string. Returns the final, redirected-to URL if the test passed, or false\n     * otherwise.\n     *\n     * @param {String} url                    The URL to test.\n     * @param {String} responseUrlMustContain The string to test against the final URL\n     * @returns {Promise<String|Boolean>}   The final URL or false.\n     */\n    async testUrl(url, responseUrlMustContain='') {\n\n        /** @type {RequestInit} */\n        const init = {\n            method: 'HEAD',\n            mode: 'cors',\n            cache: 'no-cache',\n            credentials: 'same-origin'\n        }\n\n        const response = await fetch(url, init);\n\n        if (response.redirected && !response.url.includes(responseUrlMustContain)) {\n            return false;\n        }\n\n        if ( ! response.ok ) {\n            return false;\n        }\n\n        return response.url;\n    }\n\n    async findWhichUrlWorks(urls, responseUrlMustContain='') {\n        let workingUrl = false;\n        let result;\n        // This has to be a for loop rather than reduce or forEach as separate\n        // async callbacks would be launched asynchronously.\n        for (let i=0; i<urls.length; i++) {\n            if (workingUrl) continue;\n            result = await this.testUrl(urls[i], responseUrlMustContain);\n            if (result !== false) {\n                workingUrl = result;\n            }\n        }\n        return workingUrl;\n    }\n\n    /**\n     *\n     * @param {String} homeUrl\n     */\n    async guessSiteUrlFromHome( homeUrl ) {\n        const homeWithSlash = this.ensureTrailingSlash(homeUrl);\n\n        // NOTE: Backed out of this until I can make it work async.\n        // Might not even be a good idea anyway.\n\n        // const possibleUrls = [\n        //     homeWithSlash + 'wp-admin/',\n        //     homeWithSlash + 'wp/wp-admin'\n        // ];\n        // return this.findWhichUrlWorks(possibleUrls, 'wp-admin');\n        return homeWithSlash + 'wp-admin/';\n    }\n\n    /**\n     *\n     * @param {String} homeUrl\n     */\n    async guessHome() {\n        const currentUrl = new URL(window.location);\n        const origin = this.ensureTrailingSlash(currentUrl.origin);\n\n        // NOTE: Backed out of this until I can make it work async.\n        // Might not even be a good idea anyway.\n\n        // const possibleUrls = [\n        //     origin\n        // ];\n        // return this.findWhichUrlWorks(possibleUrls, 'wp-admin');\n        return origin;\n    }\n\n    /**\n     *\n     * @param {String} siteUrl\n     * @returns {String}\n     */\n    guessHomeFromSiteUrl(siteUrl) {\n        // Not much we can do here.\n        return siteUrl.replace(/wp-admin\\/?/, '');\n    }\n\n    async getUrls() {\n        // See if we can actually find the URL for the API\n        /** @type {HTMLLinkElement|null} */\n        const apiLink = document.querySelector('link[rel=\"https://api.w.org/\"]');\n\n        if (apiLink) {\n            this.apiLinkUrl = apiLink.href;\n        }\n        // Figure out the siteurl and home - this is different on the front and back end\n        if (this.isBackend) {\n            // This is easy in the back end/Dashboard!\n            this.siteUrl = window.location.href.match(/(^.*wp-admin)/)[1];\n            this.home = document.getElementById('wp-admin-bar-site-name').querySelector('a').href;\n\n            // Always set the siteUrl and home as this is definitive\n            window.localStorage.setItem('ta-palette-data-siteurl', this.siteUrl);\n            window.localStorage.setItem('ta-palette-data-home', this.home);\n        } else if (! this.siteUrl || ! this.home) {\n            let urlsFound = false;\n\n            // If we're not in the backend then (in the extension at least) we\n            // could be on the front-end and not logged in, so check for an\n            // admin bar and grab from that if there is one.\n            if (document.getElementById('wpadminbar')) {\n                const dashboardLink = document.getElementById('wp-admin-bar-dashboard')?.querySelector('a');\n                if (dashboardLink) {\n                    this.siteUrl = dashboardLink.href;\n                }\n                // Try for the API link\n                if (this.apiLinkUrl) {\n                    if (this.apiLinkUrl.includes('/wp-json')) {\n                        this.home = this.apiLinkUrl.replace('wp-json/', '');\n                    }\n                    if (this.apiLinkUrl.includes('index.php?rest_route')) {\n                        this.home = this.apiLinkUrl.replace(/index.php\\?rest_route.*/, '');\n                    }\n                    urlsFound = true;\n                } else {\n                    // We might know what the siteUrl is, so guess the home from the siteUrl\n                    if (this.siteUrl) {\n                        this.home = this.guessHomeFromSiteUrl(this.siteUrl);\n                        urlsFound = true;\n                    }\n                }\n            }\n            if (! urlsFound) {\n                // Try for the API link\n                // TODO: This needs to be async so it doesn't hold things up.\n                if (this.apiLinkUrl) {\n                    if (this.apiLinkUrl.includes('/wp-json')) {\n                        this.home = this.apiLinkUrl.replace('wp-json/', '');\n                    }\n                    if (this.apiLinkUrl.includes('index.php?rest_route')) {\n                        this.home = this.apiLinkUrl.replace(/index.php\\?rest_route.*/, '');\n                    }\n                    // We (probably) know what the home link is now, so guess the wp-admin\n                    if (this.home) {\n                        this.siteUrl = await this.guessSiteUrlFromHome( this.home );\n                    } else {\n                        this.siteUrl = this.guessSiteUrl();\n                    }\n                    urlsFound = true;\n                }\n            }\n            if (! urlsFound) {\n                // We got nothing.\n                this.home    = await this.guessHome();\n                if (this.home) {\n                    this.siteUrl = await this.guessSiteUrlFromHome(this.home);\n                }\n            }\n        }\n\n        // Always trim the / for comparisons\n        if (this.siteUrl) {\n            this.siteUrl = this.siteUrl.replace(/(.+)\\/$/, '$1');\n        }\n        if (this.home) {\n            this.home = this.home.replace(/(.+)\\/$/, '$1');\n        }\n\n        // turboAdminLog('siteUrl: ', this.siteUrl);\n        // turboAdminLog('home: ', this.home);\n    }\n\n}\n", "import Storage from '../class-storage.js';\n// import ContentApi from './class-content-api.js';\n\nexport default class WoocommerceApi {\n\n    constructor() {\n        // This is used to \"cache\" duplicate requests.\n        // It's an object because it will have search strings as keys\n        this.cache = {};\n    }\n\n    async getOrders(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['orders-' + searchString]) {\n            return this.cache['orders-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.wooGet(\n            \"orders\",\n            {\n                search: searchString,\n                per_page: 100,\n            }\n        );\n\n        if (response === false) {\n            return false;\n        }\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['orders-' + searchString] = result;\n\n        return result;\n    }\n\n    async getOrder(orderId) {\n        // Check the cache\n        if (undefined !== this.cache['order-' + orderId]) {\n            return this.cache['order-' + orderId];\n        }\n\n        // Fetch results\n        const response = await this.wooGet(\n            `orders/${orderId}`\n        );\n\n        if (response === false) {\n            return false;\n        }\n\n        // Decode JSON\n        const result = await response.json();\n\n        let resultAsArray = [ result ];\n\n        // Store in the cache\n        this.cache['order-' + orderId] = resultAsArray;\n\n        return resultAsArray;\n    }\n\n    async getCustomers(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['customers-' + searchString]) {\n            return this.cache['customers-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.wooGet(\n            \"customers\",\n            {\n                search: searchString,\n                per_page: 100,\n                role: 'all',\n            }\n        );\n\n        if (response === false) {\n            return false;\n        }\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['customers-' + searchString] = result;\n\n        return result;\n    }\n\n    // TODO: Add docblock and types\n    async wooGet(path, data = {}) {\n        const wooApiBase = globalThis.contentApi.apiRoot + 'wc/v3/';\n\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        // Add the nonce if there is one\n        if (globalThis.contentApi.apiNonce) {\n            data._wpnonce = globalThis.contentApi.apiNonce;\n        }\n\n        const params = globalThis.contentApi.makeParamString(data);\n\n        const response = await fetch(`${wooApiBase}${path}/?${params}`, init);\n\n        if ( response.status === 404 ) {\n            return false;\n        }\n        if ( (response.status < 200 || response.status >= 300) ) {\n            // TODO: Set a \"deferred\" notice to show when the palette is created?\n            if (globalThis.turboAdmin && globalThis.turboAdmin.turboAdminPalette) {\n                globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('WooCommerce API Error. Try visiting the dashboard to refresh things.');\n            } else {\n                // Always log this as people may look\n                turboAdminLog('TURBO ADMIN: WooCommerce API Error. Try visiting the WordPress Dashboard to refresh things.');\n            }\n        }\n\n        return response;\n    }\n\n}\n", "import Storage from '../class-storage.js';\n// import ContentApi from './class-content-api.js';\n\nexport default class GravityFormsApi {\n\n    constructor() {\n        // This is used to \"cache\" duplicate requests.\n        // It's an object because it will have search strings as keys\n        this.cache = {};\n    }\n\n    async getForms(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['gf-forms-' + searchString]) {\n            return this.cache['gf-forms-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.gfGet(\n            \"forms\",\n            {}\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // TODO: Trap for errors\n\n        // Filter by search string - the API doesn't do this for us\n        const searchStringLowerCase = searchString.toLowerCase();\n        const formIds = Object.keys(result);\n        for (let k = 0; k < formIds.length; k++) {\n            const thisId = formIds[k];\n            if (! result[thisId].title.toLowerCase().includes(searchStringLowerCase)) {\n                delete result[thisId];\n            }\n        }\n\n        // Store in the cache\n        this.cache['gf-forms-' + searchString] = result;\n\n        return result;\n    }\n\n    async gfGet(path, data = {}) {\n        const gfApiBase = globalThis.contentApi.apiRoot + 'gf/v2/';\n\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        // Add the nonce if there is one\n        if (globalThis.contentApi.apiNonce) {\n            data._wpnonce = globalThis.contentApi.apiNonce;\n        }\n\n        const params = globalThis.contentApi.makeParamString(data);\n\n        const response = await fetch(`${gfApiBase}${path}/?${params}`);\n\n        if (response.status < 200 || response.status >= 300) {\n            // TODO: Set a \"deferred\" notice to show when the palette is created?\n            if (globalThis.turboAdmin && globalThis.turboAdmin.turboAdminPalette) {\n                globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('Gravity Forms API Error. Try visiting the dashboard to refresh things.');\n            } else {\n                // Always log this as people may look\n                turboAdminLog('TURBO ADMIN: Gravity Forms API Error. Try visiting the WordPress Dashboard to refresh things.');\n            }\n        }\n\n        return response;\n    }\n\n}\n", "import TurboAdmin from './class-turbo-admin.js';\nimport ContentApi from './apis/class-content-api.js';\nimport Wp from './class-wp.js';\nimport TurboAdminWpNotices from './class-turbo-admin-wp-notices.js';\nimport WoocommerceApi from './apis/class-woocommerce-api.js';\nimport GravityFormsApi from './apis/class-gravity-forms-api.js';\n\nconst taStorageKey = 'turbo-admin-settings';\n\nlet debugMode = false;\n\nwindow.turboAdminLog = function() {\n    if (debugMode) {\n        console.log(...arguments);\n    }\n}\n\nwindow.turboAdminIsExtension = function() {\n    return 'undefined' !== typeof (chrome.storage);\n}\n\n// Use this to clear storage\n// chrome.storage.local.remove(taStorageKey).then();\n\n// Note that in the extension, the globalThis is not the browser's global scope,\n// it is sandboxed. So we can't check across the plugin/extension boundary here.\nasync function taInit(settings) {\n\n    if (typeof(globalThis.turboAdmin) !== 'undefined') {\n        // Already initialised for some reason\n        return;\n    }\n    globalThis.turboAdmin = null;\n\n    // Handle empty settings\n    if (typeof(settings[taStorageKey]) === 'undefined') {\n        console.log('Weird. Turbo Admin could not find any settings');\n        return;\n    }\n\n    globalThis.turboAdminOptions = settings[taStorageKey];\n\n    // Set debug mode\n    debugMode = globalThis.turboAdminOptions['debug-mode'];\n\n    turboAdminLog('Preparing Turbo Admin');\n\n    // Get Wp stuff ready\n    globalThis.taWp = new Wp();\n\n    // Parts of this init are async.\n    await globalThis.taWp.completeInit();\n\n    turboAdminLog('Turbo Admin: WP is initialised');\n\n    // Get/set api settings\n    globalThis.contentApi = new ContentApi();\n    await globalThis.contentApi.discoverApiRoot();\n    await globalThis.contentApi.discoverPostTypes();\n    globalThis.woocommerceApi = new WoocommerceApi();\n    globalThis.gravityFormsApi = new GravityFormsApi();\n\n    turboAdminLog('Turbo Admin: Content API is initialised');\n\n    globalThis.turboAdmin = new TurboAdmin(globalThis.turboAdminOptions);\n    await globalThis.turboAdmin.init();\n\n\n\n    // This needs all the APIs to be ready\n    await globalThis.turboAdmin.activatePlugins();\n\n    if (settings[taStorageKey]['hide-notices']) {\n        globalThis.turboAdminWpNotices = new TurboAdminWpNotices(settings[taStorageKey].rememberedNoticeIds);\n    }\n}\n\n/**\n * This is plugin-specific. It should not be present in the extension code.\n */\ndocument.addEventListener('DOMContentLoaded', async e => {\n\tglobalThis.turboAdminOptions = {};\n\tglobalThis.turboAdminOptions[taStorageKey] = {\n\t\t// wpTurboAdmin is set using wp_localize_script\n\t\tshortcutKeys: globalThis.wpTurboAdmin.keys,\n        // These don't apply to the plugin version\n        'block-editor-fullscreen-disable': false,\n        'block-editor-welcome-screen-kill': false,\n        // I don't think we'll do this in the plugin as the code would be SO different.\n        'live-dev-notice': false,\n        'list-table-keyboard-shortcuts': globalThis.wpTurboAdmin['listTableShortcuts'] === '1',\n        'hide-notices': globalThis.wpTurboAdmin['hideNotices'] === '1',\n        'rememberedNoticeIds': JSON.parse(window.localStorage.getItem('rememberedNoticeIds')) ?? new Array(),\n        'barkeeper': globalThis.wpTurboAdmin['barkeeper'] === '1',\n        'admin-bar-search': globalThis.wpTurboAdmin['adminBarSearch'] === '1',\n        'debug-mode': globalThis.wpTurboAdmin['debugMode'] === '1',\n\t}\n\tawait taInit(globalThis.turboAdminOptions);\n});\n"],
    5   "mappings": "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",
     3  "sources": ["../src/fuse-6.4.6.js", "../src/class-turbo-admin-palette.js", "../src/types/class-s.js", "../src/plugins/class-turbo-admin-mu-sites.js", "../src/plugins/class-turbo-admin-oxygen-buillder.js", "../src/class-turbo-admin.js", "../src/class-wp.js", "../src/apis/class-woocommerce-api.js", "../src/apis/class-gravity-forms-api.js", "../src/main.js"],
     4  "sourcesContent": ["/**\n * Fuse.js v6.4.6 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2021 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\nvar e, t; e = this, t = function () { \"use strict\"; function e(t) { return (e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e })(t) } function t(e, t) { if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\") } function n(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) } } function r(e, t, r) { return t && n(e.prototype, t), r && n(e, r), e } function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter((function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable }))), n.push.apply(n, r) } return n } function c(e) { for (var t = 1; t < arguments.length; t++) { var n = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(n), !0).forEach((function (t) { i(e, t, n[t]) })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : o(Object(n)).forEach((function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)) })) } return e } function a(e, t) { if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\"); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), t && u(e, t) } function s(e) { return (s = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) { return e.__proto__ || Object.getPrototypeOf(e) })(e) } function u(e, t) { return (u = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e })(e, t) } function h(e, t) { return !t || \"object\" != typeof t && \"function\" != typeof t ? function (e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e }(e) : t } function f(e) { var t = function () { if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1; if (Reflect.construct.sham) return !1; if (\"function\" == typeof Proxy) return !0; try { return Date.prototype.toString.call(Reflect.construct(Date, [], (function () { }))), !0 } catch (e) { return !1 } }(); return function () { var n, r = s(e); if (t) { var i = s(this).constructor; n = Reflect.construct(r, arguments, i) } else n = r.apply(this, arguments); return h(this, n) } } function l(e) { return function (e) { if (Array.isArray(e)) return d(e) }(e) || function (e) { if (\"undefined\" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e) }(e) || function (e, t) { if (e) { if (\"string\" == typeof e) return d(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); return \"Object\" === n && e.constructor && (n = e.constructor.name), \"Map\" === n || \"Set\" === n ? Array.from(e) : \"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? d(e, t) : void 0 } }(e) || function () { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\") }() } function d(e, t) { (null == t || t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n < t; n++)r[n] = e[n]; return r } function v(e) { return Array.isArray ? Array.isArray(e) : \"[object Array]\" === b(e) } function g(e) { return \"string\" == typeof e } function y(e) { return \"number\" == typeof e } function p(e) { return !0 === e || !1 === e || function (e) { return m(e) && null !== e }(e) && \"[object Boolean]\" == b(e) } function m(t) { return \"object\" === e(t) } function k(e) { return null != e } function M(e) { return !e.trim().length } function b(e) { return null == e ? void 0 === e ? \"[object Undefined]\" : \"[object Null]\" : Object.prototype.toString.call(e) } var x = function (e) { return \"Invalid value for key \".concat(e) }, L = function (e) { return \"Pattern length exceeds max of \".concat(e, \".\") }, S = Object.prototype.hasOwnProperty, w = function () { function e(n) { var r = this; t(this, e), this._keys = [], this._keyMap = {}; var i = 0; n.forEach((function (e) { var t = _(e); i += t.weight, r._keys.push(t), r._keyMap[t.id] = t, i += t.weight })), this._keys.forEach((function (e) { e.weight /= i })) } return r(e, [{ key: \"get\", value: function (e) { return this._keyMap[e] } }, { key: \"keys\", value: function () { return this._keys } }, { key: \"toJSON\", value: function () { return JSON.stringify(this._keys) } }]), e }(); function _(e) { var t = null, n = null, r = null, i = 1; if (g(e) || v(e)) r = e, t = O(e), n = j(e); else { if (!S.call(e, \"name\")) throw new Error(function (e) { return \"Missing \".concat(e, \" property in key\") }(\"name\")); var o = e.name; if (r = o, S.call(e, \"weight\") && (i = e.weight) <= 0) throw new Error(function (e) { return \"Property 'weight' in key '\".concat(e, \"' must be a positive integer\") }(o)); t = O(o), n = j(o) } return { path: t, id: n, weight: i, src: r } } function O(e) { return v(e) ? e : e.split(\".\") } function j(e) { return v(e) ? e.join(\".\") : e } var A = c({}, { isCaseSensitive: !1, includeScore: !1, keys: [], shouldSort: !0, sortFn: function (e, t) { return e.score === t.score ? e.idx < t.idx ? -1 : 1 : e.score < t.score ? -1 : 1 } }, {}, { includeMatches: !1, findAllMatches: !1, minMatchCharLength: 1 }, {}, { location: 0, threshold: .6, distance: 100 }, {}, { useExtendedSearch: !1, getFn: function (e, t) { var n = [], r = !1; return function e(t, i, o) { if (k(t)) if (i[o]) { var c = t[i[o]]; if (!k(c)) return; if (o === i.length - 1 && (g(c) || y(c) || p(c))) n.push(function (e) { return null == e ? \"\" : function (e) { if (\"string\" == typeof e) return e; var t = e + \"\"; return \"0\" == t && 1 / e == -1 / 0 ? \"-0\" : t }(e) }(c)); else if (v(c)) { r = !0; for (var a = 0, s = c.length; a < s; a += 1)e(c[a], i, o + 1) } else i.length && e(c, i, o + 1) } else n.push(t) }(e, g(t) ? t.split(\".\") : t, 0), r ? n : n[0] }, ignoreLocation: !1, ignoreFieldNorm: !1 }), I = /[^ ]+/g; function C() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 3, t = new Map, n = Math.pow(10, e); return { get: function (e) { var r = e.match(I).length; if (t.has(r)) return t.get(r); var i = 1 / Math.sqrt(r), o = parseFloat(Math.round(i * n) / n); return t.set(r, o), o }, clear: function () { t.clear() } } } var E = function () { function e() { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r; t(this, e), this.norm = C(3), this.getFn = i, this.isCreated = !1, this.setIndexRecords() } return r(e, [{ key: \"setSources\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.docs = e } }, { key: \"setIndexRecords\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.records = e } }, { key: \"setKeys\", value: function () { var e = this, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.keys = t, this._keysMap = {}, t.forEach((function (t, n) { e._keysMap[t.id] = n })) } }, { key: \"create\", value: function () { var e = this; !this.isCreated && this.docs.length && (this.isCreated = !0, g(this.docs[0]) ? this.docs.forEach((function (t, n) { e._addString(t, n) })) : this.docs.forEach((function (t, n) { e._addObject(t, n) })), this.norm.clear()) } }, { key: \"add\", value: function (e) { var t = this.size(); g(e) ? this._addString(e, t) : this._addObject(e, t) } }, { key: \"removeAt\", value: function (e) { this.records.splice(e, 1); for (var t = e, n = this.size(); t < n; t += 1)this.records[t].i -= 1 } }, { key: \"getValueForItemAtKeyId\", value: function (e, t) { return e[this._keysMap[t]] } }, { key: \"size\", value: function () { return this.records.length } }, { key: \"_addString\", value: function (e, t) { if (k(e) && !M(e)) { var n = { v: e, i: t, n: this.norm.get(e) }; this.records.push(n) } } }, { key: \"_addObject\", value: function (e, t) { var n = this, r = { i: t, $: {} }; this.keys.forEach((function (t, i) { var o = n.getFn(e, t.path); if (k(o)) if (v(o)) !function () { for (var e = [], t = [{ nestedArrIndex: -1, value: o }]; t.length;) { var c = t.pop(), a = c.nestedArrIndex, s = c.value; if (k(s)) if (g(s) && !M(s)) { var u = { v: s, i: a, n: n.norm.get(s) }; e.push(u) } else v(s) && s.forEach((function (e, n) { t.push({ nestedArrIndex: n, value: e }) })) } r.$[i] = e }(); else if (!M(o)) { var c = { v: o, n: n.norm.get(o) }; r.$[i] = c } })), this.records.push(r) } }, { key: \"toJSON\", value: function () { return { keys: this.keys, records: this.records } } }]), e }(); function $(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r, o = new E({ getFn: i }); return o.setKeys(e.map(_)), o.setSources(t), o.create(), o } function R(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.errors, r = void 0 === n ? 0 : n, i = t.currentLocation, o = void 0 === i ? 0 : i, c = t.expectedLocation, a = void 0 === c ? 0 : c, s = t.distance, u = void 0 === s ? A.distance : s, h = t.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r / e.length; if (f) return l; var d = Math.abs(a - o); return u ? l + d / u : d ? 1 : l } function F() { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : A.minMatchCharLength, n = [], r = -1, i = -1, o = 0, c = e.length; o < c; o += 1) { var a = e[o]; a && -1 === r ? r = o : a || -1 === r || ((i = o - 1) - r + 1 >= t && n.push([r, i]), r = -1) } return e[o - 1] && o - r >= t && n.push([r, o - 1]), n } function P(e) { for (var t = {}, n = 0, r = e.length; n < r; n += 1) { var i = e.charAt(n); t[i] = (t[i] || 0) | 1 << r - n - 1 } return t } var N = function () { function e(n) { var r = this, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, o = i.location, c = void 0 === o ? A.location : o, a = i.threshold, s = void 0 === a ? A.threshold : a, u = i.distance, h = void 0 === u ? A.distance : u, f = i.includeMatches, l = void 0 === f ? A.includeMatches : f, d = i.findAllMatches, v = void 0 === d ? A.findAllMatches : d, g = i.minMatchCharLength, y = void 0 === g ? A.minMatchCharLength : g, p = i.isCaseSensitive, m = void 0 === p ? A.isCaseSensitive : p, k = i.ignoreLocation, M = void 0 === k ? A.ignoreLocation : k; if (t(this, e), this.options = { location: c, threshold: s, distance: h, includeMatches: l, findAllMatches: v, minMatchCharLength: y, isCaseSensitive: m, ignoreLocation: M }, this.pattern = m ? n : n.toLowerCase(), this.chunks = [], this.pattern.length) { var b = function (e, t) { r.chunks.push({ pattern: e, alphabet: P(e), startIndex: t }) }, x = this.pattern.length; if (x > 32) { for (var L = 0, S = x % 32, w = x - S; L < w;)b(this.pattern.substr(L, 32), L), L += 32; if (S) { var _ = x - 32; b(this.pattern.substr(_), _) } } else b(this.pattern, 0) } } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.options, n = t.isCaseSensitive, r = t.includeMatches; if (n || (e = e.toLowerCase()), this.pattern === e) { var i = { isMatch: !0, score: 0 }; return r && (i.indices = [[0, e.length - 1]]), i } var o = this.options, c = o.location, a = o.distance, s = o.threshold, u = o.findAllMatches, h = o.minMatchCharLength, f = o.ignoreLocation, d = [], v = 0, g = !1; this.chunks.forEach((function (t) { var n = t.pattern, i = t.alphabet, o = t.startIndex, y = function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, i = r.location, o = void 0 === i ? A.location : i, c = r.distance, a = void 0 === c ? A.distance : c, s = r.threshold, u = void 0 === s ? A.threshold : s, h = r.findAllMatches, f = void 0 === h ? A.findAllMatches : h, l = r.minMatchCharLength, d = void 0 === l ? A.minMatchCharLength : l, v = r.includeMatches, g = void 0 === v ? A.includeMatches : v, y = r.ignoreLocation, p = void 0 === y ? A.ignoreLocation : y; if (t.length > 32) throw new Error(L(32)); for (var m, k = t.length, M = e.length, b = Math.max(0, Math.min(o, M)), x = u, S = b, w = d > 1 || g, _ = w ? Array(M) : []; (m = e.indexOf(t, S)) > -1;) { var O = R(t, { currentLocation: m, expectedLocation: b, distance: a, ignoreLocation: p }); if (x = Math.min(O, x), S = m + k, w) for (var j = 0; j < k;)_[m + j] = 1, j += 1 } S = -1; for (var I = [], C = 1, E = k + M, $ = 1 << k - 1, P = 0; P < k; P += 1) { for (var N = 0, D = E; N < D;) { var z = R(t, { errors: P, currentLocation: b + D, expectedLocation: b, distance: a, ignoreLocation: p }); z <= x ? N = D : E = D, D = Math.floor((E - N) / 2 + N) } E = D; var K = Math.max(1, b - D + 1), q = f ? M : Math.min(b + D, M) + k, W = Array(q + 2); W[q + 1] = (1 << P) - 1; for (var J = q; J >= K; J -= 1) { var T = J - 1, U = n[e.charAt(T)]; if (w && (_[T] = +!!U), W[J] = (W[J + 1] << 1 | 1) & U, P && (W[J] |= (I[J + 1] | I[J]) << 1 | 1 | I[J + 1]), W[J] & $ && (C = R(t, { errors: P, currentLocation: T, expectedLocation: b, distance: a, ignoreLocation: p })) <= x) { if (x = C, (S = T) <= b) break; K = Math.max(1, 2 * b - S) } } var V = R(t, { errors: P + 1, currentLocation: b, expectedLocation: b, distance: a, ignoreLocation: p }); if (V > x) break; I = W } var B = { isMatch: S >= 0, score: Math.max(.001, C) }; if (w) { var G = F(_, d); G.length ? g && (B.indices = G) : B.isMatch = !1 } return B }(e, n, i, { location: c + o, distance: a, threshold: s, findAllMatches: u, minMatchCharLength: h, includeMatches: r, ignoreLocation: f }), p = y.isMatch, m = y.score, k = y.indices; p && (g = !0), v += m, p && k && (d = [].concat(l(d), l(k))) })); var y = { isMatch: g, score: g ? v / this.chunks.length : 1 }; return g && r && (y.indices = d), y } }]), e }(), D = function () { function e(n) { t(this, e), this.pattern = n } return r(e, [{ key: \"search\", value: function () { } }], [{ key: \"isMultiMatch\", value: function (e) { return z(e, this.multiRegex) } }, { key: \"isSingleMatch\", value: function (e) { return z(e, this.singleRegex) } }]), e }(); function z(e, t) { var n = e.match(t); return n ? n[1] : null } var K = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e === this.pattern; return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"exact\" } }, { key: \"multiRegex\", get: function () { return /^=\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^=(.*)$/ } }]), i }(D), q = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = -1 === e.indexOf(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)$/ } }]), i }(D), W = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^\\^(.*)$/ } }]), i }(D), J = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!\\^(.*)$/ } }]), i }(D), T = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [e.length - this.pattern.length, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)\\$$/ } }]), i }(D), U = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)\\$$/ } }]), i }(D), V = function (e) { a(i, e); var n = f(i); function i(e) { var r, o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = o.location, a = void 0 === c ? A.location : c, s = o.threshold, u = void 0 === s ? A.threshold : s, h = o.distance, f = void 0 === h ? A.distance : h, l = o.includeMatches, d = void 0 === l ? A.includeMatches : l, v = o.findAllMatches, g = void 0 === v ? A.findAllMatches : v, y = o.minMatchCharLength, p = void 0 === y ? A.minMatchCharLength : y, m = o.isCaseSensitive, k = void 0 === m ? A.isCaseSensitive : m, M = o.ignoreLocation, b = void 0 === M ? A.ignoreLocation : M; return t(this, i), (r = n.call(this, e))._bitapSearch = new N(e, { location: a, threshold: u, distance: f, includeMatches: d, findAllMatches: g, minMatchCharLength: p, isCaseSensitive: k, ignoreLocation: b }), r } return r(i, [{ key: \"search\", value: function (e) { return this._bitapSearch.searchIn(e) } }], [{ key: \"type\", get: function () { return \"fuzzy\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)$/ } }]), i }(D), B = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { for (var t, n = 0, r = [], i = this.pattern.length; (t = e.indexOf(this.pattern, n)) > -1;)n = t + i, r.push([t, n - 1]); var o = !!r.length; return { isMatch: o, score: o ? 0 : 1, indices: r } } }], [{ key: \"type\", get: function () { return \"include\" } }, { key: \"multiRegex\", get: function () { return /^'\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^'(.*)$/ } }]), i }(D), G = [K, B, W, J, U, T, q, V], H = G.length, Q = / +(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/; function X(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return e.split(\"|\").map((function (e) { for (var n = e.trim().split(Q).filter((function (e) { return e && !!e.trim() })), r = [], i = 0, o = n.length; i < o; i += 1) { for (var c = n[i], a = !1, s = -1; !a && ++s < H;) { var u = G[s], h = u.isMultiMatch(c); h && (r.push(new u(h, t)), a = !0) } if (!a) for (s = -1; ++s < H;) { var f = G[s], l = f.isSingleMatch(c); if (l) { r.push(new f(l, t)); break } } } return r })) } var Y = new Set([V.type, B.type]), Z = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = r.isCaseSensitive, o = void 0 === i ? A.isCaseSensitive : i, c = r.includeMatches, a = void 0 === c ? A.includeMatches : c, s = r.minMatchCharLength, u = void 0 === s ? A.minMatchCharLength : s, h = r.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r.findAllMatches, d = void 0 === l ? A.findAllMatches : l, v = r.location, g = void 0 === v ? A.location : v, y = r.threshold, p = void 0 === y ? A.threshold : y, m = r.distance, k = void 0 === m ? A.distance : m; t(this, e), this.query = null, this.options = { isCaseSensitive: o, includeMatches: a, minMatchCharLength: u, findAllMatches: d, ignoreLocation: f, location: g, threshold: p, distance: k }, this.pattern = o ? n : n.toLowerCase(), this.query = X(this.pattern, this.options) } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.query; if (!t) return { isMatch: !1, score: 1 }; var n = this.options, r = n.includeMatches; e = n.isCaseSensitive ? e : e.toLowerCase(); for (var i = 0, o = [], c = 0, a = 0, s = t.length; a < s; a += 1) { var u = t[a]; o.length = 0, i = 0; for (var h = 0, f = u.length; h < f; h += 1) { var d = u[h], v = d.search(e), g = v.isMatch, y = v.indices, p = v.score; if (!g) { c = 0, i = 0, o.length = 0; break } if (i += 1, c += p, r) { var m = d.constructor.type; Y.has(m) ? o = [].concat(l(o), l(y)) : o.push(y) } } if (i) { var k = { isMatch: !0, score: c / i }; return r && (k.indices = o), k } } return { isMatch: !1, score: 1 } } }], [{ key: \"condition\", value: function (e, t) { return t.useExtendedSearch } }]), e }(), ee = []; function te(e, t) { for (var n = 0, r = ee.length; n < r; n += 1) { var i = ee[n]; if (i.condition(e, t)) return new i(e, t) } return new N(e, t) } var ne = \"$and\", re = \"$or\", ie = \"$path\", oe = \"$val\", ce = function (e) { return !(!e[ne] && !e[re]) }, ae = function (e) { return !!e[ie] }, se = function (e) { return !v(e) && m(e) && !ce(e) }, ue = function (e) { return i({}, ne, Object.keys(e).map((function (t) { return i({}, t, e[t]) }))) }; function he(e, t) { var n = t.ignoreFieldNorm, r = void 0 === n ? A.ignoreFieldNorm : n; e.forEach((function (e) { var t = 1; e.matches.forEach((function (e) { var n = e.key, i = e.norm, o = e.score, c = n ? n.weight : null; t *= Math.pow(0 === o && c ? Number.EPSILON : o, (c || 1) * (r ? 1 : i)) })), e.score = t })) } function fe(e, t) { var n = e.matches; t.matches = [], k(n) && n.forEach((function (e) { if (k(e.indices) && e.indices.length) { var n = { indices: e.indices, value: e.value }; e.key && (n.key = e.key.src), e.idx > -1 && (n.refIndex = e.idx), t.matches.push(n) } })) } function le(e, t) { t.score = e.score } function de(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.includeMatches, i = void 0 === r ? A.includeMatches : r, o = n.includeScore, c = void 0 === o ? A.includeScore : o, a = []; return i && a.push(fe), c && a.push(le), e.map((function (e) { var n = e.idx, r = { item: t[n], refIndex: n }; return a.length && a.forEach((function (t) { t(e, r) })), r })) } var ve = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = arguments.length > 2 ? arguments[2] : void 0; t(this, e), this.options = c({}, A, {}, r), this.options.useExtendedSearch, this._keyStore = new w(this.options.keys), this.setCollection(n, i) } return r(e, [{ key: \"setCollection\", value: function (e, t) { if (this._docs = e, t && !(t instanceof E)) throw new Error(\"Incorrect 'index' type\"); this._myIndex = t || $(this.options.keys, this._docs, { getFn: this.options.getFn }) } }, { key: \"add\", value: function (e) { k(e) && (this._docs.push(e), this._myIndex.add(e)) } }, { key: \"remove\", value: function () { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : function () { return !1 }, t = [], n = 0, r = this._docs.length; n < r; n += 1) { var i = this._docs[n]; e(i, n) && (this.removeAt(n), n -= 1, r -= 1, t.push(i)) } return t } }, { key: \"removeAt\", value: function (e) { this._docs.splice(e, 1), this._myIndex.removeAt(e) } }, { key: \"getIndex\", value: function () { return this._myIndex } }, { key: \"search\", value: function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.limit, r = void 0 === n ? -1 : n, i = this.options, o = i.includeMatches, c = i.includeScore, a = i.shouldSort, s = i.sortFn, u = i.ignoreFieldNorm, h = g(e) ? g(this._docs[0]) ? this._searchStringList(e) : this._searchObjectList(e) : this._searchLogical(e); return he(h, { ignoreFieldNorm: u }), a && h.sort(s), y(r) && r > -1 && (h = h.slice(0, r)), de(h, this._docs, { includeMatches: o, includeScore: c }) } }, { key: \"_searchStringList\", value: function (e) { var t = te(e, this.options), n = this._myIndex.records, r = []; return n.forEach((function (e) { var n = e.v, i = e.i, o = e.n; if (k(n)) { var c = t.searchIn(n), a = c.isMatch, s = c.score, u = c.indices; a && r.push({ item: n, idx: i, matches: [{ score: s, value: n, norm: o, indices: u }] }) } })), r } }, { key: \"_searchLogical\", value: function (e) { var t = this, n = function (e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.auto, i = void 0 === r || r, o = function e(n) { var r = Object.keys(n), o = ae(n); if (!o && r.length > 1 && !ce(n)) return e(ue(n)); if (se(n)) { var c = o ? n[ie] : r[0], a = o ? n[oe] : n[c]; if (!g(a)) throw new Error(x(c)); var s = { keyId: j(c), pattern: a }; return i && (s.searcher = te(a, t)), s } var u = { children: [], operator: r[0] }; return r.forEach((function (t) { var r = n[t]; v(r) && r.forEach((function (t) { u.children.push(e(t)) })) })), u }; return ce(e) || (e = ue(e)), o(e) }(e, this.options), r = this._myIndex.records, i = {}, o = []; return r.forEach((function (e) { var r = e.$, c = e.i; if (k(r)) { var a = function e(n, r, i) { if (!n.children) { var o = n.keyId, c = n.searcher, a = t._findMatches({ key: t._keyStore.get(o), value: t._myIndex.getValueForItemAtKeyId(r, o), searcher: c }); return a && a.length ? [{ idx: i, item: r, matches: a }] : [] } switch (n.operator) { case ne: for (var s = [], u = 0, h = n.children.length; u < h; u += 1) { var f = e(n.children[u], r, i); if (!f.length) return []; s.push.apply(s, l(f)) } return s; case re: for (var d = [], v = 0, g = n.children.length; v < g; v += 1) { var y = e(n.children[v], r, i); if (y.length) { d.push.apply(d, l(y)); break } } return d } }(n, r, c); a.length && (i[c] || (i[c] = { idx: c, item: r, matches: [] }, o.push(i[c])), a.forEach((function (e) { var t, n = e.matches; (t = i[c].matches).push.apply(t, l(n)) }))) } })), o } }, { key: \"_searchObjectList\", value: function (e) { var t = this, n = te(e, this.options), r = this._myIndex, i = r.keys, o = r.records, c = []; return o.forEach((function (e) { var r = e.$, o = e.i; if (k(r)) { var a = []; i.forEach((function (e, i) { a.push.apply(a, l(t._findMatches({ key: e, value: r[i], searcher: n }))) })), a.length && c.push({ idx: o, item: r, matches: a }) } })), c } }, { key: \"_findMatches\", value: function (e) { var t = e.key, n = e.value, r = e.searcher; if (!k(n)) return []; var i = []; if (v(n)) n.forEach((function (e) { var n = e.v, o = e.i, c = e.n; if (k(n)) { var a = r.searchIn(n), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: n, idx: o, norm: c, indices: h }) } })); else { var o = n.v, c = n.n, a = r.searchIn(o), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: o, norm: c, indices: h }) } return i } }]), e }(); return ve.version = \"6.4.6\", ve.createIndex = $, ve.parseIndex = function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.getFn, r = void 0 === n ? A.getFn : n, i = e.keys, o = e.records, c = new E({ getFn: r }); return c.setKeys(i), c.setIndexRecords(o), c }, ve.config = A, function () { ee.push.apply(ee, arguments) }(Z), ve }, \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = e || self).Fuse = t();\n", "/*\n * Some notes on how this works...\n *\n * paletteData is passed into the constructor and is the initial list of items\n * these are TurboAdminMenuItem objects\n *\n * At any point, buildPaletteItems() can be called to turn the paletteData\n * into an array of \"li\" nodes.\n *\n * updatePaletteItems inserts the paletteItems into the \"ul\" list and sets the\n * selectedElement\n *\n * The selectedItem is always one of the paletteItems\n *\n * paletteSearch rebuilds the paletteItems from the paletteData using\n * buildPaletteItems, and then filters the list with FuseJS\n */\n\nimport Fuse from './fuse-6.4.6.js';\nimport TurboAdminMenuItem from './types/class-turbo-admin-menu-item';\nimport ContentApi from './apis/class-content-api.js';\nimport SearchMode from './types/class-search-mode.js';\nimport ContentItem from './types/class-content-item.js';\n\nexport default class TurboAdminPalette {\n\n\tconstructor(paletteData, options) {\n\n\t\tturboAdminLog('Initialising TurboAdmin');\n\n        this.options = options;\n\n        /** @type {HTMLDivElement} */\n        this.paletteElement      = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteInnerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette'));\n\t\t/** @type {HTMLInputElement} */\n        this.paletteInputElement = /** @type {HTMLInputElement} */ (document.getElementById('ta-command-palette-input'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteItemsContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-items-container'));\n\t\t/** @type {HTMLUListElement} */\n        this.paletteItemsElement = /** @type {HTMLUListElement} */ (document.getElementById('ta-command-palette-items'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteSubmenuContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-submenu-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTag = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-search-mode-tag'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTabNotice = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-tab-notice'));\n        /** @type {HTMLSpanElement} */\n        this.paletteSearchModeTabNoticeText = /** @type {HTMLSpanElement} */ (document.getElementById('ta-command-palette-tab-notice-text'));\n        /** @type {HTMLDivElement} */\n        this.paletteNoticeElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-notice'));\n\n\n        // Add a class if the menu needs refreshing with a visit to the Dashboard\n        if (globalThis.turboAdmin.menuNeedsRefresh) {\n            this.showPaletteNotice('Menu needs refreshing. Visit the Dashboard to refresh.');\n        }\n\n        // We need this when injecting items. We use it to help generate edit URLs. Not the best way but\n        // works for now.\n        /** @type {HTMLUListElement} */\n        this.profileLinkElem = document.getElementById('wp-admin-bar-edit-profile');\n        /** @type {null|String} */\n        this.profileLink = null;\n        if (this.profileLinkElem) {\n            this.profileLink = this.profileLinkElem.querySelector('a').href;\n        }\n\n\t\t// Get palette data\n\t\tthis.paletteData = paletteData;\n\n        // Backup of the palette data for use when we enter a different search mode\n\t\tthis.paletteDataBackup = null;\n\t\tthis.paletteItemsBackup = null;\n        this.paletteItemIndexBackup = null;\n\n\n    // This needs all the APIs to be ready\n    await globalThis.turboAdmin.activatePlugins();\n\n    if (settings[taStorageKey]['hide-notices']) {\n        globalThis.turboAdminWpNotices = new TurboAdminWpNotices(settings[taStorageKey].rememberedNoticeIds);\n    }\n}\n\n/**\n * This is plugin-specific. It should not be present in the extension code.\n */\ndocument.addEventListener('DOMContentLoaded', async e => {\n\tglobalThis.turboAdminOptions = {};\n\tglobalThis.turboAdminOptions[taStorageKey] = {\n\t\t// wpTurboAdmin is set using wp_localize_script\n\t\tshortcutKeys: globalThis.wpTurboAdmin.keys,\n        // These don't apply to the plugin version\n        'block-editor-fullscreen-disable': false,\n        'block-editor-welcome-screen-kill': false,\n        // I don't think we'll do this in the plugin as the code would be SO different.\n        'live-dev-notice': false,\n        'list-table-keyboard-shortcuts': globalThis.wpTurboAdmin['listTableShortcuts'] === '1',\n        'hide-notices': globalThis.wpTurboAdmin['hideNotices'] === '1',\n        'rememberedNoticeIds': JSON.parse(window.localStorage.getItem('rememberedNoticeIds')) ?? new Array(),\n        'barkeeper': globalThis.wpTurboAdmin['barkeeper'] === '1',\n        'admin-bar-search': globalThis.wpTurboAdmin['adminBarSearch'] === '1',\n        'debug-mode': globalThis.wpTurboAdmin['debugMode'] === '1',\n\t}\n\tawait taInit(globalThis.turboAdminOptions);\n});\n"],
     5  "mappings": "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",
    66  "names": []
    77}
  • turbo-admin/tags/1.13.3/readme.txt

    r2871191 r2919322  
    66Tested up to: 6.2
    77Requires PHP: 7.4
    8 Stable tag: 1.13.2
     8Stable tag: 1.13.
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    185185== Changelog ==
    186186
     187
     188
     189
     190
     191
    187192= 1.13.2 =
    188193
  • turbo-admin/tags/1.13.3/src/class-turbo-admin-palette.js

    r2871191 r2919322  
    7575        this.paletteItemsBackup = null;
    7676        this.paletteItemIndexBackup = null;
     77
    7778
    7879        // Current search modes/keyword
     
    110111        this.paletteFuseOptions = {
    111112            keys: ['innerText'],
     113
     114
     115
     116
     117
     118
     119
     120
     121
     122
     123
     124
     125
     126
    112127        }
    113128
     
    155170            const li = document.createElement('li');
    156171            const a = document.createElement('a');
    157             li.appendChild(a);
    158             a.href = item.action;
    159             let title = item.title;
    160             if (item.parentTitle) {
    161                 title = item.parentTitle + ": " + title;
    162             }
    163             a.innerHTML = title;
     172            li.appendChild(a);
     173            if (item.actionType === 'url') {
     174                a.href = item.action;
     175                let title = item.title;
     176                if (item.parentTitle) {
     177                    title = item.parentTitle + ": " + title;
     178                }
     179                a.innerHTML = title;
     180            } else if (item.actionType === 'search-mode') {
     181                a.href = '#';
     182                a.innerHTML = item.title;
     183                li.dataset.actionType = item.actionType;
     184                li.dataset.searchMode = item.action.searchMode;
     185            }
    164186            this.addPaletteListItem(li);
    165187        });
     
    474496                turboAdminLog('Found search mode ' + inputValue)
    475497                e.preventDefault();
    476                 // TODO: Work on this.
    477498                await this.enterSearchMode(
    478499                    globalThis.turboAdmin.searchModes[inputValue]);
     
    525546
    526547    /**
     548
     549
     550
     551
     552
     553
     554
     555
     556
     557
     558
     559
     560
     561
     562
    527563     * Leaves the current search mode
    528564     */
     
    533569        this.removeSearchModeTag();
    534570        this.restorePaletteData();
    535         this.paletteInputElement.value = searchMode.keyword;
    536         this.maybeHighlightInputKeyword('');
    537         this.paletteSearchAndUpdate();
    538     }
    539 
    540     /**
    541      * Backups up the palette data to a local variable so that it can be
     571    }
     572
     573    /**
     574     * Backups up the palette data and input value to local variables so that it can be
    542575     * restored later.
    543576     */
     
    546579        this.paletteItemsBackup = this.paletteItems;
    547580        this.paletteItemIndexBackup = this.itemIndex;
    548     }
    549 
    550     /**
    551      * Restores the save palette data - does not rebuild anything
     581        this.paletteInputValueBackup = this.paletteInputElement.value;
     582    }
     583
     584    /**
     585     * Restores the save palette data - highlights and rebuilds
    552586     */
    553587    restorePaletteData() {
     
    555589        this.paletteItems = this.paletteItemsBackup;
    556590        this.itemIndex = this.paletteItemIndexBackup;
     591
     592
     593
    557594    }
    558595
     
    743780            const subMenu = this.selectedItem.querySelector('.ta-submenu');
    744781            this.openSubMenu(subMenu);
     782
     783
     784
     785
    745786            return;
    746787        }
  • turbo-admin/tags/1.13.3/src/class-turbo-admin.js

    r2871191 r2919322  
    5757import TurboAdminPluginSearch from './plugins/class-turbo-admin-plugins.js';
    5858import TurboAdminUserSearch from './plugins/class-turbo-admin-users.js';
    59 // import TurboAdminWoocommerce from './plugins/class-turbo-admin-woocommerce.js';
    60 // import TurboAdminGravityForms from './plugins/class-turbo-admin-gravity-forms.js';
     59import TurboAdminWoocommerce from './plugins/class-turbo-admin-woocommerce.js';
     60import TurboAdminGravityForms from './plugins/class-turbo-admin-gravity-forms.js';
    6161import TurboAdminMUSites from './plugins/class-turbo-admin-mu-sites.js';
    6262import TurboAdminOxygenBuilder from './plugins/class-turbo-admin-oxygen-buillder.js';
     
    103103        new TurboAdminPluginSearch();
    104104        new TurboAdminUserSearch();
    105         // new TurboAdminWoocommerce();
    106         // new TurboAdminGravityForms();
    107105        new TurboAdminMUSites();
    108106        new TurboAdminOxygenBuilder();
     107
     108
     109
     110
     111
    109112
    110113        // Grab the global Wp object instance
     
    132135                        this.menu = JSON.parse(savedMenu);
    133136                        // Check if there is no "Media" item  - this should ONLY be in the back-end
    134                         if (! this.menu.some(item => item.action.endsWith('upload.php'))) {
     137                        if (! this.menu.some(item => ))) {
    135138                            this.menuNeedsRefresh = true;
    136139                        }
     
    291294
    292295        for (let i=0; i < pluginKeys.length; i++) {
     296
    293297            extraItems = extraItems.concat(await this.plugins[pluginKeys[i]].getAdditionalItemDefinitions());
    294298        }
     
    297301        extraItems = extraItems.concat(
    298302            [
     303
    299304                {
    300305                    'detectType': 'dom',
    301306                    'detectSelector': 'body.wp-admin #wp-admin-bar-view-site a',
     307
    302308                    'itemTitleFunction': () => 'View/visit site',
    303309                    'itemUrlFunction': (element) => element.href
     
    306312                    'detectType': 'dom',
    307313                    'detectSelector': '#wp-admin-bar-dashboard a',
     314
    308315                    'itemTitleFunction': (element) => element.textContent,
    309316                    'itemUrlFunction': (element) => element.href
     
    312319                    'detectType': 'dom',
    313320                    'detectSelector': '#wpadminbar',
     321
    314322                    'itemTitleFunction': () => 'Logout',
    315323                    'itemUrlFunction': () => document.getElementById('wp-admin-bar-logout')?.querySelector('a')?.href
     
    318326                    'detectType': 'dom',
    319327                    'detectSelector': '#wp-admin-bar-edit a',
     328
    320329                    'itemTitleFunction': (item) => item.textContent,
    321330                    'itemUrlFunction': (item) => item.href,
     
    325334                    'detectType': 'dom',
    326335                    'detectSelector': '#wp-admin-bar-view a',
     336
    327337                    'itemTitleFunction': (item) => item.textContent,
    328338                    'itemUrlFunction': (item) => item.href,
     
    332342                    'detectType': 'dom',
    333343                    'detectSelector': '#wp-admin-bar-new-content .ab-submenu a',
     344
    334345                    'itemTitleFunction': (item) => 'New ' + item.textContent,
    335346                    'itemUrlFunction': (item) => item.href
     
    338349                    'detectType': 'dom',
    339350                    'detectSelector': '#wp-admin-bar-customize a',
     351
    340352                    'itemTitleFunction': (item) => item.textContent,
    341353                    'itemUrlFunction': (item) => item.href
     
    344356                    'detectType': 'dom',
    345357                    'detectSelectorNone': '#wpadminbar, #loginform',
     358
    346359                    'itemTitleFunction': () => "Log in",
    347360                    'itemUrlFunction': () => {
     
    357370                    'detectType': 'dom',
    358371                    'detectSelector': '#backtoblog a',
     372
    359373                    'itemTitleFunction': () => "View/visit site",
    360374                    'itemUrlFunction': (element) => element.href
     
    364378                    'detectType': 'dom',
    365379                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin > a',
     380
    366381                    'itemTitleFunction': () => "Network Admin",
    367382                    'itemUrlFunction': (element) => element.href
     
    370385                    'detectType': 'dom',
    371386                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin .ab-submenu a',
     387
    372388                    'itemTitleFunction': (element) => 'Network Admin: ' + element.textContent,
    373389                    'itemUrlFunction': (element) => element.href
     
    379395            let detected = false;
    380396            let elements = null;
    381             if (item.detectType === 'url') {
     397            if (item.detectType === 'none') {
     398                detected = true;
     399                // Just grab any old element. We shouldn't need it.
     400                elements = document.querySelectorAll('body');
     401            } else if (item.detectType === 'url') {
    382402                detected = Boolean(window.location.href.includes(item.detectPattern));
    383403                // Just grab any old element. We shouldn't need it.
     
    399419
    400420            elements.forEach(element => {
    401                 const newItem = new TurboAdminMenuItem(item.itemTitleFunction(element), item.itemUrlFunction(element), '', item?.noCache);
     421                const newItem = );
    402422                // Might already have one so check.
    403423                if (this.menu.some(menuItem => {
  • turbo-admin/tags/1.13.3/src/main.js

    r2871191 r2919322  
    1717
    1818window.turboAdminIsExtension = function() {
    19     return 'undefined' !== typeof (chrome.storage);
     19    return ;
    2020}
    2121
     
    6666    await globalThis.turboAdmin.init();
    6767
    68 
    69 
    7068    // This needs all the APIs to be ready
    7169    await globalThis.turboAdmin.activatePlugins();
  • turbo-admin/tags/1.13.3/src/plugins/class-turbo-admin-content-search.js

    r2871191 r2919322  
    88        super('WP Content');
    99
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
    1023        // Register a search mode for each post type
    11         const postTypeKeys = Object.keys(globalThis.contentApi.postTypes);
    12         for (let i = 0; i < postTypeKeys.length; i++) {
    13             const thisPostTypeKey = postTypeKeys[i];
     24        for (let i = 0; i < filteredPostTypeKeys.length; i++) {
     25            const thisPostTypeKey = filteredPostTypeKeys[i];
    1426            const thisPostType = globalThis.contentApi.postTypes[thisPostTypeKey];
    1527            // turboAdminLog('Adding search mode for post type', thisPostType);
     
    2234        // Register search all post types mode
    2335        this.searchModes.push( new SearchMode('search', 'All post types', this.contentSearch.bind(this)) );
    24         this.searchModes.push( new SearchMode('find', 'All post types', this.contentSearch.bind(this)) );
     36        // Don't show this one in the palette
     37        this.searchModes.push( new SearchMode('find', 'All post types', this.contentSearch.bind(this), null, false) );
    2538    }
    2639
  • turbo-admin/tags/1.13.3/src/types/class-item-definition.js

    r2871191 r2919322  
    1616
    1717    /**
     18
     19
     20
     21
     22
     23
     24
    1825     * The method of detecting items. Can be:
    1926     *  - 'dom' for checking if a DOM element exists (requires detectSelector or detectSelectorNone)
    2027     *  - 'url' if the current URL is being checked (requires detectPattern)
     28
    2129     *
    2230     * @type {string}
     
    5462
    5563    /**
     64
     65
     66
     67
     68
     69
     70
     71
     72
    5673     * A callback used to generate a menu item link URL from a detected element. Should be passed an
    5774     * HTML element and should return a string
     
    6077     */
    6178     itemUrlFunction = null;
     79
     80
     81
     82
     83
     84
     85
     86
     87
    6288
    6389     /**
  • turbo-admin/tags/1.13.3/src/types/class-search-mode.js

    r2835882 r2919322  
    3939
    4040    /**
     41
     42
     43
     44
     45
     46
     47
     48
    4149     * Constructs a new search mode
    4250     *
     
    4553     * @param {SearchCallback} searchCallback
    4654     * @param {SearchCallback} defaultItemsCallback
     55
    4756     */
    48     constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {
     57    constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {
    4958        this.keyword = keyword;
    5059        this.displayName = displayName;
    5160        this.searchCallback = searchCallback;
    5261        this.defaultItemsCallback = defaultItemsCallback;
     62
    5363    }
    5464}
  • turbo-admin/tags/1.13.3/src/types/class-turbo-admin-menu-item.js

    r2835882 r2919322  
     1
     2
    13/**
    24 * Menu items are the items ready to appear in the palette.
     
    1416
    1517    /**
    16      * The action of the item is the URL to visit when the item is clicked
     18     * The type of action to take when the item is clicked. Can be:
     19     * - 'url' to visit a URL (default)
     20     * - 'search-mode' to enter a search mode
     21     */
     22    actionType = 'url';
     23
     24    /**
     25     * The action of the item is the URL to visit when the item is clicked or the action data
     26     * if the action type is not 'url'
    1727     *
    18      * @type {string}
     28     * @type {string}
    1929     */
    2030    action = '';
     
    3747    noCache = false;
    3848
     49
     50
     51
     52
     53
     54
     55
     56
    3957    constructor(title, action, parentTitle, noCache = false) {
    4058        this.title = title;
     59
    4160        this.action = action;
    4261        this.parentTitle = parentTitle;
     
    4463    }
    4564
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
    4694    sameAs(item) {
    4795        return item.title === this.title &&
  • turbo-admin/tags/1.13.3/src/types/class-turbo-admin-plugin.js

    r2871191 r2919322  
    5555
    5656    /**
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
    5786     * Get additional menu items to be added to the main menu
    5887     *
     
    6089     */
    6190    async getAdditionalItemDefinitions() {
     91
     92
     93
     94
    6295        return [];
    6396    }
  • turbo-admin/tags/1.13.3/turbo-admin.php

    r2871191 r2919322  
    99 * Text Domain:     turbo-admin
    1010 * Domain Path:     /languages
    11  * Version:         1.13.2
     11 * Version:         1.13.
    1212 *
    1313 * @package         Turbo_Admin
  • turbo-admin/trunk/dist/main.min.js

    r2871191 r2919322  
    808808  var import_fuse_6_4_6 = __toModule(require_fuse_6_4_6());
    809809
     810
     811
     812
     813
     814
     815
     816
     817
     818
     819
     820
     821
     822
     823
    810824  // src/types/class-turbo-admin-menu-item.js
    811825  var TurboAdminMenuItem = class {
    812826    title = "";
     827
    813828    action = "";
    814829    parentTitle = "";
     
    816831    constructor(title, action, parentTitle, noCache = false) {
    817832      this.title = title;
     833
    818834      this.action = action;
    819835      this.parentTitle = parentTitle;
    820836      this.noCache = noCache;
     837
     838
     839
     840
     841
     842
    821843    }
    822844    sameAs(item) {
     
    10911113    searchCallback;
    10921114    defaultItemsCallback = null;
    1093     constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {
     1115    showInPaletteSearch = true;
     1116    constructor(keyword, displayName, searchCallback, defaultItemsCallback = null, showInPaletteSearch = true) {
    10941117      this.keyword = keyword;
    10951118      this.displayName = displayName;
    10961119      this.searchCallback = searchCallback;
    10971120      this.defaultItemsCallback = defaultItemsCallback;
     1121
    10981122    }
    10991123  };
     
    11271151      this.paletteItemsBackup = null;
    11281152      this.paletteItemIndexBackup = null;
     1153
    11291154      this.searchMode = null;
    11301155      this.paletteItems = [];
     
    11431168      }
    11441169      this.paletteFuseOptions = {
    1145         keys: ["innerText"]
     1170        keys: ["innerText"],
     1171        shouldSort: true
    11461172      };
    11471173      this.paletteFuse = new import_fuse_6_4_6.default(this.paletteItems, this.paletteFuseOptions);
     
    11751201        const a = document.createElement("a");
    11761202        li.appendChild(a);
    1177         a.href = item.action;
    1178         let title = item.title;
    1179         if (item.parentTitle) {
    1180           title = item.parentTitle + ": " + title;
    1181         }
    1182         a.innerHTML = title;
     1203        if (item.actionType === "url") {
     1204          a.href = item.action;
     1205          let title = item.title;
     1206          if (item.parentTitle) {
     1207            title = item.parentTitle + ": " + title;
     1208          }
     1209          a.innerHTML = title;
     1210        } else if (item.actionType === "search-mode") {
     1211          a.href = "#";
     1212          a.innerHTML = item.title;
     1213          li.dataset.actionType = item.actionType;
     1214          li.dataset.searchMode = item.action.searchMode;
     1215        }
    11831216        this.addPaletteListItem(li);
    11841217      });
     
    13911424      }
    13921425    }
     1426
     1427
     1428
     1429
     1430
     1431
     1432
     1433
     1434
    13931435    leaveSearchMode() {
    13941436      const searchMode = this.searchMode;
     
    13961438      this.removeSearchModeTag();
    13971439      this.restorePaletteData();
    1398       this.paletteInputElement.value = searchMode.keyword;
    1399       this.maybeHighlightInputKeyword("");
    1400       this.paletteSearchAndUpdate();
    14011440    }
    14021441    backupPaletteData() {
     
    14041443      this.paletteItemsBackup = this.paletteItems;
    14051444      this.paletteItemIndexBackup = this.itemIndex;
     1445
    14061446    }
    14071447    restorePaletteData() {
     
    14091449      this.paletteItems = this.paletteItemsBackup;
    14101450      this.itemIndex = this.paletteItemIndexBackup;
     1451
     1452
     1453
    14111454    }
    14121455    addSearchModeTag(title) {
     
    15621605        return;
    15631606      }
     1607
     1608
     1609
     1610
    15641611      this.actOnItem(this.selectedItem, metaPressed);
    15651612    }
     
    16271674  var class_turbo_admin_palette_default = TurboAdminPalette;
    16281675
    1629   // src/types/class-item-definition.js
    1630   var ItemDefinition = class {
    1631     detectType = "dom";
    1632     detectSelector = "";
    1633     detectSelectorNone = "";
    1634     detectPattern = "";
    1635     itemTitleFunction = null;
    1636     itemUrlFunction = null;
    1637     noCache = false;
    1638   };
    1639   var class_item_definition_default = ItemDefinition;
    1640 
    16411676  // src/types/class-turbo-admin-plugin.js
    16421677  var TurboAdminPlugin = class {
     
    16621697      this.searchModes.forEach(globalThis.turboAdmin.registerSearchMode);
    16631698    }
     1699
     1700
     1701
     1702
     1703
     1704
     1705
     1706
     1707
     1708
     1709
     1710
     1711
     1712
     1713
     1714
     1715
     1716
     1717
    16641718    async getAdditionalItemDefinitions() {
     1719
     1720
     1721
    16651722      return [];
    16661723    }
     
    21632220    constructor() {
    21642221      super("WP Content");
     2222
     2223
     2224
     2225
     2226
     2227
     2228
    21652229      const postTypeKeys = Object.keys(globalThis.contentApi.postTypes);
    2166       for (let i = 0; i < postTypeKeys.length; i++) {
    2167         const thisPostTypeKey = postTypeKeys[i];
     2230      const filteredPostTypeKeys = postTypeKeys.filter((key) => !ignoredPostTypes.includes(key));
     2231      for (let i = 0; i < filteredPostTypeKeys.length; i++) {
     2232        const thisPostTypeKey = filteredPostTypeKeys[i];
    21682233        const thisPostType = globalThis.contentApi.postTypes[thisPostTypeKey];
    21692234        this.searchModes.push(this.makePostTypeSearchMode(thisPostType));
     
    21712236      this.searchModes.push(new class_search_mode_default("id", "Post ID", this.postById.bind(this)));
    21722237      this.searchModes.push(new class_search_mode_default("search", "All post types", this.contentSearch.bind(this)));
    2173       this.searchModes.push(new class_search_mode_default("find", "All post types", this.contentSearch.bind(this)));
     2238      this.searchModes.push(new class_search_mode_default("find", "All post types", this.contentSearch.bind(this)));
    21742239    }
    21752240    shouldActivate() {
     
    22972362  };
    22982363  var class_turbo_admin_users_default = TurboAdminUserSearch;
     2364
     2365
     2366
     2367
     2368
     2369
     2370
     2371
     2372
     2373
     2374
     2375
     2376
     2377
     2378
     2379
     2380
     2381
     2382
     2383
     2384
     2385
     2386
     2387
     2388
     2389
     2390
     2391
     2392
     2393
     2394
     2395
     2396
     2397
     2398
     2399
     2400
     2401
     2402
     2403
     2404
     2405
     2406
     2407
     2408
     2409
     2410
     2411
     2412
     2413
     2414
     2415
     2416
     2417
     2418
     2419
     2420
     2421
     2422
     2423
     2424
     2425
     2426
     2427
     2428
     2429
     2430
     2431
     2432
     2433
     2434
     2435
     2436
     2437
     2438
     2439
     2440
     2441
     2442
     2443
     2444
     2445
     2446
     2447
     2448
     2449
     2450
     2451
     2452
     2453
     2454
     2455
     2456
     2457
     2458
     2459
    22992460
    23002461  // src/plugins/class-turbo-admin-mu-sites.js
     
    24222583      new class_turbo_admin_mu_sites_default();
    24232584      new class_turbo_admin_oxygen_buillder_default();
     2585
     2586
     2587
     2588
    24242589      this.wp = globalThis.taWp;
    24252590      this.menu = [];
     
    24322597            } else {
    24332598              this.menu = JSON.parse(savedMenu);
    2434               if (!this.menu.some((item) => item.action.endsWith("upload.php"))) {
     2599              if (!this.menu.some((item) => item.action.endsWith("upload.php"))) {
    24352600                this.menuNeedsRefresh = true;
    24362601              }
     
    25052670      const pluginKeys = Object.keys(this.plugins);
    25062671      for (let i = 0; i < pluginKeys.length; i++) {
     2672
    25072673        extraItems = extraItems.concat(await this.plugins[pluginKeys[i]].getAdditionalItemDefinitions());
    25082674      }
     
    25112677          detectType: "dom",
    25122678          detectSelector: "body.wp-admin #wp-admin-bar-view-site a",
     2679
    25132680          itemTitleFunction: () => "View/visit site",
    25142681          itemUrlFunction: (element) => element.href
     
    25172684          detectType: "dom",
    25182685          detectSelector: "#wp-admin-bar-dashboard a",
     2686
    25192687          itemTitleFunction: (element) => element.textContent,
    25202688          itemUrlFunction: (element) => element.href
     
    25232691          detectType: "dom",
    25242692          detectSelector: "#wpadminbar",
     2693
    25252694          itemTitleFunction: () => "Logout",
    25262695          itemUrlFunction: () => document.getElementById("wp-admin-bar-logout")?.querySelector("a")?.href
     
    25292698          detectType: "dom",
    25302699          detectSelector: "#wp-admin-bar-edit a",
     2700
    25312701          itemTitleFunction: (item) => item.textContent,
    25322702          itemUrlFunction: (item) => item.href,
     
    25362706          detectType: "dom",
    25372707          detectSelector: "#wp-admin-bar-view a",
     2708
    25382709          itemTitleFunction: (item) => item.textContent,
    25392710          itemUrlFunction: (item) => item.href,
     
    25432714          detectType: "dom",
    25442715          detectSelector: "#wp-admin-bar-new-content .ab-submenu a",
     2716
    25452717          itemTitleFunction: (item) => "New " + item.textContent,
    25462718          itemUrlFunction: (item) => item.href
     
    25492721          detectType: "dom",
    25502722          detectSelector: "#wp-admin-bar-customize a",
     2723
    25512724          itemTitleFunction: (item) => item.textContent,
    25522725          itemUrlFunction: (item) => item.href
     
    25552728          detectType: "dom",
    25562729          detectSelectorNone: "#wpadminbar, #loginform",
     2730
    25572731          itemTitleFunction: () => "Log in",
    25582732          itemUrlFunction: () => {
     
    25662740          detectType: "dom",
    25672741          detectSelector: "#backtoblog a",
     2742
    25682743          itemTitleFunction: () => "View/visit site",
    25692744          itemUrlFunction: (element) => element.href
     
    25722747          detectType: "dom",
    25732748          detectSelector: "#wp-admin-bar-my-sites #wp-admin-bar-network-admin > a",
     2749
    25742750          itemTitleFunction: () => "Network Admin",
    25752751          itemUrlFunction: (element) => element.href
     
    25782754          detectType: "dom",
    25792755          detectSelector: "#wp-admin-bar-my-sites #wp-admin-bar-network-admin .ab-submenu a",
     2756
    25802757          itemTitleFunction: (element) => "Network Admin: " + element.textContent,
    25812758          itemUrlFunction: (element) => element.href
     
    25852762        let detected = false;
    25862763        let elements = null;
    2587         if (item.detectType === "url") {
     2764        if (item.detectType === "none") {
     2765          detected = true;
     2766          elements = document.querySelectorAll("body");
     2767        } else if (item.detectType === "url") {
    25882768          detected = Boolean(window.location.href.includes(item.detectPattern));
    25892769          elements = document.querySelectorAll("body");
     
    26022782        }
    26032783        elements.forEach((element) => {
    2604           const newItem = new class_turbo_admin_menu_item_default(item.itemTitleFunction(element), item.itemUrlFunction(element), "", item?.noCache);
     2784          const newItem = );
    26052785          if (this.menu.some((menuItem) => {
    26062786            return newItem.sameAs(menuItem);
     
    29613141  };
    29623142  window.turboAdminIsExtension = function() {
    2963     return typeof chrome.storage !== "undefined";
     3143    return ;
    29643144  };
    29653145  async function taInit(settings) {
  • turbo-admin/trunk/dist/main.min.js.map

    r2871191 r2919322  
    11{
    22  "version": 3,
    3   "sources": ["../src/fuse-6.4.6.js", "../src/class-turbo-admin-palette.js", "../src/types/class-turbo-admin-menu-item.js", "../src/class-storage.js", "../src/apis/class-content-api.js", "../src/types/class-submenu-item.js", "../src/types/class-content-item.js", "../src/types/class-search-mode.js", "../src/types/class-item-definition.js", "../src/types/class-turbo-admin-plugin.js", "../src/class-turbo-admin-wp-block-editor-fullscreen-kill.js", "../src/class-turbo-admin-wp-block-editor-welcome-guide-kill.js", "../src/class-turbo-admin-wp-notices.js", "../src/class-list-table-shortcuts.js", "../src/plugins/class-turbo-admin-barkeeper.js", "../src/plugins/class-turbo-admin-content-search.js", "../src/plugins/class-turbo-admin-plugins.js", "../src/plugins/class-turbo-admin-users.js", "../src/plugins/class-turbo-admin-mu-sites.js", "../src/plugins/class-turbo-admin-oxygen-buillder.js", "../src/class-turbo-admin.js", "../src/class-wp.js", "../src/apis/class-woocommerce-api.js", "../src/apis/class-gravity-forms-api.js", "../src/main.js"],
    4   "sourcesContent": ["/**\n * Fuse.js v6.4.6 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2021 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\nvar e, t; e = this, t = function () { \"use strict\"; function e(t) { return (e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e })(t) } function t(e, t) { if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\") } function n(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) } } function r(e, t, r) { return t && n(e.prototype, t), r && n(e, r), e } function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter((function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable }))), n.push.apply(n, r) } return n } function c(e) { for (var t = 1; t < arguments.length; t++) { var n = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(n), !0).forEach((function (t) { i(e, t, n[t]) })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : o(Object(n)).forEach((function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)) })) } return e } function a(e, t) { if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\"); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), t && u(e, t) } function s(e) { return (s = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) { return e.__proto__ || Object.getPrototypeOf(e) })(e) } function u(e, t) { return (u = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e })(e, t) } function h(e, t) { return !t || \"object\" != typeof t && \"function\" != typeof t ? function (e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e }(e) : t } function f(e) { var t = function () { if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1; if (Reflect.construct.sham) return !1; if (\"function\" == typeof Proxy) return !0; try { return Date.prototype.toString.call(Reflect.construct(Date, [], (function () { }))), !0 } catch (e) { return !1 } }(); return function () { var n, r = s(e); if (t) { var i = s(this).constructor; n = Reflect.construct(r, arguments, i) } else n = r.apply(this, arguments); return h(this, n) } } function l(e) { return function (e) { if (Array.isArray(e)) return d(e) }(e) || function (e) { if (\"undefined\" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e) }(e) || function (e, t) { if (e) { if (\"string\" == typeof e) return d(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); return \"Object\" === n && e.constructor && (n = e.constructor.name), \"Map\" === n || \"Set\" === n ? Array.from(e) : \"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? d(e, t) : void 0 } }(e) || function () { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\") }() } function d(e, t) { (null == t || t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n < t; n++)r[n] = e[n]; return r } function v(e) { return Array.isArray ? Array.isArray(e) : \"[object Array]\" === b(e) } function g(e) { return \"string\" == typeof e } function y(e) { return \"number\" == typeof e } function p(e) { return !0 === e || !1 === e || function (e) { return m(e) && null !== e }(e) && \"[object Boolean]\" == b(e) } function m(t) { return \"object\" === e(t) } function k(e) { return null != e } function M(e) { return !e.trim().length } function b(e) { return null == e ? void 0 === e ? \"[object Undefined]\" : \"[object Null]\" : Object.prototype.toString.call(e) } var x = function (e) { return \"Invalid value for key \".concat(e) }, L = function (e) { return \"Pattern length exceeds max of \".concat(e, \".\") }, S = Object.prototype.hasOwnProperty, w = function () { function e(n) { var r = this; t(this, e), this._keys = [], this._keyMap = {}; var i = 0; n.forEach((function (e) { var t = _(e); i += t.weight, r._keys.push(t), r._keyMap[t.id] = t, i += t.weight })), this._keys.forEach((function (e) { e.weight /= i })) } return r(e, [{ key: \"get\", value: function (e) { return this._keyMap[e] } }, { key: \"keys\", value: function () { return this._keys } }, { key: \"toJSON\", value: function () { return JSON.stringify(this._keys) } }]), e }(); function _(e) { var t = null, n = null, r = null, i = 1; if (g(e) || v(e)) r = e, t = O(e), n = j(e); else { if (!S.call(e, \"name\")) throw new Error(function (e) { return \"Missing \".concat(e, \" property in key\") }(\"name\")); var o = e.name; if (r = o, S.call(e, \"weight\") && (i = e.weight) <= 0) throw new Error(function (e) { return \"Property 'weight' in key '\".concat(e, \"' must be a positive integer\") }(o)); t = O(o), n = j(o) } return { path: t, id: n, weight: i, src: r } } function O(e) { return v(e) ? e : e.split(\".\") } function j(e) { return v(e) ? e.join(\".\") : e } var A = c({}, { isCaseSensitive: !1, includeScore: !1, keys: [], shouldSort: !0, sortFn: function (e, t) { return e.score === t.score ? e.idx < t.idx ? -1 : 1 : e.score < t.score ? -1 : 1 } }, {}, { includeMatches: !1, findAllMatches: !1, minMatchCharLength: 1 }, {}, { location: 0, threshold: .6, distance: 100 }, {}, { useExtendedSearch: !1, getFn: function (e, t) { var n = [], r = !1; return function e(t, i, o) { if (k(t)) if (i[o]) { var c = t[i[o]]; if (!k(c)) return; if (o === i.length - 1 && (g(c) || y(c) || p(c))) n.push(function (e) { return null == e ? \"\" : function (e) { if (\"string\" == typeof e) return e; var t = e + \"\"; return \"0\" == t && 1 / e == -1 / 0 ? \"-0\" : t }(e) }(c)); else if (v(c)) { r = !0; for (var a = 0, s = c.length; a < s; a += 1)e(c[a], i, o + 1) } else i.length && e(c, i, o + 1) } else n.push(t) }(e, g(t) ? t.split(\".\") : t, 0), r ? n : n[0] }, ignoreLocation: !1, ignoreFieldNorm: !1 }), I = /[^ ]+/g; function C() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 3, t = new Map, n = Math.pow(10, e); return { get: function (e) { var r = e.match(I).length; if (t.has(r)) return t.get(r); var i = 1 / Math.sqrt(r), o = parseFloat(Math.round(i * n) / n); return t.set(r, o), o }, clear: function () { t.clear() } } } var E = function () { function e() { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r; t(this, e), this.norm = C(3), this.getFn = i, this.isCreated = !1, this.setIndexRecords() } return r(e, [{ key: \"setSources\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.docs = e } }, { key: \"setIndexRecords\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.records = e } }, { key: \"setKeys\", value: function () { var e = this, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.keys = t, this._keysMap = {}, t.forEach((function (t, n) { e._keysMap[t.id] = n })) } }, { key: \"create\", value: function () { var e = this; !this.isCreated && this.docs.length && (this.isCreated = !0, g(this.docs[0]) ? this.docs.forEach((function (t, n) { e._addString(t, n) })) : this.docs.forEach((function (t, n) { e._addObject(t, n) })), this.norm.clear()) } }, { key: \"add\", value: function (e) { var t = this.size(); g(e) ? this._addString(e, t) : this._addObject(e, t) } }, { key: \"removeAt\", value: function (e) { this.records.splice(e, 1); for (var t = e, n = this.size(); t < n; t += 1)this.records[t].i -= 1 } }, { key: \"getValueForItemAtKeyId\", value: function (e, t) { return e[this._keysMap[t]] } }, { key: \"size\", value: function () { return this.records.length } }, { key: \"_addString\", value: function (e, t) { if (k(e) && !M(e)) { var n = { v: e, i: t, n: this.norm.get(e) }; this.records.push(n) } } }, { key: \"_addObject\", value: function (e, t) { var n = this, r = { i: t, $: {} }; this.keys.forEach((function (t, i) { var o = n.getFn(e, t.path); if (k(o)) if (v(o)) !function () { for (var e = [], t = [{ nestedArrIndex: -1, value: o }]; t.length;) { var c = t.pop(), a = c.nestedArrIndex, s = c.value; if (k(s)) if (g(s) && !M(s)) { var u = { v: s, i: a, n: n.norm.get(s) }; e.push(u) } else v(s) && s.forEach((function (e, n) { t.push({ nestedArrIndex: n, value: e }) })) } r.$[i] = e }(); else if (!M(o)) { var c = { v: o, n: n.norm.get(o) }; r.$[i] = c } })), this.records.push(r) } }, { key: \"toJSON\", value: function () { return { keys: this.keys, records: this.records } } }]), e }(); function $(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r, o = new E({ getFn: i }); return o.setKeys(e.map(_)), o.setSources(t), o.create(), o } function R(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.errors, r = void 0 === n ? 0 : n, i = t.currentLocation, o = void 0 === i ? 0 : i, c = t.expectedLocation, a = void 0 === c ? 0 : c, s = t.distance, u = void 0 === s ? A.distance : s, h = t.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r / e.length; if (f) return l; var d = Math.abs(a - o); return u ? l + d / u : d ? 1 : l } function F() { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : A.minMatchCharLength, n = [], r = -1, i = -1, o = 0, c = e.length; o < c; o += 1) { var a = e[o]; a && -1 === r ? r = o : a || -1 === r || ((i = o - 1) - r + 1 >= t && n.push([r, i]), r = -1) } return e[o - 1] && o - r >= t && n.push([r, o - 1]), n } function P(e) { for (var t = {}, n = 0, r = e.length; n < r; n += 1) { var i = e.charAt(n); t[i] = (t[i] || 0) | 1 << r - n - 1 } return t } var N = function () { function e(n) { var r = this, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, o = i.location, c = void 0 === o ? A.location : o, a = i.threshold, s = void 0 === a ? A.threshold : a, u = i.distance, h = void 0 === u ? A.distance : u, f = i.includeMatches, l = void 0 === f ? A.includeMatches : f, d = i.findAllMatches, v = void 0 === d ? A.findAllMatches : d, g = i.minMatchCharLength, y = void 0 === g ? A.minMatchCharLength : g, p = i.isCaseSensitive, m = void 0 === p ? A.isCaseSensitive : p, k = i.ignoreLocation, M = void 0 === k ? A.ignoreLocation : k; if (t(this, e), this.options = { location: c, threshold: s, distance: h, includeMatches: l, findAllMatches: v, minMatchCharLength: y, isCaseSensitive: m, ignoreLocation: M }, this.pattern = m ? n : n.toLowerCase(), this.chunks = [], this.pattern.length) { var b = function (e, t) { r.chunks.push({ pattern: e, alphabet: P(e), startIndex: t }) }, x = this.pattern.length; if (x > 32) { for (var L = 0, S = x % 32, w = x - S; L < w;)b(this.pattern.substr(L, 32), L), L += 32; if (S) { var _ = x - 32; b(this.pattern.substr(_), _) } } else b(this.pattern, 0) } } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.options, n = t.isCaseSensitive, r = t.includeMatches; if (n || (e = e.toLowerCase()), this.pattern === e) { var i = { isMatch: !0, score: 0 }; return r && (i.indices = [[0, e.length - 1]]), i } var o = this.options, c = o.location, a = o.distance, s = o.threshold, u = o.findAllMatches, h = o.minMatchCharLength, f = o.ignoreLocation, d = [], v = 0, g = !1; this.chunks.forEach((function (t) { var n = t.pattern, i = t.alphabet, o = t.startIndex, y = function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, i = r.location, o = void 0 === i ? A.location : i, c = r.distance, a = void 0 === c ? A.distance : c, s = r.threshold, u = void 0 === s ? A.threshold : s, h = r.findAllMatches, f = void 0 === h ? A.findAllMatches : h, l = r.minMatchCharLength, d = void 0 === l ? A.minMatchCharLength : l, v = r.includeMatches, g = void 0 === v ? A.includeMatches : v, y = r.ignoreLocation, p = void 0 === y ? A.ignoreLocation : y; if (t.length > 32) throw new Error(L(32)); for (var m, k = t.length, M = e.length, b = Math.max(0, Math.min(o, M)), x = u, S = b, w = d > 1 || g, _ = w ? Array(M) : []; (m = e.indexOf(t, S)) > -1;) { var O = R(t, { currentLocation: m, expectedLocation: b, distance: a, ignoreLocation: p }); if (x = Math.min(O, x), S = m + k, w) for (var j = 0; j < k;)_[m + j] = 1, j += 1 } S = -1; for (var I = [], C = 1, E = k + M, $ = 1 << k - 1, P = 0; P < k; P += 1) { for (var N = 0, D = E; N < D;) { var z = R(t, { errors: P, currentLocation: b + D, expectedLocation: b, distance: a, ignoreLocation: p }); z <= x ? N = D : E = D, D = Math.floor((E - N) / 2 + N) } E = D; var K = Math.max(1, b - D + 1), q = f ? M : Math.min(b + D, M) + k, W = Array(q + 2); W[q + 1] = (1 << P) - 1; for (var J = q; J >= K; J -= 1) { var T = J - 1, U = n[e.charAt(T)]; if (w && (_[T] = +!!U), W[J] = (W[J + 1] << 1 | 1) & U, P && (W[J] |= (I[J + 1] | I[J]) << 1 | 1 | I[J + 1]), W[J] & $ && (C = R(t, { errors: P, currentLocation: T, expectedLocation: b, distance: a, ignoreLocation: p })) <= x) { if (x = C, (S = T) <= b) break; K = Math.max(1, 2 * b - S) } } var V = R(t, { errors: P + 1, currentLocation: b, expectedLocation: b, distance: a, ignoreLocation: p }); if (V > x) break; I = W } var B = { isMatch: S >= 0, score: Math.max(.001, C) }; if (w) { var G = F(_, d); G.length ? g && (B.indices = G) : B.isMatch = !1 } return B }(e, n, i, { location: c + o, distance: a, threshold: s, findAllMatches: u, minMatchCharLength: h, includeMatches: r, ignoreLocation: f }), p = y.isMatch, m = y.score, k = y.indices; p && (g = !0), v += m, p && k && (d = [].concat(l(d), l(k))) })); var y = { isMatch: g, score: g ? v / this.chunks.length : 1 }; return g && r && (y.indices = d), y } }]), e }(), D = function () { function e(n) { t(this, e), this.pattern = n } return r(e, [{ key: \"search\", value: function () { } }], [{ key: \"isMultiMatch\", value: function (e) { return z(e, this.multiRegex) } }, { key: \"isSingleMatch\", value: function (e) { return z(e, this.singleRegex) } }]), e }(); function z(e, t) { var n = e.match(t); return n ? n[1] : null } var K = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e === this.pattern; return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"exact\" } }, { key: \"multiRegex\", get: function () { return /^=\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^=(.*)$/ } }]), i }(D), q = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = -1 === e.indexOf(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)$/ } }]), i }(D), W = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^\\^(.*)$/ } }]), i }(D), J = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!\\^(.*)$/ } }]), i }(D), T = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [e.length - this.pattern.length, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)\\$$/ } }]), i }(D), U = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)\\$$/ } }]), i }(D), V = function (e) { a(i, e); var n = f(i); function i(e) { var r, o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = o.location, a = void 0 === c ? A.location : c, s = o.threshold, u = void 0 === s ? A.threshold : s, h = o.distance, f = void 0 === h ? A.distance : h, l = o.includeMatches, d = void 0 === l ? A.includeMatches : l, v = o.findAllMatches, g = void 0 === v ? A.findAllMatches : v, y = o.minMatchCharLength, p = void 0 === y ? A.minMatchCharLength : y, m = o.isCaseSensitive, k = void 0 === m ? A.isCaseSensitive : m, M = o.ignoreLocation, b = void 0 === M ? A.ignoreLocation : M; return t(this, i), (r = n.call(this, e))._bitapSearch = new N(e, { location: a, threshold: u, distance: f, includeMatches: d, findAllMatches: g, minMatchCharLength: p, isCaseSensitive: k, ignoreLocation: b }), r } return r(i, [{ key: \"search\", value: function (e) { return this._bitapSearch.searchIn(e) } }], [{ key: \"type\", get: function () { return \"fuzzy\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)$/ } }]), i }(D), B = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { for (var t, n = 0, r = [], i = this.pattern.length; (t = e.indexOf(this.pattern, n)) > -1;)n = t + i, r.push([t, n - 1]); var o = !!r.length; return { isMatch: o, score: o ? 0 : 1, indices: r } } }], [{ key: \"type\", get: function () { return \"include\" } }, { key: \"multiRegex\", get: function () { return /^'\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^'(.*)$/ } }]), i }(D), G = [K, B, W, J, U, T, q, V], H = G.length, Q = / +(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/; function X(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return e.split(\"|\").map((function (e) { for (var n = e.trim().split(Q).filter((function (e) { return e && !!e.trim() })), r = [], i = 0, o = n.length; i < o; i += 1) { for (var c = n[i], a = !1, s = -1; !a && ++s < H;) { var u = G[s], h = u.isMultiMatch(c); h && (r.push(new u(h, t)), a = !0) } if (!a) for (s = -1; ++s < H;) { var f = G[s], l = f.isSingleMatch(c); if (l) { r.push(new f(l, t)); break } } } return r })) } var Y = new Set([V.type, B.type]), Z = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = r.isCaseSensitive, o = void 0 === i ? A.isCaseSensitive : i, c = r.includeMatches, a = void 0 === c ? A.includeMatches : c, s = r.minMatchCharLength, u = void 0 === s ? A.minMatchCharLength : s, h = r.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r.findAllMatches, d = void 0 === l ? A.findAllMatches : l, v = r.location, g = void 0 === v ? A.location : v, y = r.threshold, p = void 0 === y ? A.threshold : y, m = r.distance, k = void 0 === m ? A.distance : m; t(this, e), this.query = null, this.options = { isCaseSensitive: o, includeMatches: a, minMatchCharLength: u, findAllMatches: d, ignoreLocation: f, location: g, threshold: p, distance: k }, this.pattern = o ? n : n.toLowerCase(), this.query = X(this.pattern, this.options) } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.query; if (!t) return { isMatch: !1, score: 1 }; var n = this.options, r = n.includeMatches; e = n.isCaseSensitive ? e : e.toLowerCase(); for (var i = 0, o = [], c = 0, a = 0, s = t.length; a < s; a += 1) { var u = t[a]; o.length = 0, i = 0; for (var h = 0, f = u.length; h < f; h += 1) { var d = u[h], v = d.search(e), g = v.isMatch, y = v.indices, p = v.score; if (!g) { c = 0, i = 0, o.length = 0; break } if (i += 1, c += p, r) { var m = d.constructor.type; Y.has(m) ? o = [].concat(l(o), l(y)) : o.push(y) } } if (i) { var k = { isMatch: !0, score: c / i }; return r && (k.indices = o), k } } return { isMatch: !1, score: 1 } } }], [{ key: \"condition\", value: function (e, t) { return t.useExtendedSearch } }]), e }(), ee = []; function te(e, t) { for (var n = 0, r = ee.length; n < r; n += 1) { var i = ee[n]; if (i.condition(e, t)) return new i(e, t) } return new N(e, t) } var ne = \"$and\", re = \"$or\", ie = \"$path\", oe = \"$val\", ce = function (e) { return !(!e[ne] && !e[re]) }, ae = function (e) { return !!e[ie] }, se = function (e) { return !v(e) && m(e) && !ce(e) }, ue = function (e) { return i({}, ne, Object.keys(e).map((function (t) { return i({}, t, e[t]) }))) }; function he(e, t) { var n = t.ignoreFieldNorm, r = void 0 === n ? A.ignoreFieldNorm : n; e.forEach((function (e) { var t = 1; e.matches.forEach((function (e) { var n = e.key, i = e.norm, o = e.score, c = n ? n.weight : null; t *= Math.pow(0 === o && c ? Number.EPSILON : o, (c || 1) * (r ? 1 : i)) })), e.score = t })) } function fe(e, t) { var n = e.matches; t.matches = [], k(n) && n.forEach((function (e) { if (k(e.indices) && e.indices.length) { var n = { indices: e.indices, value: e.value }; e.key && (n.key = e.key.src), e.idx > -1 && (n.refIndex = e.idx), t.matches.push(n) } })) } function le(e, t) { t.score = e.score } function de(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.includeMatches, i = void 0 === r ? A.includeMatches : r, o = n.includeScore, c = void 0 === o ? A.includeScore : o, a = []; return i && a.push(fe), c && a.push(le), e.map((function (e) { var n = e.idx, r = { item: t[n], refIndex: n }; return a.length && a.forEach((function (t) { t(e, r) })), r })) } var ve = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = arguments.length > 2 ? arguments[2] : void 0; t(this, e), this.options = c({}, A, {}, r), this.options.useExtendedSearch, this._keyStore = new w(this.options.keys), this.setCollection(n, i) } return r(e, [{ key: \"setCollection\", value: function (e, t) { if (this._docs = e, t && !(t instanceof E)) throw new Error(\"Incorrect 'index' type\"); this._myIndex = t || $(this.options.keys, this._docs, { getFn: this.options.getFn }) } }, { key: \"add\", value: function (e) { k(e) && (this._docs.push(e), this._myIndex.add(e)) } }, { key: \"remove\", value: function () { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : function () { return !1 }, t = [], n = 0, r = this._docs.length; n < r; n += 1) { var i = this._docs[n]; e(i, n) && (this.removeAt(n), n -= 1, r -= 1, t.push(i)) } return t } }, { key: \"removeAt\", value: function (e) { this._docs.splice(e, 1), this._myIndex.removeAt(e) } }, { key: \"getIndex\", value: function () { return this._myIndex } }, { key: \"search\", value: function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.limit, r = void 0 === n ? -1 : n, i = this.options, o = i.includeMatches, c = i.includeScore, a = i.shouldSort, s = i.sortFn, u = i.ignoreFieldNorm, h = g(e) ? g(this._docs[0]) ? this._searchStringList(e) : this._searchObjectList(e) : this._searchLogical(e); return he(h, { ignoreFieldNorm: u }), a && h.sort(s), y(r) && r > -1 && (h = h.slice(0, r)), de(h, this._docs, { includeMatches: o, includeScore: c }) } }, { key: \"_searchStringList\", value: function (e) { var t = te(e, this.options), n = this._myIndex.records, r = []; return n.forEach((function (e) { var n = e.v, i = e.i, o = e.n; if (k(n)) { var c = t.searchIn(n), a = c.isMatch, s = c.score, u = c.indices; a && r.push({ item: n, idx: i, matches: [{ score: s, value: n, norm: o, indices: u }] }) } })), r } }, { key: \"_searchLogical\", value: function (e) { var t = this, n = function (e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.auto, i = void 0 === r || r, o = function e(n) { var r = Object.keys(n), o = ae(n); if (!o && r.length > 1 && !ce(n)) return e(ue(n)); if (se(n)) { var c = o ? n[ie] : r[0], a = o ? n[oe] : n[c]; if (!g(a)) throw new Error(x(c)); var s = { keyId: j(c), pattern: a }; return i && (s.searcher = te(a, t)), s } var u = { children: [], operator: r[0] }; return r.forEach((function (t) { var r = n[t]; v(r) && r.forEach((function (t) { u.children.push(e(t)) })) })), u }; return ce(e) || (e = ue(e)), o(e) }(e, this.options), r = this._myIndex.records, i = {}, o = []; return r.forEach((function (e) { var r = e.$, c = e.i; if (k(r)) { var a = function e(n, r, i) { if (!n.children) { var o = n.keyId, c = n.searcher, a = t._findMatches({ key: t._keyStore.get(o), value: t._myIndex.getValueForItemAtKeyId(r, o), searcher: c }); return a && a.length ? [{ idx: i, item: r, matches: a }] : [] } switch (n.operator) { case ne: for (var s = [], u = 0, h = n.children.length; u < h; u += 1) { var f = e(n.children[u], r, i); if (!f.length) return []; s.push.apply(s, l(f)) } return s; case re: for (var d = [], v = 0, g = n.children.length; v < g; v += 1) { var y = e(n.children[v], r, i); if (y.length) { d.push.apply(d, l(y)); break } } return d } }(n, r, c); a.length && (i[c] || (i[c] = { idx: c, item: r, matches: [] }, o.push(i[c])), a.forEach((function (e) { var t, n = e.matches; (t = i[c].matches).push.apply(t, l(n)) }))) } })), o } }, { key: \"_searchObjectList\", value: function (e) { var t = this, n = te(e, this.options), r = this._myIndex, i = r.keys, o = r.records, c = []; return o.forEach((function (e) { var r = e.$, o = e.i; if (k(r)) { var a = []; i.forEach((function (e, i) { a.push.apply(a, l(t._findMatches({ key: e, value: r[i], searcher: n }))) })), a.length && c.push({ idx: o, item: r, matches: a }) } })), c } }, { key: \"_findMatches\", value: function (e) { var t = e.key, n = e.value, r = e.searcher; if (!k(n)) return []; var i = []; if (v(n)) n.forEach((function (e) { var n = e.v, o = e.i, c = e.n; if (k(n)) { var a = r.searchIn(n), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: n, idx: o, norm: c, indices: h }) } })); else { var o = n.v, c = n.n, a = r.searchIn(o), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: o, norm: c, indices: h }) } return i } }]), e }(); return ve.version = \"6.4.6\", ve.createIndex = $, ve.parseIndex = function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.getFn, r = void 0 === n ? A.getFn : n, i = e.keys, o = e.records, c = new E({ getFn: r }); return c.setKeys(i), c.setIndexRecords(o), c }, ve.config = A, function () { ee.push.apply(ee, arguments) }(Z), ve }, \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = e || self).Fuse = t();\n", "/*\n * Some notes on how this works...\n *\n * paletteData is passed into the constructor and is the initial list of items\n * these are TurboAdminMenuItem objects\n *\n * At any point, buildPaletteItems() can be called to turn the paletteData\n * into an array of \"li\" nodes.\n *\n * updatePaletteItems inserts the paletteItems into the \"ul\" list and sets the\n * selectedElement\n *\n * The selectedItem is always one of the paletteItems\n *\n * paletteSearch rebuilds the paletteItems from the paletteData using\n * buildPaletteItems, and then filters the list with FuseJS\n */\n\nimport Fuse from './fuse-6.4.6.js';\nimport TurboAdminMenuItem from './types/class-turbo-admin-menu-item';\nimport ContentApi from './apis/class-content-api.js';\nimport SearchMode from './types/class-search-mode.js';\nimport ContentItem from './types/class-content-item.js';\n\nexport default class TurboAdminPalette {\n\n\tconstructor(paletteData, options) {\n\n\t\tturboAdminLog('Initialising TurboAdmin');\n\n        this.options = options;\n\n        /** @type {HTMLDivElement} */\n        this.paletteElement      = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteInnerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette'));\n\t\t/** @type {HTMLInputElement} */\n        this.paletteInputElement = /** @type {HTMLInputElement} */ (document.getElementById('ta-command-palette-input'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteItemsContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-items-container'));\n\t\t/** @type {HTMLUListElement} */\n        this.paletteItemsElement = /** @type {HTMLUListElement} */ (document.getElementById('ta-command-palette-items'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteSubmenuContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-submenu-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTag = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-search-mode-tag'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTabNotice = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-tab-notice'));\n        /** @type {HTMLSpanElement} */\n        this.paletteSearchModeTabNoticeText = /** @type {HTMLSpanElement} */ (document.getElementById('ta-command-palette-tab-notice-text'));\n        /** @type {HTMLDivElement} */\n        this.paletteNoticeElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-notice'));\n\n\n        // Add a class if the menu needs refreshing with a visit to the Dashboard\n        if (globalThis.turboAdmin.menuNeedsRefresh) {\n            this.showPaletteNotice('Menu needs refreshing. Visit the Dashboard to refresh.');\n        }\n\n        // We need this when injecting items. We use it to help generate edit URLs. Not the best way but\n        // works for now.\n        /** @type {HTMLUListElement} */\n        this.profileLinkElem = document.getElementById('wp-admin-bar-edit-profile');\n        /** @type {null|String} */\n        this.profileLink = null;\n        if (this.profileLinkElem) {\n            this.profileLink = this.profileLinkElem.querySelector('a').href;\n        }\n\n\t\t// Get palette data\n\t\tthis.paletteData = paletteData;\n\n        // Backup of the palette data for use when we enter a different search mode\n\t\tthis.paletteDataBackup = null;\n\t\tthis.paletteItemsBackup = null;\n        this.paletteItemIndexBackup = null;\n\n        // Current search modes/keyword\n        this.searchMode = null;\n\n        // paletteItems is the list of 'li' elements used to build the palette\n        this.paletteItems = [];\n\n        // itemIndex is a \"cache\" of URLs used to check if we already\n        // have an item in the palette\n        this.itemIndex = {};\n\n        // Convert into LI elements\n        this.buildPaletteItems();\n\n\n\t\tthis.selectedItem = this.paletteItems[0];\n        this.openedSubMenu = null;\n        this.selectedSubItem = null;\n\n\t\t// Add them to the DOM\n\t\tthis.updatePaletteItems();\n\n        // Set state\n        this.navigating = false;\n        this.debounceTimeout;\n\n\t\tthis.paletteFuseOptions = [];\n\t\tthis.paletteFuse = null;\n\n\t\tif (typeof (Fuse) !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.paletteFuseOptions = {\n\t\t\tkeys: ['innerText'],\n\t\t}\n\n\t\tthis.paletteFuse = new Fuse(this.paletteItems, this.paletteFuseOptions);\n\n\t\tdocument.addEventListener('keydown', e => this.handleGlobalKey(e));\n\n\t\tthis.paletteElement.addEventListener('click', e => {\n\t\t\tthis.checkForPaletteItemClick(e);\n            this.checkForClickToClose(e);\n\t\t});\n\n        this.paletteItemsElement.addEventListener('mouseover', e => {\n            this.setHoveredItem(e.target);\n        });\n\t}\n\n    htmlDecode(input) {\n        var doc = new DOMParser().parseFromString(input, \"text/html\");\n        return doc.documentElement.textContent;\n    }\n\n    isMac() {\n        return navigator.platform.startsWith('Mac');\n    }\n\n    metaPressed(e) {\n        return this.isMac() ? e.metaKey : e.ctrlKey;\n    }\n\n    inSearchMode() {\n        return this.searchMode !== null;\n    }\n\n\t/**\n     * This converts this.paletteData into a list of paletteListItems in this.paletteItems\n     *\n     * It also builds the itemIndex\n     */\n    buildPaletteItems() {\n        this.paletteItems = [];\n        this.itemIndex = {};\n\n\t\tthis.paletteData.forEach(item => {\n\t\t\tconst li = document.createElement('li');\n\t\t\tconst a = document.createElement('a');\n\t\t\tli.appendChild(a);\n\t\t\ta.href = item.action;\n\t\t\tlet title = item.title;\n\t\t\tif (item.parentTitle) {\n\t\t\t\ttitle = item.parentTitle + \": \" + title;\n\t\t\t}\n\t\t\ta.innerHTML = title;\n            this.addPaletteListItem(li);\n\t\t});\n\t}\n\n    // This takes a 'li' element and adds it to the paletteItems.\n    // It also updates any caches and stuff.\n    addPaletteListItem(listItem) {\n        this.paletteItems.push(listItem);\n\n        const link = listItem.querySelector('a');\n        if (link) {\n            this.itemIndex[link.href] = 1;\n        }\n    }\n\n    contentItemExists(url) {\n        return Boolean(this.itemIndex[url]);\n    }\n\n    /**\n     * Clears and sets the content items\n     *\n     * @param {ContentItem[]} contentItems\n     */\n    setContentItems(contentItems) {\n        this.paletteItems = [];\n        this.itemIndex = [];\n        this.injectContentItems(contentItems, false);\n    }\n\n    /**\n     * Content items have:\n     *  title\n     *  subtype\n     *  url\n     *  (we should also make the sub-menu definable, but that's not done yet)\n     *\n     * @param {ContentItem[]} contentItems\n     */\n    injectContentItems(contentItems, andRunSearch = true) {\n        turboAdminLog('Injecting items');\n\n        if (contentItems.length > 0) {\n            contentItems.forEach(this.injectItem.bind(this));\n        }\n\n        if (andRunSearch) {\n            // Reset the search to work on the new items\n            this.paletteFuse = new Fuse(this.paletteItems, this.paletteFuseOptions);\n            this.paletteItems = this.paletteFuse.search(this.paletteInputElement.value).map(i => i.item);\n        }\n\n        this.updatePaletteItems();\n    }\n\n    /**\n     * Injects a single content item into the palette\n     *\n     * @param {ContentItem} item\n     */\n    injectItem(item) {\n        const itemTitle = item.title;\n        // const itemTitle = item.title.rendered;\n        const itemType = item.subtype;\n        const itemUrl = item.url;\n\n        // turboAdminLog('Adding item: ' + itemTitle);\n\n        // // Check if item already exists\n        if (this.contentItemExists(itemUrl)) {\n            turboAdminLog('Not adding duplicate');\n            return;\n        }\n\n        let title = itemTitle;\n\n        if (itemType) {\n            const itemTypeName = globalThis.contentApi.postTypes[itemType] ? globalThis.contentApi.postTypes[itemType].name : itemType;\n            title += ` (${itemTypeName})`;\n        }\n\n        const li = document.createElement('li');\n        const a = document.createElement('a');\n        let subMenu = null;\n\n        // Loop over submenu items OR add link.\n        if (item.submenuItems.length > 0) {\n\n            // Prepare the outer sub-menu elements\n            subMenu = document.createElement('div');\n            const subMenuTitle = document.createElement('div');\n            const subMenuItems = document.createElement('ul');\n            subMenu.classList.add('ta-submenu');\n            subMenuTitle.classList.add('ta-submenu-title');\n\n            subMenuTitle.textContent = this.htmlDecode(itemTitle);\n            subMenuItems.classList.add('ta-submenu-items');\n            subMenu.appendChild(subMenuTitle);\n\n            for (let i = 0; i < item.submenuItems.length; i++) {\n                const subMenuItem = item.submenuItems[i]\n                // TODO: Abstract this so sub-menus can be defined by plugins?\n                const subMenuListItem = document.createElement('li');\n                const subMenuLink = document.createElement('a');\n                subMenuLink.innerText = subMenuItem.title;\n                subMenuLink.href = subMenuItem.url;\n                for (let a = 0; a < subMenuItem.attributes.length; a++) {\n                    subMenuLink.setAttribute(\n                        subMenuItem.attributes[a].name,\n                        subMenuItem.attributes[a].value\n                    )\n                }\n                subMenuListItem.appendChild(subMenuLink);\n                subMenuItems.appendChild(subMenuListItem);\n            }\n\n            // Add the sub-menu items UL to the sub-menu element.\n            subMenu.appendChild(subMenuItems);\n\n            li.classList.add('ta-has-child-menu');\n        }\n\n        a.href = itemUrl;\n        a.innerHTML = title;\n\n        li.appendChild(a);\n        if (subMenu !== null) {\n            li.appendChild(subMenu);\n        }\n\n        this.addPaletteListItem(li);\n    }\n\n\t/**\n     * Handle global keypresses (at document level). Note that other key presses\n     * are handled by paletteActions()\n     *\n     * @param {KeyboardEvent} e\n     */\n    async handleGlobalKey(e) {\n\t\tif (this.shortcutKeysPressed(e)) {\n            e.preventDefault();\n            e.stopPropagation();\n\t\t\tif (this.paletteShown()) {\n\t\t\t\tthis.hidePalette();\n\t\t\t} else {\n\t\t\t\tthis.showPalette();\n\t\t\t}\n            return;\n\t\t}\n\n\t\tif (e.code === 'Escape' && this.paletteShown()) {\n\t\t\tif (this.isSubMenuOpen()){\n                this.closeSubMenu();\n            } else if (this.inSearchMode()) {\n                this.leaveSearchMode();\n            } else {\n                this.hidePalette();\n            }\n            return;\n\t\t}\n\n        if (this.paletteShown()) {\n            await this.paletteActions(e);\n\t\t}\n\t}\n\n\tshortcutKeysPressed(keyEvent) {\n        // The reduce here works through all the different possible key combos\n        // (more than one can be specified in options)\n\t\tconst keysPressed = this.options.shortcutKeys.reduce(\n\t\t\t(keyPressed, combo) => {\n\t\t\t\tif (keyPressed) {\n\t\t\t\t\treturn keyPressed;\n\t\t\t\t}\n                return ((!navigator.platform.startsWith('Mac')) || (combo.meta === keyEvent.metaKey))\n                    && (combo.alt === keyEvent.altKey)\n                    && (combo.shift === keyEvent.shiftKey)\n                    && (combo.ctrl === keyEvent.ctrlKey)\n                    && (\n                        keyEvent.code === 'Key' + combo.key.toUpperCase()\n                        || ( combo.key === ' ' && keyEvent.code.toUpperCase() === 'SPACE' )\n                    );\n            }, false);\n\t\treturn keysPressed;\n\t}\n\n    /*\n     * Adds the tab hint for a keyword once it has been typed.\n     */\n    maybeHighlightInputKeyword(newKey) {\n        // Do nothing if we are in a search-mode\n        if (this.inSearchMode()) {\n            return;\n        }\n\n        // This is fired on \"keyDown\", so the value isn't update with the new key yet.\n        // But don't do this for special keys, and catch backspace too.\n        let newInputValue = this.paletteInputElement.value;\n        if (newKey.length === 1) {\n            newInputValue += newKey;\n        }\n        if (newKey === 'Backspace') {\n            newInputValue = newInputValue.slice(0, -1);\n        }\n        // turboAdminLog(`Checking palette input value ${newInputValue} for keyword`);\n        if (this.isKeyword(newInputValue)) {\n            this.paletteSearchModeTabNoticeText.innerText = `Search for ${newInputValue}`;\n            this.paletteSearchModeTabNotice.classList.add('active');\n        } else {\n            this.unhighlightInputKeyword();\n        }\n    }\n\n    unhighlightInputKeyword() {\n        this.paletteSearchModeTabNotice.classList.remove('active');\n    }\n\n    async debouncedPaletteSearchAndUpdate() {\n        // If we're not in a search mode then search immediately\n        if (! this.inSearchMode()) {\n            this.debounceTimeout = null;\n            await this.paletteSearchAndUpdate();\n            return;\n        }\n\n        // If timer is null, reset it to 500ms and run your functions.\n        // Otherwise, wait until timer is cleared\n\n        // Cancel the existing timeout\n        clearTimeout(this.debounceTimeout)\n\n        this.debounceTimeout = setTimeout(async function () {\n            // Reset timeout\n            this.debounceTimeout = null;\n\n            // Run the search function\n            await this.paletteSearchAndUpdate();\n        }.bind(this), 750);\n    }\n\n    /**\n     * Check if a string is a search mode keyword\n     *\n     * @param {string} inputString\n     * @returns {boolean}\n     */\n    isKeyword(inputString) {\n        return Object.keys(globalThis.turboAdmin.searchModes).includes(inputString);\n    }\n\n    /**\n     * Show the palette notice with the specified text\n     *\n     * @param {string} text\n     */\n    showPaletteNotice(text) {\n        this.paletteNoticeElement.classList.add('active');\n        this.paletteNoticeElement.innerText = text;\n    }\n\n    /**\n     * Hide the palette notice\n     */\n    hidePaletteNotice() {\n        this.paletteNoticeElement.classList.remove('active');\n    }\n\n\t/**\n     * Handle (non-global) keypresses on the palette\n     *\n     * @param {KeyboardEvent} e\n     * @returns {Promise}\n     */\n    async paletteActions(e) {\n\t\tif (e.code === 'ArrowDown' && this.paletteShown()) {\n\t\t\te.preventDefault();\n\t\t\tthis.moveDown();\n\t\t\treturn;\n\t\t}\n\t\tif (e.code === 'ArrowUp' && this.paletteShown()) {\n\t\t\te.preventDefault();\n\t\t\tthis.moveUp();\n\t\t\treturn;\n\t\t}\n\t\tif (e.code === 'Enter' && this.paletteShown()) {\n            e.preventDefault();\n            this.doAction(this.metaPressed(e));\n            return;\n\t\t}\n\n        /*\n         * Only the actions above can be done in sub-menus.\n         */\n        if (this.isSubMenuOpen()) {\n            return;\n        }\n\n        /*\n         * Check for a keyword being typed and add a UI hint.\n         */\n        this.maybeHighlightInputKeyword(e.key);\n\n        /*\n         * Tabbing looks for a search mode keyword.\n         */\n        if (! this.inSearchMode() && (e.code === 'Tab' || e.key === ':')) {\n            turboAdminLog('Checking for search mode');\n            let inputValue = this.paletteInputElement.value;\n            if (this.isKeyword(inputValue)) {\n                turboAdminLog('Found search mode ' + inputValue)\n                e.preventDefault();\n                // TODO: Work on this.\n                await this.enterSearchMode(\n                    globalThis.turboAdmin.searchModes[inputValue]);\n                return;\n            }\n        }\n\n        /*\n         * Backspace may exit us from a search mode\n         */\n        if (this.inSearchMode() && e.code === 'Backspace' && this.paletteInputElement.value === '') {\n            e.preventDefault();\n            this.leaveSearchMode();\n            return;\n        }\n\n\t\tawait this.debouncedPaletteSearchAndUpdate();\n\t}\n\n    /**\n     * Puts the palette into a specific search mode - used when a keyword is selected\n     *\n     * @param {SearchMode} searchMode\n     */\n    async enterSearchMode(searchMode) {\n        turboAdminLog('Entering search mode for keyword ' + searchMode.keyword);\n        this.backupPaletteData();\n\n        this.paletteData = [];\n        this.paletteItems = [];\n        this.itemIndex = [];\n\n        // Remove the notice if it's there\n        this.hidePaletteNotice();\n\n        this.searchMode = searchMode;\n        this.paletteInputElement.value = '';\n        this.addSearchModeTag(searchMode.displayName);\n        this.unhighlightInputKeyword();\n        this.updatePaletteItems();\n        // This is similar to code in paletteSearch - maybe we could extract/abstract it?\n        if (searchMode.defaultItemsCallback !== null) {\n            this.paletteInnerElement.classList.add('loading');\n            const results = await searchMode.defaultItemsCallback();\n            this.setContentItems(results);\n            // this.injectContentItems(results);\n            this.paletteInnerElement.classList.remove('loading');\n        }\n    }\n\n    /**\n     * Leaves the current search mode\n     */\n    leaveSearchMode() {\n        const searchMode = this.searchMode;\n        // It's important what we set this to - see inSearchMode()\n        this.searchMode = null;\n        this.removeSearchModeTag();\n        this.restorePaletteData();\n        this.paletteInputElement.value = searchMode.keyword;\n        this.maybeHighlightInputKeyword('');\n        this.paletteSearchAndUpdate();\n    }\n\n    /**\n     * Backups up the palette data to a local variable so that it can be\n     * restored later.\n     */\n    backupPaletteData() {\n        this.paletteDataBackup = this.paletteData;\n        this.paletteItemsBackup = this.paletteItems;\n        this.paletteItemIndexBackup = this.itemIndex;\n    }\n\n    /**\n     * Restores the save palette data - does not rebuild anything\n     */\n    restorePaletteData() {\n        this.paletteData = this.paletteDataBackup;\n        this.paletteItems = this.paletteItemsBackup;\n        this.itemIndex = this.paletteItemIndexBackup;\n    }\n\n    /**\n     * Adds the search mode tag with the specified title.\n     *\n     * @param {string} title\n     */\n    addSearchModeTag(title) {\n        this.paletteSearchModeTag.classList.add('active');\n        this.paletteSearchModeTag.innerText = title;\n    }\n\n    /**\n     * Removes the search mode tag\n     */\n    removeSearchModeTag() {\n        this.paletteSearchModeTag.classList.remove('active');\n    }\n\n    isPaletteOpen() {\n        return this.paletteElement?.classList.contains('active');\n    }\n\n\tshowPalette() {\n        // Bail if already shown (this can be triggered by a focus event)\n        if (this.isPaletteOpen()) {\n            return;\n        }\n\n        this.paletteInputElement.value = '';\n\t\tthis.paletteInputElement?.focus();\n\t\tthis.paletteElement?.classList.add('active');\n        // This is needed in admin-bar mode otherwise it gets a weird already-scrolled thing when\n        // the palette opens.\n        setTimeout(() => this.paletteItemsElement.scrollTop = 0, 100);\n\t}\n\n\thidePalette() {\n        this.navigating = false;\n\t\tthis.paletteElement?.classList.remove('active');\n        this.paletteInputElement.value = '';\n        this.paletteInputElement.blur();\n        if (this.isSubMenuOpen()) {\n            this.closeSubMenu();\n        }\n        if (this.searchMode !== null) {\n            this.leaveSearchMode();\n        }\n\t}\n\n\tpaletteShown() {\n\t\treturn this.paletteElement?.classList.contains('active');\n\t}\n\n    checkForPaletteItemClick(e) {\n        if (e.target.tagName === 'A') {\n            e.preventDefault();\n            if (this.isSubMenuOpen()) {\n                this.selectedSubItem = e.target.closest('li');\n            } else {\n                this.selectedItem = e.target.closest('li');\n            }\n            this.setSelectedElement();\n\n            this.doAction(this.metaPressed(e));\n        }\n    }\n\n\tcheckForClickToClose(e) {\n\t\tif (e.target.id === this.paletteElement.id) {\n\t\t\tthis.hidePalette();\n\t\t}\n\t}\n\n\tsetSelectedElement() {\n        if (this.isSubMenuOpen()) {\n            this.paletteSubmenuContainerElement?.querySelectorAll('.ta-submenu li.selected')?.forEach(e => e.classList.remove('selected'));\n            this.selectedSubItem.classList.add('selected');\n        } else {\n            this.paletteItemsElement?.querySelectorAll('li.selected')?.forEach(e => e.classList.remove('selected'));\n            if (this.selectedItem) {\n                this.selectedItem.classList.add('selected');\n                this.scrollList();\n            }\n        }\n\t}\n\n\tscrollList() {\n\t\t// Scrolling up\n\t\tif (this.selectedItem.offsetTop < this.paletteItemsElement.scrollTop) {\n\t\t\tthis.paletteItemsElement.scrollTop = this.selectedItem.offsetTop;\n\t\t}\n\t\t// Scrolling down\n\t\tif (this.selectedItem.offsetTop + this.selectedItem.offsetHeight > this.paletteItemsElement.offsetHeight + this.paletteItemsElement.scrollTop) {\n\t\t\tthis.paletteItemsElement.scrollTop = this.selectedItem.offsetTop + this.selectedItem.offsetHeight - this.paletteItemsElement.offsetHeight;\n\t\t}\n\t}\n\n    setHoveredItem(element) {\n        // Only do this for li's\n        if ('LI' === element.tagName) {\n            this.navigating = true;\n            if (this.isSubMenuOpen()) {\n                this.selectedSubItem = element;\n            } else {\n                this.selectedItem = element;\n            }\n            this.setSelectedElement();\n        }\n    }\n\n\tmoveDown() {\n        if (this.isSubMenuOpen()) {\n            const nextItem = this.selectedSubItem.nextElementSibling;\n            this.navigating = true;\n            if (nextItem) {\n                this.selectedSubItem = nextItem;\n                this.setSelectedElement();\n            }\n        } else {\n            const nextItem = this.selectedItem.nextElementSibling;\n            this.navigating = true;\n            if (nextItem) {\n                this.selectedItem = nextItem;\n                this.setSelectedElement();\n            }\n        }\n\t}\n\n\tmoveUp() {\n        if (this.isSubMenuOpen()) {\n            const prevItem = this.selectedSubItem.previousElementSibling;\n            this.navigating = true;\n            if (prevItem) {\n                this.selectedSubItem = prevItem;\n                this.setSelectedElement();\n            }\n        } else {\n            const prevItem = this.selectedItem.previousElementSibling;\n            this.navigating = true;\n            if (prevItem) {\n                this.selectedItem = prevItem;\n                this.setSelectedElement();\n            }\n        }\n    }\n\n    isSubMenuOpen() {\n        return null !== this.openedSubMenu;\n    }\n\n    openSubMenu(subMenuElement) {\n        this.paletteSubmenuContainerElement.replaceChildren(subMenuElement);\n        // Set height in case main menu is smaller than sub menu\n        const subMenuHeight = this.paletteSubmenuContainerElement.offsetHeight;\n        this.paletteItemsContainerElement.style.minHeight = subMenuHeight + \"px\";\n        this.paletteSubmenuContainerElement.classList.add('active');\n\n        this.selectedSubItem = subMenuElement.querySelector('li');\n        this.openedSubMenu = subMenuElement;\n        this.setSelectedElement();\n\n        this.paletteInputElement.disabled = true;\n        // Blur the input so that keys can continue to be captured\n        this.paletteInputElement.blur();\n    }\n\n    closeSubMenu(subMenuElement = null) {\n        if (null === subMenuElement) {\n            subMenuElement = document.querySelector('.ta-submenu.active');\n        }\n        this.paletteSubmenuContainerElement.classList.remove('active');\n        this.selectedSubItem.classList.remove('active');\n        this.paletteItemsContainerElement.style.minHeight = 'auto';\n        this.selectedSubItem = null;\n        this.openedSubMenu = null;\n        this.paletteInputElement.disabled = false;\n        this.paletteInputElement.focus();\n    }\n\n\tdoAction(metaPressed = false) {\n        if (this.isSubMenuOpen()) {\n            this.actOnItem(this.selectedSubItem, metaPressed);\n            return;\n        }\n        if (this.selectedItem.classList.contains('ta-has-child-menu')) {\n            const subMenu = this.selectedItem.querySelector('.ta-submenu');\n            this.openSubMenu(subMenu);\n            return;\n        }\n\n        this.actOnItem(this.selectedItem, metaPressed);\n    }\n\n    actOnItem(item, metaPressed) {\n        this.hidePalette();\n        const link = item.querySelector('a');\n        const url = link.href;\n\n        // link.href will be interpolated by the browser, so if it's empty it will be the current page\n        // use getAttribute instead to work out if its empty\n        if (link.getAttribute('href') === '') {\n            return;\n        }\n\n        if ('clipboard' === link.dataset.action) {\n            navigator.clipboard.writeText(url);\n            return;\n        }\n\n        if (metaPressed) {\n            window.open(url, '_blank');\n        } else {\n            window.location = url;\n        }\n    }\n\n\tselectedItemDisplayed() {\n\t\treturn Array.from(this.paletteItemsElement.childNodes).includes(this.selectedItem);\n\t}\n\n\tasync paletteSearchAndUpdate() {\n\t\tawait this.paletteSearch();\n\t\tthis.updatePaletteItems();\n\t}\n\n\tasync paletteSearch() {\n        // Get the value...\n        // const response = await globalThis.contentApi.get('posts', { search: this.paletteInputElement.value, per_page: 100, status: ['publish', 'future', 'draft', 'pending', 'private'] });\n\n        if (! this.searchMode) {\n            this.buildPaletteItems();\n\n            if (this.paletteInputElement.value !== '') {\n                // Reset the search to work on the new items\n                this.paletteFuse = new Fuse(this.paletteItems, this.paletteFuseOptions);\n                this.paletteItems = this.paletteFuse.search(this.paletteInputElement.value).map(i => i.item);\n            }\n            return;\n        }\n\n        if (this.paletteInputElement.value.length === 0) {\n            this.paletteInnerElement.classList.add('loading');\n            let results = [];\n            if (this.searchMode.defaultItemsCallback !== null) {\n                results = await this.searchMode.defaultItemsCallback();\n            }\n            this.setContentItems(results);\n            // this.injectContentItems(results);\n            this.paletteInnerElement.classList.remove('loading');\n        } else {\n            // This is copied to enterSearchMode. Should probably be extracted.\n            this.paletteInnerElement.classList.add('loading');\n            const results = await this.searchMode.searchCallback(this.paletteInputElement.value);\n            this.setContentItems(results);\n            // this.injectContentItems(results);\n            this.paletteInnerElement.classList.remove('loading');\n        }\n\n        /**\n         * OLD CODE BELOW\n         */\n        // Content search - don't search everything!\n        // if (globalThis.contentApi.active && this.postTypes !== [] && this.paletteInputElement.value.length > 2) {\n        //     this.paletteInnerElement.classList.add('loading');\n\n        //     globalThis.contentApi.getPosts(this.paletteInputElement.value)\n        //         .then(\n        //             results => {\n        //                     this.injectContentItems(results);\n        //                     this.paletteInnerElement.classList.remove('loading');\n        //             }\n        //         )\n        // }\n\t}\n\n\tupdatePaletteItems() {\n\t\tconst newItems = document.createElement('ul');\n\t\tnewItems.id = 'ta-command-palette-items';\n\n\t\tthis.paletteItems.forEach(i => {\n\t\t\tnewItems.appendChild(i);\n\t\t})\n\n\t\tthis.paletteItemsElement.replaceChildren(...newItems.children);\n\n\t\tif (!this.navigating || !this.selectedItemDisplayed()) {\n\t\t\tthis.selectedItem = this.paletteItems[0];\n\t\t}\n\n\t\tthis.setSelectedElement();\n\t}\n\n}\n", "/**\n * Menu items are the items ready to appear in the palette.\n *\n * These are standard items, not content items. Though this should probably be standardised.\n */\nexport default class TurboAdminMenuItem {\n\n    /**\n     * The title of the item\n     *\n     * @type {string}\n     */\n    title = '';\n\n    /**\n     * The action of the item is the URL to visit when the item is clicked\n     *\n     * @type {string}\n     */\n    action = '';\n\n    /**\n     * The parent title is the title of the parent item under which the current item\n     * was found in the WordPress menu.\n     *\n     * e.g. in Posts -> Add Post, \"Posts\" is the parent item.\n     *\n     * @type {string}\n     */\n    parentTitle = '';\n\n    /**\n     * True if the item is not to be cached. Used for things like post-specific links like \"Edit post\"\n     *\n     * @type {boolean}\n     */\n    noCache = false;\n\n\tconstructor(title, action, parentTitle, noCache = false) {\n\t\tthis.title = title;\n\t\tthis.action = action;\n\t\tthis.parentTitle = parentTitle;\n        this.noCache = noCache;\n\t}\n\n    sameAs(item) {\n        return item.title === this.title &&\n            item.action === this.action &&\n            item.parentTitle === this.parentTitle;\n    }\n}\n", "/**\n * This class is an abstraction of the browser extension storage API\n * (see https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)\n * but that falls back to using regular localStorage if we're not in a\n * browser extension.\n *\n * This exists so that the same API can be used from both the browser\n * extension AND the plugin version of Turbo Admin.\n *\n * Note that for the extension, data saved is \"global\" to the extension\n * and is NOT site specific.\n */\nexport default class Storage {\n\n    /**\n     * Constructor - detects where code is running and sets the local\n     * store appropriately.\n     */\n    constructor() {\n        /** @type {null|storageStorageArea|WindowLocalStorage} */\n        this.store = null;\n\n        if (this.inExtension()) {\n            this.store = chrome.storage.local;\n        } else {\n            this.store = window.localStorage;\n        }\n    }\n\n    /**\n     * Returns true if we are in the extension.\n     */\n    inExtension() {\n        return window.turboAdminIsExtension();\n    }\n\n    /**\n     * Set/save extension data. Must be passed an object with key/value\n     * pairs.\n     *\n     * @param {Object} dataObject\n     */\n    async set(dataObject) {\n        if (this.inExtension()) {\n            await this.store.set(dataObject);\n        } else {\n            const keys = Object.keys(dataObject);\n            keys.forEach(key => this.store.setItem(key, JSON.stringify(dataObject[key])));\n        }\n    }\n\n    /**\n     * Get data from the extension's storage.\n     *\n     * Note that fetched data will be a object with the key as a\n     * property.\n     *\n     * @param {String} key\n     * @returns {Promise<Object>}\n     */\n    async get(key) {\n        if (this.inExtension()) {\n            return await this.store.get(key);\n        } else {\n            let returnObj = {};\n            let item = this.store.getItem(key);\n            if (! item) {\n                return returnObj;\n            }\n            let itemObject = null;\n            try {\n                itemObject = JSON.parse(this.store.getItem(key));\n            } catch (e) {\n                itemObject = null;\n            }\n            returnObj[key] = itemObject;\n            return returnObj;\n        }\n    }\n}\n", "import Storage from '../class-storage.js';\n\nexport default class ContentApi {\n\n    constructor() {\n        // this.discoverApiRoot().then(e => null);\n        // turboAdminLog('Discovered API base: ', this.apiBase);\n        this.active = false;\n        this.store = new Storage();\n        this.postTypes = [];\n\n        // This is used to \"cache\" duplicate requests.\n        // It's an object because it will have search strings as keys\n        this.cache = {};\n    }\n\n    async discoverApiRoot() {\n        turboAdminLog('Discovering API root');\n        let wpApiSettings = null;\n        this.storageKey = 'wpApiSettings.' + globalThis.taWp.home;\n\n        // Could be in the wp-api-request-js-extra (on wp-admin side)\n        const wpApiSettingsScript = document.getElementById('wp-api-request-js-extra');\n        if (wpApiSettingsScript) {\n            const wpApiSettingsString = wpApiSettingsScript.innerHTML.match(/var\\s+wpApiSettings\\s+=\\s+(.+);/)[1];\n            const wpApiSettings = JSON.parse(wpApiSettingsString);\n            const objectToSave = {};\n            objectToSave[this.storageKey] = wpApiSettings;\n            await this.store.set(objectToSave);\n            this.apiRoot = wpApiSettings.root;\n            this.apiBase = this.apiRoot + wpApiSettings.versionString;\n            this.apiNonce = wpApiSettings.nonce;\n            // Clear the nonce if one is set and we're not logged in\n            this.maybeExpireNonce(wpApiSettings);\n            this.active = true;\n            return;\n        }\n\n        // Getting from extension storage returns a object with the key\n        // as the key. Which is weird.\n        wpApiSettings = await this.store.get(this.storageKey);\n        if (wpApiSettings\n            && Object.keys(wpApiSettings).length !== 0\n            && wpApiSettings[this.storageKey]\n            && 'object' === typeof(wpApiSettings[this.storageKey])) {\n            // Get the key'ed item out of the object\n            wpApiSettings = wpApiSettings[this.storageKey];\n            this.apiRoot = wpApiSettings.root;\n            this.apiBase = this.apiRoot + wpApiSettings.versionString;\n            this.apiNonce = wpApiSettings.nonce;\n            // Clear the nonce if one is set and we're not logged in\n            this.maybeExpireNonce(wpApiSettings);\n            this.active = true;\n            return;\n        }\n\n        // Could be in <link rel=\"https://api.w.org/\" href=\"https://something/wp-json/\">\n        if (globalThis.taWp.apiLinkUrl) {\n            this.apiRoot = globalThis.taWp.apiLinkUrl;\n            // Just guess this\n            this.apiBase = this.apiRoot + 'wp/v2/';\n            this.active = true;\n            return;\n        }\n        // This should be very rare. I should only really see it in development.\n        turboAdminLog('API Route Discovery failed');\n        // Making best guess\n        this.apiBase = globalThis.taWp.home + '/wp-json/wp/v2/';\n        // TODO: This can't display as the palette isn't created yet.\n        // globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('Can\\'t find the WP API. Try visiting the dashboard to refresh things.');\n    }\n\n    async discoverPostTypes() {\n        turboAdminLog('Discovering post types');\n        if (! this.active) {\n            turboAdminLog('Not active');\n            this.postTypes = [];\n            return;\n        }\n\n        const postTypes = await this.store.get('ta-post-types');\n\n        // Check local storage cache\n        if (postTypes && postTypes['ta-post-types'] && postTypes['ta-post-types']['expiry'] > Date.now()) {\n            turboAdminLog('Using cached post types: ', postTypes['ta-post-types']['data']);\n            this.postTypes = postTypes['ta-post-types']['data'];\n            return;\n        }\n\n        this.postTypes = await this.getPostTypes();\n        turboAdminLog('Discovered post types: ', this.postTypes);\n\n        // Cache for 10 minutes\n        const expiry = Date.now() + (10 * 60 * 1000);\n        this.store.set({\n            'ta-post-types': {\n                expiry: expiry,\n                data: this.postTypes\n            }\n        });\n    }\n\n    userLoggedIn() {\n        return document.body.classList.contains('logged-in') ||\n            document.body.classList.contains('wp-admin');\n    }\n\n    async maybeExpireNonce(wpApiSettings) {\n        if (wpApiSettings?.nonce && ! this.userLoggedIn()) {\n            // Clear apiSetting nonce\n            this.apiNonce = null;\n            wpApiSettings.nonce = null;\n            const objectToSave = {};\n            objectToSave[this.storageKey] = wpApiSettings;\n            await this.store.set(objectToSave);\n        }\n    }\n\n    makeParamString(data) {\n        const params = new URLSearchParams();\n\n        Object.keys(data).forEach(paramKey => {\n            // Handle arrays\n            if (Array.isArray(data[paramKey])) {\n                const arrayParamKey = paramKey + '[]';\n                data[paramKey].forEach( item => params.append(arrayParamKey, item));\n            } else {\n                params.append(paramKey, data[paramKey]);\n            }\n        });\n\n        return params.toString();\n    }\n\n    statuses() {\n        if (this.apiNonce) {\n            return [\"publish\", \"future\", \"draft\", \"pending\", \"private\"];\n        } else {\n            return [\"publish\"];\n        }\n    }\n\n    async getPostTypes() {\n        // Check the cache\n        if (undefined !== this.cache['postsTypes']) {\n            return this.cache['postTypes'];\n        }\n\n        // Fetch results\n        const response = await this.get('types');\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['postTypes'] = result;\n\n        return result;\n    }\n\n    async getPosts(searchString, postType = 'any') {\n        // Check the cache\n        const cacheKey =  `posts-${postType}-${searchString}`;\n        if (undefined !== this.cache[cacheKey]) {\n            return this.cache[cacheKey];\n        }\n\n        // Fetch results\n        const response = await this.get(\n            // \"posts\",\n            \"search\",\n            {\n                search: searchString,\n                per_page: 100,\n                // status: this.statuses(),\n                type: 'post',\n                subtype: postType\n            }\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache[cacheKey] = result;\n\n        return result;\n    }\n\n    /**\n     * We can't use the API to get a post of any post type. So we hack this a bit.\n     *\n     * @param {number} postId\n     * @returns {Promise<any>}\n     */\n    async doesPostExist(postId) {\n        // Check the cache\n        if (undefined !== this.cache['post-' + postId]) {\n            return this.cache['post-' + postId];\n        }\n\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        const response = await fetch(`${globalThis.taWp.siteUrl}/post.php?post=${postId}&action=edit`, init);\n\n        this.cache['post-' + postId] = response;\n\n        return response?.status === 200;\n    }\n\n    async getPlugins(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['plugins-' + searchString]) {\n            return this.cache['plugins-' + searchString];\n        }\n\n        let requestOptions = {};\n\n        if (searchString) {\n            requestOptions.search = searchString;\n        }\n\n        // Fetch results\n        const response = await this.get(\n            \"plugins\",\n            requestOptions\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['plugins-' + searchString] = result;\n\n        return result;\n    }\n\n    async getUsers(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['users-' + searchString]) {\n            return this.cache['users-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.get(\n            \"users\",\n            {\n                search: searchString,\n                per_page: 100,\n                context: 'edit' // view / embed / edit\n            }\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['users-' + searchString] = result;\n\n        return result;\n    }\n\n    async get(path, data = {}) {\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        // Add the nonce if there is one\n        if (this.apiNonce) {\n            data._wpnonce = this.apiNonce;\n        }\n\n        const params = this.makeParamString(data);\n\n        const response = await fetch(`${this.apiBase}${path}/?${params}`, init);\n\n        if (response.status < 200 || response.status >= 300) {\n            // TODO: Set a \"deferred\" notice to show when the palette is created?\n            if (globalThis.turboAdmin && globalThis.turboAdmin.turboAdminPalette) {\n                globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('WordPress API Error. Try visiting the dashboard to refresh things.');\n            } else {\n                // Always log this as people may look\n                turboAdminLog( 'TURBO ADMIN: WordPress API Error. Try visiting the WordPress Dashboard to refresh things.' );\n            }\n        }\n\n        return response;\n    }\n\n}\n", "export default class SubmenuItem {\n    /**\n     * The title of the item\n     *\n     * @type {string}\n     */\n    title;\n\n    /**\n     * The URL of the item\n     * @type {string}\n     */\n    url;\n\n    /**\n     * A list of attributes to go on the A tag (not the LI tag)\n     *\n     * @type {array}\n     */\n    attributes = [];\n\n    /**\n     * Create a submenu item\n     *\n     * @param {string} title The title of the item\n     * @param {string} url The URL of the item\n     */\n    constructor(title, url) {\n        this.title = title;\n        this.url = url;\n    }\n\n    /**\n     * Add an attribute\n     *\n     * @param {string} name The attribute name\n     * @param {string} value The attribute value\n     */\n    addAttribute(name, value) {\n        this.attributes.push({\n            name: name,\n            value: value\n        });\n    }\n}\n", "import SubmenuItem from \"./class-submenu-item\";\n\nexport default class ContentItem {\n    /**\n     * The title of the item\n     *\n     * @type {string}\n     */\n    title = '';\n\n    /**\n     * The subtype of the item. e.g. for posts, this will be the post type.\n     * Used to display extra information about the item.\n     *\n     * @type {string}\n     */\n    subtype = '';\n\n    /**\n     * The URL of the item. Leave empty if there is a sub-menu.\n     *\n     * @type {string}\n     */\n    url = '';\n\n    /**\n     * The sub-menu items, if any.\n     *\n     * This should be an empty array if the item itself has a URL\n     *\n     * @type {SubmenuItem[]}\n     */\n    submenuItems = [];\n}\n", "import ContentItem from \"./class-content-item\";\n\nexport default class SearchMode {\n    /**\n     * The keyword string used to initiate the search\n     *\n     * @type {string}\n     */\n    keyword = '';\n\n    /**\n     * The dispay name used for the search\n     *\n     * @type {string}\n     */\n    displayName = '';\n\n    /**\n     * jsDoc defintion for a `searchCallback`\n     *\n     * @callback SearchCallback\n     * @param {string} [searchString]\n     * @returns {Promise<ContentItem[]>}\n     */\n\n    /**\n     * Callback to get search items\n     *\n     * @type {SearchCallback}\n     */\n    searchCallback;\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @type {SearchCallback|null}\n     */\n    defaultItemsCallback = null;\n\n    /**\n     * Constructs a new search mode\n     *\n     * @param {string} keyword\n     * @param {string} displayName\n     * @param {SearchCallback} searchCallback\n     * @param {SearchCallback} defaultItemsCallback\n     */\n    constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {\n        this.keyword = keyword;\n        this.displayName = displayName;\n        this.searchCallback = searchCallback;\n        this.defaultItemsCallback = defaultItemsCallback;\n    }\n}\n", "/**\n * An item definition specifies how to detect a palette item from the Dashboard's Dom\n *\n * These are all processed on initialisation to generate menu items.\n *\n * Note that a single definition may generate multiple menu items if the selectors used\n * discover multiple items.\n */\nexport default class ItemDefinition {\n    /**\n     * This callback is displayed as part of the Requester class.\n    * @callback menuItemCallback\n    * @param {HTMLElement} element\n    * @returns {string}\n    */\n\n    /**\n     * The method of detecting items. Can be:\n     *  - 'dom' for checking if a DOM element exists (requires detectSelector or detectSelectorNone)\n     *  - 'url' if the current URL is being checked (requires detectPattern)\n     *\n     * @type {string}\n     */\n    detectType = 'dom';\n\n    /**\n     * [OPTIONAL] A CSS selector used to find items in the DOM\n     *\n     * @type {string}\n     */\n    detectSelector = '';\n\n    /**\n     * [OPTIONAL] A CSS selector used to check for an absence of items in the DOM\n     *\n     * @type {string}\n     */\n    detectSelectorNone = '';\n\n    /**\n     * [OPTIONAL] A string to find in the current URL to detect the item\n     *\n     * @type {string}\n     */\n    detectPattern = '';\n\n    /**\n     * A callback used to generate a menu item title from a detected element. Should be passed an\n     * HTML element and should return a string\n     *\n     * @type {menuItemCallback|null}\n     */\n     itemTitleFunction = null;\n\n    /**\n     * A callback used to generate a menu item link URL from a detected element. Should be passed an\n     * HTML element and should return a string\n     *\n     * @type {menuItemCallback|null}\n     */\n     itemUrlFunction = null;\n\n     /**\n      * True if the item is not to be cached. Used for things like post-specific links like \"Edit post\"\n      *\n      * @type {boolean}\n      */\n     noCache = false;\n}\n", "import SearchMode from \"./class-search-mode\";\nimport ItemDefinition from \"./class-item-definition\";\n\n/**\n * This is an abstract class that should be extended by plugins\n * @module TurboAdminPlugin\n */\nexport default class TurboAdminPlugin {\n    /** @type {string} */\n    name = '';\n\n    /** @type {SearchMode[]} */\n    searchModes = [];\n\n    /** @type {boolean} */\n    activated = false;\n\n    constructor(pluginName) {\n        this.name = pluginName;\n        this.registerPlugin();\n    }\n\n    /**\n     * Register the plugin with Turbo Admin\n     */\n    registerPlugin() {\n        turboAdminLog('Inside plugin - requested registration of ' + this.name);\n        globalThis.turboAdmin.registerPlugin(this);\n    }\n\n    /**\n     * Returns true if the plugin should activate\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        return false;\n    }\n\n    /**\n     * Activates the plugin\n     * @return {void}\n     */\n    activate() {\n        this.activated = true;\n        this.registerSearchModes();\n    }\n\n    /**\n     * Register the search keywords with Turbo Admin - each will be registered\n     * with the whole plugin object.\n     */\n    registerSearchModes() {\n        this.searchModes.forEach(globalThis.turboAdmin.registerSearchMode);\n    }\n\n    /**\n     * Get additional menu items to be added to the main menu\n     *\n     * @return {Promise<ItemDefinition[]>}\n     */\n    async getAdditionalItemDefinitions() {\n        return [];\n    }\n\n    /**\n     * Save plugin setting to persistent storage\n     */\n    saveSetting(key, value) {\n\n    }\n\n}\n", "/**\n * It's impossible to change the setting to off, because the\n * extension's content script runs in a sandbox and can't access\n * the wp object. But we can just toggle the class every time.\n */\nexport default class TurboAdminWpBlockEditorFullscreenKill {\n\n    constructor() {\n\n        // Don't run on the site editor screen\n        if (document.body.classList.contains( 'site-editor-php' )) {\n            return;\n        }\n\n        const attrObserver = new MutationObserver((mutations) => {\n            mutations.forEach(mu => {\n                // Check if we already killed fullscreen\n                // if (document.body.classList.contains('turbo-admin-killed-fullscreen')) {\n                //     return;\n                // }\n\n                if (mu.type !== \"attributes\" && mu.attributeName !== \"class\") {\n                    return;\n                }\n\n                if (mu.target.classList.contains('is-fullscreen-mode')) {\n                    this.killFullScreenEditor();\n                }\n            });\n        });\n\n        attrObserver.observe(document.body, { attributes: true });\n\n        // Also attempt a kill now in case it's already appeared.\n        this.killFullScreenEditor();\n    }\n\n    killFullScreenEditor() {\n        if (! document.body.classList.contains('is-fullscreen-mode')) {\n            return;\n        }\n\n        document.body.classList.remove('is-fullscreen-mode');\n        document.body.classList.add('turbo-admin-killed-fullscreen');\n\n        const newStyles = document.createElement('style');\n        newStyles.innerHTML = \"body.turbo-admin-killed-fullscreen .edit-post-fullscreen-mode-close { display: none; }\";\n        document.body.appendChild(newStyles);\n    }\n}\n", "/**\n *\n */\nexport default class TurboAdminWpBlockEditorWelcomeGuideKill {\n\n    constructor() {\n\n        const attrObserver = new MutationObserver((mutations) => {\n            mutations.forEach(mu => {\n                // Check if we already killed the modal\n                if (document.body.classList.contains('ta-killed-post-welcome-guide')) {\n                    return;\n                }\n\n                if (mu.type !== \"attributes\" && mu.attributeName !== \"class\") {\n                    return;\n                }\n\n                if (! mu.target.classList.contains('modal-open')) {\n                    return;\n                }\n\n                const welcomeGuide = document.querySelector('.edit-post-welcome-guide');\n                if (welcomeGuide) {\n                    this.killWelcomeGuide();\n                }\n            });\n        });\n\n        attrObserver.observe(document.body, { attributes: true });\n\n        // Also attempt a kill now in case it's already appeared.\n        this.killWelcomeGuide();\n    }\n\n    killWelcomeGuide() {\n        const welcomeGuide = document.querySelector('.edit-post-welcome-guide');\n        if (welcomeGuide) {\n            const closeButton = welcomeGuide.querySelector('.components-modal__header button');\n            if (closeButton) {\n                closeButton.click();\n                /*\n                 * Also add a class to body so we don't do it again - subsequent modals\n                 * will need to be shown as they will have been user-initiated.\n                 */\n                document.body.classList.add('ta-killed-post-welcome-guide');\n            }\n        }\n    }\n}\n", "export default class TurboAdminWpNotices {\n\n    // TODO: Handle empty IDS. Can we identify unique selectors?\n    // See spinup!\n    // Also need to only show move to panel if we can (i.e. if there's a way\n    // to identify it))\n    constructor(rememberedNoticeIds) {\n\n        // Bail if we aren't in the admin\n        if (! document.querySelector('body.wp-admin')) {\n            return;\n        }\n\n        /*\n        * These are the global notice selectors\n        */\n        this.noticeSelectors = [\n            '#wpbody-content > .notice',\n            '#wpbody-content > .wrap > .notice',\n            '#wpbody-content > .wrap > .updated',\n            '#gf_dashboard_message', // Gravity forms\n            '.jitm-banner', //\n            '.fs-notice', // I get this in Replyable\n            '#updraft-dashnotice', // Updraft backups\n            '.woocommerce-message', // WooCommerce\n            '#akismet_setup_prompt', // Akismet\n            '#wf-onboarding-plugin-header', // WordFence onboard\n            '.llar-notice-review' // Limit Login Attempts reloaded\n        ];\n\n        /*\n         * These selectors are allowed (unless explicitly denied)\n         */\n        this.allowedClasses = [\n            '.notice-success',\n            '.notice-error',\n            '.notice-failure',\n            '.updated',\n        ]\n\n        this.noticesPanelInner = null;\n\n        if (rememberedNoticeIds) {\n            this.rememberedNoticeIds = rememberedNoticeIds.length > 0 ? rememberedNoticeIds : [];\n        } else {\n            this.rememberedNoticeIds = [];\n        }\n\n        const toolbar = document.getElementById('wpadminbar');\n\n        if (!toolbar) {\n            return;\n        }\n\n        if (rememberedNoticeIds && rememberedNoticeIds.length > 0) {\n            rememberedNoticeIds.forEach(id => {\n                if ('string' === typeof(id) && id.length > 0) {\n                    this.noticeSelectors.push('#' + id);\n                }\n            });\n        }\n\nturboAdminLog('Notice Selectors', this.noticeSelectors);\n        const notices = document.querySelectorAll(this.noticeSelectors.join(','));\nturboAdminLog('Notices', notices);\n\n        // Add buttons to notices that can be moved\n        notices.forEach(notice => {\n            this.maybeAddIdToNotice(notice);\n            this.maybeAddMoveButtonToNotice.call(this, notice);\n        });\n\n        const noticesToHide = Array.from(notices).filter( this.noticeShouldBeHidden.bind(this) );\n\n        turboAdminLog('Notices to hide', noticesToHide)\n\n        /**\n         * Build the notices wrapper\n         */\n        /** @type {HTMLDivElement} */\n        const noticesLinkWrapper = document.createElement('div');\n        noticesLinkWrapper.id = 'ta-notices-link-wrap';\n        noticesLinkWrapper.classList.add('hide-if-no-js', 'screen-meta-toggle');\n        noticesLinkWrapper.style.margin='0 0 0 6px';\n        noticesLinkWrapper.style.float='left';\n        if (noticesToHide.length === 0) {\n            noticesLinkWrapper.style.display='none';\n        }\n\n        /**\n         * Add button\n         */\n        /** @type {HTMLButtonElement} */\n        const noticesButton = document.createElement('button');\n        noticesButton.type='button';\n        noticesButton.id='ta-notices-link';\n        noticesButton.classList.add('button', 'show-settings');\n        noticesButton.innerHTML='Notices <span id=\"ta-notice-count\">' + noticesToHide.length + '</span>';\n        noticesButton.setAttribute('aria-controls', 'ta-notices-wrap');\n\n        // This should replicate the functionality from wp-admin/js/common.js\n        // as closely as possible. But note that we can't access the common.js\n        // functions.\n        noticesButton.addEventListener('click', this.toggleNoticesPanel.bind(this), false);\n\n        /**\n         * Add button to the link wrapper\n         */\n        noticesLinkWrapper.appendChild(noticesButton);\n\n        /**\n         * Add the link wrapper to the screen-meta-links section\n         */\n        const screenMetaLinks = document.getElementById('screen-meta-links');\n        screenMetaLinks.appendChild(noticesLinkWrapper);\n\n        /**\n         * Build the panel\n         */\n        const noticesPanel = document.createElement('div');\n\n        noticesPanel.id='ta-notices-wrap';\n        noticesPanel.style.display='none';\n        noticesPanel.dataset.open='no';\n\n        this.noticesPanelInner = document.createElement('div');\n        this.noticesPanelInner.id = 'ta-notices-panel-inner';\n\n        noticesToHide.forEach(this.hideNotice.bind(this));\n\n        /**\n         * Add wrap to the meta area\n         */\n        noticesPanel.appendChild(this.noticesPanelInner);\n        const screenMeta = document.getElementById('screen-meta');\n        screenMeta.appendChild(noticesPanel);\n\n        // Set up events on the new screen-meta item\n        // if (window.screenMeta) {\n        //     window.screenMeta.init();\n        // }\n\n        // Add a mutation observer to check for notices added by JavaScript\n        // this.addObserver();\n    }\n\n    addObserver() {\n        const observer = new MutationObserver( this.handleMutations.bind(this) );\n        observer.observe(document.getElementById('wpbody-content'), {\n            childList: true,\n            subtree: true\n        });\n    }\n\n    handleMutations(mutations, observer) {\n        mutations.forEach( mutation => {\n            if (mutation.type === 'childList') {\n                mutation.addedNodes.forEach( node => {\n                    if (node.nodeType === Node.ELEMENT_NODE) {\n                        console.log('MUTATING!!!' + node.id);\n                        // this.maybeAddIdToNotice(node);\n                        // this.maybeAddMoveButtonToNotice(node);\n                        // this.maybeHideNotice(node);\n                    }\n                });\n            }\n        });\n    }\n\n    // Does the allowedClasses list say that this notice should be shown?\n    keepNotice(noticeElem) {\n        return noticeElem.matches(this.allowedClasses.join(', '));\n    }\n\n    rememberNotice(ev) {\n        const noticesLinkWrap = document.getElementById('ta-notices-link-wrap');\n        const panel = document.getElementById('wp-admin-bar-ta-notices');\n        const panelInner = document.getElementById('ta-notices-panel-inner');\n        const countElem = document.getElementById('ta-notice-count');\n        const count = parseInt(countElem.innerText, 10);\n        const notice = ev.target.closest(this.noticeSelectors.join(','));\n        const noticeId = notice.id;\n        turboAdminLog(`Remembering ${noticeId}`);\n        panelInner.appendChild(notice);\n        if (count === 0) {\n            noticesLinkWrap.style.display = 'block';\n        }\n\n        this.updateScreenMetaHeight();\n\n        countElem.innerText = parseInt(countElem.innerText, 10) + 1;\n\n        this.saveRememberedNotice(noticeId);\n    }\n\n    noticeShouldBeHidden(notice) {\n        if (this.rememberedNoticeIds.includes(notice.id)) {\n            return true;\n        }\n\n        if (this.keepNotice(notice)) {\n            return false;\n        }\n\n        // Invisible\n        if (\n            notice.offsetHeight === 0 ||\n            notice.offsetWidth === 0\n        ) {\n            return false;\n        }\n\n        return true;\n    }\n\n    saveRememberedNotice(noticeId) {\n        this.rememberedNoticeIds.push(noticeId);\n\n        if ('object' === typeof(browser)) {\n            chrome.runtime.sendMessage({\n                'action': 'rememberNotice',\n                'noticeId': noticeId,\n            });\n        } else {\n            window.localStorage.setItem('rememberedNoticeIds', JSON.stringify(this.rememberedNoticeIds));\n        }\n    }\n\n    forgetNotice(ev) {\n        const noticesLinkWrap = document.getElementById('ta-notices-link-wrap');\n        const panelInner = document.getElementById('ta-notices-panel-inner');\n        const countElem = document.getElementById('ta-notice-count');\n        const count = parseInt(countElem.innerText, 10);\n        const notice = ev.target.closest(this.noticeSelectors.join(','));\n        const noticeId = notice.id;\n        turboAdminLog(`Forgetting ${noticeId}`);\n\n        notice.remove();\n\n        const message = document.createElement('div');\n        const p = document.createElement('p');\n        message.classList.add('notice', 'ta-forget-notice-message');\n        p.textContent = 'Notice will be back in dashboard on next page load';\n        message.appendChild(p);\n        panelInner.appendChild(message);\n\n        this.updateScreenMetaHeight();\n\n        // I was going to to this, but we need to keep the notice about\n        // where the notice has gone.\n        // if (count === 1) {\n        //     noticesLinkWrap.style.display = 'none';\n        // }\n\n        countElem.innerText = (count - 1).toString();\n        this.saveForgottenNotice(noticeId);\n    }\n\n    saveForgottenNotice(noticeId) {\n        this.rememberedNoticeIds.push(noticeId);\n\n        if ('object' === typeof(browser)) {\n            chrome.runtime.sendMessage({\n                'action': 'rememberNotice',\n                'noticeId': noticeId,\n            });\n        } else {\n            this.rememberedNoticeIds = this.rememberedNoticeIds.filter( id => id !== noticeId );\n            window.localStorage.setItem('rememberedNoticeIds', JSON.stringify(this.rememberedNoticeIds));\n        }\n    }\n\n    /*\n     * For notices without IDs we'll see if we can add an ID that's a hash of their classlist\n     */\n    maybeAddIdToNotice(noticeElem) {\n        if (noticeElem.id && noticeElem.id !== '' && noticeElem.id !=='message') {\n            return;\n        }\n\n        const classes = noticeElem.classList;\n        noticeElem.id = Array.from(noticeElem.classList).join('-');\n    }\n\n    /**\n     * Add buttons to notices that we want to be able to move to the panel\n     */\n    maybeAddMoveButtonToNotice(noticeElem) {\n        if (this.keepNotice(noticeElem)) {\n            const rememberButton = document.createElement('button');\n            rememberButton.classList.add('ta-remember-notice-button');\n            rememberButton.innerText = 'Move to panel';\n\n            const forgetButton = document.createElement('button');\n            forgetButton.classList.add('ta-forget-notice-button');\n            forgetButton.innerText = 'Move to dashboard';\n\n            noticeElem.classList.add('ta-added-pos-relative');\n\n            noticeElem.appendChild(rememberButton);\n            noticeElem.appendChild(forgetButton);\n\n            rememberButton.addEventListener('click', this.rememberNotice.bind(this), false, true);\n            forgetButton.addEventListener('click', this.forgetNotice.bind(this), false, true);\n        }\n    }\n\n    maybeHideNotice(noticeElem) {\n        if (this.noticeShouldBeHidden(noticeElem) && !noticeElem.classList.contains('ta-notice-hidden')) {\n            this.hideNotice(noticeElem);\n        }\n    }\n\n    hideNotice(noticeElem) {\n        noticeElem.classList.add('ta-notice-hidden');\n        // WPCore's common.js will re-add the notice below the dashboard header unless it has a .inline class.\n        // It does: $( 'div.updated, div.error, div.notice' ).not( '.inline, .below-h2' ).insertAfter( $headerEnd );\n        noticeElem.classList.add('inline');\n        // See Toolbelt's implementation: https://github.com/BinaryMoon/wp-toolbelt/blob/dev/modules/tidy-notifications/src/js/script.js\n        this.noticesPanelInner.append(noticeElem);\n    }\n\n    /**\n     * Detect if WordPress has already applied event handlers to our new screen meta button.\n     *\n     * If it has then WordPress/backbone.js will handle the animation and we won't have to.\n     *\n     * @returns {boolean}\n     */\n    wordpressScreenMetaEventsExist() {\n        return 'object' === typeof(window.screenMeta) && window.screenMeta.toggles.filter('#ta-notices-link').length > 0;\n    }\n\n    updateScreenMetaHeight() {\n        // Don't do this if we're relying on backbone's animation\n        if (this.wordpressScreenMetaEventsExist()) {\n            return;\n        }\n\n        const screenMeta = document.getElementById('screen-meta');\n        const noticesPanel = document.getElementById('ta-notices-wrap');\n        const height = noticesPanel.offsetHeight;\n        screenMeta.style.maxHeight = height.toString(10) + 'px';\n    }\n\n    toggleNoticesPanel(ev) {\n        // We may be in the plugin in which case we don't want to run our handler if there's\n        // a backbone handler on the button.\n        if (this.wordpressScreenMetaEventsExist()) {\n            return;\n        }\n        // Otherwise we mimic the swipe down animation.\n        const animationSeconds = 0.3;\n        const screenMeta = document.getElementById('screen-meta');\n        const noticesPanel = document.getElementById('ta-notices-wrap');\n        if (noticesPanel.dataset.open === 'no') {\n            this.toggleOtherScreenMetaTabs();\n            // Don't ask... just DON'T ask!\n            noticesPanel.dataset.open = 'yes';\n            screenMeta.style.transition = `max-height ${animationSeconds.toString(10)}s`;\n            screenMeta.style.maxHeight = '0';\n            screenMeta.style.overflow = 'hidden';\n            screenMeta.style.display = 'block';\n            noticesPanel.style.display = 'block';\n            const height = noticesPanel.offsetHeight;\n            screenMeta.style.maxHeight = height.toString(10) + 'px';\n            // setTimeout(() => {\n            //     // Nothing to do here.\n            // }, animationSeconds * 1000);\n        } else {\n            noticesPanel.dataset.open = 'no';\n            const height = noticesPanel.offsetHeight;\n            screenMeta.style.maxHeight = '0';\n            setTimeout(() => {\n                noticesPanel.style.display = '';\n                screenMeta.style.display = '';\n                screenMeta.style.transition = '';\n                screenMeta.style.overflow = '';\n                screenMeta.style.maxHeight = '';\n                this.toggleOtherScreenMetaTabs();\n            }, animationSeconds * 1000);\n        }\n\n    }\n\n    toggleOtherScreenMetaTabs() {\n        const otherTabs = document.querySelectorAll('#screen-meta-links .screen-meta-toggle:not(#ta-notices-link-wrap)');\n        otherTabs.forEach( (tab) => {\n            if (tab.style.visibility === 'hidden') {\n                tab.style.visibility = '';\n            } else {\n                tab.style.visibility = 'hidden';\n            }\n        } );\n    }\n}\n", "export default class ListTableShortcuts {\n\n    constructor() {\n        /**\n         * @type {ListTableShortcuts}\n         */\n        const me = this;\n\n        /**\n         * @type {null|HTMLElement}\n         */\n        this.currentRow = null;\n\n        /**\n         * @type {number}\n         */\n        this.currentRowIndex = 0;\n\n        /**\n         * @type {HTMLTableElement}\n         */\n        this.listTable = document.querySelector('.wp-list-table');\n\n        if (! this.listTable) {\n            return;\n        }\n\n        /**\n         * @type {NodeListOf<HTMLTableRowElement>}\n         */\n        this.tableRows = this.listTable.querySelectorAll('tbody#the-list > tr');\n\n        document.addEventListener('keyup', e => this.handleKeyup(e));\n    }\n\n    /**\n     *\n     * @param {KeyboardEvent} ev\n     */\n    handleKeyup(ev) {\n        if (document.activeElement.tagName !== 'BODY') {\n            return;\n        }\n\n        if (ev.key === 'j') {\n            this.tableMoveDown();\n        } else if (ev.key === 'k') {\n            this.tableMoveUp();\n        } else if (ev.key.toLowerCase() === 'enter' && this.currentRow !== null) {\n            this.openTableRowItem();\n        }\n\n    }\n\n    tableMoveDown() {\n        this.preTableChange();\n\n        // Move down\n        if (this.currentRow === null) {\n            this.currentRowIndex = 0;\n        } else if (this.currentRowIndex < this.tableRows.length - 1) {\n            this.currentRowIndex++;\n        }\n        this.updateTable();\n    }\n\n    tableMoveUp() {\n        this.preTableChange();\n\n        if (this.currentRowIndex > 0) {\n            this.currentRowIndex--;\n        }\n\n        this.updateTable();\n    }\n\n    preTableChange() {\n        if (this.currentRow !== null) {\n            this.tableRows[this.currentRowIndex].classList.remove('ta-active-table-row');\n        }\n    }\n\n    updateTable() {\n        this.currentRow = this.tableRows[this.currentRowIndex];\n\n        if (! this.tableRows[this.currentRowIndex].classList.contains('ta-active-table-row')) {\n            this.tableRows[this.currentRowIndex].classList.add('ta-active-table-row');\n        }\n    }\n\n    openTableRowItem() {\n        turboAdminLog(this);\n        /** @type {HTMLAnchorElement} */\n        const link = this.currentRow.querySelector('a.row-title');\n        if (link) {\n            link.click();\n        }\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\n\nexport default class TurboAdminBarkeeper extends TurboAdminPlugin {\n    constructor() {\n        super('Barkeeper');\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        if (true !== globalThis.turboAdmin.options['barkeeper']) {\n            return false;\n        }\n        // Bail if we aren't in the admin\n        if (! document.getElementById('wpadminbar')) {\n            return false;\n        }\n        // Bail if we don't have the left-hand admin bar (some users only have right-hand side)\n        if (! document.getElementById('wp-admin-bar-root-default')) {\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n\n        this.exclusionIds = [\n            'wp-admin-bar-menu-toggle',\n            'wp-admin-bar-wp-logo',\n            'wp-admin-bar-site-name',\n            'wp-admin-bar-updates',\n        ];\n\n        this.selectorsToHide = [\n            '#wp-admin-bar-root-default > li',\n            '.monsterinsights-adminbar-menu-item',\n        ];\n\n        this.barkeeperState = this.getBarkeeperState();\n\n        this.root = document.getElementById('wp-admin-bar-root-default');\n        if (! this.root) {\n            return;\n        }\n        this.itemsToHide = document.querySelectorAll( this.selectorsToHide.join(', ') );\n\n        Array.from(this.itemsToHide).forEach( element => {\n            if (this.exclusionIds.includes(element.id)) {\n                return;\n            }\n            element.classList.add('ta-barkeeper-collapsable');\n        });\n\n        if (this.barkeeperState === 'closed') {\n            this.root.classList.toggle('ta-barkeeper-closed');\n        }\n\n        // Add toggle\n        this.button = document.createElement('button');\n        this.button.id = 'ta-barkeeper-toggle';\n        this.button.innerText = '<';\n\n        this.button.addEventListener('click', e => {\n            this.root.classList.toggle('ta-barkeeper-closed');\n\n            this.barkeeperState = this.barkeeperState === 'open' ? 'closed' : 'open';\n\n            this.setBarkeeperState(this.barkeeperState);\n        });\n\n        this.root.insertAdjacentElement('afterend', this.button);\n\n        this.setupObserver();\n    }\n\n    /**\n     * Some awkward plugins add themselves into the bar using JS\n     */\n    setupObserver() {\n        this.observer = new MutationObserver( mutations => {\n            mutations.forEach( mutation => {\n                if (mutation.type === 'childList') {\n                    mutation.addedNodes.forEach( node => {\n                        if (node.classList && node.classList.contains('ta-barkeeper-collapsable')) {\n                            return;\n                        }\n                        if (node.id && this.exclusionIds.includes(node.id)) {\n                            return;\n                        }\n                        // Check is the node matches any of the selectors\n                        if (node.matches(this.selectorsToHide.join(', '))) {\n                            node.classList.add('ta-barkeeper-collapsable');\n                            return;\n                        }\n                    });\n                }\n            });\n        });\n\n        this.observer.observe(this.root, {\n            childList: true,\n            subtree: true,\n        });\n    }\n\n    getBarkeeperState() {\n        if (window.turboAdminIsExtension()) {\n            return globalThis.turboAdmin.options['barkeeper-state'];\n        } else {\n            return window.localStorage.getItem('turbo-admin-barkeeper-state');\n        }\n    }\n\n    setBarkeeperState(state) {\n        if (window.turboAdminIsExtension()) {\n            chrome.runtime.sendMessage({\n                'action': 'barkeeperSetState',\n                'barkeeperState': this.barkeeperState,\n            });\n        } else {\n            window.localStorage.setItem('turbo-admin-barkeeper-state', state);\n        }\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\n\nexport default class TurboAdminContentSearch extends TurboAdminPlugin {\n    constructor() {\n        super('WP Content');\n\n        // Register a search mode for each post type\n        const postTypeKeys = Object.keys(globalThis.contentApi.postTypes);\n        for (let i = 0; i < postTypeKeys.length; i++) {\n            const thisPostTypeKey = postTypeKeys[i];\n            const thisPostType = globalThis.contentApi.postTypes[thisPostTypeKey];\n            // turboAdminLog('Adding search mode for post type', thisPostType);\n            this.searchModes.push( this.makePostTypeSearchMode(thisPostType) );\n        }\n\n        // Register ID search mode\n        this.searchModes.push( new SearchMode('id', 'Post ID', this.postById.bind(this)) );\n\n        // Register search all post types mode\n        this.searchModes.push( new SearchMode('search', 'All post types', this.contentSearch.bind(this)) );\n        this.searchModes.push( new SearchMode('find', 'All post types', this.contentSearch.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // TODO: Is this right? Should we check for API access?\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * This is a generator for a post-type specific SearchMode object\n     *\n     * @param {Object} postType\n     */\n    makePostTypeSearchMode(postType) {\n        // TODO: interpret the post type name\n        return new SearchMode(postType.slug, postType.name, (searchString) => this.contentSearch(searchString, postType.slug));\n    }\n\n    /**\n     * @param {string} searchString\n     * @param {string} postType This is passed to the API as a subtype. 'any' by default.\n     * @returns {Promise<ContentItem[]>}\n     */\n    async contentSearch(searchString, postType = 'any') {\n        /**\n         * Possible actual code\n         */\n        const results = await globalThis.contentApi.getPosts(searchString, postType);\n\n        if (! Array.isArray(results)) {\n            return [];\n        }\n\n        return results.map(result => {\n                            const item = new ContentItem;\n                            item.title = result.title;\n                            item.subtype = result.subtype;\n                            item.url = result.url;\n\n                            item.submenuItems = item.submenuItems.concat(this.makeSubmenuItems(result.id, item))\n\n                            return item;\n                        });\n    }\n\n    /**\n     * @param {string} postId\n     * @returns {Promise<ContentItem[]>}\n     */\n    async postById(postId) {\n        if (! postId.trim().match(/^\\d+$/)) {\n            return [];\n        }\n        const postExists = await globalThis.contentApi.doesPostExist(postId);\n\n        const resultAsContentItem = new ContentItem;\n\n        if (! postExists) {\n            resultAsContentItem.title = 'Post does not exist or is not visible';\n            return [ resultAsContentItem ];\n        }\n\n        resultAsContentItem.title = `Post ID: ${postId}`;\n        resultAsContentItem.url = globalThis.taWp.home + `/?p=${postId}`;\n\n        resultAsContentItem.submenuItems = resultAsContentItem.submenuItems.concat(this.makeSubmenuItems(postId, resultAsContentItem));\n\n        return [ resultAsContentItem ];\n    }\n\n    /**\n     * Makes an array of submenu items from a content item\n     *\n     * @param {number} postId\n     * @param {ContentItem} contentItem\n     * @returns {SubmenuItem[]}\n      */\n    makeSubmenuItems(postId, contentItem) {\n        const itemsToReturn = [];\n        itemsToReturn.push(\n            new SubmenuItem(\n                'View',\n                contentItem.url\n            )\n        );\n\n        // TODO: Make a better way to detect if we are logged in.\n        if (globalThis.turboAdmin.turboAdminPalette.profileLink) {\n            // Need to get edit URL. This seems like the best way for now.\n            const editLink = globalThis.taWp.siteUrl + `/post.php?post=${postId}&action=edit`;\n            itemsToReturn.push(\n                new SubmenuItem(\n                    'Edit',\n                    editLink\n                )\n            )\n\n            // Add oxygen link if needed.\n            if (globalThis.turboAdmin.hasActivatedPlugin('OxygenBuilder')) {\n                const oxygenLink = globalThis.taWp.home + `?page_id=${postId}&ct_builder=true&ct_inner=true`;\n                itemsToReturn.push(\n                    new SubmenuItem(\n                        'Edit with Oxygen',\n                        oxygenLink\n                    )\n                );\n            }\n        }\n\n        const copyLinkItem = new SubmenuItem( 'Copy link', contentItem.url);\n        copyLinkItem.addAttribute('data-action', 'clipboard')\n        itemsToReturn.push(copyLinkItem);\n\n        return itemsToReturn;\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\n\nexport default class TurboAdminPluginSearch extends TurboAdminPlugin {\n    constructor() {\n        super('WP Plugins');\n\n        this.searchModes.push( new SearchMode('plugin', 'Plugins', this.pluginSearch, this.defaultPluginItems.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // TODO: Is this right? Should we check for API access?\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @returns {Promise<ContentItem[]>}\n     */\n    async defaultPluginItems() {\n        return await this.pluginSearch('');\n    }\n\n    /**\n     * @param {string} searchString\n     * @returns {Promise<ContentItem[]>}\n     */\n    async pluginSearch(searchString) {\n        /**\n         * Possible actual code\n         */\n        const results = await globalThis.contentApi.getPlugins(searchString);\n\n        if (! Array.isArray(results)) {\n            return [];\n        }\n\n        return results.map(result => {\n                            // siteUrl is at globalThis.turboAdmin.wp.siteUrl\n                            const item = new ContentItem;\n                            item.title = result.name;\n                            item.subtype = 'Plugin';\n                            // TODO: Maybe set this to be a search on the plugin screen?\n                            // Plugin \"slug\" is in result.name\n\n                            const itemViewUrlParams = new URLSearchParams();\n                            itemViewUrlParams.set('plugin_status', 'all');\n                            itemViewUrlParams.set('s', result.name);\n                            item.submenuItems.push(\n                                new SubmenuItem(\n                                    'View',\n                                    globalThis.taWp.siteUrl + '/plugins.php?' + itemViewUrlParams.toString()\n                                )\n                            );\n                            // Activate: /wp-admin/plugins.php?action=activate&plugin=order-simulator-woocommerce%2Fwoocommerce-order-simulator.php&plugin_status=all&paged=1&s&_wpnonce=3714a01759\n\n                            return item;\n                        });\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\n\nexport default class TurboAdminUserSearch extends TurboAdminPlugin {\n    constructor() {\n        super('WP Users');\n\n        this.searchModes.push( new SearchMode('user', 'Users', this.userSearch, this.defaultUserItems.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // TODO: Is this right? Should we check for API access?\n        return true;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @returns {Promise<ContentItem[]>}\n     */\n     async defaultUserItems() {\n        return await this.userSearch('');\n    }\n\n    /**\n     * @param {string} searchString\n     * @returns {Promise<ContentItem[]>}\n     */\n    async userSearch(searchString) {\n        /**\n         * Possible actual code\n         */\n        const results = await globalThis.contentApi.getUsers(searchString);\n\n        if (! Array.isArray(results)) {\n            return [];\n        }\n\n        return results.map(result => {\n                            const item = new ContentItem;\n                            if (result.first_name && result.last_name) {\n                                item.title = `${result.first_name} ${result.last_name} - `;\n                            }\n                            item.title += result.email;\n                            item.subtype = result.roles[0];\n                            item.url = globalThis.taWp.siteUrl + `/user-edit.php?user_id=${result.id}`;\n                            return item;\n                        });\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\n\nexport default class TurboAdminMUSites extends TurboAdminPlugin {\n    constructor() {\n        super('WP Multisite Sites');\n\n        this.searchModes.push( new SearchMode('site', 'Sites', this.siteSearch.bind(this), this.defaultSiteItems.bind(this)) );\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        return Boolean(document.querySelector('#wp-admin-bar-my-sites'));\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Callback to get default items when entering a search mode\n     *\n     * @returns {Promise<ContentItem[]>}\n     */\n     async defaultSiteItems() {\n        return await this.siteSearch('');\n    }\n\n    /**\n     * @param {string} searchString\n     * @returns {Promise<ContentItem[]>}\n     */\n    async siteSearch(searchString) {\n        // {\n        //     'detectType': 'dom',\n        //     'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-my-sites-list .ab-submenu a',\n        //     'itemTitleFunction': (element) => \"Sites: \" + element.closest('.menupop').querySelector('a').innerText + ' - ' + element.innerText,\n        //     'itemUrlFunction': (element) => element.href\n        // },\n\n        const sites = document.querySelectorAll('#wp-admin-bar-my-sites #wp-admin-bar-my-sites-list > li');\n\n        if (sites.length === 0) {\n            return [];\n        }\n\n        const sitesArray = Array.from(sites);\n        const sitesLinks = sitesArray.map(site => site.querySelector('a'));\n        const filteredSites = sitesLinks.filter(site => site.innerText.toLowerCase().includes(searchString.toLowerCase()));\n\n        return filteredSites.map(site => {\n            const item = new ContentItem;\n            item.title = site.innerText;\n            item.subtype = 'Site';\n            item.url = site.href;\n\n            item.submenuItems = item.submenuItems.concat(this.makeSubmenuItems(site));\n\n            return item;\n        });\n    }\n\n    makeSubmenuItems(siteElement) {\n        const submenuItems = [];\n\n        const submenu = siteElement.nextElementSibling.querySelector(`.ab-submenu`);\n        if (! submenu) {\n            return [];\n        }\n\n        const submenuLinks = submenu.querySelectorAll('a');\n        if (submenuLinks.length === 0) {\n            return [];\n        }\n\n        const submenuLinksArray = Array.from(submenuLinks);\n        submenuLinksArray.forEach(link => {\n            const submenuItem = new SubmenuItem(link.innerText, link.href);\n            submenuItems.push(submenuItem);\n        });\n\n        return submenuItems;\n    }\n}\n", "import TurboAdminPlugin from '../types/class-turbo-admin-plugin.js';\nimport SearchMode from '../types/class-search-mode.js';\nimport ContentItem from '../types/class-content-item.js';\nimport SubmenuItem from '../types/class-submenu-item.js';\nimport ItemDefinition from '../types/class-item-definition.js';\n\nexport default class TurboAdminOxygenBuilder extends TurboAdminPlugin {\n    constructor() {\n        super('OxygenBuilder');\n    }\n\n    /**\n     * Should the plugin activate\n     *\n     * @returns {boolean}\n     */\n    shouldActivate() {\n        // Check for presence of Oxygen Page builder\n        /** @type {HTMLElement|string|Number} */\n        let oxygenLinkElem = document.getElementById('toplevel_page_ct_dashboard_page');\n        // Also check for a menu bar item\n        if (! oxygenLinkElem) {\n            oxygenLinkElem = document.getElementById('wp-admin-bar-oxygen_admin_bar_menu');\n        }\n        // Check to see if Oxygen link is cached\n        if (! oxygenLinkElem) {\n            oxygenLinkElem = Number(window.localStorage.getItem('ta-has-oxygen-builder'));\n        }\n\n        const hasOxygenBuilder = Boolean(oxygenLinkElem);\n\n        // Save Oxygen builder status\n        window.localStorage.setItem('ta-has-oxygen-builder', hasOxygenBuilder ? '1' : '0' );\n\n        return hasOxygenBuilder;\n    }\n\n    /**\n     * Activate and initialise the plugin\n     */\n    activate() {\n        super.activate();\n    }\n\n    /**\n     * Get additional menu items to be added to the main menu\n     *\n     * @return {Promise<ItemDefinition[]>}\n     */\n     async getAdditionalItemDefinitions() {\n        const editDefinition = new ItemDefinition();\n        editDefinition.detectType = 'dom';\n        editDefinition.detectSelector = '#ct-edit-template-builder';\n        editDefinition.itemTitleFunction = () => 'Edit with Oxygen';\n        editDefinition.itemUrlFunction = (element) => element.href;\n        editDefinition.noCache = true;\n\n        // It's worth noting that the Oxygen Builder doesn't use a /wp-admin URL\n        // and so kinda appears to Turbo Admin to be a \"front-end\" page and it\n        // doesn't refresh the menu items.\n        const backToWpDefinition = new ItemDefinition();\n        backToWpDefinition.detectType = 'dom';\n        backToWpDefinition.detectSelector = '.oxygen-back-to-wp-menu .oxygen-toolbar-button-dropdown a:not(:last-of-type)';\n        backToWpDefinition.itemTitleFunction = (element) => 'Back to WP: ' + element.textContent;\n        backToWpDefinition.itemUrlFunction = (element) => {\n            if (element.href) {\n                return element.href;\n            } else {\n                let url = new URL(window.location.href);\n                return url.origin + url.pathname;\n            }\n        };\n        backToWpDefinition.noCache = true;\n\n        return [\n            editDefinition,\n            backToWpDefinition,\n        ];\n    }\n\n}\n", "/*\n * This is the common Turbo Admin library.\n *\n * It's (currently) WordPress-specific, but can be loaded by\n * either the Extension OR the Plugin\n *\n * It takes an options object:\n *\n * options: {\n *   shortcutKeys: [\n *     // Array of shortcut key definitions, like:\n *     {\n *       {\n *         meta: false,\n *         alt: true,\n *         ctrl: true,\n *         shift: true,\n *         key: 'p'\n *       }\n *     }\n *   ],\n *   appendToElement {\n *     // Optional CSS selector to define what to append the palette to\n *     'body'\n *   },\n *   extraItems: [\n *     // Optional array of extra item configs used to generate new item objects\n *     {\n *       'detectType': 'url',\n *       'detectPattern': 'wp-login',\n *       'itemTitle': 'View/visit site',\n *       'itemUrlFunction': () => this.home\n *     },\n *   ],\n *   extraItemsRaw: [\n *     // Optional array of raw item objects to be added\n *     {\n *       'title': ,\n *       'action': ,\n *       'parentTitle': ,\n *     }\n *   ]\n * }\n */\n\nimport TurboAdminPalette from './class-turbo-admin-palette.js';\nimport TurboAdminMenuItem from './types/class-turbo-admin-menu-item.js';\nimport SearchMode from './types/class-search-mode.js';\nimport TurboAdminPlugin from './types/class-turbo-admin-plugin.js';\nimport Acf from './plugins/class-acf.js';\nimport TurboAdminWpBlockEditorFullscreenKill from './class-turbo-admin-wp-block-editor-fullscreen-kill.js';\nimport TurboAdminWpBlockEditorWelcomeGuideKill from './class-turbo-admin-wp-block-editor-welcome-guide-kill.js';\nimport TurboAdminWpNotices from './class-turbo-admin-wp-notices.js';\nimport TurboAdminListTableShortcuts from './class-list-table-shortcuts.js';\nimport TurboAdminBarkeeper from './plugins/class-turbo-admin-barkeeper.js';\nimport TurboAdminContentSearch from './plugins/class-turbo-admin-content-search.js';\nimport TurboAdminPluginSearch from './plugins/class-turbo-admin-plugins.js';\nimport TurboAdminUserSearch from './plugins/class-turbo-admin-users.js';\n// import TurboAdminWoocommerce from './plugins/class-turbo-admin-woocommerce.js';\n// import TurboAdminGravityForms from './plugins/class-turbo-admin-gravity-forms.js';\nimport TurboAdminMUSites from './plugins/class-turbo-admin-mu-sites.js';\nimport TurboAdminOxygenBuilder from './plugins/class-turbo-admin-oxygen-buillder.js';\n\nexport default class TurboAdmin {\n\n    /**\n     * @param {*} options\n     * @returns {TurboAdmin}\n     */\n    constructor(options) {\n        // Sometimes we get a second copy of TA running, like if the plugin is running too.\n        // Is this case we want to skip the initialisation.\n        this.doInit = true;\n\n        if (document.getElementById('ta-command-palette-container')) {\n            console.log('TurboAdmin already initialised - I won\\'t make a second copy!');\n            this.doInit = false;\n            return globalThis.turboAdmin;\n        }\n\n        this.options = options;\n        this.plugins = {};\n\n        // TODO: Something? What should this type be?\n        this.searchModes = {};\n\n        // On the front end we set this if there is no saved menu.\n        this.menuNeedsRefresh = false;\n    }\n\n    /**\n     * Perform initialization - this is all the things that do not need APIs to\n     * get set up.\n     */\n    async init() {\n        if (! this.doInit) {\n            return;\n        }\n\n        // Register all the plugins\n        new TurboAdminBarkeeper();\n        new TurboAdminContentSearch();\n        new TurboAdminPluginSearch();\n        new TurboAdminUserSearch();\n        // new TurboAdminWoocommerce();\n        // new TurboAdminGravityForms();\n        new TurboAdminMUSites();\n        new TurboAdminOxygenBuilder();\n\n        // Grab the global Wp object instance\n        this.wp = globalThis.taWp;\n\n        this.menu = [];\n\n        // Check for saved menu when on front-end\n        if (! this.wp.isBackend) {\n            // Only use the cached items if the current URL matches the last site URL\n            // This handles changes of multi-site site!\n            // We ONLY need to do this on the front-end as the back-end will always\n            // refresh the menu.\n            if (! this.wp.siteChanged) {\n                // Check for .logged-in class on body - if logged in, we can use the saved menu,\n                // if it exists.\n                if (document.body.classList.contains('logged-in')) {\n                    // Get from localStorage\n                    const savedMenu = window.localStorage.getItem('ta-palette-data');\n\n                    // This attempts to see if we have cached items from the back-en\n                    if (null === savedMenu) {\n                        this.menuNeedsRefresh = true;\n                    } else {\n                        this.menu = JSON.parse(savedMenu);\n                        // Check if there is no \"Media\" item  - this should ONLY be in the back-end\n                        if (! this.menu.some(item => item.action.endsWith('upload.php'))) {\n                            this.menuNeedsRefresh = true;\n                        }\n                        // Merge (?) the items?\n                    }\n                }\n            }\n        } else {\n            // On the back end, get the WordPress dashboard menu items\n            this.menu = this.getMenu();\n        }\n\n        // Add other additional items\n        await this.addAdditionalMenuItems();\n        // Add items passed in using extraItemsRaw\n        this.menu = this.menu.concat(this.options.extraItemsRaw ?? []);\n\n        // Add ACF items?\n        // TODO: Make this better. Possible ASYNC somehow?\n        // this.acf = new Acf();\n        // if (this.acf.isAcfInstalled()) {\n        //     const acfLinks = await this.acf.getFieldGroups()\n        //     // console.table(acfItems);\n        //     const acfMenuItems = acfLinks.map(\n        //         item => new TurboAdminMenuItem(\n        //             item.label + ' (ACF)',\n        //             item.link,\n        //             ''\n        //         )\n        //     );\n        //     this.menu = this.menu.concat(acfMenuItems);\n        // }\n\n        // Sort the menu\n        this.menu.sort((a, b) => (a.parentTitle + a.title).localeCompare(b.parentTitle + b.title));\n\n        // Filter out no-cache items and save to localStorage.\n        const itemsToSave = this.menu.filter(item => (! item.noCache));\n        window.localStorage.setItem('ta-palette-data', JSON.stringify(itemsToSave));\n\n        // Add palette markup to the DOM\n        this.addPalette();\n        // Initialise controls on the palette\n        this.turboAdminPalette = new TurboAdminPalette(this.menu, this.options);\n    }\n\n    /**\n     * These are initialization steps that DO needs APIs to be set up.\n     */\n    activatePlugins() {\n        // Initialize all plugins\n        Object.keys(this.plugins).forEach( plugin => {\n            if (this.plugins[plugin].shouldActivate()) {\n                this.plugins[plugin].activate();\n            }\n        })\n\n        if (true === this.options['block-editor-fullscreen-disable']) {\n            // Initialise fullscreen kill\n            this.turboAdminFullscreenKill = new TurboAdminWpBlockEditorFullscreenKill();\n        }\n\n        if (true === this.options['block-editor-welcome-screen-kill']) {\n            this.turboAdminWelcomeKill = new TurboAdminWpBlockEditorWelcomeGuideKill();\n        }\n\n        if (true === this.options['list-table-keyboard-shortcuts']) {\n            this.turboAdminListTableShortcuts = new TurboAdminListTableShortcuts();\n        }\n\n        // Add other things if we're logged in and have an API nonce\n        if (globalThis.contentApi.userLoggedIn()) {\n            // What shall we do?\n        }\n    }\n\n    /**\n     * True if the plugin has been activated\n     *\n     * @param {string} name Name of the plugin to check for\n     * @returns {boolean}\n     */\n    hasActivatedPlugin(name) {\n        return Object.keys(this.plugins).includes(name) &&\n            this.plugins[name].activated;\n    }\n\n    /**\n     * Gather the WordPress dashboard admin (sidebar) menu items\n     *\n     * @returns { TurboAdminMenuItem[] }\n     */\n    getMenu() {\n        const items = [];\n        const menuTop = document.getElementById('adminmenu');\n        if (menuTop) {\n            const topDOMItems = menuTop.querySelectorAll('li.menu-top');\n            topDOMItems.forEach(el => {\n                const a = el.querySelector('a.menu-top');\n                const title = a.querySelector('.wp-menu-name').innerHTML;\n                const action = a.href;\n                const parentTitle = '';\n                const item = new TurboAdminMenuItem(title, action, parentTitle);\n                items.push(item);\n\n                const subMenu = el.querySelector('.wp-submenu');\n                if (!subMenu) {\n                    return;\n                }\n                const subItems = subMenu.querySelectorAll('li a');\n                if (!subItems) {\n                    return;\n                }\n                subItems.forEach(subEl => {\n                    const parentTitle = title;\n                    const childTitle = subEl.innerHTML;\n                    const childAction = subEl.href;\n                    const item = new TurboAdminMenuItem(childTitle, childAction, parentTitle);\n                    items.push(item);\n                })\n            });\n        }\n        return items;\n    }\n\n    /**\n     * Adds additional menu items passed in by configuration to the\n     * menu items list.\n     */\n    async addAdditionalMenuItems() {\n\n        /*\n         * I'd LOVE for this to be config driven\n         *\n         * [\n         *   {\n         *     'detectType': 'url',\n         *     'detectPattern': 'wp-login',\n         *     'itemTitle': 'View/visit site',\n         *     'itemUrlFunction': () => this.home\n         *   },\n         *   {\n         *     'detectType': 'dom',\n         *     'detectSelector': '#wpadminbar',\n         *     'itemTitle': 'Logout',\n         *     'itemUrlFunction': () => logoutUrl\n         *   }\n         *  Can we add actionTypes as well? To do clicks and navigates?\n         * ]\n         */\n\n        // Get passed-in extraItems\n        // Technically this is an array of {ItemDefintion} but more work needed to make that happen.\n        let extraItems = this.options.extraItems ?? [];\n\n        // Get any extra items defined by plugins\n        const pluginKeys = Object.keys(this.plugins);\n\n        for (let i=0; i < pluginKeys.length; i++) {\n            extraItems = extraItems.concat(await this.plugins[pluginKeys[i]].getAdditionalItemDefinitions());\n        }\n\n        // Merge in defaults\n        extraItems = extraItems.concat(\n            [\n                {\n                    'detectType': 'dom',\n                    'detectSelector': 'body.wp-admin #wp-admin-bar-view-site a',\n                    'itemTitleFunction': () => 'View/visit site',\n                    'itemUrlFunction': (element) => element.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-dashboard a',\n                    'itemTitleFunction': (element) => element.textContent,\n                    'itemUrlFunction': (element) => element.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wpadminbar',\n                    'itemTitleFunction': () => 'Logout',\n                    'itemUrlFunction': () => document.getElementById('wp-admin-bar-logout')?.querySelector('a')?.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-edit a',\n                    'itemTitleFunction': (item) => item.textContent,\n                    'itemUrlFunction': (item) => item.href,\n                    'noCache': true,\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-view a',\n                    'itemTitleFunction': (item) => item.textContent,\n                    'itemUrlFunction': (item) => item.href,\n                    'noCache': true,\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-new-content .ab-submenu a',\n                    'itemTitleFunction': (item) => 'New ' + item.textContent,\n                    'itemUrlFunction': (item) => item.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-customize a',\n                    'itemTitleFunction': (item) => item.textContent,\n                    'itemUrlFunction': (item) => item.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelectorNone': '#wpadminbar, #loginform',\n                    'itemTitleFunction': () => \"Log in\",\n                    'itemUrlFunction': () => {\n                        if (globalThis.taWp.home) {\n                            return globalThis.taWp.siteUrl;\n                        }\n                        // Try getting wp-admin\n                        return 'javascript:alert(\\'Sorry, could not detect login URL.\\')';\n                    }\n                },\n                // This is on the login screen\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#backtoblog a',\n                    'itemTitleFunction': () => \"View/visit site\",\n                    'itemUrlFunction': (element) => element.href\n                },\n                // Multisite items\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin > a',\n                    'itemTitleFunction': () => \"Network Admin\",\n                    'itemUrlFunction': (element) => element.href\n                },\n                {\n                    'detectType': 'dom',\n                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin .ab-submenu a',\n                    'itemTitleFunction': (element) => 'Network Admin: ' + element.textContent,\n                    'itemUrlFunction': (element) => element.href\n                },\n            ]\n        );\n\n        extraItems.forEach(item => {\n            let detected = false;\n            let elements = null;\n            if (item.detectType === 'url') {\n                detected = Boolean(window.location.href.includes(item.detectPattern));\n                // Just grab any old element. We shouldn't need it.\n                elements = document.querySelectorAll('body');\n            } else if (item.detectType === 'dom') {\n                if (item.detectSelector) {\n                    elements = document.querySelectorAll(item.detectSelector);\n                    detected = Boolean(elements);\n                } else if (item.detectSelectorNone) {\n                    elements = document.querySelectorAll(item.detectSelectorNone);\n                    detected = elements.length === 0;\n                    // Need to pass SOMETHING to the loop below\n                    elements = document.querySelectorAll('body');\n                }\n            }\n            if (!detected) {\n                return;\n            }\n\n            elements.forEach(element => {\n                const newItem = new TurboAdminMenuItem(item.itemTitleFunction(element), item.itemUrlFunction(element), '', item?.noCache);\n                // Might already have one so check.\n                if (this.menu.some(menuItem => {\n                    // This must be newItem.sameAs, not menuItem.sameAs because the menuItem\n                    // may have been loaded from saved menu and may not actually be an instance\n                    // of a TurboAdminMenuItem.\n                    return newItem.sameAs(menuItem)\n                } )) {\n                    return;\n                }\n                // We don't already have one. So add it.\n                this.menu.push(newItem);\n            });\n        })\n    }\n\n    /**\n     * Builds the palette HTML and adds it to the DOM.\n     */\n    addPalette() {\n        const container = document.createElement('div');\n        container.id = 'ta-command-palette-container';\n        // Palette\n        const palette = document.createElement('div');\n        palette.id = 'ta-command-palette';\n        // Palette notice\n        const paletteNotice = document.createElement('div');\n        paletteNotice.id = 'ta-command-palette-notice';\n        // Tab notice\n        const tabNotice = document.createElement('div');\n        tabNotice.id = 'ta-command-palette-tab-notice';\n        // Tab notice text\n        const tabNoticeText = document.createElement('span');\n        tabNoticeText.id = 'ta-command-palette-tab-notice-text';\n        // Tab notice \"button\"\n        const tabNoticeButton = document.createElement('span');\n        tabNoticeButton.id = 'ta-command-palette-tab-notice-button';\n        tabNoticeButton.innerText = 'Tab';\n        // Input field\n        const input = document.createElement('input');\n        input.id = \"ta-command-palette-input\";\n        input.name = \"ta-command-palette-input\";\n        input.type = \"text\";\n        // Set this to stop stuff trying to fill it.\n        input.setAttribute('autocomplete', 'off');\n        // Search mode tag\n        const searchModeTag = document.createElement('div');\n        searchModeTag.id = 'ta-command-palette-search-mode-tag';\n        // List container (needed to contain the main list and the submenu list)\n        const listContainer = document.createElement('div');\n        listContainer.id = \"ta-command-palette-items-container\";\n        // List\n        const list = document.createElement('ul');\n        list.id = \"ta-command-palette-items\";\n        // Sub-menu list\n        const submenuContainer = document.createElement('div');\n        submenuContainer.id = \"ta-command-palette-submenu-container\";\n        // Join it all up\n        container.appendChild(palette);\n        palette.appendChild(searchModeTag);\n        palette.appendChild(paletteNotice);\n        tabNotice.appendChild(tabNoticeText);\n        tabNotice.appendChild(tabNoticeButton);\n        palette.appendChild(tabNotice);\n        palette.appendChild(input);\n        listContainer.appendChild(list);\n        listContainer.appendChild(submenuContainer);\n        palette.appendChild(listContainer);\n\n        if (document.getElementById('wpadminbar') && this.options['admin-bar-search'] === true) {\n            const paletteLi = document.createElement('li');\n            paletteLi.appendChild(container);\n            const adminBar = document.getElementById('wp-admin-bar-top-secondary');\n            adminBar.appendChild(paletteLi);\n\n            // Add focus handler\n            input.addEventListener('focus', e => this.turboAdminPalette.showPalette());\n\n            // Add placeholder\n            const placeholder = document.createElement('div');\n            placeholder.id = 'ta-shortcut-key-placeholder';\n            placeholder.innerText = this.buildShortcutKeysString();\n            placeholder.addEventListener('click', e => input.focus());\n\n            palette.insertBefore( placeholder, listContainer );\n        } else {\n            // Container\n            document.querySelector(this.options.appendToElement ?? 'body').appendChild(container);\n        }\n    }\n\n    /**\n     * Register a plugin with Turbo Admin\n     *\n     * @param {TurboAdminPlugin} plugin\n     */\n    registerPlugin(plugin) {\n        turboAdminLog('Registering plugin ' + plugin.name);\n        this.plugins[plugin.name] = plugin;\n    }\n\n    /**\n     * Register a palette search mode and its associated plugin\n     *\n     * this is usually bound to the searchMode, so\n     *\n     * @param {SearchMode} searchMode\n     */\n    registerSearchMode(searchMode) {\n        turboAdminLog('Registering search mode with keyword ' + searchMode.keyword);\n        // Don't use `this` as we are bound!\n        globalThis.turboAdmin.searchModes[searchMode.keyword] = searchMode;\n    }\n\n    /**\n     * Returns a string representation of the palette's keyboard shortcut\n     *\n     * @returns { String }\n     */\n    buildShortcutKeysString () {\n        let keysString = '';\n        let shortcut = this.options.shortcutKeys[0];\n\n        if ( shortcut.meta ) {\n            keysString += 'Cmd-';\n        }\n        if ( shortcut.ctrl ) {\n            keysString += 'Ctrl-';\n        }\n        if ( shortcut.alt ) {\n            keysString += 'Alt-';\n        }\n        if ( shortcut.shift ) {\n            keysString += 'Shift-';\n        }\n        keysString += shortcut.key.toUpperCase();\n        return keysString;\n    }\n\n}\n", "export default class Wp {\n\n    constructor() {\n\n        // Set home and siteUrl\n        this.siteUrl = '';\n        this.home = '';\n        this.loginUrl = '';\n        this.apiLinkUrl = '';\n    }\n\n    async completeInit() {\n        // Fetch previously loaded site URL\n        this.previousUrl = window.localStorage.getItem('ta-palette-data-site');\n\n        // Fetch previously-stored siteUrl and home\n        this.siteUrl = window.localStorage.getItem('ta-palette-data-siteurl');\n        this.home = window.localStorage.getItem('ta-palette-data-home');\n\n        /**\n         * Are we in the back-end?\n         */\n        this.isBackend = this.getIsBackend();\n\n        /**\n         * Figure out all the WP URLs\n         */\n        await this.getUrls();\n\n        /**\n         * Tells you if the best-guess site URL of the current page is different\n         * to that of the previously saved site URL.\n         */\n        this.siteChanged = this.home !== this.previousUrl;\n\n        // Save current site URL for next time\n        window.localStorage.setItem('ta-palette-data-site', this.home);\n    }\n\n    getIsBackend() {\n        return document.body.classList.contains('wp-admin');\n    }\n\n    /**\n     * Return the URL with a trailing slash if it didn't already have one.\n     *\n     * @param {String} url The URL to check\n     * @return {String}    The resulting URL\n     */\n    ensureTrailingSlash( url ) {\n        if (url.endsWith('/')) {\n            return url;\n        } else {\n            return url + '/';\n        }\n    }\n\n    /**\n     * Tests if a URL works and, if redirected, that the final URL contains a given\n     * string. Returns the final, redirected-to URL if the test passed, or false\n     * otherwise.\n     *\n     * @param {String} url                    The URL to test.\n     * @param {String} responseUrlMustContain The string to test against the final URL\n     * @returns {Promise<String|Boolean>}   The final URL or false.\n     */\n    async testUrl(url, responseUrlMustContain='') {\n\n        /** @type {RequestInit} */\n        const init = {\n            method: 'HEAD',\n            mode: 'cors',\n            cache: 'no-cache',\n            credentials: 'same-origin'\n        }\n\n        const response = await fetch(url, init);\n\n        if (response.redirected && !response.url.includes(responseUrlMustContain)) {\n            return false;\n        }\n\n        if ( ! response.ok ) {\n            return false;\n        }\n\n        return response.url;\n    }\n\n    async findWhichUrlWorks(urls, responseUrlMustContain='') {\n        let workingUrl = false;\n        let result;\n        // This has to be a for loop rather than reduce or forEach as separate\n        // async callbacks would be launched asynchronously.\n        for (let i=0; i<urls.length; i++) {\n            if (workingUrl) continue;\n            result = await this.testUrl(urls[i], responseUrlMustContain);\n            if (result !== false) {\n                workingUrl = result;\n            }\n        }\n        return workingUrl;\n    }\n\n    /**\n     *\n     * @param {String} homeUrl\n     */\n    async guessSiteUrlFromHome( homeUrl ) {\n        const homeWithSlash = this.ensureTrailingSlash(homeUrl);\n\n        // NOTE: Backed out of this until I can make it work async.\n        // Might not even be a good idea anyway.\n\n        // const possibleUrls = [\n        //     homeWithSlash + 'wp-admin/',\n        //     homeWithSlash + 'wp/wp-admin'\n        // ];\n        // return this.findWhichUrlWorks(possibleUrls, 'wp-admin');\n        return homeWithSlash + 'wp-admin/';\n    }\n\n    /**\n     *\n     * @param {String} homeUrl\n     */\n    async guessHome() {\n        const currentUrl = new URL(window.location);\n        const origin = this.ensureTrailingSlash(currentUrl.origin);\n\n        // NOTE: Backed out of this until I can make it work async.\n        // Might not even be a good idea anyway.\n\n        // const possibleUrls = [\n        //     origin\n        // ];\n        // return this.findWhichUrlWorks(possibleUrls, 'wp-admin');\n        return origin;\n    }\n\n    /**\n     *\n     * @param {String} siteUrl\n     * @returns {String}\n     */\n    guessHomeFromSiteUrl(siteUrl) {\n        // Not much we can do here.\n        return siteUrl.replace(/wp-admin\\/?/, '');\n    }\n\n    async getUrls() {\n        // See if we can actually find the URL for the API\n        /** @type {HTMLLinkElement|null} */\n        const apiLink = document.querySelector('link[rel=\"https://api.w.org/\"]');\n\n        if (apiLink) {\n            this.apiLinkUrl = apiLink.href;\n        }\n        // Figure out the siteurl and home - this is different on the front and back end\n        if (this.isBackend) {\n            // This is easy in the back end/Dashboard!\n            this.siteUrl = window.location.href.match(/(^.*wp-admin)/)[1];\n            this.home = document.getElementById('wp-admin-bar-site-name').querySelector('a').href;\n\n            // Always set the siteUrl and home as this is definitive\n            window.localStorage.setItem('ta-palette-data-siteurl', this.siteUrl);\n            window.localStorage.setItem('ta-palette-data-home', this.home);\n        } else if (! this.siteUrl || ! this.home) {\n            let urlsFound = false;\n\n            // If we're not in the backend then (in the extension at least) we\n            // could be on the front-end and not logged in, so check for an\n            // admin bar and grab from that if there is one.\n            if (document.getElementById('wpadminbar')) {\n                const dashboardLink = document.getElementById('wp-admin-bar-dashboard')?.querySelector('a');\n                if (dashboardLink) {\n                    this.siteUrl = dashboardLink.href;\n                }\n                // Try for the API link\n                if (this.apiLinkUrl) {\n                    if (this.apiLinkUrl.includes('/wp-json')) {\n                        this.home = this.apiLinkUrl.replace('wp-json/', '');\n                    }\n                    if (this.apiLinkUrl.includes('index.php?rest_route')) {\n                        this.home = this.apiLinkUrl.replace(/index.php\\?rest_route.*/, '');\n                    }\n                    urlsFound = true;\n                } else {\n                    // We might know what the siteUrl is, so guess the home from the siteUrl\n                    if (this.siteUrl) {\n                        this.home = this.guessHomeFromSiteUrl(this.siteUrl);\n                        urlsFound = true;\n                    }\n                }\n            }\n            if (! urlsFound) {\n                // Try for the API link\n                // TODO: This needs to be async so it doesn't hold things up.\n                if (this.apiLinkUrl) {\n                    if (this.apiLinkUrl.includes('/wp-json')) {\n                        this.home = this.apiLinkUrl.replace('wp-json/', '');\n                    }\n                    if (this.apiLinkUrl.includes('index.php?rest_route')) {\n                        this.home = this.apiLinkUrl.replace(/index.php\\?rest_route.*/, '');\n                    }\n                    // We (probably) know what the home link is now, so guess the wp-admin\n                    if (this.home) {\n                        this.siteUrl = await this.guessSiteUrlFromHome( this.home );\n                    } else {\n                        this.siteUrl = this.guessSiteUrl();\n                    }\n                    urlsFound = true;\n                }\n            }\n            if (! urlsFound) {\n                // We got nothing.\n                this.home    = await this.guessHome();\n                if (this.home) {\n                    this.siteUrl = await this.guessSiteUrlFromHome(this.home);\n                }\n            }\n        }\n\n        // Always trim the / for comparisons\n        if (this.siteUrl) {\n            this.siteUrl = this.siteUrl.replace(/(.+)\\/$/, '$1');\n        }\n        if (this.home) {\n            this.home = this.home.replace(/(.+)\\/$/, '$1');\n        }\n\n        // turboAdminLog('siteUrl: ', this.siteUrl);\n        // turboAdminLog('home: ', this.home);\n    }\n\n}\n", "import Storage from '../class-storage.js';\n// import ContentApi from './class-content-api.js';\n\nexport default class WoocommerceApi {\n\n    constructor() {\n        // This is used to \"cache\" duplicate requests.\n        // It's an object because it will have search strings as keys\n        this.cache = {};\n    }\n\n    async getOrders(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['orders-' + searchString]) {\n            return this.cache['orders-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.wooGet(\n            \"orders\",\n            {\n                search: searchString,\n                per_page: 100,\n            }\n        );\n\n        if (response === false) {\n            return false;\n        }\n\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['orders-' + searchString] = result;\n\n        return result;\n    }\n\n    async getOrder(orderId) {\n        // Check the cache\n        if (undefined !== this.cache['order-' + orderId]) {\n            return this.cache['order-' + orderId];\n        }\n\n        // Fetch results\n        const response = await this.wooGet(\n            `orders/${orderId}`\n        );\n\n        if (response === false) {\n            return false;\n        }\n\n        // Decode JSON\n        const result = await response.json();\n\n        let resultAsArray = [ result ];\n\n        // Store in the cache\n        this.cache['order-' + orderId] = resultAsArray;\n\n        return resultAsArray;\n    }\n\n    async getCustomers(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['customers-' + searchString]) {\n            return this.cache['customers-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.wooGet(\n            \"customers\",\n            {\n                search: searchString,\n                per_page: 100,\n                role: 'all',\n            }\n        );\n\n        if (response === false) {\n            return false;\n        }\n        // Decode JSON\n        const result = await response.json();\n\n        // Store in the cache\n        this.cache['customers-' + searchString] = result;\n\n        return result;\n    }\n\n    // TODO: Add docblock and types\n    async wooGet(path, data = {}) {\n        const wooApiBase = globalThis.contentApi.apiRoot + 'wc/v3/';\n\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        // Add the nonce if there is one\n        if (globalThis.contentApi.apiNonce) {\n            data._wpnonce = globalThis.contentApi.apiNonce;\n        }\n\n        const params = globalThis.contentApi.makeParamString(data);\n\n        const response = await fetch(`${wooApiBase}${path}/?${params}`, init);\n\n        if ( response.status === 404 ) {\n            return false;\n        }\n        if ( (response.status < 200 || response.status >= 300) ) {\n            // TODO: Set a \"deferred\" notice to show when the palette is created?\n            if (globalThis.turboAdmin && globalThis.turboAdmin.turboAdminPalette) {\n                globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('WooCommerce API Error. Try visiting the dashboard to refresh things.');\n            } else {\n                // Always log this as people may look\n                turboAdminLog('TURBO ADMIN: WooCommerce API Error. Try visiting the WordPress Dashboard to refresh things.');\n            }\n        }\n\n        return response;\n    }\n\n}\n", "import Storage from '../class-storage.js';\n// import ContentApi from './class-content-api.js';\n\nexport default class GravityFormsApi {\n\n    constructor() {\n        // This is used to \"cache\" duplicate requests.\n        // It's an object because it will have search strings as keys\n        this.cache = {};\n    }\n\n    async getForms(searchString) {\n        // Check the cache\n        if (undefined !== this.cache['gf-forms-' + searchString]) {\n            return this.cache['gf-forms-' + searchString];\n        }\n\n        // Fetch results\n        const response = await this.gfGet(\n            \"forms\",\n            {}\n        );\n\n        // Decode JSON\n        const result = await response.json();\n\n        // TODO: Trap for errors\n\n        // Filter by search string - the API doesn't do this for us\n        const searchStringLowerCase = searchString.toLowerCase();\n        const formIds = Object.keys(result);\n        for (let k = 0; k < formIds.length; k++) {\n            const thisId = formIds[k];\n            if (! result[thisId].title.toLowerCase().includes(searchStringLowerCase)) {\n                delete result[thisId];\n            }\n        }\n\n        // Store in the cache\n        this.cache['gf-forms-' + searchString] = result;\n\n        return result;\n    }\n\n    async gfGet(path, data = {}) {\n        const gfApiBase = globalThis.contentApi.apiRoot + 'gf/v2/';\n\n        const init = {\n            method: 'GET',\n            headers: {},\n            mode: 'cors',\n            cache: 'no-store',\n            credentials: 'include'\n        }\n\n        // Add the nonce if there is one\n        if (globalThis.contentApi.apiNonce) {\n            data._wpnonce = globalThis.contentApi.apiNonce;\n        }\n\n        const params = globalThis.contentApi.makeParamString(data);\n\n        const response = await fetch(`${gfApiBase}${path}/?${params}`);\n\n        if (response.status < 200 || response.status >= 300) {\n            // TODO: Set a \"deferred\" notice to show when the palette is created?\n            if (globalThis.turboAdmin && globalThis.turboAdmin.turboAdminPalette) {\n                globalThis.turboAdmin.turboAdminPalette.showPaletteNotice('Gravity Forms API Error. Try visiting the dashboard to refresh things.');\n            } else {\n                // Always log this as people may look\n                turboAdminLog('TURBO ADMIN: Gravity Forms API Error. Try visiting the WordPress Dashboard to refresh things.');\n            }\n        }\n\n        return response;\n    }\n\n}\n", "import TurboAdmin from './class-turbo-admin.js';\nimport ContentApi from './apis/class-content-api.js';\nimport Wp from './class-wp.js';\nimport TurboAdminWpNotices from './class-turbo-admin-wp-notices.js';\nimport WoocommerceApi from './apis/class-woocommerce-api.js';\nimport GravityFormsApi from './apis/class-gravity-forms-api.js';\n\nconst taStorageKey = 'turbo-admin-settings';\n\nlet debugMode = false;\n\nwindow.turboAdminLog = function() {\n    if (debugMode) {\n        console.log(...arguments);\n    }\n}\n\nwindow.turboAdminIsExtension = function() {\n    return 'undefined' !== typeof (chrome.storage);\n}\n\n// Use this to clear storage\n// chrome.storage.local.remove(taStorageKey).then();\n\n// Note that in the extension, the globalThis is not the browser's global scope,\n// it is sandboxed. So we can't check across the plugin/extension boundary here.\nasync function taInit(settings) {\n\n    if (typeof(globalThis.turboAdmin) !== 'undefined') {\n        // Already initialised for some reason\n        return;\n    }\n    globalThis.turboAdmin = null;\n\n    // Handle empty settings\n    if (typeof(settings[taStorageKey]) === 'undefined') {\n        console.log('Weird. Turbo Admin could not find any settings');\n        return;\n    }\n\n    globalThis.turboAdminOptions = settings[taStorageKey];\n\n    // Set debug mode\n    debugMode = globalThis.turboAdminOptions['debug-mode'];\n\n    turboAdminLog('Preparing Turbo Admin');\n\n    // Get Wp stuff ready\n    globalThis.taWp = new Wp();\n\n    // Parts of this init are async.\n    await globalThis.taWp.completeInit();\n\n    turboAdminLog('Turbo Admin: WP is initialised');\n\n    // Get/set api settings\n    globalThis.contentApi = new ContentApi();\n    await globalThis.contentApi.discoverApiRoot();\n    await globalThis.contentApi.discoverPostTypes();\n    globalThis.woocommerceApi = new WoocommerceApi();\n    globalThis.gravityFormsApi = new GravityFormsApi();\n\n    turboAdminLog('Turbo Admin: Content API is initialised');\n\n    globalThis.turboAdmin = new TurboAdmin(globalThis.turboAdminOptions);\n    await globalThis.turboAdmin.init();\n\n\n\n    // This needs all the APIs to be ready\n    await globalThis.turboAdmin.activatePlugins();\n\n    if (settings[taStorageKey]['hide-notices']) {\n        globalThis.turboAdminWpNotices = new TurboAdminWpNotices(settings[taStorageKey].rememberedNoticeIds);\n    }\n}\n\n/**\n * This is plugin-specific. It should not be present in the extension code.\n */\ndocument.addEventListener('DOMContentLoaded', async e => {\n\tglobalThis.turboAdminOptions = {};\n\tglobalThis.turboAdminOptions[taStorageKey] = {\n\t\t// wpTurboAdmin is set using wp_localize_script\n\t\tshortcutKeys: globalThis.wpTurboAdmin.keys,\n        // These don't apply to the plugin version\n        'block-editor-fullscreen-disable': false,\n        'block-editor-welcome-screen-kill': false,\n        // I don't think we'll do this in the plugin as the code would be SO different.\n        'live-dev-notice': false,\n        'list-table-keyboard-shortcuts': globalThis.wpTurboAdmin['listTableShortcuts'] === '1',\n        'hide-notices': globalThis.wpTurboAdmin['hideNotices'] === '1',\n        'rememberedNoticeIds': JSON.parse(window.localStorage.getItem('rememberedNoticeIds')) ?? new Array(),\n        'barkeeper': globalThis.wpTurboAdmin['barkeeper'] === '1',\n        'admin-bar-search': globalThis.wpTurboAdmin['adminBarSearch'] === '1',\n        'debug-mode': globalThis.wpTurboAdmin['debugMode'] === '1',\n\t}\n\tawait taInit(globalThis.turboAdminOptions);\n});\n"],
    5   "mappings": "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",
     3  "sources": ["../src/fuse-6.4.6.js", "../src/class-turbo-admin-palette.js", "../src/types/class-s.js", "../src/plugins/class-turbo-admin-mu-sites.js", "../src/plugins/class-turbo-admin-oxygen-buillder.js", "../src/class-turbo-admin.js", "../src/class-wp.js", "../src/apis/class-woocommerce-api.js", "../src/apis/class-gravity-forms-api.js", "../src/main.js"],
     4  "sourcesContent": ["/**\n * Fuse.js v6.4.6 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2021 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\nvar e, t; e = this, t = function () { \"use strict\"; function e(t) { return (e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e })(t) } function t(e, t) { if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\") } function n(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) } } function r(e, t, r) { return t && n(e.prototype, t), r && n(e, r), e } function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter((function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable }))), n.push.apply(n, r) } return n } function c(e) { for (var t = 1; t < arguments.length; t++) { var n = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(n), !0).forEach((function (t) { i(e, t, n[t]) })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : o(Object(n)).forEach((function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)) })) } return e } function a(e, t) { if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\"); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), t && u(e, t) } function s(e) { return (s = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) { return e.__proto__ || Object.getPrototypeOf(e) })(e) } function u(e, t) { return (u = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e })(e, t) } function h(e, t) { return !t || \"object\" != typeof t && \"function\" != typeof t ? function (e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e }(e) : t } function f(e) { var t = function () { if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1; if (Reflect.construct.sham) return !1; if (\"function\" == typeof Proxy) return !0; try { return Date.prototype.toString.call(Reflect.construct(Date, [], (function () { }))), !0 } catch (e) { return !1 } }(); return function () { var n, r = s(e); if (t) { var i = s(this).constructor; n = Reflect.construct(r, arguments, i) } else n = r.apply(this, arguments); return h(this, n) } } function l(e) { return function (e) { if (Array.isArray(e)) return d(e) }(e) || function (e) { if (\"undefined\" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e) }(e) || function (e, t) { if (e) { if (\"string\" == typeof e) return d(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); return \"Object\" === n && e.constructor && (n = e.constructor.name), \"Map\" === n || \"Set\" === n ? Array.from(e) : \"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? d(e, t) : void 0 } }(e) || function () { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\") }() } function d(e, t) { (null == t || t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n < t; n++)r[n] = e[n]; return r } function v(e) { return Array.isArray ? Array.isArray(e) : \"[object Array]\" === b(e) } function g(e) { return \"string\" == typeof e } function y(e) { return \"number\" == typeof e } function p(e) { return !0 === e || !1 === e || function (e) { return m(e) && null !== e }(e) && \"[object Boolean]\" == b(e) } function m(t) { return \"object\" === e(t) } function k(e) { return null != e } function M(e) { return !e.trim().length } function b(e) { return null == e ? void 0 === e ? \"[object Undefined]\" : \"[object Null]\" : Object.prototype.toString.call(e) } var x = function (e) { return \"Invalid value for key \".concat(e) }, L = function (e) { return \"Pattern length exceeds max of \".concat(e, \".\") }, S = Object.prototype.hasOwnProperty, w = function () { function e(n) { var r = this; t(this, e), this._keys = [], this._keyMap = {}; var i = 0; n.forEach((function (e) { var t = _(e); i += t.weight, r._keys.push(t), r._keyMap[t.id] = t, i += t.weight })), this._keys.forEach((function (e) { e.weight /= i })) } return r(e, [{ key: \"get\", value: function (e) { return this._keyMap[e] } }, { key: \"keys\", value: function () { return this._keys } }, { key: \"toJSON\", value: function () { return JSON.stringify(this._keys) } }]), e }(); function _(e) { var t = null, n = null, r = null, i = 1; if (g(e) || v(e)) r = e, t = O(e), n = j(e); else { if (!S.call(e, \"name\")) throw new Error(function (e) { return \"Missing \".concat(e, \" property in key\") }(\"name\")); var o = e.name; if (r = o, S.call(e, \"weight\") && (i = e.weight) <= 0) throw new Error(function (e) { return \"Property 'weight' in key '\".concat(e, \"' must be a positive integer\") }(o)); t = O(o), n = j(o) } return { path: t, id: n, weight: i, src: r } } function O(e) { return v(e) ? e : e.split(\".\") } function j(e) { return v(e) ? e.join(\".\") : e } var A = c({}, { isCaseSensitive: !1, includeScore: !1, keys: [], shouldSort: !0, sortFn: function (e, t) { return e.score === t.score ? e.idx < t.idx ? -1 : 1 : e.score < t.score ? -1 : 1 } }, {}, { includeMatches: !1, findAllMatches: !1, minMatchCharLength: 1 }, {}, { location: 0, threshold: .6, distance: 100 }, {}, { useExtendedSearch: !1, getFn: function (e, t) { var n = [], r = !1; return function e(t, i, o) { if (k(t)) if (i[o]) { var c = t[i[o]]; if (!k(c)) return; if (o === i.length - 1 && (g(c) || y(c) || p(c))) n.push(function (e) { return null == e ? \"\" : function (e) { if (\"string\" == typeof e) return e; var t = e + \"\"; return \"0\" == t && 1 / e == -1 / 0 ? \"-0\" : t }(e) }(c)); else if (v(c)) { r = !0; for (var a = 0, s = c.length; a < s; a += 1)e(c[a], i, o + 1) } else i.length && e(c, i, o + 1) } else n.push(t) }(e, g(t) ? t.split(\".\") : t, 0), r ? n : n[0] }, ignoreLocation: !1, ignoreFieldNorm: !1 }), I = /[^ ]+/g; function C() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 3, t = new Map, n = Math.pow(10, e); return { get: function (e) { var r = e.match(I).length; if (t.has(r)) return t.get(r); var i = 1 / Math.sqrt(r), o = parseFloat(Math.round(i * n) / n); return t.set(r, o), o }, clear: function () { t.clear() } } } var E = function () { function e() { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r; t(this, e), this.norm = C(3), this.getFn = i, this.isCreated = !1, this.setIndexRecords() } return r(e, [{ key: \"setSources\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.docs = e } }, { key: \"setIndexRecords\", value: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.records = e } }, { key: \"setKeys\", value: function () { var e = this, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.keys = t, this._keysMap = {}, t.forEach((function (t, n) { e._keysMap[t.id] = n })) } }, { key: \"create\", value: function () { var e = this; !this.isCreated && this.docs.length && (this.isCreated = !0, g(this.docs[0]) ? this.docs.forEach((function (t, n) { e._addString(t, n) })) : this.docs.forEach((function (t, n) { e._addObject(t, n) })), this.norm.clear()) } }, { key: \"add\", value: function (e) { var t = this.size(); g(e) ? this._addString(e, t) : this._addObject(e, t) } }, { key: \"removeAt\", value: function (e) { this.records.splice(e, 1); for (var t = e, n = this.size(); t < n; t += 1)this.records[t].i -= 1 } }, { key: \"getValueForItemAtKeyId\", value: function (e, t) { return e[this._keysMap[t]] } }, { key: \"size\", value: function () { return this.records.length } }, { key: \"_addString\", value: function (e, t) { if (k(e) && !M(e)) { var n = { v: e, i: t, n: this.norm.get(e) }; this.records.push(n) } } }, { key: \"_addObject\", value: function (e, t) { var n = this, r = { i: t, $: {} }; this.keys.forEach((function (t, i) { var o = n.getFn(e, t.path); if (k(o)) if (v(o)) !function () { for (var e = [], t = [{ nestedArrIndex: -1, value: o }]; t.length;) { var c = t.pop(), a = c.nestedArrIndex, s = c.value; if (k(s)) if (g(s) && !M(s)) { var u = { v: s, i: a, n: n.norm.get(s) }; e.push(u) } else v(s) && s.forEach((function (e, n) { t.push({ nestedArrIndex: n, value: e }) })) } r.$[i] = e }(); else if (!M(o)) { var c = { v: o, n: n.norm.get(o) }; r.$[i] = c } })), this.records.push(r) } }, { key: \"toJSON\", value: function () { return { keys: this.keys, records: this.records } } }]), e }(); function $(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.getFn, i = void 0 === r ? A.getFn : r, o = new E({ getFn: i }); return o.setKeys(e.map(_)), o.setSources(t), o.create(), o } function R(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.errors, r = void 0 === n ? 0 : n, i = t.currentLocation, o = void 0 === i ? 0 : i, c = t.expectedLocation, a = void 0 === c ? 0 : c, s = t.distance, u = void 0 === s ? A.distance : s, h = t.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r / e.length; if (f) return l; var d = Math.abs(a - o); return u ? l + d / u : d ? 1 : l } function F() { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : A.minMatchCharLength, n = [], r = -1, i = -1, o = 0, c = e.length; o < c; o += 1) { var a = e[o]; a && -1 === r ? r = o : a || -1 === r || ((i = o - 1) - r + 1 >= t && n.push([r, i]), r = -1) } return e[o - 1] && o - r >= t && n.push([r, o - 1]), n } function P(e) { for (var t = {}, n = 0, r = e.length; n < r; n += 1) { var i = e.charAt(n); t[i] = (t[i] || 0) | 1 << r - n - 1 } return t } var N = function () { function e(n) { var r = this, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, o = i.location, c = void 0 === o ? A.location : o, a = i.threshold, s = void 0 === a ? A.threshold : a, u = i.distance, h = void 0 === u ? A.distance : u, f = i.includeMatches, l = void 0 === f ? A.includeMatches : f, d = i.findAllMatches, v = void 0 === d ? A.findAllMatches : d, g = i.minMatchCharLength, y = void 0 === g ? A.minMatchCharLength : g, p = i.isCaseSensitive, m = void 0 === p ? A.isCaseSensitive : p, k = i.ignoreLocation, M = void 0 === k ? A.ignoreLocation : k; if (t(this, e), this.options = { location: c, threshold: s, distance: h, includeMatches: l, findAllMatches: v, minMatchCharLength: y, isCaseSensitive: m, ignoreLocation: M }, this.pattern = m ? n : n.toLowerCase(), this.chunks = [], this.pattern.length) { var b = function (e, t) { r.chunks.push({ pattern: e, alphabet: P(e), startIndex: t }) }, x = this.pattern.length; if (x > 32) { for (var L = 0, S = x % 32, w = x - S; L < w;)b(this.pattern.substr(L, 32), L), L += 32; if (S) { var _ = x - 32; b(this.pattern.substr(_), _) } } else b(this.pattern, 0) } } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.options, n = t.isCaseSensitive, r = t.includeMatches; if (n || (e = e.toLowerCase()), this.pattern === e) { var i = { isMatch: !0, score: 0 }; return r && (i.indices = [[0, e.length - 1]]), i } var o = this.options, c = o.location, a = o.distance, s = o.threshold, u = o.findAllMatches, h = o.minMatchCharLength, f = o.ignoreLocation, d = [], v = 0, g = !1; this.chunks.forEach((function (t) { var n = t.pattern, i = t.alphabet, o = t.startIndex, y = function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, i = r.location, o = void 0 === i ? A.location : i, c = r.distance, a = void 0 === c ? A.distance : c, s = r.threshold, u = void 0 === s ? A.threshold : s, h = r.findAllMatches, f = void 0 === h ? A.findAllMatches : h, l = r.minMatchCharLength, d = void 0 === l ? A.minMatchCharLength : l, v = r.includeMatches, g = void 0 === v ? A.includeMatches : v, y = r.ignoreLocation, p = void 0 === y ? A.ignoreLocation : y; if (t.length > 32) throw new Error(L(32)); for (var m, k = t.length, M = e.length, b = Math.max(0, Math.min(o, M)), x = u, S = b, w = d > 1 || g, _ = w ? Array(M) : []; (m = e.indexOf(t, S)) > -1;) { var O = R(t, { currentLocation: m, expectedLocation: b, distance: a, ignoreLocation: p }); if (x = Math.min(O, x), S = m + k, w) for (var j = 0; j < k;)_[m + j] = 1, j += 1 } S = -1; for (var I = [], C = 1, E = k + M, $ = 1 << k - 1, P = 0; P < k; P += 1) { for (var N = 0, D = E; N < D;) { var z = R(t, { errors: P, currentLocation: b + D, expectedLocation: b, distance: a, ignoreLocation: p }); z <= x ? N = D : E = D, D = Math.floor((E - N) / 2 + N) } E = D; var K = Math.max(1, b - D + 1), q = f ? M : Math.min(b + D, M) + k, W = Array(q + 2); W[q + 1] = (1 << P) - 1; for (var J = q; J >= K; J -= 1) { var T = J - 1, U = n[e.charAt(T)]; if (w && (_[T] = +!!U), W[J] = (W[J + 1] << 1 | 1) & U, P && (W[J] |= (I[J + 1] | I[J]) << 1 | 1 | I[J + 1]), W[J] & $ && (C = R(t, { errors: P, currentLocation: T, expectedLocation: b, distance: a, ignoreLocation: p })) <= x) { if (x = C, (S = T) <= b) break; K = Math.max(1, 2 * b - S) } } var V = R(t, { errors: P + 1, currentLocation: b, expectedLocation: b, distance: a, ignoreLocation: p }); if (V > x) break; I = W } var B = { isMatch: S >= 0, score: Math.max(.001, C) }; if (w) { var G = F(_, d); G.length ? g && (B.indices = G) : B.isMatch = !1 } return B }(e, n, i, { location: c + o, distance: a, threshold: s, findAllMatches: u, minMatchCharLength: h, includeMatches: r, ignoreLocation: f }), p = y.isMatch, m = y.score, k = y.indices; p && (g = !0), v += m, p && k && (d = [].concat(l(d), l(k))) })); var y = { isMatch: g, score: g ? v / this.chunks.length : 1 }; return g && r && (y.indices = d), y } }]), e }(), D = function () { function e(n) { t(this, e), this.pattern = n } return r(e, [{ key: \"search\", value: function () { } }], [{ key: \"isMultiMatch\", value: function (e) { return z(e, this.multiRegex) } }, { key: \"isSingleMatch\", value: function (e) { return z(e, this.singleRegex) } }]), e }(); function z(e, t) { var n = e.match(t); return n ? n[1] : null } var K = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e === this.pattern; return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"exact\" } }, { key: \"multiRegex\", get: function () { return /^=\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^=(.*)$/ } }]), i }(D), q = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = -1 === e.indexOf(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)$/ } }]), i }(D), W = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, this.pattern.length - 1] } } }], [{ key: \"type\", get: function () { return \"prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^\\^(.*)$/ } }]), i }(D), J = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.startsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-prefix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\\^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^!\\^(.*)$/ } }]), i }(D), T = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [e.length - this.pattern.length, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)\\$$/ } }]), i }(D), U = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { var t = !e.endsWith(this.pattern); return { isMatch: t, score: t ? 0 : 1, indices: [0, e.length - 1] } } }], [{ key: \"type\", get: function () { return \"inverse-suffix-exact\" } }, { key: \"multiRegex\", get: function () { return /^!\"(.*)\"\\$$/ } }, { key: \"singleRegex\", get: function () { return /^!(.*)\\$$/ } }]), i }(D), V = function (e) { a(i, e); var n = f(i); function i(e) { var r, o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, c = o.location, a = void 0 === c ? A.location : c, s = o.threshold, u = void 0 === s ? A.threshold : s, h = o.distance, f = void 0 === h ? A.distance : h, l = o.includeMatches, d = void 0 === l ? A.includeMatches : l, v = o.findAllMatches, g = void 0 === v ? A.findAllMatches : v, y = o.minMatchCharLength, p = void 0 === y ? A.minMatchCharLength : y, m = o.isCaseSensitive, k = void 0 === m ? A.isCaseSensitive : m, M = o.ignoreLocation, b = void 0 === M ? A.ignoreLocation : M; return t(this, i), (r = n.call(this, e))._bitapSearch = new N(e, { location: a, threshold: u, distance: f, includeMatches: d, findAllMatches: g, minMatchCharLength: p, isCaseSensitive: k, ignoreLocation: b }), r } return r(i, [{ key: \"search\", value: function (e) { return this._bitapSearch.searchIn(e) } }], [{ key: \"type\", get: function () { return \"fuzzy\" } }, { key: \"multiRegex\", get: function () { return /^\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^(.*)$/ } }]), i }(D), B = function (e) { a(i, e); var n = f(i); function i(e) { return t(this, i), n.call(this, e) } return r(i, [{ key: \"search\", value: function (e) { for (var t, n = 0, r = [], i = this.pattern.length; (t = e.indexOf(this.pattern, n)) > -1;)n = t + i, r.push([t, n - 1]); var o = !!r.length; return { isMatch: o, score: o ? 0 : 1, indices: r } } }], [{ key: \"type\", get: function () { return \"include\" } }, { key: \"multiRegex\", get: function () { return /^'\"(.*)\"$/ } }, { key: \"singleRegex\", get: function () { return /^'(.*)$/ } }]), i }(D), G = [K, B, W, J, U, T, q, V], H = G.length, Q = / +(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/; function X(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return e.split(\"|\").map((function (e) { for (var n = e.trim().split(Q).filter((function (e) { return e && !!e.trim() })), r = [], i = 0, o = n.length; i < o; i += 1) { for (var c = n[i], a = !1, s = -1; !a && ++s < H;) { var u = G[s], h = u.isMultiMatch(c); h && (r.push(new u(h, t)), a = !0) } if (!a) for (s = -1; ++s < H;) { var f = G[s], l = f.isSingleMatch(c); if (l) { r.push(new f(l, t)); break } } } return r })) } var Y = new Set([V.type, B.type]), Z = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = r.isCaseSensitive, o = void 0 === i ? A.isCaseSensitive : i, c = r.includeMatches, a = void 0 === c ? A.includeMatches : c, s = r.minMatchCharLength, u = void 0 === s ? A.minMatchCharLength : s, h = r.ignoreLocation, f = void 0 === h ? A.ignoreLocation : h, l = r.findAllMatches, d = void 0 === l ? A.findAllMatches : l, v = r.location, g = void 0 === v ? A.location : v, y = r.threshold, p = void 0 === y ? A.threshold : y, m = r.distance, k = void 0 === m ? A.distance : m; t(this, e), this.query = null, this.options = { isCaseSensitive: o, includeMatches: a, minMatchCharLength: u, findAllMatches: d, ignoreLocation: f, location: g, threshold: p, distance: k }, this.pattern = o ? n : n.toLowerCase(), this.query = X(this.pattern, this.options) } return r(e, [{ key: \"searchIn\", value: function (e) { var t = this.query; if (!t) return { isMatch: !1, score: 1 }; var n = this.options, r = n.includeMatches; e = n.isCaseSensitive ? e : e.toLowerCase(); for (var i = 0, o = [], c = 0, a = 0, s = t.length; a < s; a += 1) { var u = t[a]; o.length = 0, i = 0; for (var h = 0, f = u.length; h < f; h += 1) { var d = u[h], v = d.search(e), g = v.isMatch, y = v.indices, p = v.score; if (!g) { c = 0, i = 0, o.length = 0; break } if (i += 1, c += p, r) { var m = d.constructor.type; Y.has(m) ? o = [].concat(l(o), l(y)) : o.push(y) } } if (i) { var k = { isMatch: !0, score: c / i }; return r && (k.indices = o), k } } return { isMatch: !1, score: 1 } } }], [{ key: \"condition\", value: function (e, t) { return t.useExtendedSearch } }]), e }(), ee = []; function te(e, t) { for (var n = 0, r = ee.length; n < r; n += 1) { var i = ee[n]; if (i.condition(e, t)) return new i(e, t) } return new N(e, t) } var ne = \"$and\", re = \"$or\", ie = \"$path\", oe = \"$val\", ce = function (e) { return !(!e[ne] && !e[re]) }, ae = function (e) { return !!e[ie] }, se = function (e) { return !v(e) && m(e) && !ce(e) }, ue = function (e) { return i({}, ne, Object.keys(e).map((function (t) { return i({}, t, e[t]) }))) }; function he(e, t) { var n = t.ignoreFieldNorm, r = void 0 === n ? A.ignoreFieldNorm : n; e.forEach((function (e) { var t = 1; e.matches.forEach((function (e) { var n = e.key, i = e.norm, o = e.score, c = n ? n.weight : null; t *= Math.pow(0 === o && c ? Number.EPSILON : o, (c || 1) * (r ? 1 : i)) })), e.score = t })) } function fe(e, t) { var n = e.matches; t.matches = [], k(n) && n.forEach((function (e) { if (k(e.indices) && e.indices.length) { var n = { indices: e.indices, value: e.value }; e.key && (n.key = e.key.src), e.idx > -1 && (n.refIndex = e.idx), t.matches.push(n) } })) } function le(e, t) { t.score = e.score } function de(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.includeMatches, i = void 0 === r ? A.includeMatches : r, o = n.includeScore, c = void 0 === o ? A.includeScore : o, a = []; return i && a.push(fe), c && a.push(le), e.map((function (e) { var n = e.idx, r = { item: t[n], refIndex: n }; return a.length && a.forEach((function (t) { t(e, r) })), r })) } var ve = function () { function e(n) { var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = arguments.length > 2 ? arguments[2] : void 0; t(this, e), this.options = c({}, A, {}, r), this.options.useExtendedSearch, this._keyStore = new w(this.options.keys), this.setCollection(n, i) } return r(e, [{ key: \"setCollection\", value: function (e, t) { if (this._docs = e, t && !(t instanceof E)) throw new Error(\"Incorrect 'index' type\"); this._myIndex = t || $(this.options.keys, this._docs, { getFn: this.options.getFn }) } }, { key: \"add\", value: function (e) { k(e) && (this._docs.push(e), this._myIndex.add(e)) } }, { key: \"remove\", value: function () { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : function () { return !1 }, t = [], n = 0, r = this._docs.length; n < r; n += 1) { var i = this._docs[n]; e(i, n) && (this.removeAt(n), n -= 1, r -= 1, t.push(i)) } return t } }, { key: \"removeAt\", value: function (e) { this._docs.splice(e, 1), this._myIndex.removeAt(e) } }, { key: \"getIndex\", value: function () { return this._myIndex } }, { key: \"search\", value: function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.limit, r = void 0 === n ? -1 : n, i = this.options, o = i.includeMatches, c = i.includeScore, a = i.shouldSort, s = i.sortFn, u = i.ignoreFieldNorm, h = g(e) ? g(this._docs[0]) ? this._searchStringList(e) : this._searchObjectList(e) : this._searchLogical(e); return he(h, { ignoreFieldNorm: u }), a && h.sort(s), y(r) && r > -1 && (h = h.slice(0, r)), de(h, this._docs, { includeMatches: o, includeScore: c }) } }, { key: \"_searchStringList\", value: function (e) { var t = te(e, this.options), n = this._myIndex.records, r = []; return n.forEach((function (e) { var n = e.v, i = e.i, o = e.n; if (k(n)) { var c = t.searchIn(n), a = c.isMatch, s = c.score, u = c.indices; a && r.push({ item: n, idx: i, matches: [{ score: s, value: n, norm: o, indices: u }] }) } })), r } }, { key: \"_searchLogical\", value: function (e) { var t = this, n = function (e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = n.auto, i = void 0 === r || r, o = function e(n) { var r = Object.keys(n), o = ae(n); if (!o && r.length > 1 && !ce(n)) return e(ue(n)); if (se(n)) { var c = o ? n[ie] : r[0], a = o ? n[oe] : n[c]; if (!g(a)) throw new Error(x(c)); var s = { keyId: j(c), pattern: a }; return i && (s.searcher = te(a, t)), s } var u = { children: [], operator: r[0] }; return r.forEach((function (t) { var r = n[t]; v(r) && r.forEach((function (t) { u.children.push(e(t)) })) })), u }; return ce(e) || (e = ue(e)), o(e) }(e, this.options), r = this._myIndex.records, i = {}, o = []; return r.forEach((function (e) { var r = e.$, c = e.i; if (k(r)) { var a = function e(n, r, i) { if (!n.children) { var o = n.keyId, c = n.searcher, a = t._findMatches({ key: t._keyStore.get(o), value: t._myIndex.getValueForItemAtKeyId(r, o), searcher: c }); return a && a.length ? [{ idx: i, item: r, matches: a }] : [] } switch (n.operator) { case ne: for (var s = [], u = 0, h = n.children.length; u < h; u += 1) { var f = e(n.children[u], r, i); if (!f.length) return []; s.push.apply(s, l(f)) } return s; case re: for (var d = [], v = 0, g = n.children.length; v < g; v += 1) { var y = e(n.children[v], r, i); if (y.length) { d.push.apply(d, l(y)); break } } return d } }(n, r, c); a.length && (i[c] || (i[c] = { idx: c, item: r, matches: [] }, o.push(i[c])), a.forEach((function (e) { var t, n = e.matches; (t = i[c].matches).push.apply(t, l(n)) }))) } })), o } }, { key: \"_searchObjectList\", value: function (e) { var t = this, n = te(e, this.options), r = this._myIndex, i = r.keys, o = r.records, c = []; return o.forEach((function (e) { var r = e.$, o = e.i; if (k(r)) { var a = []; i.forEach((function (e, i) { a.push.apply(a, l(t._findMatches({ key: e, value: r[i], searcher: n }))) })), a.length && c.push({ idx: o, item: r, matches: a }) } })), c } }, { key: \"_findMatches\", value: function (e) { var t = e.key, n = e.value, r = e.searcher; if (!k(n)) return []; var i = []; if (v(n)) n.forEach((function (e) { var n = e.v, o = e.i, c = e.n; if (k(n)) { var a = r.searchIn(n), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: n, idx: o, norm: c, indices: h }) } })); else { var o = n.v, c = n.n, a = r.searchIn(o), s = a.isMatch, u = a.score, h = a.indices; s && i.push({ score: u, key: t, value: o, norm: c, indices: h }) } return i } }]), e }(); return ve.version = \"6.4.6\", ve.createIndex = $, ve.parseIndex = function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.getFn, r = void 0 === n ? A.getFn : n, i = e.keys, o = e.records, c = new E({ getFn: r }); return c.setKeys(i), c.setIndexRecords(o), c }, ve.config = A, function () { ee.push.apply(ee, arguments) }(Z), ve }, \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = e || self).Fuse = t();\n", "/*\n * Some notes on how this works...\n *\n * paletteData is passed into the constructor and is the initial list of items\n * these are TurboAdminMenuItem objects\n *\n * At any point, buildPaletteItems() can be called to turn the paletteData\n * into an array of \"li\" nodes.\n *\n * updatePaletteItems inserts the paletteItems into the \"ul\" list and sets the\n * selectedElement\n *\n * The selectedItem is always one of the paletteItems\n *\n * paletteSearch rebuilds the paletteItems from the paletteData using\n * buildPaletteItems, and then filters the list with FuseJS\n */\n\nimport Fuse from './fuse-6.4.6.js';\nimport TurboAdminMenuItem from './types/class-turbo-admin-menu-item';\nimport ContentApi from './apis/class-content-api.js';\nimport SearchMode from './types/class-search-mode.js';\nimport ContentItem from './types/class-content-item.js';\n\nexport default class TurboAdminPalette {\n\n\tconstructor(paletteData, options) {\n\n\t\tturboAdminLog('Initialising TurboAdmin');\n\n        this.options = options;\n\n        /** @type {HTMLDivElement} */\n        this.paletteElement      = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteInnerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette'));\n\t\t/** @type {HTMLInputElement} */\n        this.paletteInputElement = /** @type {HTMLInputElement} */ (document.getElementById('ta-command-palette-input'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteItemsContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-items-container'));\n\t\t/** @type {HTMLUListElement} */\n        this.paletteItemsElement = /** @type {HTMLUListElement} */ (document.getElementById('ta-command-palette-items'));\n\t\t/** @type {HTMLDivElement} */\n        this.paletteSubmenuContainerElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-submenu-container'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTag = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-search-mode-tag'));\n        /** @type {HTMLDivElement} */\n        this.paletteSearchModeTabNotice = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-tab-notice'));\n        /** @type {HTMLSpanElement} */\n        this.paletteSearchModeTabNoticeText = /** @type {HTMLSpanElement} */ (document.getElementById('ta-command-palette-tab-notice-text'));\n        /** @type {HTMLDivElement} */\n        this.paletteNoticeElement = /** @type {HTMLDivElement} */ (document.getElementById('ta-command-palette-notice'));\n\n\n        // Add a class if the menu needs refreshing with a visit to the Dashboard\n        if (globalThis.turboAdmin.menuNeedsRefresh) {\n            this.showPaletteNotice('Menu needs refreshing. Visit the Dashboard to refresh.');\n        }\n\n        // We need this when injecting items. We use it to help generate edit URLs. Not the best way but\n        // works for now.\n        /** @type {HTMLUListElement} */\n        this.profileLinkElem = document.getElementById('wp-admin-bar-edit-profile');\n        /** @type {null|String} */\n        this.profileLink = null;\n        if (this.profileLinkElem) {\n            this.profileLink = this.profileLinkElem.querySelector('a').href;\n        }\n\n\t\t// Get palette data\n\t\tthis.paletteData = paletteData;\n\n        // Backup of the palette data for use when we enter a different search mode\n\t\tthis.paletteDataBackup = null;\n\t\tthis.paletteItemsBackup = null;\n        this.paletteItemIndexBackup = null;\n\n\n    // This needs all the APIs to be ready\n    await globalThis.turboAdmin.activatePlugins();\n\n    if (settings[taStorageKey]['hide-notices']) {\n        globalThis.turboAdminWpNotices = new TurboAdminWpNotices(settings[taStorageKey].rememberedNoticeIds);\n    }\n}\n\n/**\n * This is plugin-specific. It should not be present in the extension code.\n */\ndocument.addEventListener('DOMContentLoaded', async e => {\n\tglobalThis.turboAdminOptions = {};\n\tglobalThis.turboAdminOptions[taStorageKey] = {\n\t\t// wpTurboAdmin is set using wp_localize_script\n\t\tshortcutKeys: globalThis.wpTurboAdmin.keys,\n        // These don't apply to the plugin version\n        'block-editor-fullscreen-disable': false,\n        'block-editor-welcome-screen-kill': false,\n        // I don't think we'll do this in the plugin as the code would be SO different.\n        'live-dev-notice': false,\n        'list-table-keyboard-shortcuts': globalThis.wpTurboAdmin['listTableShortcuts'] === '1',\n        'hide-notices': globalThis.wpTurboAdmin['hideNotices'] === '1',\n        'rememberedNoticeIds': JSON.parse(window.localStorage.getItem('rememberedNoticeIds')) ?? new Array(),\n        'barkeeper': globalThis.wpTurboAdmin['barkeeper'] === '1',\n        'admin-bar-search': globalThis.wpTurboAdmin['adminBarSearch'] === '1',\n        'debug-mode': globalThis.wpTurboAdmin['debugMode'] === '1',\n\t}\n\tawait taInit(globalThis.turboAdminOptions);\n});\n"],
     5  "mappings": "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",
    66  "names": []
    77}
  • turbo-admin/trunk/readme.txt

    r2871191 r2919322  
    66Tested up to: 6.2
    77Requires PHP: 7.4
    8 Stable tag: 1.13.2
     8Stable tag: 1.13.
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    185185== Changelog ==
    186186
     187
     188
     189
     190
     191
    187192= 1.13.2 =
    188193
  • turbo-admin/trunk/src/class-turbo-admin-palette.js

    r2871191 r2919322  
    7575        this.paletteItemsBackup = null;
    7676        this.paletteItemIndexBackup = null;
     77
    7778
    7879        // Current search modes/keyword
     
    110111        this.paletteFuseOptions = {
    111112            keys: ['innerText'],
     113
     114
     115
     116
     117
     118
     119
     120
     121
     122
     123
     124
     125
     126
    112127        }
    113128
     
    155170            const li = document.createElement('li');
    156171            const a = document.createElement('a');
    157             li.appendChild(a);
    158             a.href = item.action;
    159             let title = item.title;
    160             if (item.parentTitle) {
    161                 title = item.parentTitle + ": " + title;
    162             }
    163             a.innerHTML = title;
     172            li.appendChild(a);
     173            if (item.actionType === 'url') {
     174                a.href = item.action;
     175                let title = item.title;
     176                if (item.parentTitle) {
     177                    title = item.parentTitle + ": " + title;
     178                }
     179                a.innerHTML = title;
     180            } else if (item.actionType === 'search-mode') {
     181                a.href = '#';
     182                a.innerHTML = item.title;
     183                li.dataset.actionType = item.actionType;
     184                li.dataset.searchMode = item.action.searchMode;
     185            }
    164186            this.addPaletteListItem(li);
    165187        });
     
    474496                turboAdminLog('Found search mode ' + inputValue)
    475497                e.preventDefault();
    476                 // TODO: Work on this.
    477498                await this.enterSearchMode(
    478499                    globalThis.turboAdmin.searchModes[inputValue]);
     
    525546
    526547    /**
     548
     549
     550
     551
     552
     553
     554
     555
     556
     557
     558
     559
     560
     561
     562
    527563     * Leaves the current search mode
    528564     */
     
    533569        this.removeSearchModeTag();
    534570        this.restorePaletteData();
    535         this.paletteInputElement.value = searchMode.keyword;
    536         this.maybeHighlightInputKeyword('');
    537         this.paletteSearchAndUpdate();
    538     }
    539 
    540     /**
    541      * Backups up the palette data to a local variable so that it can be
     571    }
     572
     573    /**
     574     * Backups up the palette data and input value to local variables so that it can be
    542575     * restored later.
    543576     */
     
    546579        this.paletteItemsBackup = this.paletteItems;
    547580        this.paletteItemIndexBackup = this.itemIndex;
    548     }
    549 
    550     /**
    551      * Restores the save palette data - does not rebuild anything
     581        this.paletteInputValueBackup = this.paletteInputElement.value;
     582    }
     583
     584    /**
     585     * Restores the save palette data - highlights and rebuilds
    552586     */
    553587    restorePaletteData() {
     
    555589        this.paletteItems = this.paletteItemsBackup;
    556590        this.itemIndex = this.paletteItemIndexBackup;
     591
     592
     593
    557594    }
    558595
     
    743780            const subMenu = this.selectedItem.querySelector('.ta-submenu');
    744781            this.openSubMenu(subMenu);
     782
     783
     784
     785
    745786            return;
    746787        }
  • turbo-admin/trunk/src/class-turbo-admin.js

    r2871191 r2919322  
    5757import TurboAdminPluginSearch from './plugins/class-turbo-admin-plugins.js';
    5858import TurboAdminUserSearch from './plugins/class-turbo-admin-users.js';
    59 // import TurboAdminWoocommerce from './plugins/class-turbo-admin-woocommerce.js';
    60 // import TurboAdminGravityForms from './plugins/class-turbo-admin-gravity-forms.js';
     59import TurboAdminWoocommerce from './plugins/class-turbo-admin-woocommerce.js';
     60import TurboAdminGravityForms from './plugins/class-turbo-admin-gravity-forms.js';
    6161import TurboAdminMUSites from './plugins/class-turbo-admin-mu-sites.js';
    6262import TurboAdminOxygenBuilder from './plugins/class-turbo-admin-oxygen-buillder.js';
     
    103103        new TurboAdminPluginSearch();
    104104        new TurboAdminUserSearch();
    105         // new TurboAdminWoocommerce();
    106         // new TurboAdminGravityForms();
    107105        new TurboAdminMUSites();
    108106        new TurboAdminOxygenBuilder();
     107
     108
     109
     110
     111
    109112
    110113        // Grab the global Wp object instance
     
    132135                        this.menu = JSON.parse(savedMenu);
    133136                        // Check if there is no "Media" item  - this should ONLY be in the back-end
    134                         if (! this.menu.some(item => item.action.endsWith('upload.php'))) {
     137                        if (! this.menu.some(item => ))) {
    135138                            this.menuNeedsRefresh = true;
    136139                        }
     
    291294
    292295        for (let i=0; i < pluginKeys.length; i++) {
     296
    293297            extraItems = extraItems.concat(await this.plugins[pluginKeys[i]].getAdditionalItemDefinitions());
    294298        }
     
    297301        extraItems = extraItems.concat(
    298302            [
     303
    299304                {
    300305                    'detectType': 'dom',
    301306                    'detectSelector': 'body.wp-admin #wp-admin-bar-view-site a',
     307
    302308                    'itemTitleFunction': () => 'View/visit site',
    303309                    'itemUrlFunction': (element) => element.href
     
    306312                    'detectType': 'dom',
    307313                    'detectSelector': '#wp-admin-bar-dashboard a',
     314
    308315                    'itemTitleFunction': (element) => element.textContent,
    309316                    'itemUrlFunction': (element) => element.href
     
    312319                    'detectType': 'dom',
    313320                    'detectSelector': '#wpadminbar',
     321
    314322                    'itemTitleFunction': () => 'Logout',
    315323                    'itemUrlFunction': () => document.getElementById('wp-admin-bar-logout')?.querySelector('a')?.href
     
    318326                    'detectType': 'dom',
    319327                    'detectSelector': '#wp-admin-bar-edit a',
     328
    320329                    'itemTitleFunction': (item) => item.textContent,
    321330                    'itemUrlFunction': (item) => item.href,
     
    325334                    'detectType': 'dom',
    326335                    'detectSelector': '#wp-admin-bar-view a',
     336
    327337                    'itemTitleFunction': (item) => item.textContent,
    328338                    'itemUrlFunction': (item) => item.href,
     
    332342                    'detectType': 'dom',
    333343                    'detectSelector': '#wp-admin-bar-new-content .ab-submenu a',
     344
    334345                    'itemTitleFunction': (item) => 'New ' + item.textContent,
    335346                    'itemUrlFunction': (item) => item.href
     
    338349                    'detectType': 'dom',
    339350                    'detectSelector': '#wp-admin-bar-customize a',
     351
    340352                    'itemTitleFunction': (item) => item.textContent,
    341353                    'itemUrlFunction': (item) => item.href
     
    344356                    'detectType': 'dom',
    345357                    'detectSelectorNone': '#wpadminbar, #loginform',
     358
    346359                    'itemTitleFunction': () => "Log in",
    347360                    'itemUrlFunction': () => {
     
    357370                    'detectType': 'dom',
    358371                    'detectSelector': '#backtoblog a',
     372
    359373                    'itemTitleFunction': () => "View/visit site",
    360374                    'itemUrlFunction': (element) => element.href
     
    364378                    'detectType': 'dom',
    365379                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin > a',
     380
    366381                    'itemTitleFunction': () => "Network Admin",
    367382                    'itemUrlFunction': (element) => element.href
     
    370385                    'detectType': 'dom',
    371386                    'detectSelector': '#wp-admin-bar-my-sites #wp-admin-bar-network-admin .ab-submenu a',
     387
    372388                    'itemTitleFunction': (element) => 'Network Admin: ' + element.textContent,
    373389                    'itemUrlFunction': (element) => element.href
     
    379395            let detected = false;
    380396            let elements = null;
    381             if (item.detectType === 'url') {
     397            if (item.detectType === 'none') {
     398                detected = true;
     399                // Just grab any old element. We shouldn't need it.
     400                elements = document.querySelectorAll('body');
     401            } else if (item.detectType === 'url') {
    382402                detected = Boolean(window.location.href.includes(item.detectPattern));
    383403                // Just grab any old element. We shouldn't need it.
     
    399419
    400420            elements.forEach(element => {
    401                 const newItem = new TurboAdminMenuItem(item.itemTitleFunction(element), item.itemUrlFunction(element), '', item?.noCache);
     421                const newItem = );
    402422                // Might already have one so check.
    403423                if (this.menu.some(menuItem => {
  • turbo-admin/trunk/src/main.js

    r2871191 r2919322  
    1717
    1818window.turboAdminIsExtension = function() {
    19     return 'undefined' !== typeof (chrome.storage);
     19    return ;
    2020}
    2121
     
    6666    await globalThis.turboAdmin.init();
    6767
    68 
    69 
    7068    // This needs all the APIs to be ready
    7169    await globalThis.turboAdmin.activatePlugins();
  • turbo-admin/trunk/src/plugins/class-turbo-admin-content-search.js

    r2871191 r2919322  
    88        super('WP Content');
    99
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
    1023        // Register a search mode for each post type
    11         const postTypeKeys = Object.keys(globalThis.contentApi.postTypes);
    12         for (let i = 0; i < postTypeKeys.length; i++) {
    13             const thisPostTypeKey = postTypeKeys[i];
     24        for (let i = 0; i < filteredPostTypeKeys.length; i++) {
     25            const thisPostTypeKey = filteredPostTypeKeys[i];
    1426            const thisPostType = globalThis.contentApi.postTypes[thisPostTypeKey];
    1527            // turboAdminLog('Adding search mode for post type', thisPostType);
     
    2234        // Register search all post types mode
    2335        this.searchModes.push( new SearchMode('search', 'All post types', this.contentSearch.bind(this)) );
    24         this.searchModes.push( new SearchMode('find', 'All post types', this.contentSearch.bind(this)) );
     36        // Don't show this one in the palette
     37        this.searchModes.push( new SearchMode('find', 'All post types', this.contentSearch.bind(this), null, false) );
    2538    }
    2639
  • turbo-admin/trunk/src/types/class-item-definition.js

    r2871191 r2919322  
    1616
    1717    /**
     18
     19
     20
     21
     22
     23
     24
    1825     * The method of detecting items. Can be:
    1926     *  - 'dom' for checking if a DOM element exists (requires detectSelector or detectSelectorNone)
    2027     *  - 'url' if the current URL is being checked (requires detectPattern)
     28
    2129     *
    2230     * @type {string}
     
    5462
    5563    /**
     64
     65
     66
     67
     68
     69
     70
     71
     72
    5673     * A callback used to generate a menu item link URL from a detected element. Should be passed an
    5774     * HTML element and should return a string
     
    6077     */
    6178     itemUrlFunction = null;
     79
     80
     81
     82
     83
     84
     85
     86
     87
    6288
    6389     /**
  • turbo-admin/trunk/src/types/class-search-mode.js

    r2835882 r2919322  
    3939
    4040    /**
     41
     42
     43
     44
     45
     46
     47
     48
    4149     * Constructs a new search mode
    4250     *
     
    4553     * @param {SearchCallback} searchCallback
    4654     * @param {SearchCallback} defaultItemsCallback
     55
    4756     */
    48     constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {
     57    constructor(keyword, displayName, searchCallback, defaultItemsCallback = null) {
    4958        this.keyword = keyword;
    5059        this.displayName = displayName;
    5160        this.searchCallback = searchCallback;
    5261        this.defaultItemsCallback = defaultItemsCallback;
     62
    5363    }
    5464}
  • turbo-admin/trunk/src/types/class-turbo-admin-menu-item.js

    r2835882 r2919322  
     1
     2
    13/**
    24 * Menu items are the items ready to appear in the palette.
     
    1416
    1517    /**
    16      * The action of the item is the URL to visit when the item is clicked
     18     * The type of action to take when the item is clicked. Can be:
     19     * - 'url' to visit a URL (default)
     20     * - 'search-mode' to enter a search mode
     21     */
     22    actionType = 'url';
     23
     24    /**
     25     * The action of the item is the URL to visit when the item is clicked or the action data
     26     * if the action type is not 'url'
    1727     *
    18      * @type {string}
     28     * @type {string}
    1929     */
    2030    action = '';
     
    3747    noCache = false;
    3848
     49
     50
     51
     52
     53
     54
     55
     56
    3957    constructor(title, action, parentTitle, noCache = false) {
    4058        this.title = title;
     59
    4160        this.action = action;
    4261        this.parentTitle = parentTitle;
     
    4463    }
    4564
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
    4694    sameAs(item) {
    4795        return item.title === this.title &&
  • turbo-admin/trunk/src/types/class-turbo-admin-plugin.js

    r2871191 r2919322  
    5555
    5656    /**
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
    5786     * Get additional menu items to be added to the main menu
    5887     *
     
    6089     */
    6190    async getAdditionalItemDefinitions() {
     91
     92
     93
     94
    6295        return [];
    6396    }
  • turbo-admin/trunk/turbo-admin.php

    r2871191 r2919322  
    99 * Text Domain:     turbo-admin
    1010 * Domain Path:     /languages
    11  * Version:         1.13.2
     11 * Version:         1.13.
    1212 *
    1313 * @package         Turbo_Admin
Note: See TracChangeset for help on using the changeset viewer.