@caspingus/lt
Version:
A utility library of helpers and extensions useful when working with Learnosity APIs.
168 lines (167 loc) • 7.61 kB
JavaScript
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 };