clean install

This commit is contained in:
2024-12-10 15:08:16 +01:00
commit e14eb2d8fd
31193 changed files with 3555714 additions and 0 deletions

84
web/themes/gin/dist/js/accent.js vendored Normal file
View File

@@ -0,0 +1,84 @@
((Drupal, drupalSettings, once) => {
Drupal.behaviors.ginAccent = {
attach: function(context) {
once("ginAccent", "body", context).forEach((() => {
Drupal.ginAccent.checkDarkmode(), Drupal.ginAccent.setAccentColor(), Drupal.ginAccent.setFocusColor();
}));
}
}, Drupal.ginAccent = {
setAccentColor: function() {
let preset = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, color = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;
const accentColorPreset = null != preset ? preset : drupalSettings.gin.preset_accent_color;
document.body.setAttribute("data-gin-accent", accentColorPreset), "custom" === accentColorPreset && this.setCustomAccentColor(color);
},
setCustomAccentColor: function() {
let color = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, element = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : document.body;
const accentColor = null != color ? color : drupalSettings.gin.accent_color;
if (accentColor) {
this.clearAccentColor(element);
const strippedAccentColor = accentColor.replace("#", ""), darkAccentColor = this.mixColor("ffffff", strippedAccentColor, 65).replace("#", ""), style = document.createElement("style");
style.className = "gin-custom-colors", style.innerHTML = `\n [data-gin-accent="custom"] {\n --gin-color-primary-rgb: ${this.hexToRgb(accentColor)};\n --gin-color-primary-hover: ${this.shadeColor(accentColor, -10)};\n --gin-color-primary-active: ${this.shadeColor(accentColor, -15)};\n --gin-bg-app-rgb: ${this.hexToRgb(this.mixColor("ffffff", strippedAccentColor, 97))};\n --gin-bg-header: ${this.mixColor("ffffff", strippedAccentColor, 85)};\n --gin-color-sticky-rgb: ${this.hexToRgb(this.mixColor("ffffff", strippedAccentColor, 92))};\n }\n .gin--dark-mode[data-gin-accent="custom"],\n .gin--dark-mode [data-gin-accent="custom"] {\n --gin-color-primary-rgb: ${this.hexToRgb(darkAccentColor)};\n --gin-color-primary-hover: ${this.mixColor("ffffff", strippedAccentColor, 55)};\n --gin-color-primary-active: ${this.mixColor("ffffff", strippedAccentColor, 50)};\n --gin-bg-header: ${this.mixColor("2A2A2D", darkAccentColor, 88)};\n }\n `,
element.append(style);
}
},
clearAccentColor: function() {
let element = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : document.body;
if (element.querySelectorAll(".gin-custom-colors").length > 0) {
const removeElement = element.querySelector(".gin-custom-colors");
removeElement.parentNode.removeChild(removeElement);
}
},
setFocusColor: function() {
let preset = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, color = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;
const focusColorPreset = null != preset ? preset : drupalSettings.gin.preset_focus_color;
document.body.setAttribute("data-gin-focus", focusColorPreset), "custom" === focusColorPreset && this.setCustomFocusColor(color);
},
setCustomFocusColor: function() {
let color = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, element = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : document.body;
const accentColor = null != color ? color : drupalSettings.gin.focus_color;
if (accentColor) {
this.clearFocusColor(element);
const strippedAccentColor = accentColor.replace("#", ""), darkAccentColor = this.mixColor("ffffff", strippedAccentColor, 65), style = document.createElement("style");
style.className = "gin-custom-focus", style.innerHTML = `\n [data-gin-focus="custom"] {\n --gin-color-focus: ${accentColor};\n }\n .gin--dark-mode[data-gin-focus="custom"],\n .gin--dark-mode [data-gin-focus="custom"] {\n --gin-color-focus: ${darkAccentColor};\n }`,
element.append(style);
}
},
clearFocusColor: function() {
let element = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : document.body;
if (element.querySelectorAll(".gin-custom-focus").length > 0) {
const removeElement = element.querySelector(".gin-custom-focus");
removeElement.parentNode.removeChild(removeElement);
}
},
checkDarkmode: () => {
const darkmodeClass = drupalSettings.gin.darkmode_class;
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e => {
e.matches && "auto" === localStorage.getItem("Drupal.gin.darkmode") && document.querySelector("html").classList.add(darkmodeClass);
})), window.matchMedia("(prefers-color-scheme: light)").addEventListener("change", (e => {
e.matches && "auto" === localStorage.getItem("Drupal.gin.darkmode") && document.querySelector("html").classList.remove(darkmodeClass);
}));
},
hexToRgb: hex => {
hex = hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (function(m, r, g, b) {
return r + r + g + g + b + b;
}));
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}` : null;
},
mixColor: (color_1, color_2, weight) => {
function h2d(h) {
return parseInt(h, 16);
}
weight = void 0 !== weight ? weight : 50;
for (var color = "#", i = 0; i <= 5; i += 2) {
for (var v1 = h2d(color_1.substr(i, 2)), v2 = h2d(color_2.substr(i, 2)), val = Math.floor(v2 + weight / 100 * (v1 - v2)).toString(16); val.length < 2; ) val = "0" + val;
color += val;
}
return color;
},
shadeColor: (color, percent) => {
const num = parseInt(color.replace("#", ""), 16), amt = Math.round(2.55 * percent), R = (num >> 16) + amt, B = (num >> 8 & 255) + amt, G = (255 & num) + amt;
return `#${(16777216 + 65536 * (R < 255 ? R < 1 ? 0 : R : 255) + 256 * (B < 255 ? B < 1 ? 0 : B : 255) + (G < 255 ? G < 1 ? 0 : G : 255)).toString(16).slice(1)}`;
}
};
})(Drupal, drupalSettings, once);

