مدیاویکی:Gadget-asbox.js
پرش به ناوبری
پرش به جستجو
نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر/ Edge: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: Ctrl-F5 را بفشارید.
/*!
* Developed by: [[User:Ebraminio]]
* Distributed under the terms of the CC-BY-SA 3.0
*/
/*jslint browser: true, regexp: true */
/*global jQuery, mediaWiki*/
(function ($, mw) {
'use strict';
function displayProgress(form, message) {
$('#' + form + ' div').hide();
$('#' + form).append($('<div />', {
'style': 'text-align:center; margin:3em 0;',
'html': message + '<br/><img src="//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" />'
}));
}
function displayError(form, error) {
$('#' + form + ' div').hide();
$('#' + form).append($('<div />', {
'style': 'color: #990000; margin-top: 0.4em;',
'html': 'Error: ' + error
}));
}
function editThePage(form, summary, content) {
new mw.Api().post({
'action': 'edit',
'title': mw.config.get('wgPageName'),
'summary': summary,
'text': content,
'format': 'json',
'token': mw.user.tokens.get('editToken')
}).done(function (data) {
if (data.edit.result === 'Success') {
window.location.reload();
} else {
displayError(form, 'Unknown result from API.');
}
}).fail(function () {
displayError(form, 'Edit failed.');
});
}
function fetchThePage(callback) {
new mw.Api().get({
'action': 'query',
'prop': 'revisions',
'titles': mw.config.get('wgPageName'),
'rvprop': 'content',
'format': 'json'
}).done(function (data) {
callback($.map(data.query.pages, function (value) { return value; })[0].revisions[0]['*']);
});
}
/**
* This will help on better sorting on Persian string array
*/
function dePersian(input) { // solve persian problem on sorting by replace characters in strings
return input.replace(/ی/g, "ي")
.replace(/ک/g, "ك")
.replace(/گ/g, "كی")
.replace(/ژ/g, "زی")
.replace(/چ/g, "جی")
.replace(/پ/g, "بی");
}
/**
* String comparator for Persian
*/
function customComparator(a, b) {
var keyA = dePersian(a),
keyB = dePersian(b);
if (keyA < keyB) {
return -1;
}
if (keyA > keyB) {
return 1;
}
return 0;
}
/**
* Escape string for regex
*/
function escape(text) {
return text.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
}
/**
* Will launch stub template adder
*/
function launchDialog(arr) {
arr.sort(customComparator);
// remove any
$('#stubForm').remove();
// Define stub interface
var stubs = $('<div />', {
'id': 'stubForm',
'style': 'position: relative;'
}).append($('<div />', {
'style': 'margin-top: 0.4em;',
'html': 'انتخاب الگوی خرد: '
}).append($('<select />', {
'id': 'stubselect',
'style': 'padding: 1px; vertical-align: baseline;'
}))).dialog({
width: 500,
autoOpen: false,
title: 'افزودن الگوی خرد',
modal: true,
buttons: {
"افزودن": function () {
$(this).dialog({
buttons: {}
});
displayProgress('stubForm', 'افزودن الگوی خرد...');
fetchThePage(function (content) {
var template = $('#stubselect').val();
content = content.replace(
new RegExp('{{\\s*([^:}]*:)?(خرد|ناقص|' + escape(template) + ')\\s*}}\\n*', 'g'),
''
);
if (!/خرد\}\}$/.test(content)) {
content = content + '\n\n';
}
editThePage('stubForm', 'افزودن الگوی خرد به کمک ابزار', content + '\n' + '{{' + template + '}}');
});
}
},
"close": function () {
$("#stubForm").remove();
}
});
$('#stubselect').append($.map(arr, function (value) {
return $('<option />', {
html: value.replace(/^[^:]*:/, ""),
val: value.replace(/^[^:]*:/, "")
});
}));
stubs.dialog('open');
}
/**
* Is a recursive function to retrieve all stub templates consequently
*/
function getAllStubTemplates(callback, arr, eicontinue) {
new mw.Api().get({
'action': 'query',
'list': 'embeddedin',
'eititle': 'Template:Asbox',
'eilimit': 500,
'einamespace': 10,
'format': 'json',
'continue': '',
'eicontinue': eicontinue
}).done(function (data) {
arr = arr.concat($.map(data.query.embeddedin, function (value) {
return value.title;
}));
if (data['continue'] !== undefined) {
getAllStubTemplates(callback, arr, data['continue'].eicontinue);
} else {
callback(arr);
}
});
}
/**
* Initialize the tool
*/
function initialize() {
$(mw.util.addPortletLink('p-cactions', '#', 'خرد', 'ca-stub-adder', 'افزودن الگوی خرد')).click(function (e) {
e.preventDefault();
getAllStubTemplates(launchDialog, []);
});
}
mw.loader.using('jquery.ui.dialog', function() {
if (mw.config.get('wgNamespaceNumber') === 0
&& mw.config.get('skin') === 'vector'
&& mw.config.get('wgAction') === 'view') {
initialize();
}
});
}(jQuery, mediaWiki));