MediaWiki:Edittools

From Securipedia
Revision as of 12:24, 19 July 2012 by Petietpj (talk | contribs) (Created page with "// <source lang="javascript"> /* EditTools support: add a selector, change into true buttons, enable for all text input fields If enabled in preferences, the script puts t...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

// <source lang="javascript"> /*

 EditTools support: add a selector, change into true buttons, enable for all text input fields
 If enabled in preferences, the script puts the buttons into the WikiEditor Toolbar
 The special characters to insert are defined at MediaWiki:Edittools.
  • /

/*jshint curly:false */ /*global importStylesheetURI:false, jQuery:false, mediaWiki:false */

(function($, mw) { "use strict"; var EditTools, insertTags;

importStylesheetURI('//commons.wikimedia.org/?title=MediaWiki:Edittools.css&action=raw&ctype=text/css'); window.insertTags = insertTags = function(tagOpen, tagClose, sampleText) {

 var $txtarea = EditTools.getTextArea();
 if ($txtarea.length !== 1) return;

 /* Usability initiative compatibility */
 if (typeof $.fn.textSelection !== 'undefined') {
   $txtarea.textSelection('encapsulateSelection', {
     'pre': tagOpen,
     'peri': sampleText,
     'post': tagClose
   });
   return;
 }

}; window.EditTools = EditTools = {

 createSelector: function() {
   var $spec = $('#specialchars');
   var $sb = $('#specialchars p.specialbasic');

   // Only care if there is more than one
   if (!$spec.length || $sb.length <= 1) return;

   var $sel = $('<select>');

   $sel.change(function() {
     EditTools.chooseCharSubset();
   });

   $sb.each(function(i) {
     var id = $(this).attr('id').replace(/.([0-9A-F][0-9A-F])/g, '%$1').replace(/_/g, ' ');
     $sel.append('<option value=' + i + '>' + decodeURIComponent(id) + '</option>');
   });

   $spec.prepend($sel);

   this.chooseCharSubset();
 },

 chooseCharSubset: function() {
   var $sb = $('#specialchars p.specialbasic');

   var id = $('#specialchars select').val();

   var $wanted = $sb.eq(id);
   this.makeButtons($wanted);

   $sb.hide();

   $wanted.css('display', 'inline');

 },

 bindOnClick: function($button, _this) {
   var onclick = _this.getAttribute("onclick");

   // if onclick is not a function, it's not IE7, so use setAttribute
   if ('function' !== typeof onclick) {
     $button[0].setAttribute('onclick', onclick); // for FF,IE8,Chrome
     // if onclick is a function, use the IE7 method and call onclick() in the anonymous function
   } else {
     $button[0].onclick = function() {
       onclick();
     }; // for IE7
   }
 },

 makeButtons: function($wanted) {
   var $links = $wanted.find('a');
   var _this = this;

   $links.each(function() {
     var $button = $('<button type="button">');
     $button.text($(this).text());

     _this.bindOnClick($button, this);

     $(this).replaceWith($button);
     $(this).blur();
   });
   $wanted.contents().not('button').remove();
 },
 makeToolbarButtons: function() {
   var _this = this;

   // Add  Edittool section
   $('#wpTextbox1').wikiEditor('addToToolbar', {
     'sections': {
       'Edittools': {
         'type': 'booklet',
         'label': 'Edittools',
         'pages': {
           'Edittools1': {
             'layout': 'characters',
             'label': 'Edittools2'
           }
         }
       }
     }
   });


   var $section = $('.page-Edittools1 div');
   var $links = $('#specialchars p.specialbasic').eq(0).find('a');
   $links.each(function() {
     var $button = $('');
     $button.text($(this).text());

     _this.bindOnClick($button, this);
     $section.append($button);
   });
   $('.mw-editTools').remove();
 },

 last_active_textfield: null,

 enableForAllFields: function() {
   $('textarea, input').focus(function() {
     EditTools.last_active_textfield = this.id;
   });
 },

 getTextArea: function() {
   var $txtarea = {};
   if (EditTools.last_active_textfield !== null) $txtarea = $('#' + EditTools.last_active_textfield).eq(0);
   if ($txtarea.length !== 1) {
     $txtarea = $('#bodyContent textarea').eq(0);
   }
   return $txtarea;
 },

 registerTextField: function(evt) {
   var e = evt || window.event;
   var node = e.target || e.srcElement;
   if (!node) return;
   EditTools.last_active_textfield = node.id;
   return true;
 },

 setup: function() {
   //Decide whether to use the toolbar or the bottom div
   if (window.oldEdittools || "1" === mw.user.options.get('gadget-OldEdittools') || $('#wpUploadDescription').length || !$.wikiEditor || !$.wikiEditor.isSupported()) {
     EditTools.createSelector();
     EditTools.enableForAllFields();
   } else {
     EditTools.makeToolbarButtons();
     EditTools.enableForAllFields();
   }
 }

}; $(document).ready(function() {

 // Don't do anything if no edittools present.
 if ($('#specialchars').length !== 1) return;
 mw.loader.using('mediawiki.user', function() {
   // Check user preferences
   if (1 === mw.user.options.get('usebetatoolbar') && "1" !== mw.user.options.get('gadget-OldEdittools')) {
     mw.loader.using(['ext.wikiEditor.toolbar', 'jquery.wikiEditor.toolbar'], EditTools.setup);
   } else {
     EditTools.setup();
   }
 });

}); // </source> }(jQuery, mediaWiki));