View File

@@ -0,0 +1,23 @@
(Drupal => {
Drupal.behaviors.formDescriptionToggle = {
attach: context => {
context.querySelectorAll(".help-icon__description-toggle").forEach(((elem, index) => {
if (elem.dataset.formDescriptionToggleAttached) return;
elem.dataset.formDescriptionToggleAttached = !0;
const a11yLabel = "help-icon-label--" + Math.floor(1e4 * Math.random());
elem.setAttribute("id", a11yLabel), elem.setAttribute("aria-expanded", "false"),
elem.setAttribute("aria-controls", "target"), elem.closest(".help-icon__description-container").querySelectorAll(".claro-details__description, .fieldset__description, .form-item__description").forEach((description => {
description.setAttribute("aria-labelledby", a11yLabel);
})), elem.addEventListener("click", (event => {
event.preventDefault(), event.stopPropagation(), "SUMMARY" === event.currentTarget.parentElement.tagName && !1 === event.currentTarget.parentElement.parentElement.open && (event.currentTarget.parentElement.parentElement.open = !0),
event.currentTarget.focus(), event.currentTarget.closest(".help-icon__description-container").querySelectorAll(".claro-details__description, .fieldset__description, .form-item__description").forEach(((description, index) => {
if (index > 1) return;
const setStatus = description.classList.contains("visually-hidden");
event.currentTarget.setAttribute("aria-expanded", setStatus), description.classList.toggle("visually-hidden"),
description.setAttribute("aria-hidden", !setStatus);
}));
}));
}));
}
};
})(Drupal);

18
web/themes/gin/dist/js/edit_form.js vendored Normal file
View File

