利用者:Surgematrix/private-sandbox.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

/**
 * このスクリプトをインストールした状態で[[特別:PrivateSandbox]]にアクセスすると非公開のサンドボックスを使用できる。
 */
 
$.when(
	$.ready,
	mw.loader.using(['mediawiki.user', 'mediawiki.api'])
).then(function() {
	if (mw.config.get('wgPageName') !== '特別:PrivateSandbox' &&
		mw.config.get('wgPageName') !== '特別:白紙ページ/PrivateSandbox') {

		return;
	}

	document.title = 'Private sandbox';
	$('#firstHeading').text('Private sandbox');
	var api = new mw.Api();

	$('#mw-content-text').empty().append(
		$('<div>').attr('id', 'ps-preview'),
		$('<textarea>').val(mw.user.options.get('userjs-pvt-sandbox'))
			.attr({ id: 'ps-textarea', cols: 80, rows: 25, tabindex: 1, accesskey: ',' })
			.css({ 'margin': '20px 0 10px 0', 'font-family': mw.user.options.get('editfont') }),
		$('<button>').text('保存').click(function() {
			$('#ps-status').text('Saving').css('color', 'blue');
			var text = $('#ps-textarea').val();
			api.saveOption('userjs-pvt-sandbox', text).then(function() {
				$('#ps-status').empty();
				$('#ps-lastsaved').text('Last saved at ' + new Date().toLocaleString());
				mw.user.options.set('userjs-pvt-sandbox', text);
			}, function(err) {
				$('#ps-status').text('保存に失敗しました: ', err).css('color', 'red');
			});
		}),
		$('<button>').text('プレビューを表示').click(function() {
			$('#ps-status').text('Retrieving preview').css('color', 'blue');
			var text = $('#ps-textarea').val();
			api.get({
				action: 'parse',
				text: text,
				title: 'PrivateSandbox', 
				prop: 'text|categorieshtml',
				disableeditsection: '1',
				formatversion: '2'
			}).then(function(json) {
				$('#ps-status').empty();
				$('#ps-preview').html(json.parse.text + json.parse.categorieshtml);
			}, function(err) {
				$('#ps-status').text('Failed to fetch preview: ', err).css('color', 'red');
			});
		}).css({ 'padding-left': '5px' }),
		$('<div>').attr('id', 'ps-status'),
		$('<div>').attr('id', 'ps-lastsaved')
	);

	window.onbeforeunload = function(e) {
		if( $('#ps-textarea').val() !== mw.user.options.get('userjs-pvt-sandbox') ) {
			e.returnValue = 'Your changes have not been saved';
			return e.returnValue;
		}
	};

});