User:Void/createWikiNotify.js

// // TODO: more translations

var cwn = { ca: { approve: 'Approve', submit: 'Enviar', c_domain: 'Marca aquesta wiki com que necessita un domini personalitzat', i: { required: 'Si us plau, ompli tots els camps obligatoris.', user: 'El sol·licitant no sembla existir.', dbexists: 'La wiki sol·licitada ja existeix.', unknown: 'Hi ha un problema amb la seva entrada o amb createWikiNotify.js', self: 'Wiki requester matches current user, skipping notification', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Wiki creada' },	de: { approve: 'Approve', submit: 'Absenden', c_domain: 'Mark this wiki as needing a custom domain', i: { required: 'Please fill in all the required fields.', user: 'Der anfrager ist nicht erstellt auf dieser Wiki-Farm.', dbexists: 'Eine Wiki mit dem Database-namen besteht schon.', unknown: 'There is a problem with your input or with createWikiNotify.js', self: 'Wiki requester matches current user, skipping notification', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Wiki created' },	en: { approve: 'Approve', submit: 'Submit', c_domain: 'Mark this wiki as needing a custom domain', i: { required: 'Please fill in all the required fields.', user: 'The requester does not appear to exist.', dbexists: 'The requested wiki already exists.', unknown: 'There is a problem with your input or with createWikiNotify.js', self: 'Wiki requester matches current user, skipping notification', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Wiki created (using CWNotify)' },	es: { approve: 'Approve', submit: 'Enviar', c_domain: 'Marcar esta wiki como que necesita un dominio personalizado', i: { required: 'Por favor, rellene todos los campos obligatorios.', user: 'El solicitante no parece existir.', dbexists: 'La wiki solicitada ya existe.', unknown: 'Hay un problema con su entrada o con createWikiNotify.js', self: 'Wiki requester matches current user, skipping notification', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Wiki creada (usando CWNotify)' },	fr: { approve: 'Approve', submit: 'Soumettre', c_domain: 'Marquer ce wiki nécessitant un domaine personnalisé', i: { required: 'Merci de remplir tout les champs requis.', user: 'Le demandeur n existe pas.', dbexists: 'Ce wiki existe déjà.', unknown: 'Il y a une problème avec votre entrée ou avec createWikiNotify.js', self: 'Wiki requester matches current user, skipping notification', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Wiki created' },	ja: { approve: 'Approve', submit: '送信する', c_domain: 'このウィキを、カスタムドメイン利用希望のものとしてマークする', i: { required: '全ての欄へのご記入をお願いします. ',			user: '申請者が存在しないようです. ',			dbexists: '申請されたウィキは、既に存在するようです. ',			unknown: 'あなたの入力か、createWikiNotify.jsに問題があるようです. ',			self: 'ウィキの申請者が現在の操作者と一致するので、通知は省略します. ',			dbname: '申請されたデータベース名(dbname)には、無効な文字が含まれております. \ndbnameには、半角英数のみが利用できることにご注意ください. '		},		summary: 'ウィキが作成されました (CWNotifyによる通知)' },	nl: { approve: 'Approve', submit: 'Opslaan', c_domain: 'Mark this wiki as needing a custom domain', i: { required: 'Vul alle verplichte velden in.', user: 'De aanvrager lijkt niet te bestaan.', dbexists: 'Deze wiki bestaat al.', unknown: 'Er is een probleem met het formulier of createWikiNotify.js', self: 'Wiki requester matches current user, skipping notification', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Wiki aangemaakt' },	pt: { approve: 'Approve', submit: 'Enviar', c_domain: 'Marca esta wiki como você precisa de um domínio personalizado', i: { required: 'Por favor, preencha todos os campos obrigatórios.', user: 'O requerente não parece existir.', dbexists: 'O wiki solicitada já existe.', unknown: 'Há um problema com a sua entrada ou createWikiNotify.js', self: 'Wiki requester matches current user, skipping notification', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Wiki criada' },	tl: { approve: 'Approve', submit: 'Isumite', c_domain: 'Markahan ang wiking ito bilang nangangailangan ng isang pasadyang dominyo', i: { required: 'Pakipunan ang lahat ng mga kinakailangang patlang.', user: 'Nagmumukhang hindi umiiral ang tagapaghiling.', dbexists: 'Umiiral na ang hinihiling na wiki.', unknown: 'May problema sa iyong input o sa createWikiNotify.js', self: 'Tumutugma ang tagapaghiling ng wiki sa kasalukuyang tagagamit, nilalagpasan ang abiso', dbname: 'The requested dbname contains invalid characters\nPlease be aware that only alphanumeric characters can be present in a dbname' },		summary: 'Ginawa ang wiki (gamit ang CWNotify)' },	'zh-hans': { approve: '批准', submit: '提交', c_domain: '标记此wiki为「需要自定义域名」', i: { required: '请填写所有必填栏位. ',			user: '申请人似乎不存在. ',			dbexists: '申请的wiki已经存在. ',			unknown: '您填写的表单似乎有问题，也有可能是createWikiNotify.js发生问题', self: '申请人与当前用户一致，略过通知', dbname: '申请的数据库名称（wiki域名）含有无效字符. 请注意数据库名称仅限字母和数字. '		},		summary: 'Wiki创建成功（使用CWNotify）' },	'zh-hant': { approve: '批准', submit: '提交', c_domain: '標記此wiki為「需要自定義域名」', i: { required: '請填寫所有必填欄位. ',			user: '申请人似乎不存在. ',			dbexists: '申請的wiki已經存在. ',			unknown: '您填寫的表單似乎有問題，也有可能是createWikiNotify.js發生問題', self: '申請人與當前用戶一致，略過通知', dbname: '申請的數據庫名稱（wiki域名）含有無效字符. 請注意數據庫名稱僅限字母和數字. '		},		summary: 'Wiki創建成功（使用CWNotify）' }, };

function getTrans(lang) { if(cwn[lang]) return cwn[lang]; else return cwn.en; }

var userLang = mw.user.options.get('language'); var messages = getTrans(userLang);

if( mw.config.get('wgCanonicalSpecialPageName') === "RequestWikiQueue" ) { // Hack in a way to tell wiki requests with a custom domain apart from those that don't	if( !/[A-Za-z0-9]\.miraheze\.org/.test( $('#mw-input-wpurl')[0].firstChild.value ) ) { $('a[title="Special:CreateWiki"]')[0].href += '&cwCustom=1'; }

// Add in a button to a wiki request that allows you to automatically mark that request as approved var approve = new OO.ui.ButtonWidget({ label: messages.approve, id: 'rw-approve' }); $('#mw-input-wpedit').after(approve.$element.click(function { $('input[value="approved"]').click; $('input[name="wpcomment"]')[0].value = "Approved"; // TODO: Customize? window.open( $('a[title="Special:CreateWiki"]')[0].href, '_blank' ); // Open CW page in new tab $('button[name="wpsubmit"]').click; })); }

if( mw.config.get('wgPageName') === 'Special:CreateWiki' && $('form[action="/wiki/Special:CreateWiki"]')[0] && $("#mw-input-cwRequester")[0].childNodes[0].value !== mw.config.get('wgUserName') ) { mw.loader.using( ['oojs-ui', 'mediawiki.util'] ).done( function {		var submit = new OO.ui.ButtonWidget({ label: messages.submit, id: 'c-submit-button' });		var customCBox = new OO.ui.CheckboxInputWidget({ selected: window.location.toString.includes('cwCustom=1') ? true : false, id: 'c-custom-cbox' });		var fieldset = new OO.ui.FieldsetLayout( { } );		fieldset.addItems( [ new OO.ui.FieldLayout( customCBox, {label: messages.c_domain, align: 'inline'} ) ] );		$('div.mw-htmlform-submit-buttons').replaceWith(submit.$element.css('margin-top', '1em'));		$('#mw-input-cwDBname').after(fieldset.$element.css('margin-top', '1em'));		$('#c-submit-button').click(function{ // Validate input $('#c-submit-button').css("display", "none"); // Prevent double submissions (hopefully) var dbname = $("#mw-input-cwDBname")[0].childNodes[0].value; var requester = $("#mw-input-cwRequester")[0].childNodes[0].value; var reason = $("#mw-input-wpreason")[0].childNodes[0].value; if( dbname.trim.length === 0 || requester.trim.length === 0 || reason.trim.length === 0 ) invalidInput('required'); else if ( /[^A-Za-z0-9]/.test(dbname.trim) ) invalidInput('dbname'); else { if( /[A-Z]/.test(dbname) ) $("#mw-input-cwDBname")[0].childNodes[0].value = dbname.toLowerCase; validateUser(requester); }		});	} ); }

function validateUser(user) { $.getJSON(		mw.util.wikiScript('api'),		{			format: 'json',			action: 'query',			list: 'users',			ususers: user,			usprop: ''		}	).success(function (data){		if( mw.config.get('wgUserName') === user ) {			invalidInput('self');			$('form[action="/wiki/Special:CreateWiki"]')[0].submit;		}		else if(typeof data.query.users[0].missing === 'undefined')			validateDB;		else			invalidInput('user');	}); }

function validateDB { var dbname = $("#mw-input-cwDBname")[0].childNodes[0].value; $.getJSON(		mw.util.wikiScript('api'),		{			format: 'json',			action: 'wikidiscover'		}	).success( function(data) {		var wikis = data.wikidiscover;		for(var i = 0; i < wikis.length; i++) {			if(wikis[i].dbname == dbname)				return invalidInput('dbexists'); // Exists		}		validInput; // Does not exist	} ); }

function invalidInput(type) { var reason; if(messages.i[type]) reason = messages.i[type]; else reason = messages.i.unknown; alert(reason); $('#c-submit-button').css("display", "block"); }

function validInput { var dbname = $("#mw-input-cwDBname")[0].childNodes[0].value; var lang = $("#mw-input-cwLanguage")[0].childNodes[0].value; var requester = $("#mw-input-cwRequester")[0].childNodes[0].value; var custom = $('#c-custom-cbox')[0].childNodes[0].checked; var suffix = lang; if( suffix === 'en' ) suffix = ''; else suffix = '/' + suffix; var template = 'Template:Wiki created' + (custom ? '(CD)' : '') + suffix; dbname = dbname.slice(0, dbname.lastIndexOf('wiki')); // Check if the template exists and edit based off response $.getJSON(		mw.util.wikiScript('api'),		{			format: 'json',			action: 'query',			titles: template,			prop: 'revisions',			rvlimit: 1,			rvprop: '' // Don't need anything to see if it's there		}	).success(function(data){edit(data, template, requester, dbname, lang);}); }

function edit (resp, template, requester, dbname, lang) { if( resp.query.pages[-1] ) template = template.slice(0, template.indexOf('/')).slice(template.indexOf(':') + 1); // No translated version, default to en	else template = template.slice(template.indexOf(':') + 1); // Remove template prefix

$.getJSON(		mw.util.wikiScript('api'),		{			format: 'json',			action: 'query',			titles: 'User talk:' + requester,			prop: 'revisions',			rvlimit: 1,			rvprop: 'content'		}	).success(function(resp) {		if( resp.query.pages[-1] ) {			// Didn't find, create page			$.ajax( { url: mw.util.wikiScript('api'), type: 'POST', dataType: 'json', data: { format: 'json', action: 'edit', token: mw.user.tokens.get('csrfToken'), title: 'User talk:' + requester, text: 'https://' + dbname + '.miraheze.org', summary: getTrans(lang).summary, createonly: 1 // Force only create page }			} ).success(function{$('form[action="/wiki/Special:CreateWiki"]')[0].submit});		}		else {			// Found, preserve existing content			var wtext = JSON.stringify(resp);			wtext = wtext.slice(wtext.indexOf('"*":"') + 5, wtext.indexOf('"}]}'));			wtext = wtext.replace(/\\n/g, '\n'); // JSON.stringify escapes the string			wtext = wtext.replace(/\\"/g, '"');			wtext += '\n\nhttps://' + dbname + '.miraheze.org',			$.ajax( { url: mw.util.wikiScript('api'), type: 'POST', dataType: 'json', data: { format: 'json', action: 'edit', token: mw.user.tokens.get('csrfToken'), title: 'User talk:' + requester, text: wtext, summary: getTrans(lang).summary, }			} ).success(function{$('form[action="/wiki/Special:CreateWiki"]')[0].submit});		}	} ); } //