@@ -0,0 +1,18 @@
(Drupal => {
Drupal.behaviors.ginEditForm = {
attach: context => {
once("ginEditForm", ".region-content form.gin-node-edit-form", context).forEach((form => {
const sticky = context.querySelector(".gin-sticky"), newParent = context.querySelector(".region-sticky__items__inner");
if (newParent && 0 === newParent.querySelectorAll(".gin-sticky").length) {
newParent.appendChild(sticky);
const actionButtons = newParent.querySelectorAll("button, input, select, textarea"), formLabels = newParent.querySelectorAll("label");
actionButtons.length > 0 && (actionButtons.forEach((el => {
el.setAttribute("form", form.getAttribute("id")), el.setAttribute("id", el.getAttribute("id") + "--gin-edit-form");
})), formLabels.forEach((el => {
el.setAttribute("for", el.getAttribute("for") + "--gin-edit-form");
})));
}
}));
}
};
})(Drupal);

39
web/themes/gin/dist/js/gin_ckeditor.js vendored Normal file
View File

@@ -0,0 +1,39 @@
((Drupal, drupalSettings, once) => {
Drupal.behaviors.ginCKEditor = {
attach: context => {
Drupal.ginCKEditor.init(context);
}
}, Drupal.ginCKEditor = {
init: context => {
once("ginCKEditors", "body", context).forEach((() => {
if (window.CKEDITOR && void 0 !== CKEDITOR) {
if (drupalSettings.path.currentPath.indexOf("admin/config/content/formats/manage") > -1) return;
const variablesCss = drupalSettings.gin.variables_css_path, accentCss = drupalSettings.gin.accent_css_path, contentsCss = drupalSettings.gin.ckeditor_css_path, accentColorPreset = drupalSettings.gin.preset_accent_color, accentColor = drupalSettings.gin.accent_color, darkmodeClass = drupalSettings.gin.darkmode_class;
(1 == localStorage.getItem("Drupal.gin.darkmode") || "auto" === localStorage.getItem("Drupal.gin.darkmode") && window.matchMedia("(prefers-color-scheme: dark)").matches) && (CKEDITOR.config.bodyClass = darkmodeClass),
void 0 === CKEDITOR.config.contentsCss && CKEDITOR.config.contentsCss.push(variablesCss, accentCss, contentsCss),
void 0 === CKEDITOR.config.contextmenu_contentsCss && (CKEDITOR.config.contextmenu_contentsCss = new Array,
void 0 === CKEDITOR.skinName && (CKEDITOR.skinName = CKEDITOR.skin.name), CKEDITOR.config.contextmenu_contentsCss.push(CKEDITOR.skin.getPath("editor"), variablesCss, accentCss, contentsCss)),
CKEDITOR.on("instanceReady", (element => {
const editor = element.editor;
editor.document.$.body.setAttribute("data-gin-accent", accentColorPreset), "custom" === accentColorPreset && accentColor && Drupal.ginAccent.setCustomAccentColor(accentColor, editor.document.$.head),
editor.on("mode", (function() {
"wysiwyg" == this.mode && (editor.document.$.body.setAttribute("data-gin-accent", accentColorPreset),
"custom" === accentColorPreset && accentColor && Drupal.ginAccent.setCustomAccentColor(accentColor, editor.document.$.head),
"auto" === localStorage.getItem("Drupal.gin.darkmode") && (window.matchMedia("(prefers-color-scheme: dark)").matches ? editor.document.$.body.classList.add(darkmodeClass) : editor.document.$.body.classList.remove(darkmodeClass)));
})), editor.on("menuShow", (function(element) {
const darkModeClass = 1 == localStorage.getItem("Drupal.gin.darkmode") || "auto" === localStorage.getItem("Drupal.gin.darkmode") && window.matchMedia("(prefers-color-scheme: dark)").matches ? darkmodeClass : "", iframeElement = element.data[0].element.$.childNodes[0].contentWindow.document;
darkModeClass && iframeElement.body.classList.add(darkModeClass), iframeElement.body.setAttribute("data-gin-accent", accentColorPreset),
"custom" === accentColorPreset && accentColor && Drupal.ginAccent.setCustomAccentColor(accentColor, iframeElement.head);
})), window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e => {
e.matches && "auto" === localStorage.getItem("Drupal.gin.darkmode") && (editor.document.$.body.classList.add(darkmodeClass),
document.querySelectorAll(`.${editor.id}.cke_panel`).length > 0) && document.querySelector(`.${editor.id}.cke_panel`).childNodes[0].contentWindow.document.body.classList.add(darkmodeClass);
})), window.matchMedia("(prefers-color-scheme: light)").addEventListener("change", (e => {
e.matches && "auto" === localStorage.getItem("Drupal.gin.darkmode") && (editor.document.$.body.classList.remove(darkmodeClass),
document.querySelectorAll(`.${editor.id}.cke_panel`).length > 0) && document.querySelector(`.${editor.id}.cke_panel`).childNodes[0].contentWindow.document.body.classList.remove(darkmodeClass);
}));
}));
}
}));
}
};
})(Drupal, drupalSettings, once);

