UNPKG

@caspingus/lt

Version:

A utility library of helpers and extensions useful when working with Learnosity APIs.

168 lines (167 loc) 7.61 kB
import { r as e, t } from "../../extensionsFactory-hk5ijx1G.js"; import { t as n } from "../../isSymbol-Bt-81A1s.js"; //#region node_modules/lodash-es/identity.js function r(e) { return e; } //#endregion //#region node_modules/lodash-es/_baseGt.js function i(e, t) { return e > t; } //#endregion //#region node_modules/lodash-es/_baseExtremum.js function a(e, t, r) { for (var i = -1, a = e.length; ++i < a;) { var o = e[i], s = t(o); if (s != null && (c === void 0 ? s === s && !n(s) : r(s, c))) var c = s, l = o; } return l; } //#endregion //#region node_modules/lodash-es/max.js function o(e) { return e && e.length ? a(e, r, i) : void 0; } //#endregion //#region src/authoring/extensions/ui/nativeTabs/index.js var s = { columns: { numTabsLeft: 2, numTabsRight: 2 }, dirty: !1, logPrefix: "LT Native Tabs: ", options: { maxTabs: 5 } }; function c(e = {}) { g(e), t.authorApp().on("render:item", () => { s.columns.numTabsLeft = 2, s.columns.numTabsRight = 2, s.dirty = !1; }), t.authorApp().on("navigate", () => { t.authorApp().getItem() ? n() : setTimeout(n, 1500); }); function n() { setTimeout(() => { if ([ "items/:reference/settings/:tab", "items/:reference/settings", void 0 ].includes(t.authorApp().getLocation().route)) { let e = t.authorApp().getLocation().location.split("/").pop(); ["layout", "settings"].includes(e) && l(); } }, 100); } } function l() { let e = document.querySelector("[data-authorapi-selector=\"lrn-author-tabs-col1\"]"), n = document.querySelector("[data-authorapi-selector=\"lrn-author-tabs-col2\"]"), r = document.querySelector("[data-authorapi-selector=\"itemLayoutTabLabel - Left\"]"), i = document.querySelector("[data-authorapi-selector=\"itemLayoutTabLabel - Right\"]"), a = document.getElementById("lt__nativeTabs-col1"), c = document.getElementById("lt__nativeTabs-col2"), l = document.querySelector("[data-authorapi-selector=\"lrn-author-apply-settings\"]"), u = f(t.authorApp().getItem().item.definition); if (s.columns.numTabsLeft = o([u[0], s.columns.numTabsLeft]), s.columns.numTabsRight = o([u[1], s.columns.numTabsRight]), l) { if (!a && e && e.querySelector(".lrn-author-layout-content").insertAdjacentHTML("beforeend", h("col1", s.columns.numTabsLeft)), !c && n && n.querySelector(".lrn-author-layout-content").insertAdjacentHTML("beforeend", h("col2", s.columns.numTabsRight)), m(), l.addEventListener("click", () => { p(u); }), !r.hasAttribute("data-lt-event")) { let e = document.getElementById("lt__nativeTabs-col1"); e.disabled = !d().leftEnabled, r.addEventListener("change", () => { e.disabled = !d().leftEnabled; }), r.setAttribute("data-lt-event", "true"); } if (!i.hasAttribute("data-lt-event")) { let e = document.getElementById("lt__nativeTabs-col2"); e.disabled = !d().rightEnabled, i.addEventListener("change", () => { e.disabled = !d().rightEnabled; }), i.setAttribute("data-lt-event", "true"); } } else t.utils.logger.warn(`${s.logPrefix}Settings apply button not found`); function h(e, t) { return ` <label class="lrn-author-checkbox-label" for="lt__nativeTabs-${e}"> <span class="label-full">Number of tabs</span> <span class="label-short">Num tabs</span> </label> <div class="lrn-form-group"> <input id="lt__nativeTabs-${e}" type="number" min="2" max="${s.options.maxTabs}" value="${t}" class="lrn-author-form-control lt__nativeTabsInput lrn-form-control lt__width-sm" disabled> </div> `; } } function u() { if (s.dirty) { let e = document.querySelector("[data-authorapi-selector=\"lrn-author-apply-settings\"]"); if (e && e.disabled) { let e = document.querySelector("[data-authorapi-selector=\"itemLayoutTabLabel - Left\"]"), t = document.querySelector("[data-authorapi-selector=\"itemLayoutTabLabel - Right\"]"); if (e.checked) { e.click(), e.click(); return; } t.checked && (t.click(), t.click()); } } } function d() { let e = document.querySelector("[data-authorapi-selector=\"itemLayoutTabLabel - Left\"]"), t = document.querySelector("[data-authorapi-selector=\"itemLayoutTabLabel - Right\"]"); return e.checked || (s.columns.numTabsLeft = 2), t.checked || (s.columns.numTabsRight = 2), { leftEnabled: e.checked, rightEnabled: t.checked }; } function f(e) { let t = [0, 0]; function n(e) { let t = 0; function n(e) { if (Array.isArray(e)) e.forEach(n); else if (typeof e == "object" && e) { e.type === "tab" && t++; for (let t in e) e.hasOwnProperty(t) && n(e[t]); } } return n(e), t; } let r = e.regions?.filter((e) => e.type === "column") || []; for (let e = 0; e < 2; e++) r[e] && (t[e] = n(r[e])); return t; } function p(e) { let n = d(); setTimeout(() => { let i = t.authorApp().getItem(), a = i.item.definition; r(0, s.columns.numTabsLeft, n.leftEnabled, e[0], a), r(1, s.columns.numTabsRight, n.rightEnabled, e[1], a), i.item.definition = a, t.authorApp().setItemJson(i); }, 100); function r(e, t, n, r, i) { if (t >= 2 && n) { let n = i.regions[e].regions[0].regions; if (t < n.length) { let e = n.length - t; for (let t = n.length; t > n.length - e; t--) n[t - 1].hasOwnProperty("widgets") && (n[0].hasOwnProperty("widgets") ? n[0].widgets.push(n[t - 1].widgets) : n[0].widgets = n[t - 1].widgets); n.splice(-e); } else { let e = (r || 2) + 1; for (let r = e; r <= t; r++) n.push({ label: `Tab ${r}`, type: "tab" }); } } } } function m() { let e = document.getElementById("lt__nativeTabs-col1"), t = document.getElementById("lt__nativeTabs-col2"); e.addEventListener("change", () => { s.columns.numTabsLeft = h(+e.value), s.dirty = !0, u(); }), t.addEventListener("change", () => { s.columns.numTabsRight = h(+t.value), s.dirty = !0, u(); }); } function h(e) { return e < 2 ? 2 : e > s.options.maxTabs ? s.options.maxTabs : e; } function g(e) { ["maxTabs"].forEach((t) => { typeof e?.[t] == "number" && e?.[t] >= 2 && e?.[t] <= 10 && (s.options[t] = e[t]); }); } function _() { return "\n /* Learnosity native tab styles */\n .lrn .lrn-author-ui,\n .lrn.lrn-author {\n .lrn-author-api-react-container .lrn-author-item-settings .lrn-author-layout-settings .lrn-author-layout-tab .lrn-author-layout-content,\n .lrn-author-api-react-container .lrn-author-activity-labels .lrn-author-layout-settings .lrn-author-layout-tab .lrn-author-layout-content {\n padding: 9px;\n }\n\n .lrn-form-control.lt__width-sm,\n .lrn-author-form-control.lt__nativeTabsInput {\n width: 80px;\n }\n\n .lrn-author-checkbox-label {\n padding-bottom: .5714285714em;\n }\n\n [data-authorapi-selector=\"lrn-author-tabs-col1\"],\n [data-authorapi-selector=\"lrn-author-tabs-col2\"] {\n .lrn-author-layout-content {\n container-type: inline-size;\n\n .label-short {\n display: none;\n }\n\n @container (max-width: 120px) {\n .label-full {\n display: none;\n }\n\n .label-short {\n display: inline;\n }\n }\n }\n }\n }\n "; } var v = e("nativeTabs", c, { getStyles: _ }); //#endregion export { v as nativeTabs };