ব্যবহারকারী:আফতাবুজ্জামান/তথ্যসূত্র-সম্প্রসারক.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();
		});
	});
});