26
web/themes/gin/dist/js/init.js vendored Normal file
View File

@@ -0,0 +1,26 @@
(() => {
function ginInitDarkmode() {
1 == localStorage.getItem("Drupal.gin.darkmode") || "auto" === localStorage.getItem("Drupal.gin.darkmode") && window.matchMedia("(prefers-color-scheme: dark)").matches ? document.documentElement.classList.add("gin--dark-mode") : !0 === document.documentElement.classList.contains("gin--dark-mode") && document.documentElement.classList.remove("gin--dark-mode");
}
if (localStorage.getItem("GinDarkMode") && (localStorage.setItem("Drupal.gin.darkmode", localStorage.getItem("GinDarkMode")),
localStorage.removeItem("GinDarkMode")), localStorage.getItem("GinSidebarOpen") && (localStorage.setItem("Drupal.gin.toolbarExpanded", localStorage.getItem("GinSidebarOpen")),
localStorage.removeItem("GinSidebarOpen")), ginInitDarkmode(), window.addEventListener("DOMContentLoaded", (() => {
localStorage.getItem("Drupal.gin.darkmode") || (localStorage.setItem("Drupal.gin.darkmode", drupalSettings.gin.darkmode),
ginInitDarkmode());
})), localStorage.getItem("Drupal.gin.toolbarExpanded")) {
const style = document.createElement("style"), className = "gin-toolbar-inline-styles";
if (style.className = className, "true" === localStorage.getItem("Drupal.gin.toolbarExpanded")) {
style.innerHTML = "\n @media (min-width: 976px) {\n /* Small CSS hack to make sure this has the highest priority */\n body.gin--vertical-toolbar.gin--vertical-toolbar.gin--vertical-toolbar {\n padding-inline-start: 256px !important;\n transition: none !important;\n }\n\n .gin--vertical-toolbar .toolbar-menu-administration {\n min-width: var(--gin-toolbar-width, 256px);\n transition: none;\n }\n\n .gin--vertical-toolbar .toolbar-menu-administration > .toolbar-menu > .menu-item > .toolbar-icon,\n .gin--vertical-toolbar .toolbar-menu-administration > .toolbar-menu > .menu-item > .toolbar-box > .toolbar-icon {\n min-width: calc(var(--gin-toolbar-width, 256px) - 16px);\n }\n }\n ";
const scriptTag = document.querySelector("script");
scriptTag.parentNode.insertBefore(style, scriptTag);
} else document.getElementsByClassName(className).length > 0 && document.getElementsByClassName(className)[0].remove();
}
if (localStorage.getItem("Drupal.gin.sidebarExpanded.desktop")) {
const style = document.createElement("style"), className = "gin-sidebar-inline-styles";
if (style.className = className, window.innerWidth < 1024 || "false" === localStorage.getItem("Drupal.gin.sidebarExpanded.desktop")) {
style.innerHTML = "\n body {\n --gin-sidebar-offset: 0px;\n padding-inline-end: 0;\n transition: none;\n }\n\n .layout-region-node-secondary {\n transform: translateX(var(--gin-sidebar-width, 360px));\n transition: none;\n }\n\n .meta-sidebar__overlay {\n display: none;\n }\n ";
const scriptTag = document.querySelector("script");
scriptTag.parentNode.insertBefore(style, scriptTag);
} else document.getElementsByClassName(className).length > 0 && document.getElementsByClassName(className)[0].remove();
}
})();

