利用者:CES1596/RegexpButton.js

提供:Wikisource

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
// このスクリプトはwikisource.orgの[[MediaWiki:RegexpButton.js]](2015-08-25T02:46:34, UTC)をもとに作成しています。

/***
*Regular expressions 
*Author: ThomasV, Pathoschild
*Note : this tool uses the javascript syntax: use $ (and not \) to call a group
*Tutoriel : http://www.regular-expressions.info/tutorial.html
****/

/* create form */
function custom() {
 
	/* if already open */
	if(document.getElementById('regexform')) customremove()
	else {	
               var editbox = document.getElementById('wpTextbox1');
		/* container */
		var regexform = document.createElement('div');
		regexform.setAttribute('id','regexform');
		editbox.parentNode.insertBefore(regexform,editbox.parentNode.firstChild);
 		/* form tag */
		var formform = document.createElement('form');
		formform.setAttribute('id','regexformform');
		//formform.setAttribute('onSubmit','customgo(); return false;');
		regexform.appendChild(formform);

		// add input boxes
	        var newinput = document.createElement('input');
	        newinput.setAttribute('id','formsearch');
	        var newlabel = document.createElement('label');
	        newlabel.setAttribute('for','formsearch');
		newlabel.appendChild(document.createTextNode('検索する文字列'));

		formform.appendChild(newlabel);
		formform.appendChild(newinput);

		var newinput = document.createElement('input');
		newinput.setAttribute('id','formreplace');
		var newlabel = document.createElement('label');
		newlabel.setAttribute('for','formreplace');
		newlabel.appendChild(document.createElement('br'));
		newlabel.appendChild(document.createTextNode('置換後の文字列'));

		formform.appendChild(newlabel);
		formform.appendChild(newinput);

		// go! link
		var go_button = document.createElement('input');
		go_button.setAttribute('type',"button");
		go_button.setAttribute('onclick',"customgo();");
		go_button.setAttribute('title',"置換");
		go_button.setAttribute('value',"置換");
		formform.appendChild(go_button);

	}
}
 
 
 
/* run patterns */
function customgo() {
	/* get search and replace strings */

        var msearch = document.getElementById('formsearch').value;
	msearch = msearch.replace(/\\n/g, '\n');
 
        var mreplace = document.getElementById('formreplace').value;
	mreplace = mreplace.replace(/\\n/g, '\n');
 
	/* convert input to regex */
 
	// without delimiters
	if(!msearch.match(/^\s*\/[\s\S]*\/[a-z]*\s*$/i)) {
		var search_re = new RegExp(msearch,'g');
	}
	// with delimiters
	else {
		// break into parts
		var regpattern = msearch.replace(/^\s*\/([\s\S]*)\/[a-z]*\s*$/i,'$1');
		var regmodifiers = msearch.replace(/^\s*\/[\s\S]*\/([a-z]*)\s*$/,'$1');
		// filter invalid flags
		regmodifiers = regmodifiers.replace(/[^gim]/ig,'');
		var search_re = new RegExp(regpattern, regmodifiers);
	}
 
	/* perform */
	var editbox = document.getElementById('wpTextbox1');
	editbox.value = editbox.value.replace(search_re,mreplace);
}
 
/* remove form */
function customremove() {
	var regexform = document.getElementById('regexform');
	regexform.parentNode.removeChild(regexform);
	patterncount = -1;
}

function addButtonToWikiEditorToolbar( b ){
	var tools = {};
	tools[ b.imageId ] = {
		label: b.speedTip,
		type: 'button',
		icon: b.imageFile,
		action: {
			type: 'callback',
			execute: b.onClick
		}
	};
	$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
		section: 'proofreadpage-tools',
		group: 'other',
		tools: tools
	} );
	$( '[rel="' + b.imageId + '"]' ).width( 22 );
}

function addButtonToClassicToolbar( b ){
	mw.toolbar.addButton( {
		imageFile: b.imageFile,
		speedTip: b.speedTip,
		imageId: b.imageId
	} );
	$( '#' + b.imageId ).off( 'click' ).click( function () {
		b.onClick();
		return false;
	} ).width( 23 );
}

function customizeToolbar()
{
	var modules, add, img;
	// This can be the string "0" if the user disabled the preference ([[bugzilla:52542#c3]])
	if( mw.user.options.get( 'usebetatoolbar' ) == 1 ){
		modules = [ 'ext.wikiEditor' ];
                if (mw.config.get('wgCanonicalNamespace') == 'Page') {
                        modules.push('ext.proofreadpage.page.edit');
                }
		img = '//upload.wikimedia.org/wikipedia/commons/a/a0/Button_references_alt.png';
		add = addButtonToWikiEditorToolbar;
	} else if ( mw.user.options.get( 'showtoolbar' ) == 1 ){
		modules = 'mediawiki.toolbar';
		img = '//upload.wikimedia.org/wikipedia/commons/a/a0/Button_references_alt.png';
		add = addButtonToClassicToolbar;
	} else {
		return;
	}
	$.when(
		mw.loader.using( modules ),
		$.ready
	).then( function(){
		add( {
			imageFile: img,
			speedTip: 'regexp',
			imageId: 'wsRegexp',
			onClick: custom
		} );
	} );
}

mw.loader.using( 'user.options' ).done( customizeToolbar );