ব্যবহারকারী:আফতাবুজ্জামান/তথ্যসূত্র-সম্প্রসারক.js
লক্ষ্য করুন: প্রকাশ করার পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।
- ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
- গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
- ইন্টারনেট এক্সপ্লোরার / এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন
- অপেরা: Ctrl-F5 টিপুন।
/*** Reference Expander ***/
// Expands references that are a link to a expanded reference using {{cite ..}}
// [[:en:User:BrandonXLF/ReferenceExpander]]
// By [[User:BrandonXLF]]
$(mw.util.addPortletLink('p-tb', '#', 'তথ্যসূত্র সম্প্রসারণ করুন')).click(function(e){
e.preventDefault();
var progress = new OO.ui.ProgressBarWidget({
progress: false
});
var doing = $('<div style="margin:0.5em 0;font-weight:bold;">শুরু করা হচ্ছে...</div>');
var logElement = $('<div style="font-family:monospace monospace;"></div>');
function log (msg, color) {
logElement.append($('<div>').text('> ' + msg).css({color: color || 'grey'}));
}
function ProcessDialog( config ) {
ProcessDialog.super.call( this, config );
}
OO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );
ProcessDialog.static.name = 'citoidExpandRefs';
ProcessDialog.static.title = 'তথ্যসূত্র সম্প্রসারক';
ProcessDialog.static.actions = [{
action: 'close',
label: 'বন্ধ করুন',
flags: [ 'safe', 'close' ]
}];
ProcessDialog.prototype.initialize = function () {
ProcessDialog.super.prototype.initialize.apply( this, arguments );
this.content = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
processDialog.content.$element.append(progress.$element, doing, logElement);
this.$body.append( this.content.$element );
};
ProcessDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
return new OO.ui.Process( function () {
dialog.close();
});
};
ProcessDialog.prototype.getBodyHeight = function () {
return this.content.$element.outerHeight( true );
};
var windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
var processDialog = new ProcessDialog({
size: 'large'
});
windowManager.addWindows( [ processDialog ] );
windowManager.openWindow( processDialog );
log('পাতার বিষয়বস্তু ও স্ক্রিপ্টগুলি লোড করা হচ্ছে...');
mw.loader.getScript('https://en.wikipedia.org/w/index.php?title=User:BrandonXLF/Citoid.js&action=raw&ctype=text/javascript').then(function(){
new mw.Api().edit(mw.config.get('wgPageName'),function(rev){
var def = $.Deferred();
var refs = rev.content.match(/<ref.*?>.*?<\/ref>/g);
var done = 0;
progress.setProgress(0);
doing.text('তথ্যসূত্র সম্প্রসারণ করা হচ্ছে...');
function afterRef (msg, color) {
done++;
log(msg,color);
progress.setProgress(done/refs.length*100);
processDialog.updateSize();
if (done >= refs.length) {
progress.setProgress(false);
doing.text('সংরক্ষণ করা হচ্ছে...');
log(mw.config.get('wgPageName') + ' পাতায় পরিবর্তন সংরক্ষণ করা হচ্ছে...');
processDialog.updateSize();
var pos = 0;
def.resolve({
text: rev.content.replace(/<ref.*?>.*?<\/ref>/g, function(){
return refs[pos++];
}),
summary: '[[ব্যবহারকারী:আফতাবুজ্জামান/তথ্যসূত্র-সম্প্রসারক.js|তথ্যসূত্র-সম্প্রসারক]] ব্যবহার করে তথ্যসূত্র সম্প্রসারণ করা হল'
});
}
}
function doRef (i) {
if (refs[i].match(/<ref.*?> *{{/)) {
afterRef('ইতিমধ্যে সম্প্রসারিত তথ্যসূত্র এড়িয়ে যাওয়া হল।');
return;
}
var parts = refs[i].match(/(<ref.*?>)(.*?)(<\/ref>)/);
parts[2] = parts[2].match(/\[?([^ \]]*)*\]?/)[1];
getCitoidRef(parts[2]).then(function(ref){
refs[i] = parts[1] + ref + parts[3];
afterRef('এই তথ্যসূত্র সম্প্রসারণ করা হয়েছে: "' + parts[2].trim() + '"।', 'green');
},function(err){
afterRef('এই তথ্যসূত্র সম্প্রসারণে ত্রুটি হয়েছে: "' + parts[2].trim() + '"।', 'red');
});
}
if (refs) {
for (var i = 0; i < refs.length; i++) doRef(i);
} else {
log('এই পাতায় কোনও তথ্যসূত্র পাওয়া যায়নি।');
def.resolve({
text: rev.content
});
}
return def.promise();
}).then(function(){
progress.setProgress(100);
doing.text('সম্পাদনা সংরক্ষণ করা হয়েছে!');
log('সম্পাদনা সংরক্ষণ করা হয়েছে। পাতাটি পুনঃলোড করা হচ্ছে...');
window.location.reload();
});
});
});