21
web/themes/gin/dist/js/messages.js vendored Normal file
View File

@@ -0,0 +1,21 @@
((Drupal, once) => {
Drupal.behaviors.ginMessages = {
attach: context => {
Drupal.ginMessages.dismissMessages(context);
}
}, Drupal.ginMessages = {
dismissMessages: function() {
let context = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : document;
once("gin-messages-dismiss", ".messages .button--dismiss", context).forEach((dismissButton => {
dismissButton.addEventListener("click", (e => {
e.preventDefault();
const message = e.currentTarget.closest(".messages-list__item");
Drupal.ginMessages.hideMessage(message);
}));
}));
},
hideMessage: message => {
message.style.opacity = 0, message.classList.add("visually-hidden");
}
};
})(Drupal, once);

70
web/themes/gin/dist/js/settings.js vendored Normal file
View File

@@ -0,0 +1,70 @@
((Drupal, drupalSettings) => {
Drupal.behaviors.ginSettings = {
attach: function(context) {
Drupal.ginSettings.init(context);
}
}, Drupal.ginSettings = {
init: function(context) {
context.querySelectorAll('input[name="enable_darkmode"]').forEach((el => el.addEventListener("change", (e => {
const darkmode = e.currentTarget.value, accentColorPreset = document.querySelector('[data-drupal-selector="edit-preset-accent-color"] input:checked').value, focusColorPreset = document.querySelector('select[name="preset_focus_color"]').value;
if (this.darkmode(darkmode), "custom" === accentColorPreset) {
const accentColorSetting = document.querySelector('input[name="accent_color"]').value;
Drupal.ginAccent.setCustomAccentColor(accentColorSetting);
} else Drupal.ginAccent.setAccentColor(accentColorPreset);
if ("custom" === focusColorPreset) {
const focusColorSetting = document.querySelector('input[name="focus_color"]').value;
Drupal.ginAccent.setCustomFocusColor(focusColorSetting);
} else Drupal.ginAccent.setFocusColor(focusColorPreset);
})))), context.querySelectorAll('[data-drupal-selector="edit-preset-accent-color"] input').forEach((el => el.addEventListener("change", (e => {
const accentColorPreset = e.currentTarget.value;
if (Drupal.ginAccent.clearAccentColor(), Drupal.ginAccent.setAccentColor(accentColorPreset),
"custom" === accentColorPreset) {
const accentColorSetting = document.querySelector('input[name="accent_color"]').value;
Drupal.ginAccent.setCustomAccentColor(accentColorSetting);
}
})))), context.querySelectorAll('input[name="accent_picker"]').forEach((el => el.addEventListener("change", (e => {
const accentColorSetting = e.currentTarget.value;
document.querySelector('input[name="accent_color"]').value = accentColorSetting,
Drupal.ginAccent.setCustomAccentColor(accentColorSetting);
})))), context.querySelectorAll('input[name="accent_color"]').forEach((el => el.addEventListener("change", (e => {
const accentColorSetting = e.currentTarget.value;
document.querySelector('input[name="accent_picker"]').value = accentColorSetting,
Drupal.ginAccent.setCustomAccentColor(accentColorSetting);
})))), document.querySelector('select[name="preset_focus_color"]').addEventListener("change", (e => {
const focusColorPreset = e.currentTarget.value;
if (Drupal.ginAccent.clearFocusColor(), Drupal.ginAccent.setFocusColor(focusColorPreset),
"custom" === focusColorPreset) {
const focusColorSetting = document.querySelector('input[name="focus_color"]').value;
Drupal.ginAccent.setCustomFocusColor(focusColorSetting);
}
})), document.querySelector('input[name="focus_picker"]').addEventListener("change", (e => {
const focusColorSetting = e.currentTarget.value;
document.querySelector('input[name="focus_color"]').value = focusColorSetting, Drupal.ginAccent.setCustomFocusColor(focusColorSetting);
})), document.querySelector('input[name="focus_color"]').addEventListener("change", (e => {
const focusColorSetting = e.currentTarget.value;
document.querySelector('input[name="focus_picker"]').value = focusColorSetting,
Drupal.ginAccent.setCustomFocusColor(focusColorSetting);
})), document.querySelector('input[name="high_contrast_mode"]').addEventListener("change", (e => {
const highContrastMode = e.currentTarget.matches(":checked");
this.setHighContrastMode(highContrastMode);
})), document.querySelector('[data-drupal-selector="edit-submit"]').addEventListener("click", (() => {
localStorage.setItem("Drupal.gin.darkmode", "");
}));
},
darkmode: function() {
let darkmodeParam = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null;
const darkmodeEnabled = null != darkmodeParam ? darkmodeParam : drupalSettings.gin.darkmode, darkmodeClass = drupalSettings.gin.darkmode_class;
1 == darkmodeEnabled || "auto" === darkmodeEnabled && window.matchMedia("(prefers-color-scheme: dark)").matches ? document.querySelector("html").classList.add(darkmodeClass) : document.querySelector("html").classList.remove(darkmodeClass),
localStorage.setItem("Drupal.gin.darkmode", ""), window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e => {
e.matches && "auto" === document.querySelector('input[name="enable_darkmode"]:checked').value && document.querySelector("html").classList.add(darkmodeClass);
})), window.matchMedia("(prefers-color-scheme: light)").addEventListener("change", (e => {
e.matches && "auto" === document.querySelector('input[name="enable_darkmode"]:checked').value && document.querySelector("html").classList.remove(darkmodeClass);
}));
},
setHighContrastMode: function() {
let param = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null;
const enabled = null != param ? param : drupalSettings.gin.highcontrastmode, className = drupalSettings.gin.highcontrastmode_class;
!0 === enabled || 1 === enabled ? document.body.classList.add(className) : document.body.classList.remove(className);
}
};
})(Drupal, drupalSettings);

