User:SD0001/FAR-helper.js

/** * Script to easily make Feature Article Review (FAR) * nominations. */

/* */ /* jshint maxerr: 999 */

var far = {}; window.far = far;

$.when(	mw.loader.using('ext.gadget.morebits'),	$.ready ).then(function {	if ([0, 1].indexOf(mw.config.get('wgNamespaceNumber')) !== -1) {		mw.util.addPortletLink('p-cactions', '#', 'FAR', 'far-portlet', 'Nominate for FAR');		$('#far-portlet').click(far.callback);	} });

far.advert = ' (FAR-helper)';

far.callback = function farCallback(e) { if (e) e.preventDefault;

var Window = new Morebits.simpleWindow(600, 600); Window.setTitle( "Nominate article for FAR" ); Window.setScriptName('FAR-helper'); Window.addFooterLink('FAR instructions', 'WP:FAR');

var form = new Morebits.quickForm(far.evaluate);

var field = form.append({		type: 'field',		label: 'Details',		name: 'details'	});

field.append({		type: 'textarea',		name: 'reason',		label: 'Rationale:',		style: 'height: 130px',		tooltip: 'You can expand the rationale after the page has been saved as well.',		value: 'I am nominating this featured article for review because...'	});

// TODO: allow notifications through script field.append({		type: 'dyninput',		name: 'page',		id: 'notification-pages',		label: 'Notified pages: ',		tooltip: 'Pages that have been notified',		sublabel: 'Page: ',	});

var previewlink = Morebits.htmlNode('a', 'Preview'); previewlink.style.cursor = "pointer"; $(previewlink).click(function {		// |result| is defined below		far.preview(result);	}); form.append( { type: 'div', id: 'farpreview', label: [ previewlink ] } ); form.append( { type: 'div', id: 'far-previewbox', style: 'display: none' } );

form.append({ type: 'submit', label: 'Submit' });

var result = form.render; Window.setContent(result); Window.display; far.previewbox = document.getElementById('far-previewbox'); result.previewer = new Morebits.wiki.preview(far.previewbox);

};

far.initParams = function (form) { far.params = Morebits.quickForm.getInputData(form); far.params.notifications = $(form).find('#notification-pages input[name=page]') .get.map(e => e.value); var title_obj = mw.Title.newFromText(Morebits.pageNameNorm); far.title = title_obj.getSubjectPage.toText; far.talktitle = title_obj.getTalkPage.toText; };

far.preview = function (form) { far.initParams(form);

Morebits.status.init(far.previewbox); $(far.previewbox).show;

far.tasks.getNumber.then(function {		form.previewer.beginRender(far.tasks.getNomPageText, far.farpage);	}, function  {		form.previewer.beginRender("Unable to render preview", far.farpage);	}); };

far.evaluate = function (e) { var form = e.target; far.initParams(form);

Morebits.simpleWindow.setButtonsEnabled(false); Morebits.status.init(form);

var tm = new Morebits.taskManager; tm.add(far.tasks.getNumber, []); tm.add(far.tasks.editTalkPage, []); tm.add(far.tasks.createNomPage, [ far.tasks.getNumber ], function {		Morebits.status.printUserText(far.tasks.getNomPageText, 'Your nomination text is provided below, with which you can manually create the page ' + far.farpage + '.');	}); tm.add(far.tasks.transcludeToFarPage, [ far.tasks.createNomPage ]); tm.execute.then(function {		Morebits.status.actionCompleted('Nomination completed.');	}); };

far.tasks = { getNumber: function { var query = { action: 'query', format: 'json', formatversion: '2', list: 'allpages', apnamespace: '4', // WP			apprefix: 'Featured article review/' + far.title + '/', aplimit: 'max' };		var api = new Morebits.wiki.api('Getting numbering', query); return api.post.then(function(apiobj) {			var pages = apiobj.response.query.allpages;			far.num = pages.length + 1; // HACK			far.farpage = 'Wikipedia:Featured article review/' + far.title + '/archive' + far.num;			apiobj.getStatusElement.info('Next number is ' + far.num);		}); },

editTalkPage: function { var def = $.Deferred; var talkpage = new Morebits.wiki.page(far.talktitle, 'Editing talk page'); talkpage.load(function(talkpage) {			// prepend tag:			var text = '\n' + talkpage.getPageText;			talkpage.setPageText(text);			talkpage.setEditSummary('Nominating to FAR' + far.advert);			talkpage.save(def.resolve, def.reject);		}, def.reject); return def; },

getNomPageText: function { var notificationLinks = far.params.notifications .filter(e => e.trim.length > 0) .map(pg =>  + pg + ).join(', '); // XXX: Should this be a template? return '===' + far.title + '===\n' + '\n' + ' \n' + ' \n' + ": Notified: " + notificationLinks + " \n" + '\n' + far.params.reason.trim + (far.params.reason.trim.endsWith('~') ? '' : ' ~'); },

createNomPage: function { var def = $.Deferred; var appendtext = far.tasks.getNomPageText; var pageobj = new Morebits.wiki.page(far.farpage, 'Creating nomination page'); pageobj.setAppendText(appendtext); pageobj.setCreateOption('createonly'); pageobj.setWatchlist(true); pageobj.setEditSummary('Creating FAR nomination page' + far.advert); pageobj.append(def.resolve, def.reject); return def; },

transcludeToFarPage: function { var def = $.Deferred; var pageobj = new Morebits.wiki.page('Wikipedia:Featured article review', 'Transcluding to FAR page'); pageobj.setPageSection(1); pageobj.load(function (nomspage) {			var text = nomspage.getPageText;			var transclusion = '';			var newText = text.replace(/==\s*Featured article reviews\s*==\n/, '$&' + transclusion + '\n');			if (newText === text) {				pageobj.getStatusElement.error('Failed to add transclusion at WP:FAR page. ' +					'Please manually edit WP:FAR to add  at the top.');				return def.resolve;			}			pageobj.setPageText(newText);			pageobj.setEditSummary('Adding ' + far.farpage + '' + far.advert);			pageobj.save(def.resolve, def.reject);		}); return def; }

};

/* */