MediaWiki:SelectCategory.js

From Securipedia
Revision as of 14:36, 19 July 2012 by Petietpj (talk | contribs)
Jump to navigation Jump to search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
//<source lang="javascript">


/*
  SelectCategory 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:SelectCategory]].
*/
 
/*jshint curly:false */
/*global importStylesheetURI:false, jQuery:false, mediaWiki:false */
 
(function($, mw) {
"use strict";
var SelectCategory, insertTags;
 
importStylesheetURI('//commons.wikimedia.org/?title=MediaWiki:Edittools.css&action=raw&ctype=text/css');
window.insertTags = insertTags = function(tagOpen, tagClose, sampleText) {
  var $txtarea = SelectCategory.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.SelectCategory = SelectCategory = {
  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() {
      SelectCategory.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': {
//        'SelectCategory': {
//          'type': 'booklet',
//         'label': 'Selectcategory'
//,
//          'pages': {
//           'Selectcategory1': {
//              'layout': 'characters',
//              'label': 'Selectcategory2'
//            }
//          }
        }
      }
    });
 
 
    var $section = $('.page-Selectcategory1 div');
    var $links = $('#specialchars p.specialbasic').eq(0).find('a');
    $links.each(function() {
      var $button = $('<span>');
      $button.text($(this).text());
 
      _this.bindOnClick($button, this);
      $section.append($button);
    });
    $('.mw-selectCategory').remove();
  },
 
  last_active_textfield: null,
 
  enableForAllFields: function() {
    $('textarea, input').focus(function() {
      SelectCategory.last_active_textfield = this.id;
    });
  },
 
  getTextArea: function() {
    var $txtarea = {};
    if (SelectCategory.last_active_textfield !== null) $txtarea = $('#' + SelectCategory.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;
    SelectCategory.last_active_textfield = node.id;
    return true;
  },
 
  setup: function() {
    //Decide whether to use the toolbar or the bottom div
    if (window.oldSelectcategory || "1" === mw.user.options.get('gadget-OldSelectcategory') || $('#wpUploadDescription').length || !$.wikiEditor || !$.wikiEditor.isSupported()) {
      SelectCategory.createSelector();
      SelectCategory.enableForAllFields();
    } else {
      SelectCategory.makeToolbarButtons();
      SelectCategory.enableForAllFields();
    }
  }
};
$(document).ready(function() {
  // Don't do anything if no selectcategory 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-OldSelectcategory')) {
      mw.loader.using(['ext.wikiEditor.toolbar', 'jquery.wikiEditor.toolbar'], SelectCategory.setup);
    } else {
      SelectCategory.setup();
    }
  });
});
//</source>
}(jQuery, mediaWiki));