45
web/themes/gin/dist/js/sidebar.js vendored Normal file
View File

@@ -0,0 +1,45 @@
((Drupal, drupalSettings, once) => {
const toolbarVariant = drupalSettings.gin.toolbar_variant, storageDesktop = "Drupal.gin.sidebarExpanded.desktop";
Drupal.behaviors.ginSidebar = {
attach: function(context) {
Drupal.ginSidebar.init(context);
}
}, Drupal.ginSidebar = {
init: function(context) {
once("ginSidebarInit", "#gin_sidebar", context).forEach((() => {
localStorage.getItem(storageDesktop) || localStorage.setItem(storageDesktop, "true"),
window.innerWidth >= 1024 && ("true" === localStorage.getItem(storageDesktop) ? this.showSidebar() : this.collapseSidebar()),
document.addEventListener("keydown", (e => {
!0 === e.altKey && "KeyS" === e.code && this.toggleSidebar();
})), window.onresize = Drupal.debounce(this.handleResize, 150);
})), once("ginSidebarToggle", ".meta-sidebar__trigger", context).forEach((el => el.addEventListener("click", (e => {
e.preventDefault(), this.removeInlineStyles(), this.toggleSidebar();
})))), once("ginSidebarClose", ".meta-sidebar__close, .meta-sidebar__overlay", context).forEach((el => el.addEventListener("click", (e => {
e.preventDefault(), this.removeInlineStyles(), this.collapseSidebar();
}))));
},
toggleSidebar: () => {
document.querySelector(".meta-sidebar__trigger").classList.contains("is-active") ? Drupal.ginSidebar.collapseSidebar() : Drupal.ginSidebar.showSidebar();
},
showSidebar: () => {
const chooseStorage = window.innerWidth < 1024 ? "Drupal.gin.sidebarExpanded.mobile" : storageDesktop, showLabel = Drupal.t("Hide sidebar panel"), sidebarTrigger = document.querySelector(".meta-sidebar__trigger");
sidebarTrigger.setAttribute("title", showLabel), sidebarTrigger.querySelector("span").innerHTML = showLabel,
sidebarTrigger.setAttribute("aria-expanded", "true"), sidebarTrigger.classList.add("is-active"),
document.body.setAttribute("data-meta-sidebar", "open"), localStorage.setItem(chooseStorage, "true"),
window.innerWidth < 1280 && ("vertical" === toolbarVariant ? Drupal.ginToolbar.collapseToolbar() : "new" === toolbarVariant && Drupal.behaviors.navigation.collapseSidebar());
},
collapseSidebar: () => {
const chooseStorage = window.innerWidth < 1024 ? "Drupal.gin.sidebarExpanded.mobile" : storageDesktop, hideLabel = Drupal.t("Show sidebar panel"), sidebarTrigger = document.querySelector(".meta-sidebar__trigger");
sidebarTrigger.setAttribute("title", hideLabel), sidebarTrigger.querySelector("span").innerHTML = hideLabel,
sidebarTrigger.setAttribute("aria-expanded", "false"), sidebarTrigger.classList.remove("is-active"),
document.body.setAttribute("data-meta-sidebar", "closed"), localStorage.setItem(chooseStorage, "false");
},
handleResize: () => {
Drupal.ginSidebar.removeInlineStyles(), window.innerWidth < 1024 ? Drupal.ginSidebar.collapseSidebar() : "true" === localStorage.getItem(storageDesktop) ? Drupal.ginSidebar.showSidebar() : Drupal.ginSidebar.collapseSidebar();
},
removeInlineStyles: () => {
const elementToRemove = document.querySelector(".gin-sidebar-inline-styles");
elementToRemove && elementToRemove.parentNode.removeChild(elementToRemove);
}
};
})(Drupal, drupalSettings, once);

