forked from a64f7bb4-7358-4778-9fbe-3b882c34cc1d/v1
138 lines
5.4 KiB
JavaScript
138 lines
5.4 KiB
JavaScript
/* eslint-disable func-names, no-mutable-exports, comma-dangle, strict */
|
|
|
|
((Drupal, drupalSettings, once) => {
|
|
Drupal.behaviors.ginCKEditor = {
|
|
attach: (context) => {
|
|
Drupal.ginCKEditor.init(context);
|
|
}
|
|
};
|
|
|
|
Drupal.ginCKEditor = {
|
|
init: (context) => {
|
|
once('ginCKEditors', 'body', context).forEach(() => {
|
|
if (window.CKEDITOR && CKEDITOR !== undefined) {
|
|
// If on CKEditor config, do nothing.
|
|
if (drupalSettings.path.currentPath.indexOf('admin/config/content/formats/manage') > -1) {
|
|
return;
|
|
}
|
|
|
|
// Get configs.
|
|
const variablesCss = drupalSettings.gin.variables_css_path;
|
|
const accentCss = drupalSettings.gin.accent_css_path;
|
|
const contentsCss = drupalSettings.gin.ckeditor_css_path;
|
|
const accentColorPreset = drupalSettings.gin.preset_accent_color;
|
|
const accentColor = drupalSettings.gin.accent_color;
|
|
const darkmodeClass = drupalSettings.gin.darkmode_class;
|
|
|
|
// Class for Darkmode.
|
|
if (
|
|
localStorage.getItem('Drupal.gin.darkmode') == 1 ||
|
|
localStorage.getItem('Drupal.gin.darkmode') === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
) {
|
|
CKEDITOR.config.bodyClass = darkmodeClass;
|
|
}
|
|
|
|
// Content stylesheets.
|
|
if (CKEDITOR.config.contentsCss === undefined) {
|
|
CKEDITOR.config.contentsCss.push(
|
|
variablesCss,
|
|
accentCss,
|
|
contentsCss
|
|
);
|
|
}
|
|
|
|
// Contextmenu stylesheets.
|
|
if (CKEDITOR.config.contextmenu_contentsCss === undefined) {
|
|
CKEDITOR.config.contextmenu_contentsCss = new Array();
|
|
|
|
// Check if skinName is set.
|
|
if (typeof CKEDITOR.skinName === 'undefined') {
|
|
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;
|
|
|
|
// Initial accent color.
|
|
editor.document.$.body.setAttribute('data-gin-accent', accentColorPreset);
|
|
|
|
if (accentColorPreset === 'custom' && accentColor) {
|
|
Drupal.ginAccent.setCustomAccentColor(accentColor, editor.document.$.head);
|
|
}
|
|
|
|
// Change from Code to Editor.
|
|
editor.on('mode', function() {
|
|
if (this.mode == 'wysiwyg') {
|
|
editor.document.$.body.setAttribute('data-gin-accent', accentColorPreset);
|
|
|
|
if (accentColorPreset === 'custom' && accentColor) {
|
|
Drupal.ginAccent.setCustomAccentColor(accentColor, editor.document.$.head);
|
|
}
|
|
|
|
if (localStorage.getItem('Drupal.gin.darkmode') === 'auto') {
|
|
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
editor.document.$.body.classList.add(darkmodeClass);
|
|
} else {
|
|
editor.document.$.body.classList.remove(darkmodeClass);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
// Contextual menu.
|
|
editor.on('menuShow', function(element) {
|
|
const darkModeClass = localStorage.getItem('Drupal.gin.darkmode') == 1 || localStorage.getItem('Drupal.gin.darkmode') === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
? darkmodeClass
|
|
: '';
|
|
const iframeElement = element.data[0].element.$.childNodes[0].contentWindow.document;
|
|
|
|
if (darkModeClass) {
|
|
iframeElement.body.classList.add(darkModeClass);
|
|
}
|
|
|
|
iframeElement.body.setAttribute('data-gin-accent', accentColorPreset);
|
|
|
|
if (accentColorPreset === 'custom' && accentColor) {
|
|
Drupal.ginAccent.setCustomAccentColor(accentColor, iframeElement.head);
|
|
}
|
|
});
|
|
|
|
// Toggle Darkmode.
|
|
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
|
|
if (e.matches && localStorage.getItem('Drupal.gin.darkmode') === 'auto') {
|
|
editor.document.$.body.classList.add(darkmodeClass);
|
|
|
|
if (document.querySelectorAll(`.${editor.id}.cke_panel`).length > 0) {
|
|
const iframeElement = document.querySelector(`.${editor.id}.cke_panel`).childNodes[0].contentWindow.document;
|
|
iframeElement.body.classList.add(darkmodeClass);
|
|
}
|
|
}
|
|
});
|
|
|
|
// Change to Lightmode.
|
|
window.matchMedia('(prefers-color-scheme: light)').addEventListener('change', e => {
|
|
if (e.matches && localStorage.getItem('Drupal.gin.darkmode') === 'auto') {
|
|
editor.document.$.body.classList.remove(darkmodeClass);
|
|
|
|
if (document.querySelectorAll(`.${editor.id}.cke_panel`).length > 0) {
|
|
const iframeElement = document.querySelector(`.${editor.id}.cke_panel`).childNodes[0].contentWindow.document;
|
|
iframeElement.body.classList.remove(darkmodeClass);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
};
|
|
})(Drupal, drupalSettings, once);
|