accessibility-8.x-1.x-dev/modules/accessibility_wysiwyg/js/ckeditor/accessibility/plugin.js
modules/accessibility_wysiwyg/js/ckeditor/accessibility/plugin.js
(function($, Drupal, drupalSettings, CKEDITOR) { CKEDITOR.plugins.add( 'accessibility', { icons : '', active : false, editor : { }, init: function( editor ) { var that = this; that.editor = editor; CKEDITOR.addCss(Drupal.settings.accessibility_wysiwyg.css); editor.addCommand( 'accessibilityDialog', new CKEDITOR.dialogCommand( 'accessibilityDialog' )); editor.addCommand( 'checkContent', { exec : function( editor ) { if (that.active) { that.removeMarkup(editor); this.setState( CKEDITOR.TRISTATE_OFF ); that.active = false; } else { that.checkContent(editor); this.setState( CKEDITOR.TRISTATE_ON ); that.active = true; } } }); editor.ui.addButton( 'Accessibility', { label: 'Check content for accessibility', command: 'checkContent', icon: Drupal.settings.basePath + Drupal.settings.accessibility_wysiwyg.path + '/js/ckeditor/accessibility/img/button.png' }); CKEDITOR.on('instanceReady', function (ev) { ev.editor.dataProcessor.htmlFilter.addRules( { elements : { $ : function( element ) { if(typeof element.attributes !== 'undefined') { if(typeof element.attributes.class === 'string') { element.attributes.class = element.attributes.class.replace(/(_(severe|moderate|suggestion)|accessibility-result)/gi, '').trim(); if(element.attributes.class.search('accessibility-icon') > -1) { $.each(element.children, function(index, child) { delete child.name; }); delete element.name; } } } return element; } } }); }); CKEDITOR.on('instanceDestroyed', function(ev) { that.removeMarkup(ev.editor); }); CKEDITOR.dialog.add( 'accessibilityDialog', function( editor ) { return { title: 'Accessibility', minWidth: 400, minHeight: 200, contents: [ { id: 'tab1', label: 'Accessibility feedback', elements: [ { type: 'html', id : 'accessibility-dialog-content', html: '<div class="accessibility-dialog-content"></div>' } ] } ], buttons : [], onShow: function(data) { this.removeButton('cancel'); }, onOk: function() { } }; }); }, removeMarkup : function(editor) { $(editor.document.getDocumentElement().$).find('.accessibility-result, .accessibility-icon').unbind('click'); Drupal.accessibility.cleanUpHighlight($(editor.document.getDocumentElement().$)); }, checkContent : function(editor) { Drupal.settings.accessibility_wysiwyg.currentContext = $(editor.container.$).find('iframe').first(); Drupal.accessibility.checkElement($(editor.document.getDocumentElement().$), this.testFailed, function() {}, 'content'); }, testFailed : function(event) { var editor = CKEDITOR.currentInstance; Drupal.accessibility.highlightElement(event, function(event) { event.element.add(event.element.prev($('.accessibility-icon'))) .click(function(event) { var tests = $(this).data('accessibility-tests'); editor.execCommand( 'accessibilityDialog', $content ); var dialog = CKEDITOR.dialog.getCurrent(); var $content = $('<div class="accessibility-wysiwyg-popup">'); $.each(tests, function(index, test) { $content.append('<h3 class="title">' + Drupal.accessibility.messages[test].title + '</h3>'); $content.append(Drupal.accessibility.messages[test].content); }); $(dialog.getContentElement( 'tab1', 'accessibility-dialog-content' ).getElement().$).html($content.html()); }); }); } }); })(jQuery, Drupal, drupalSettings, CKEDITOR);