17
web/themes/gin/dist/js/sticky.js vendored Normal file
View File

@@ -0,0 +1,17 @@
(Drupal => {
Drupal.behaviors.ginSticky = {
attach: context => {
once("ginSticky", ".region-sticky-watcher").forEach((() => {
const observer = new IntersectionObserver((_ref => {
let [e] = _ref;
const regionSticky = context.querySelector(".region-sticky");
regionSticky.classList.toggle("region-sticky--is-sticky", e.intersectionRatio < 1),
regionSticky.toggleAttribute("data-offset-top", e.intersectionRatio < 1), Drupal.displace(!0);
}), {
threshold: [ 1 ]
}), element = context.querySelector(".region-sticky-watcher");
element && observer.observe(element);
}));
}
};
})(Drupal);

20
web/themes/gin/dist/js/tableheader.js vendored Normal file
View File

@@ -0,0 +1,20 @@
((Drupal, once) => {
Drupal.behaviors.ginTableHeader = {
attach: context => {
Drupal.ginTableHeader.init(context);
}
}, Drupal.ginTableHeader = {
init: function(context) {
once("ginTableHeader", ".sticky-enabled", context).forEach((el => {
new IntersectionObserver((_ref => {
let [e] = _ref;
context.querySelector(".gin-table-scroll-wrapper") && (e.isIntersecting || e.intersectionRect.top !== Drupal.displace.offsets.top ? context.querySelector(".gin-table-scroll-wrapper").classList.remove("--is-sticky") : context.querySelector(".gin-table-scroll-wrapper").classList.add("--is-sticky"),
Drupal.displace(!0));
}), {
threshold: 1,
rootMargin: `-${Drupal.displace.offsets.top}px 0px 0px 0px`
}).observe(el.querySelector("thead"));
}));
}
};
})(Drupal, once);

