User:Yethrosh/tourwiki.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:Yethrosh/tourwiki. |
// for installing, add importScript("User:محمد شعیب/tourwiki.js") to your common.js, like https://en.wikipedia.org/w/index.php?diff=620778090
(function (mw, $) {
if (mw.config.get('wgAction') !== 'view' ||
(mw.config.get('wgNamespaceNumber') !== 0 && mw.config.get('wgNamespaceNumber') !== 14)) {
return;
}
function faToken() {
return $.ajax({
url: '//ur.wikipedia.org/w/api.php',
data: {
action: 'tokens',
format: 'json',
origin: location.protocol + '//' + location.hostname
},
xhrFields: {
withCredentials: true
}
}).then(function (data) { return data.tokens.edittoken; });
}
function loadFaPage(title) {
return new mw.Api({ ajax: { url: location.protocol + '//ur.wikipedia.org/w/api.php' } }).get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
format: 'json',
origin: location.protocol + '//' + location.hostname
}).then(function (data) {
return $.map(data.query.pages, function (value) { return value; })[0].revisions[0]['*'];
});
}
function saveFaPage(title, token, text, summary) {
return $.ajax({
url: '//ur.wikipedia.org/w/api.php',
type: 'POST',
data: {
action: 'edit',
title: title,
text: text,
summary: summary,
nocreate: '',
minor: '',
token: token,
format: 'json',
origin: location.protocol + '//' + location.hostname
},
xhrFields: {
withCredentials: true
}
}).then(function (data) {
if (data.error && data.error.info) {
mw.notify(data.error.info);
throw data.error.info;
}
if (data.edit && data.edit.nochange !== undefined) {
throw 'no change!';
}
}, function (data) {
mw.notify(data);
});
}
var GENERAL_BOT = 'ویکیپیڈیا:درخواست تخلیق مضمون (روبالہ)';
var CITIES_BOT = 'ویکیپیڈیا:ویکی منصوبہ تخلیق مضامین شہر/درخواست تخلیق';
var CATEGORIES_BOT = 'ویکیپیڈیا:درخواست تخلیق زمرہ (روبالہ)';
var PEOPLE_BOT = 'ویکیپیڈیا:درخواست تخلیق مضمون (روبالہ)/افراد';
var OTHER_REQUESTS = 'ویکیپیڈیا:درخواست شدہ مضامین';
var requestingPages = {
'غیر فعال، اسے منتخب نہ کریں': GENERAL_BOT,
'وپ:شہر، شہر و رہائشی علاقہ جات': CITIES_BOT,
'غیر فعال، اسے منتخب نہ کریں': CATEGORIES_BOT,
'غیر فعال، اسے منتخب نہ کریں': PEOPLE_BOT,
'وپ:درخواست شدہ مضامین، برائے درخواست غیر روبہ جاتی مضامین': OTHER_REQUESTS
};
function addRequest(requestFaPage, faName) {
return $.when(faToken(), loadFaPage(requestFaPage)).then(function (token, requests) {
var enName = mw.config.get('wgPageName').replace(/_/g, ' ');
if (requestFaPage !== OTHER_REQUESTS)
requests = requests + '\n*' + faName + '@' + mw.config.get('wgTitle');
else
requests = requests.replace(
/(<!-- \*\*\*توجہ\*\*\*: نئی درخواستیں)/,
'* [[' + faName + ']] ([[:en:' + enName + ']])' + '\n$1'
);
return saveFaPage(
requestFaPage,
token,
requests,
'درخواست تخلیق ' +
'[[:en:' + enName + '|' + enName + ']]' +
' بذریعہ آلہ!'
);
});
}
function suggestRequestPlace() {
if ($('.infobox.geography').length !== 0) {
return CITIES_BOT;
} else if ($('.infobox.biota, .infobox.haudio, .description a[href="/wiki/Single_(music)"]').length !== 0 ||
($('#coordinates').length !== 0 && $('.infobox.vcard .fn').length !== 0)) {
return GENERAL_BOT;
} else if (mw.config.get('wgNamespaceNumber') === 14) {
return CATEGORIES_BOT;
} else if ($('.infobox.vcard .fn').length !== 0) {
return PEOPLE_BOT;
}
return OTHER_REQUESTS;
}
function pageExists(page) {
return $.ajax({
url: '//ur.wikipedia.org/w/api.php',
data: {
action: 'query',
titles: page,
format: 'json',
origin: location.protocol + '//' + location.hostname
}
}).then(function (data) { return data.query.pages['-1'] === undefined; });
}
$.when($.ready, mw.loader.using('jquery.ui')).then(function () {
// if already has a link to fawiki, give up
if ($('.interlanguage-link.interwiki-ur').length !== 0) { return; }
// styles
mw.util.addCSS(
"#tourwiki-form * { font-family: Jameel Noori Nastaleeq, 'Alvi Nastaleeq', 'Droid Arabic Kufi', sans-serif !important; } " +
"#tourwiki-form .ui-dialog-buttonset { float: left; } " +
"#tourwiki-form .ui-dialog-titlebar-close { right: initial; left: .75em; } " +
"#tourwiki-form .ui-dialog-title { float: right; }"
);
$('#ca-tourwiki').remove();
$(mw.util.addPortletLink($('#p-views').length !== 0 ? 'p-views' : 'p-cactions', '#', 'tourwiki!', 'ca-tourwiki', null, null, '#ca-view')).click(function (e) {
e.preventDefault();
$('<div>', {
dir: 'rtl',
id: 'tourwiki-form',
style: "position: relative;"
}).append($('<div>', {
style: 'margin-top: 0.4em;',
text: 'تخلیق بذریعہ: '
}).append($('<select>', {
id: 'tourwiki-select',
style: 'padding: 1px; vertical-align: baseline; font-family: inherit'
}).append(
$.map(requestingPages, function (item, description) {
return $('<option>', { value: item, text: description }).prop('disabled',
mw.config.get('wgNamespaceNumber') === 14 && item !== CATEGORIES_BOT ||
mw.config.get('wgNamespaceNumber') === 0 && item === CATEGORIES_BOT);
})
)), $('<div>', {
style: 'padding-top: 1em',
text: 'اردو عنوان: '
}).append($('<input>', {
dir: 'rtl',
id: 'tourwiki-name',
style: 'font-family: inherit; width: 50%'
}).on('input', function () {
var that = $(this), page = that.val();
if (page === '') { $('#tourwiki-status').html(''); return; }
if (mw.config.get('wgNamespaceNumber') == 14) { page = 'زمرہ:' + page; }
pageExists(page).then(function (exists) {
if (page !== that.val()) { // that request is no longer relevant
return;
}
if (!exists) {
$('#tourwiki-status').html('<span style="color: green; font-size: 140%">✓</span> «' + page + '» مناسب نام ہے۔');
} else {
$('#tourwiki-status').html('<span style="color: red; font-size: 140%">✗</span> «<a target="_blank" href="//ur.wikipedia.org/wiki/' + encodeURI(page) + '">' + page + '</a>» اس وقت موجود ہے!');
}
});
}), $('<div>', {
id: 'tourwiki-status'
}))).dialog({
width: 500,
title: 'اردو ویکیپیڈیا میں درخواست تخلیق',
buttons: [{
text: 'درخواست',
title: 'اس پر کلک کرنے کے بعد آپ کی درخواست محفوظ ہوجائے گی، تاہم کچھ وقفہ کے بعد روبہ آپ کی درخواست مکمل کرے گا!',
class: 'ui-button-blue',
click: function () {
var faName = $('#tourwiki-name').val();
var requestingPage = $('#tourwiki-select').val();
if (!faName || !requestingPage) { return; }
$(this).dialog('close');
addRequest(requestingPage, faName).then(function () {
mw.notify('درخواست کامیابی سے درج کرلی گئی');
}, function () {
mw.notify('درخواست تخلیق نامکمل');
});
}
}],
close: function () {
$(this).remove();
}
}).parent().prop('id', 'tourwiki-form');
$('#tourwiki-select').val(suggestRequestPlace());
});
});
}(mediaWiki, jQuery));