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);
 |