58
web/themes/gin/dist/js/toolbar.js vendored Normal file
View File

@@ -0,0 +1,58 @@
((Drupal, drupalSettings, once) => {
const toolbarVariant = drupalSettings.gin.toolbar_variant;
Drupal.behaviors.ginToolbar = {
attach: context => {
Drupal.ginToolbar.init(context);
}
}, Drupal.behaviors.ginEscapeAdmin = {
attach: context => {
once("ginEscapeAdmin", "[data-gin-toolbar-escape-admin]", context).forEach((el => {
const escapeAdminPath = sessionStorage.getItem("escapeAdminPath");
drupalSettings.path.currentPathIsAdmin && null !== escapeAdminPath && el.setAttribute("href", escapeAdminPath);
}));
}
}, Drupal.ginToolbar = {
init: function(context) {
once("ginToolbarInit", "#gin-toolbar-bar", context).forEach((() => {
const toolbarTrigger = document.querySelector(".toolbar-menu__trigger");
"classic" != toolbarVariant && localStorage.getItem("Drupal.toolbar.trayVerticalLocked") && localStorage.removeItem("Drupal.toolbar.trayVerticalLocked"),
"true" === localStorage.getItem("Drupal.gin.toolbarExpanded") ? (document.body.setAttribute("data-toolbar-menu", "open"),
toolbarTrigger.classList.add("is-active")) : (document.body.setAttribute("data-toolbar-menu", ""),
toolbarTrigger.classList.remove("is-active")), document.addEventListener("keydown", (e => {
!0 === e.altKey && "KeyT" === e.code && this.toggleToolbar();
})), this.initDisplace();
})), once("ginToolbarToggle", ".toolbar-menu__trigger", context).forEach((el => el.addEventListener("click", (e => {
e.preventDefault(), this.toggleToolbar();
}))));
},
initDisplace: () => {
const toolbar = document.querySelector("#gin-toolbar-bar .toolbar-menu-administration");
toolbar && ("vertical" === toolbarVariant ? toolbar.setAttribute("data-offset-left", "") : toolbar.setAttribute("data-offset-top", ""));
},
toggleToolbar: function() {
const toolbarTrigger = document.querySelector(".toolbar-menu__trigger");
toolbarTrigger.classList.toggle("is-active"), toolbarTrigger.classList.contains("is-active") ? this.showToolbar() : this.collapseToolbar();
},
showToolbar: function() {
document.body.setAttribute("data-toolbar-menu", "open"), localStorage.setItem("Drupal.gin.toolbarExpanded", "true"),
this.dispatchToolbarEvent("true"), this.displaceToolbar(), window.innerWidth < 1280 && "vertical" === toolbarVariant && Drupal.ginSidebar.collapseSidebar();
},
collapseToolbar: function() {
const toolbarTrigger = document.querySelector(".toolbar-menu__trigger"), elementToRemove = document.querySelector(".gin-toolbar-inline-styles");
toolbarTrigger.classList.remove("is-active"), document.body.setAttribute("data-toolbar-menu", ""),
elementToRemove && elementToRemove.parentNode.removeChild(elementToRemove), localStorage.setItem("Drupal.gin.toolbarExpanded", "false"),
this.dispatchToolbarEvent("false"), this.displaceToolbar();
},
dispatchToolbarEvent: active => {
const event = new CustomEvent("toolbar-toggle", {
detail: "true" === active
});
document.dispatchEvent(event);
},
displaceToolbar: () => {
ontransitionend = () => {
Drupal.displace(!0);
};
}
};
})(Drupal, drupalSettings, once);