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