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

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc