// 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));