میڈیاویکی:Gadget-twinklebatchprotect.js
یاد دہانی: محفوظ کرنے کے بعد ان تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیش (cache) صاف کرنا ہوگا۔
- فائرفاکس/ سفاری: جب Reload پر کلک کریں تو Shift دباکر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R-⌘)
- گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
- انٹرنیٹ ایکسپلورر: جب Refresh پر کلک کریں تو Ctrl یا Ctrl-F5 دبائیں
- اوپیرا: Tools → Preferences میں جائیں اور کیش (cache) صاف کریں
//<nowiki>
(function($){
/*
****************************************
*** twinklebatchprotect.js: Batch protect module (sysops only)
****************************************
* Mode of invocation: Tab ("اجتماعی محفوظ شدگی")
* Active on: Existing project pages and user pages; existing and
* non-existing categories; Special:PrefixIndex
* Config directives in: TwinkleConfig
*/
Twinkle.batchprotect = function twinklebatchprotect() {
if( Morebits.userIsInGroup( 'sysop' ) && ((mw.config.get( 'wgArticleId' ) > 0 && (mw.config.get( 'wgNamespaceNumber' ) === 2 ||
mw.config.get( 'wgNamespaceNumber' ) === 4)) || mw.config.get( 'wgNamespaceNumber' ) === 14 ||
mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Prefixindex') ) {
Twinkle.addPortletLink( Twinkle.batchprotect.callback, "اجتماعی محفوظ شدگی", "tw-pbatch", "اس صفحے سے مربوط دیگر صفحات کو محفوظ کریں" );
}
};
Twinkle.batchprotect.unlinkCache = {};
Twinkle.batchprotect.callback = function twinklebatchprotectCallback() {
var Window = new Morebits.simpleWindow( 800, 400 );
Window.setTitle( "اجتماعی محفوظ شدگی" );
Window.setScriptName( "پلک" );
Window.addFooterLink( "سانچہ جات برائے محفوظ شدگی", "سانچہ:Protection templates" );
Window.addFooterLink( "حکمت عملی برائے محفوظ شدگی", "وکی کتب:محفوظ" );
Window.addFooterLink( "رہنمائے پلک", "WP:TW/DOC#protect" );
var form = new Morebits.quickForm( Twinkle.batchprotect.callback.evaluate );
form.append({
type: 'checkbox',
name: 'editmodify',
event: Twinkle.protect.formevents.editmodify,
list: [
{
label: 'درجہ حفاظت میں تبدیلی',
value: 'editmodify',
tooltip: 'محض موجود صفحات کے لیے۔',
checked: true
}
]
});
var editlevel = form.append({
type: 'select',
name: 'editlevel',
label: 'محفوظ شدگی میں تبدیلی:',
event: Twinkle.protect.formevents.editlevel
});
editlevel.append({
type: 'option',
label: 'تمام (مندرج صارفین)',
value: 'all'
});
editlevel.append({
type: 'option',
label: 'تصدیق شدہ',
value: 'autoconfirmed'
});
editlevel.append({
type: 'option',
label: 'سانچہ ترمیم کنندگان',
value: 'templateeditor'
});
editlevel.append({
type: 'option',
label: 'منتظمین',
value: 'sysop',
selected: true
});
form.append({
type: 'select',
name: 'editexpiry',
label: 'وقت اختتام:',
event: function(e) {
if (e.target.value === 'custom') {
Twinkle.protect.doCustomExpiry(e.target);
}
},
list: [
{ label: '1 گھنٹہ', value: '1 hour' },
{ label: '2 گھنٹہ', value: '2 hours' },
{ label: '3 گھنٹہ', value: '3 hours' },
{ label: '6 گھنٹہ', value: '6 hours' },
{ label: '12 گھنٹہ', value: '12 hours' },
{ label: '1 دن', value: '1 day' },
{ label: '2 دن', selected: true, value: '2 days' },
{ label: '3 دن', value: '3 days' },
{ label: '4 دن', value: '4 days' },
{ label: '1 ہفتہ', value: '1 week' },
{ label: '2 ہفتہ', value: '2 weeks' },
{ label: '1 ماہ', value: '1 month' },
{ label: '2 ماہ', value: '2 months' },
{ label: '3 ماہ', value: '3 months' },
{ label: '1 سال', value: '1 year' },
{ label: 'غیر متعین', value:'indefinite' },
{ label: 'شخصی۔۔۔', value: 'custom' }
]
});
form.append({
type: 'checkbox',
name: 'movemodify',
event: Twinkle.protect.formevents.movemodify,
list: [
{
label: 'منتقلی صفحہ کی محفوظ شدگی میں تبدیلی',
value: 'movemodify',
tooltip: 'محض موجود صفحات کے لیے۔',
checked: true
}
]
});
var movelevel = form.append({
type: 'select',
name: 'movelevel',
label: 'منتقلی صفحہ کی محفوظ شدگی:',
event: Twinkle.protect.formevents.movelevel
});
movelevel.append({
type: 'option',
label: 'تمام (مندرج صارفین)',
value: 'all'
});
movelevel.append({
type: 'option',
label: 'تصدیق شدہ',
value: 'autoconfirmed'
});
movelevel.append({
type: 'option',
label: 'سانچہ ترمیم کنندگان',
value: 'templateeditor'
});
movelevel.append({
type: 'option',
label: 'منتظمین',
value: 'sysop',
selected: true
});
form.append({
type: 'select',
name: 'moveexpiry',
label: 'وقت اختتام:',
event: function(e) {
if (e.target.value === 'custom') {
Twinkle.protect.doCustomExpiry(e.target);
}
},
list: [
{ label: '1 گھنٹہ', value: '1 hour' },
{ label: '2 گھنٹہ', value: '2 hours' },
{ label: '3 گھنٹہ', value: '3 hours' },
{ label: '6 گھنٹہ', value: '6 hours' },
{ label: '12 گھنٹہ', value: '12 hours' },
{ label: '1 دن', value: '1 day' },
{ label: '2 دن', selected: true, value: '2 days' },
{ label: '3 دن', value: '3 days' },
{ label: '4 دن', value: '4 days' },
{ label: '1 ہفتہ', value: '1 week' },
{ label: '2 ہفتہ', value: '2 weeks' },
{ label: '1 ماہ', value: '1 month' },
{ label: '2 ماہ', value: '2 months' },
{ label: '3 ماہ', value: '3 months' },
{ label: '1 سال', value: '1 year' },
{ label: 'غیر متعین', value:'indefinite' },
{ label: 'شخصی۔۔۔', value: 'custom' }
]
});
form.append({
type: 'checkbox',
name: 'createmodify',
event: function twinklebatchprotectFormCreatemodifyEvent(e) {
e.target.form.createlevel.disabled = !e.target.checked;
e.target.form.createexpiry.disabled = !e.target.checked || (e.target.form.createlevel.value === 'all');
e.target.form.createlevel.style.color = e.target.form.createexpiry.style.color = (e.target.checked ? "" : "transparent");
},
list: [
{
label: 'تخلیق صفحہ کی محفوظ شدگی میں تبدیلی',
value: 'createmodify',
tooltip: 'محض غیر موجود صفحات کے لیے۔',
checked: true
}
]
});
var createlevel = form.append({
type: 'select',
name: 'createlevel',
label: 'تخلیق صفحہ کی محفوظ شدگی:',
event: Twinkle.protect.formevents.createlevel
});
createlevel.append({
type: 'option',
label: 'تمام (مندرج صارفین)',
value: 'all'
});
createlevel.append({
type: 'option',
label: 'تصدیق شدہ',
value: 'autoconfirmed'
});
createlevel.append({
type: 'option',
label: 'سانچہ ترمیم کنندگان',
value: 'templateeditor'
});
createlevel.append({
type: 'option',
label: 'منتظمین',
value: 'sysop',
selected: true
});
form.append({
type: 'select',
name: 'createexpiry',
label: 'وقت اختتام:',
event: function(e) {
if (e.target.value === 'custom') {
Twinkle.protect.doCustomExpiry(e.target);
}
},
list: [
{ label: '1 گھنٹہ', value: '1 hour' },
{ label: '2 گھنٹہ', value: '2 hours' },
{ label: '3 گھنٹہ', value: '3 hours' },
{ label: '6 گھنٹہ', value: '6 hours' },
{ label: '12 گھنٹہ', value: '12 hours' },
{ label: '1 دن', value: '1 day' },
{ label: '2 دن', selected: true, value: '2 days' },
{ label: '3 دن', value: '3 days' },
{ label: '4 دن', value: '4 days' },
{ label: '1 ہفتہ', value: '1 week' },
{ label: '2 ہفتہ', value: '2 weeks' },
{ label: '1 ماہ', value: '1 month' },
{ label: '2 ماہ', value: '2 months' },
{ label: '3 ماہ', value: '3 months' },
{ label: '1 سال', value: '1 year' },
{ label: 'غیر متعین', value:'indefinite' },
{ label: 'شخصی۔۔۔', value: 'custom' }
]
});
form.append( {
type: 'textarea',
name: 'reason',
label: 'وجہ (نوشتہ محفوظ شدگی کے لیے): '
} );
var query;
if( mw.config.get( 'wgNamespaceNumber' ) === 14 ) { // categories
query = {
'action': 'query',
'generator': 'categorymembers',
'gcmtitle': mw.config.get( 'wgPageName' ),
'gcmlimit' : Twinkle.getPref('batchMax'), // the max for sysops
'prop': 'revisions',
'rvprop': 'size'
};
} else if( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Prefixindex' ) {
query = {
'action': 'query',
'generator': 'allpages',
'gapnamespace': Morebits.queryString.exists('namespace') ? Morebits.queryString.get( 'namespace' ) : document.getElementById('namespace').value,
'gapprefix': Morebits.queryString.exists('from') ? Morebits.string.toUpperCaseFirstChar(Morebits.queryString.get( 'from' ).replace('+', ' ')) :
Morebits.string.toUpperCaseFirstChar(document.getElementById('nsfrom').value),
'gaplimit' : Twinkle.getPref('batchMax'), // the max for sysops
'prop': 'revisions',
'rvprop': 'size'
};
} else {
query = {
'action': 'query',
'gpllimit' : Twinkle.getPref('batchMax'), // the max for sysops
'generator': 'links',
'titles': mw.config.get( 'wgPageName' ),
'prop': 'revisions',
'rvprop': 'size'
};
}
var statusdiv = document.createElement("div");
statusdiv.style.padding = '15px'; // just so it doesn't look broken
Window.setContent(statusdiv);
Morebits.status.init(statusdiv);
Window.display();
var statelem = new Morebits.status("صفحات کی فہرست بن رہی ہے");
var wikipedia_api = new Morebits.wiki.api( 'لوڈ ہو رہی ہے۔۔۔', query, function(apiobj) {
var xml = apiobj.responseXML;
var $pages = $(xml).find('page');
var list = [];
$pages.each(function(index, page) {
var $page = $(page);
var title = $page.attr('title');
var isRedir = $page.attr('redirect') === ""; // XXX ??
var missing = $page.attr('missing') === ""; // XXX ??
var size = $page.find('rev').attr('size');
var metadata = [];
if (missing) {
metadata.push("صفحہ موجود نہیں");
} else {
if (isRedir) {
metadata.push("رجوع_مکرر");
}
metadata.push(size + " بائٹ");
}
list.push( { label: title + (metadata.length ? (' (' + metadata.join('؛ ') + ')') : '' ), value: title, checked: true });
});
form.append({ type: 'header', label: 'صفحات برائے محفوظ شدگی' });
form.append( {
type: 'checkbox',
name: 'pages',
list: list
} );
form.append( { type:'submit' } );
var result = form.render();
Window.setContent( result );
}, statelem );
wikipedia_api.post();
};
Twinkle.batchprotect.currentProtectCounter = 0;
Twinkle.batchprotect.currentprotector = 0;
Twinkle.batchprotect.callback.evaluate = function twinklebatchprotectCallbackEvaluate(event) {
var pages = event.target.getChecked( 'pages' );
var reason = event.target.reason.value;
var editmodify = event.target.editmodify.checked;
var editlevel = event.target.editlevel.value;
var editexpiry = event.target.editexpiry.value;
var movemodify = event.target.movemodify.checked;
var movelevel = event.target.movelevel.value;
var moveexpiry = event.target.moveexpiry.value;
var createmodify = event.target.createmodify.checked;
var createlevel = event.target.createlevel.value;
var createexpiry = event.target.createexpiry.value;
if( ! reason ) {
alert("براہ کرم محفوظ کرنے کی وجہ تحریر کریں");
return;
}
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init( event.target );
if( !pages ) {
Morebits.status.error( 'نقص', 'محفوظ کرنے کے لیے کوئی صفحہ نہیں ہے' );
return;
}
var toCall = function twinklebatchprotectToCall( work ) {
if( work.length === 0 && Twinkle.batchprotect.currentProtectCounter <= 0 ) {
Morebits.status.info( 'تکمیل' );
window.clearInterval( Twinkle.batchprotect.currentprotector );
Twinkle.batchprotect.currentprotector = Twinkle.batchprotect.currentProtectCounter = 0;
Morebits.wiki.removeCheckpoint();
return;
} else if( work.length !== 0 && Twinkle.batchprotect.currentProtectCounter <= Twinkle.getPref('batchProtectMinCutOff') ) {
var pages = work.shift();
Twinkle.batchprotect.currentProtectCounter += pages.length;
for( var i = 0; i < pages.length; ++i ) {
var page = pages[i];
var query = {
'action': 'query',
'titles': page
};
var wikipedia_api = new Morebits.wiki.api( 'صفحہ کی موجودگی جانچی جا رہی ہے ' + page, query, Twinkle.batchprotect.callbacks.main );
wikipedia_api.params = {
page: page,
reason: reason,
editmodify: editmodify,
editlevel: editlevel,
editexpiry: editexpiry,
movemodify: movemodify,
movelevel: movelevel,
moveexpiry: moveexpiry,
createmodify: createmodify,
createlevel: createlevel,
createexpiry: createexpiry
};
wikipedia_api.post();
}
}
};
var work = Morebits.array.chunk( pages, Twinkle.getPref('batchProtectChunks') );
Morebits.wiki.addCheckpoint();
Twinkle.batchprotect.currentprotector = window.setInterval( toCall, 1000, work );
};
Twinkle.batchprotect.callbacks = {
main: function( apiobj ) {
var xml = apiobj.responseXML;
var normal = $(xml).find('normalized n').attr('to');
if( normal ) {
apiobj.params.page = normal;
}
var exists = ($(xml).find('page').attr('missing') !== "");
var page = new Morebits.wiki.page(apiobj.params.page, "صفحہ " + apiobj.params.page + " کو محفوظ کیا جا رہا ہے");
var takenAction = false;
if (exists && apiobj.params.editmodify) {
page.setEditProtection(apiobj.params.editlevel, apiobj.params.editexpiry);
takenAction = true;
}
if (exists && apiobj.params.movemodify) {
page.setMoveProtection(apiobj.params.movelevel, apiobj.params.moveexpiry);
takenAction = true;
}
if (!exists && apiobj.params.createmodify) {
page.setCreateProtection(apiobj.params.createlevel, apiobj.params.createexpiry);
takenAction = true;
}
if (!takenAction) {
Morebits.status.warn("صفحہ " + apiobj.params.page, "محفوظ کیا جا رہا ہے " + (exists ? "موجود ہے" : "موجود نہیں") + "؛ عمل آوری کے لیے کوئی کام نہیں ہے");
return;
}
page.setEditSummary(apiobj.params.reason);
page.protect(function(pageobj) {
--Twinkle.batchprotect.currentProtectCounter;
var link = document.createElement( 'a' );
link.setAttribute( 'href', mw.util.getUrl( apiobj.params.page ) );
link.appendChild( document.createTextNode( apiobj.params.page ) );
pageobj.getStatusElement().info( [ 'تکمیل (' , link , ')' ] );
} );
}
};
})(jQuery);
//</nowiki>