Difference between revisions of "MediaWiki:SelectCategory.js"
Jump to navigation
Jump to search
(15 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | // |
+ | //<source lang="javascript"> |
Line 15: | Line 15: | ||
var SelectCategory, insertTags; |
var SelectCategory, insertTags; |
||
− | importStylesheetURI('//commons.wikimedia.org/?title=MediaWiki: |
+ | //importStylesheetURI('//commons.wikimedia.org/?title=MediaWiki:Edittools.css&action=raw&ctype=text/css'); |
window.insertTags = insertTags = function(tagOpen, tagClose, sampleText) { |
window.insertTags = insertTags = function(tagOpen, tagClose, sampleText) { |
||
var $txtarea = SelectCategory.getTextArea(); |
var $txtarea = SelectCategory.getTextArea(); |
||
Line 30: | Line 30: | ||
} |
} |
||
}; |
}; |
||
+ | |||
window.SelectCategory = SelectCategory = { |
window.SelectCategory = SelectCategory = { |
||
createSelector: function() { |
createSelector: function() { |
||
− | + | var $spec = $('#specialchars'); |
|
− | + | var $sb = $('#specialchars p.specialbasic'); |
|
// Only care if there is more than one |
// Only care if there is more than one |
||
Line 40: | Line 41: | ||
var $sel = $('<select>'); |
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); |
$spec.prepend($sel); |
||
Line 55: | Line 56: | ||
chooseCharSubset: function() { |
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'); |
|
}, |
}, |
||
Line 102: | Line 103: | ||
// Add Edittool section |
// Add Edittool section |
||
$('#wpTextbox1').wikiEditor('addToToolbar', { |
$('#wpTextbox1').wikiEditor('addToToolbar', { |
||
− | 'sections': { |
+ | 'sections': { |
'Category': { |
'Category': { |
||
'type': 'booklet', |
'type': 'booklet', |
||
− | + | 'label': 'Selectcategory', |
|
'pages': { |
'pages': { |
||
− | + | 'Selectcategory1': { |
|
'layout': 'characters', |
'layout': 'characters', |
||
− | + | 'label': 'Selectcategory2' |
|
} |
} |
||
} |
} |
||
Line 177: | Line 178: | ||
}); |
}); |
||
}); |
}); |
||
− | // |
+ | //</source> |
}(jQuery, mediaWiki)); |
}(jQuery, mediaWiki)); |
Latest revision as of 14:40, 19 July 2012
//<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': { 'Category': { '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));