User:SD0001/PR-helper.js

/** * Script to easily make Peer Review (PR) * nominations. */

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

var pr = {}; window.pr = pr;

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

pr.advert = ' (PR-helper)';

pr.callback = function (e) { e.preventDefault;

var Window = new Morebits.simpleWindow(600, 600); Window.setTitle( "Nominate article for Peer Review" ); Window.setScriptName('PR-helper'); Window.addFooterLink('PR instructions', 'Wikipedia:Peer review/Guidelines');

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

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

field.append({		type: 'select',		label: 'Topic: ',		name: 'topic',		list: [			{ type: 'option', label: "Arts", value: "arts" },			{ type: 'option', label: "Language and literature", value: "langlit" },			{ type: 'option', label: "Philosophy and religion", value: "philrelig" },			{ type: 'option', label: "Everyday life", value: "everydaylife" },			{ type: 'option', label: "Social sciences and society", value: "socsci" },			{ type: 'option', label: "Geography", value: "geography" },			{ type: 'option', label: "History", value: "history" },			{ type: 'option', label: "Engineering and technology", value: "engtech" },			{ type: 'option', label: "Natural sciences and mathematics", value: "natsci" },			{ type: 'option', label: "General topic", value: "general" },			{ type: 'option', label: "List", value: "list" },		]	});

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.'	});

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

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

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

};

pr.initParams = function (form) { pr.params = Morebits.quickForm.getInputData(form); var title_obj = mw.Title.newFromText(Morebits.pageNameNorm); pr.title = title_obj.getSubjectPage.toText; pr.talktitle = title_obj.getTalkPage.toText; };

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

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

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

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

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

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

pr.tasks = {

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

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

getNomPageText: function { return '\n\n' + pr.params.reason.trim + (pr.params.reason.trim.endsWith('~') ? '' : ' ~'); },

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

};

/* */