User:Void/createWikiNotify.js

From Meta
Jump to navigation Jump to search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
//<nowiki>
// 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 [[User:Void/createWikiNotify.js|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 [[User:Void/createWikiNotify.js|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 [[User:Void/createWikiNotify.js|CWNotify]])'
	},
	'zh-hans': {
		approve: '批准',
		submit: '提交',
		c_domain: '标记此wiki为「需要自定义域名」',
		i: {
			required: '请填写所有必填栏位。',
			user: '申请人似乎不存在。',
			dbexists: '申请的wiki已经存在。',
			unknown: '您填写的表单似乎有问题,也有可能是createWikiNotify.js发生问题',
			self: '申请人与当前用户一致,略过通知',
			dbname: '申请的数据库名称(wiki域名)含有无效字符。请注意数据库名称仅限字母和数字。'
		},
		summary: 'Wiki创建成功(使用[[User:Void/createWikiNotify.js|CWNotify]])'
	},
	'zh-hant': {
		approve: '批准',
		submit: '提交',
		c_domain: '標記此wiki為「需要自定義域名」',
		i: {
			required: '請填寫所有必填欄位。',
			user: '申请人似乎不存在。',
			dbexists: '申請的wiki已經存在。',
			unknown: '您填寫的表單似乎有問題,也有可能是createWikiNotify.js發生問題',
			self: '申請人與當前用戶一致,略過通知',
			dbname: '申請的數據庫名稱(wiki域名)含有無效字符。請注意數據庫名稱僅限字母和數字。'
		},
		summary: 'Wiki創建成功(使用[[User:Void/createWikiNotify.js|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();
	}));
}

/* Disable main script, Wiki creation notifications are now done through Echo.
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: ''
		}
	).done(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'
		}
	).done( 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
		}
	).done(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',
			rvslots: 'main'
		}
	).done(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: '{{subst:' + template + '|1=https://' + dbname + '.miraheze.org}}',
					summary: getTrans(lang).summary,
					createonly: 1 // Force only create page
				}
			} ).done(function(){$('form[action="/wiki/Special:CreateWiki"]')[0].submit()});
		}
		else {
			// Found, preserve existing content
			var key = Object.keys(resp.query.pages)[0];
			var wtext = resp.query.pages[key].revisions[0].slots.main["*"];
			wtext += '\n\n{{subst:' + template + '|1=https://' + 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,
				}
			} ).done(function(){$('form[action="/wiki/Special:CreateWiki"]')[0].submit()});
		}
	} );
}
*/
//</nowiki>