Diferencia entre revisiones de «MediaWiki:Gadget-Move.js»

De WikiMinecraft
Saltar a: navegación, buscar
(Página creada con «* * Adds a move tool to the sitelink edit toolbar to move a sitelink to another item.: ( function ( mw, wb, $ ) { if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 )...»)
 
(Sin diferencias)

Revisión actual del 09:11 9 abr 2014

/**
 * Adds a move tool to the sitelink edit toolbar to move a sitelink to another item.
 */

( function ( mw, wb, $ ) {

	if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) {
		return;
	}

	switch ( mw.config.get( 'wgUserLanguage' ) ) {
	default:
	case 'en':
		mw.messages.set( {
			'move': 'Move',
			'move-toolbar': 'move',
			'close': 'Close',
			'newitem': 'The id of the new item',
			'intro': 'You can move a sitelink to another item. Please give a valid item id and check if the link for the new item is already set. Also remember to move label and descriptions.',
			'success': 'The sitelink $2 was successfully moved to $1.',
			'error-sameid': 'The new item\'s id has to be different to the current one\'s.',
			'error-invalidid': 'The given id is not a valid item identifier.',
			'error-notexisting': 'The item with the id $1 does not exist.',
			'error-overwrite': 'The link for the given site in $1 is already set. Please check the item\'s id or remove the link from the item.',
			'error-api': 'There was an error editing the item: $1'
		} );
		break;
	case 'bn':
		mw.messages.set( {
			'move': 'স্থানান্তর',
			'move-toolbar': 'স্থানান্তর',
			'close': 'বন্ধ',
			'newitem': 'নতুন আইটেমটির আইডি',
			'intro': 'আপনি একটি সাইট লিঙ্ক অন্য আইটেমে স্থানান্তর করতে পারেন। দয়া করে আইটেমের বৈধ আইডি দিন এবং পরীক্ষা করুন যদি ইতিমধ্যে নতুন আইটেমটির জন্য লিঙ্ক সেট করা হয়। এছাড়াও লেবেল ও বিবরণ সরাতে মনে রাখবেন।',
			'success': 'সাইটলিঙ্ক সফলভাবে $1-এ স্থানান্তর হয়েছে।',
			'error-sameid': 'আইটেমের নতুন আইডি বর্তমান আইডি থেকে ভিন্ন হতে হবে।',
			'error-invalidid': 'প্রদত্ত আইডি কোনো বৈধ আইটেম শনাক্তকারী নয়।',
			'error-notexisting': 'আইডি $1-এর আইটেমটি বিদ্যমান নেই।',
			'error-overwrite': 'প্রদত্ত সাইটের জন্য লিঙ্ক $1-এ ইতিমধ্যেই সেট করা আছে। দয়া করে আইটেম আইডি পরীক্ষা করুন অথবা আইটেম থেকে লিঙ্ক মুছে ফেলুন।',
			'error-api': 'আইটেম সম্পাদনায় ত্রুটি ছিল: $1'
		} );
		break;
	case 'ca':
		mw.messages.set( {
			'move': 'Trasllada',
			'move-toolbar': 'trasllada',
			'close': 'Tanca',
			'newitem': 'ID del nou element',
			'intro': 'Podeu traslladar un enllaç de llengua a un altre element. Proporcioneu un ID d\'element vàlid i comproveu si ja existeix un enllaç en el nou element. Recordeu també de traslladar l\'etiqueta i les descripcions.',
			'success': 'L\'enllaç ha estat traslladat amb éxit a $1.',
			'error-sameid': 'L\'ID del nou element ha de ser diferent de l\'actual.',
			'error-invalidid': 'L\'ID proporcionat no és un identificador vàlid d\'element.',
			'error-notexisting': 'No existeix cap element amb l\'ID $1.',
			'error-overwrite': 'Ja existeix un enllaç per aquest lloc a $1. Comproveu l\'ID del nou element o suprimiu l\'enllaç en l\'element.',
			'error-api': 'S\'ha produït un error editant l\'element: $1'
		} );
		break;
	case 'cs':
		mw.messages.set( {
			'move': 'Přesunout',
			'move-toolbar': 'přesunout',
			'close': 'Zavřít',
			'newitem': 'ID cílové položky',
			'intro': 'Můžete přesunout odkaz k jiné položce. Vložte, prosím, platné ID položky a zkontrolujte, zda již neobsahuje odkaz na tento jazyk. Také přesuňte štítky a popisy.',
			'success': 'Odkaz byl úspěšně přesunut na $1.',
			'error-sameid': 'ID nové položky musí být různé od této!',
			'error-invalidid': 'Zadané ID není platné.',
			'error-notexisting': 'Položka s ID $1 neexistuje.',
			'error-overwrite': 'Položka $1 již obsahuje odkaz na tento jazyk. Zkontrolujte ID nebo z něj odstraňte odkaz.',
			'error-api': 'Chyba při editaci: $1'
		} );
		break;
	case 'de':
	case 'de-at':
	case 'de-ch':
	case 'de-formal':
		mw.messages.set( {
			'move': 'Verschieben',
			'move-toolbar': 'verschieben',
			'close': 'Schließen',
			'newitem': 'Die ID des neuen Datenelements',
			'intro': 'Du kannst einen Websitelink in ein anderes Datenelement verschieben. Gib eine valide ID und prüfe, ob der Link für das neue Datenelement schon festgelegt ist. Beachte auch, Bezeichnung und Beschreibung zu verschieben.',
			'success': 'Der Websitelink $2 wurde erfolgreich nach $1 verschoben.',
			'error-sameid': 'Die ID des neuen Datenelements muss sich von der aktuellen unterscheiden.',
			'error-invalidid': 'Die ID ist nicht valide.',
			'error-notexisting': 'Das Datenelement mit der ID $1 existiert nicht.',
			'error-overwrite': 'Der Link für die Seite in $1 ist schon festgelegt. Bitte überprüfe die ID oder entferne den Link von dem Datenelement.',
			'error-api': 'Es ist ein Fehler beim Bearbeiten aufgetreten: $1'
		} );
		break;
	case 'es':
		mw.messages.set( {
			'move': 'Mover',
			'move-toolbar': 'mover',
			'close': 'Cerrar',
			'newitem': 'ID del nuevo elemento',
			'intro': 'Puedes mover el enlace de un sitio a un nuevo elemento. Por favor, proporciona un elemento válido y comprueba si el enlace para el nuevo elemento ya está establecido. También recuerda mover las etiquetas y descripciones.',
			'success': 'El enlace del sitio fue movido satisfactoriamente a $1.',
			'error-sameid': 'El id del nuevo elemento tiene que ser diferente al id del elemento actual.',
			'error-invalidid': 'El id proporcionado no es un identificador de elemento válido.',
			'error-notexisting': 'El elemento con el id $1 no existe.',
			'error-overwrite': 'El enlace para el sitio proporcionado en $1 ya está establecido. Por favor, comprueba el id del elemento o elimina el enlace del elemento.',
			'error-api': 'Hubo un erro al editar el elemento: $1'
		} );
		break;
	case 'fa':
		mw.messages.set( {
			'move': 'انتقال',
			'move-toolbar': 'انتقال',
			'close': 'بستن',
			'newitem': 'شمارهٔ آیتم مورد نظر',
			'intro': 'شما می توانید شمارهٔ آیتم جدید را وارد کنید توجه داشته باشید در صورتی که میان‌ویکی مقصد موجود نباشد انتقال انجام می‌شود',
			'success': 'میان‌ویکی با موفقیت به آیتم $1 منتقل شد.',
			'error-sameid': 'شمارهٔ آیتم مقصد باید با آیتمی که در آن هستید متفاوت باشد!',
			'error-invalidid': 'شمارهٔ آیتم مورد نظر درست نیست.',
			'error-notexisting': 'آیتمی با کد $1 وجود ندارد.',
			'error-overwrite': 'میان‌ویکی سایت مورد نظر $1 موجود است. لطفاً شمارهٔ آیتم وارد شده را چک کنید یا پیوند را از آیتم مثصد حذف نمائید..',
			'error-api': 'خطای ویرایش آیتم: $1'
		} );
		break;
	case 'fi':
		mw.messages.set( {
			'move': 'Siirrä',
			'move-toolbar': 'siirrä',
			'close': 'Sulje',
			'newitem': 'Uuden kohteen tunniste',
			'intro': 'Voit siirtää sivustolinkin toiseen kohteeseen. Anna kelvollinen kohteen tunniste ja tarkista onko linkki uudelle kohteelle jo asetettu. Muista siirtää myös nimi ja kuvaukset.',
			'success': 'Sivustolinkki on onnistuneesti siirretty kohteeseen $1.',
			'error-sameid': 'Uuden kohteen tunniste täytyy olla eri kuin nykyisen kohteen.',
			'error-invalidid': 'Annettu tunniste ei kelpaa kohteen tunnisteeksi.',
			'error-notexisting': 'Kohdetta tunnisteella $1 ei löydy.',
			'error-overwrite': 'Sivulle $1 on jo lisätty linkki. Tarkista kohteen tunniste tai poista linkki kohteesta.',
			'error-api': 'Virhe muokatessa kohdetta: $1'
		} );
		break;
	case 'fr':
		mw.messages.set( {
			'move': 'Déplacer',
			'move-toolbar': 'déplacer',
			'close': 'Fermer',
			'newitem': 'L\'identifiant du nouvel élément',
			'intro': 'Vous pouvez déplacer un lien interlangue vers un nouvel élément. Merci pour cela de donner un identifiant d\'élément valide (QXXX) et de vérifier si l\'élément vers lequel vous voulez déplacer ce lien est adapté. Pensez aussi à déplacer labels et descriptions.',
			'success': 'Le lien interlangue a été déplacé avec succès vers l\'élément $1.',
			'error-sameid': 'L\'identifiant du nouvel élément doit être différent de celui de l\'élément que vous êtes en train de modifier.',
			'error-invalidid': 'L\'identifiant que vous avez entré n\'est pas valide.',
			'error-notexisting': 'Il n\'existe pas d\'élément dont l\'identifiant est $1.',
			'error-overwrite': 'Il existe déjà un lien interlangue pour cette Wikipédia dans l\'élément $1. Merci de vérifier l\'identifiant du nouvel élément ou de supprimer simplement le lien interlangue de cette page.',
			'error-api': 'Une erreur s\'est produite lors de l\'édition de l\'élément $1'
		} );
		break;
	case 'gl':
		mw.messages.set( {
			'move': 'Mover',
			'move-toolbar': 'mover',
			'close': 'Pechar',
			'newitem': 'ID do novo elemento',
			'intro': 'Podes mover a ligazón dun sitio a un novo elemento. Por favor, proporciona un elemento válido e comproba se a ligazón para o novo elemento xa está establecido. Tamén lembra mover as etiquetas e descricións.',
			'success': 'A ligazón do sitio foi movida satisfactoriamente a $1.',
			'error-sameid': 'O id do novo elemento ten que ser diferente ó id do elemento actual.',
			'error-invalidid': 'O id proporcionado non é un identificador de elemento válido.',
			'error-notexisting': 'O elemento co id $1 non existe.',
			'error-overwrite': 'A ligazón para o sitio en $1 xa está establecido. Por favor, comproba o id do elemento ou elimina a ligazón do elemento elemento.',
			'error-api': 'Houbo un erro ó editar o elemento: $1'
		} );
		break;
	case 'id':
		mw.messages.set( {
			'move': 'Pindah',
			'move-toolbar': 'pindah',
			'close': 'Tutup',
			'newitem': 'ID (Qxxx) item baru',
			'intro': 'Anda dapat memindahkan interwiki ke item baru. Harap masukkan id (Qxxx) yang valid dan cek sebelumnya apakah id tersebut sudah ada. Jangan lupa memindahkan label dan properti.',
			'success': 'Interwiki berhasil dipindahkan ke $1.',
			'error-sameid': 'Item baru haruslah berbeda dari item sekarang.',
			'error-invalidid': 'ID yang dimasukkan tidak valid.',
			'error-notexisting': 'Item dengan id $1 belum ada.',
			'error-overwrite': 'Interwiki item pada wiki $1 sudah ada. Silakan di cek atau hapus interwiki dari item tersebut.',
			'error-api': 'Ada kesalahan penyuntingan item: $1'
		} );
		break;
	case 'ja':
		mw.messages.set( {
			'move': '移動',
			'move-toolbar': '移動',
			'close': '中止',
			'newitem': '新しい項目のID',
			'intro': 'サイトリンクを新しい新しい項目に移すことができます。指定した項目のIDが間違っていないか、新しい項目に既にリンクが設定されていないか確認してください。ラベルと説明を直すのも忘れないでください。',
			'success': 'サイトリンクを $1 へ移動しました。',
			'error-sameid': '新しい項目のIDはこの項目のものとは別でなければなりません。',
			'error-invalidid': '指定されたIDは項目の識別子として無効です。',
			'error-notexisting': 'ID $1 の項目は存在しません。',
			'error-overwrite': '指定されたサイトに対するリンクが $1 に既に設定されています。新しい項目のIDを確認するか、既存のリンクを除去してください。',
			'error-api': '項目の編集中にエラーが発生しました: $1'
		} );
		break;
	case 'ko':
		mw.messages.set( {
			'move': '이동',
			'move-toolbar': '이동',
			'close': '닫기',
			'newitem': '새 항목의 ID',
			'intro': '사이트링크를 새 항목으로 이동합니다. 유효한 ID를 입력해 주세요. 새 항목에 이미 링크가 있는지 확인해 주세요. 레이블과 설명을 고치는 것도 잊지 마세요.',
			'success': '사이트링크를 $1로 이동했습니다.',
			'error-sameid': '새 항목의 ID는 현재 항목과 달라야 합니다.',
			'error-invalidid': '입력한 ID가 유효한 항목 식별자가 이닙니다.',
			'error-notexisting': '항목 $1이 없습니다.',
			'error-overwrite': '$1에 이미 지정한 사이트의 링크가 이미 있습니다. 항목 ID를 다시 확인하시거나, 기존의 링크를 삭제해주세요.',
			'error-api': '항목 $1의 편집 중에 오류가 발생했습니다.'
		} );
		break;
	case 'lb':
		mw.messages.set( {
			'move': 'Réckelen',
			'move-toolbar': 'réckelen',
			'close': 'Zoumaachen',
			'newitem': 'D\'Nummer (id) vum neien Element',
			'intro': 'Dir kënnt ee Link vun engem Site op een anert Element réckelen. Gitt w.e.g. eng valabel Nummer vun engem Element (id) un a kuckt no ob de Link fir dat neit Element scho gesat ass. Denkt dru fir d\'Etiketten a Beschreiwungen och ze réckelen.',
			'success': 'De Link op de Site gouf op $1 geréckelt.',
			'error-sameid': 'D\'Nummer (id) vum neien Element muss verschidde si vum Aktuellen.',
			'error-invalidid': 'D\'Nummer (id) déi ugi gouf ass keng valabel Nummer vun engem Element.',
			'error-notexisting': 'D\'Element mat der Nummer (id) $1 gëtt et net.',
			'error-overwrite': 'De Link fir dee Site vu(n) $1 ass scho gesat. Kuckt w.e.g. dem Element seng Nummer (id) nach eng Kéier no oder huelt de Link vum Element ewech.',
			'error-api': 'Et gouf e Feeler beim Ännere vum Element: $1'
		} );
		break;
	case 'min':
		mw.messages.set( {
			'move': 'Pindah',
			'move-toolbar': 'pindah',
			'close': 'Tutuik',
			'newitem': 'ID (Qxxx) item baru',
			'intro': 'Sanak dapek mamindahan interwiki ka item baru. Harap masuakan id (Qxxx) nan valid dan cek sabalumnyo apo id tasabuik lah ado. Jan lupo mamindahan label jo properti.',
			'success': 'Interwiki barasil dipindahan ka $1.',
			'error-sameid': 'Item baru haruslah babedo dari item kini ko.',
			'error-invalidid': 'ID nan dimasuakan indak valid.',
			'error-notexisting': 'Item jo id $1 alun ado.',
			'error-overwrite': 'Interwiki item pado wiki $1 alah ado. Silakan di cek atau hapuih interwiki dari item tasabuik.',
			'error-api': 'Ada kasalahan panyuntiangan item: $1'
		} );
		break;
	case 'mk':
		mw.messages.set( {
			'move': 'Премести',
			'move-toolbar': 'премести',
			'close': 'Затвори',
			'newitem': 'Назнака на новиот предмет',
			'intro': 'Можете да преместите викиврска во друг предмет. Внесете важечка предметна назнака и проверете врската за новиот предмет да не е веќе зададена. Исто така, не заборавајте да ги преместите етикетата и описите.',
			'success': 'Викиврската е успешно преместена во $1.',
			'error-sameid': 'Назнаката на новиот предмет мора да се разликува од назнаката на стариот.',
			'error-invalidid': 'Укажаната назнака е неважечка.',
			'error-notexisting': 'Не постои предмет со назнака $1.',
			'error-overwrite': 'Врската за даденото вики на $1 е веќе зададена. Проверете ја предметната назнака или отстранете ја врската од предметот.',
			'error-api': 'Се појави грешка при уредувањето на предметот: $1'
		} );
		break;
	case 'nl':
		mw.messages.set( {
			'move': 'Verplaatsen',
			'move-toolbar': 'verplaatsen',
			'close': 'Sluiten',
			'newitem': 'Het ID van het nieuwe item',
			'intro': 'Je kan een siteverwijzing verplaatsen naar een ander item. Geef een geldig item ID en controleer of de siteverwijzing al bij het goede item staan. Vergeet niet om ook het label en de beschrijvingen te verplaatsen.',
			'success': 'De siteverwijzing $2 was met succes verplaatst naar $1.',
			'error-sameid': 'Het ID van het item moet een ander zijn dan de huidige.',
			'error-invalidid': 'Het gegeven ID-nummer was ongeldig.',
			'error-notexisting': 'Het item met ID $1 bestaat niet.',
			'error-overwrite': 'De link voor de gegeven site in $1 was al ingesteld. Controleer alsjeblieft de ID van het item of verwijder de link van het item',
			'error-api': 'Er was een fout tijdens het bewerken van het item: $1'
		} );
		break;
	case 'pl':
		mw.messages.set( {
			'move': 'Przenieś',
			'move-toolbar': 'przenieś',
			'close': 'Zamknij',
			'newitem': 'ID nowego elementu',
			'intro': 'Możesz przenieść link do innego elementu. Podaj prawidłowe ID elementu i sprawdź czy dany link w nowym elemencie jest już wstawiony. Pamiętaj także o przeniesieniu etykiet i opisów.',
			'success': 'Link został przeniesiony do $1.',
			'error-sameid': 'Nowe ID musi być inne niż obecne.',
			'error-invalidid': 'Podane ID nie jest prawidłowe.',
			'error-notexisting': 'Element $1 nie istnieje.',
			'error-overwrite': 'Link w elemencie $1 jest już wstawiony. Sprawdź ID elementu lub usuń link z obecnego elementu.',
			'error-api': 'Wystąpił błąd podczas edycji elementu $1'
		} );
		break;
	case 'ru':
		mw.messages.set( {
			'move': 'Переместить',
			'move-toolbar': 'переместить',
			'close': 'Закрыть',
			'newitem': 'Идентификатор нового элемента',
			'intro': 'Вы можете переместить интервики-ссылку в другой элемент. Укажите верный идентификатор элемента и проверьте, может, ссылка для нового элемента уже указана. Также не забудьте переместить название и описание.',
			'success': 'Интервики-ссылка была перемещена в объект $1.',
			'error-sameid': 'Идентификатор нового элемента должен отличаться от идентификатора старого элемента.',
			'error-invalidid': 'Указано некорректное значение.',
			'error-notexisting': 'Элемента с идентификатором $1 не существует.',
			'error-overwrite': 'Интервики-ссылка на этот языковой раздел уже существует в элементе $1. Проверьте идентификатор элемента или удалите ссылку из элемента.',
			'error-api': 'При редактировании элемента произошла ошибка: $1'
		} );
		break;
	case 'zh':
	case 'zh-hans':
	case 'zh-cn':
	case 'zh-sg':
	case 'zh-my':
		mw.messages.set( {
			'move': '移动',
			'move-toolbar': '移动',
			'close': '关闭',
			'newitem': '新项目的ID',
			'intro': '你可以将连结移动到另一个项目里。请输入一个有效项目的ID并确认新项目中没有相同语言的连结。请记得移动标签和描述。',
			'success': '连结已移动至$1。',
			'error-sameid': '请不要输入与此页相同的ID。',
			'error-invalidid': '这个ID不是一个有效的项目。',
			'error-notexisting': '项目$1并不存在。',
			'error-overwrite': '项目$1中已有相同语言的连结。请确认输入的ID或移除$1中的连结。',
			'error-api': '在编辑项目$1时似乎发生了一些问题。'
		} );
		break;
	case 'zh-hant':
	case 'zh-tw':
	case 'zh-hk':
	case 'zh-mo':
		mw.messages.set( {
			'move': '移動',
			'move-toolbar': '移動',
			'close': '關閉',
			'newitem': '新項目的ID',
			'intro': '你可以將連結移動到另一個項目裡。請輸入一個有效項目的ID並確認新項目中沒有相同語言的連結。請記得移動標籤和描述。',
			'success': '連結已移動至$1。',
			'error-sameid': '請不要輸入與此頁相同的ID。',
			'error-invalidid': '這個ID不是一個有效的項目。',
			'error-notexisting': '項目$1並不存在。',
			'error-overwrite': '項目$1中已有相同語言的連結。請確認輸入的ID或移除$1中的連結。',
			'error-api': '在編輯項目$1時似乎發生了一些問題。'
		} );
		break;
	}

	var api = new wb.RepoApi(),
		olditem = mw.config.get( 'wbEntityId' ), // current item
		site, // id of the site to move
		title, // title of the site
		newitem; // target item

	function cancel() {
		// click on cancel button
		$( '.wikibase-toolbareditgroup-cancelbutton:not(.wikibase-toolbarbutton-disabled)' ).click();
	}

	function createSpinner() {
		mw.loader.using( [ 'jquery.spinner' ], function () {
			$( '#move-result' ).html(
				$.createSpinner( {
					size: 'large',
					type: 'block'
				} )
			);
		} );
	}

	function showError( error ) {
		var parameters = Array.prototype.slice.call( arguments, 1 );
		$( '#move-result' ).html(
			$( '<p>' )
			.attr( 'class', 'error' )
			.html( mw.message( 'error-' + error ).params( parameters ).parse() )
		);
	}

	function onError( error, result ) {
		showError( 'api', result && result.error && result.error.info || error );
	}

	function success() {
		var message = mw.message(
			'success',
			mw.html.element( 'a', { href: mw.util.getUrl( newitem ) }, newitem ),
			mw.html.element(
				'a', {
					href: wb.getSite( site ).getUrlTo( title ),
					title: title
				},
				site
			)
		);
		// document.reload();
		$( '#move' ).dialog( 'close' );
		$( '.wb-sitelinks-' + site ).hide( 400 );
		// Todo: Remove site from wikibase store to allow readding this sitelink.
		mw.notify( message, {
			autoHide: false,
			title: mw.msg( 'move' )
		} );
	}

	function move() {
		api.post( {
			action: 'wbsetsitelink',
			id: olditem,
			linksite: site,
			linktitle: '',
			summary: 'Moving sitelink to [[' + newitem + ']]'
		} )
		.fail( onError )
		.done( function () {
			api.post( {
				action: 'wbsetsitelink',
				id: newitem,
				linksite: site,
				linktitle: title,
				summary: 'Moving sitelink from [[' + olditem + ']]'
			} )
			.fail( onError )
			.done( success );
		} );
	}

	function domove( event ) {
		event.preventDefault();
		createSpinner();
		site = $( '.wb-ui-propertyedittool-editablevalue-ineditmode .wb-sitelinks-siteid' ).text();
		title = $.parseJSON( mw.config.get( 'wbEntity' ) ).sitelinks[site].title;
		newitem = $( '#move-newitem' ).val().toUpperCase();
		if ( olditem === newitem ) {
			showError( 'sameid' );
			return;
		}
		if ( newitem.match( /^Q\d+$/g ) === null ) {
			showError( 'invalidid' );
			return;
		}
		api.getEntities( newitem, 'sitelinks' )
		.fail( onError )
		.done( function ( data ) {
			var entity;
			if ( ! data.entities.hasOwnProperty( newitem ) ) {
				showError( 'notexisting', mw.html.element( 'a', { href: mw.util.getUrl( newitem ) }, newitem ) );
				return;
			}
			entity = data.entities[newitem];
			if ( entity.sitelinks && entity.sitelinks[site] ) {
				showError( 'overwrite', mw.html.element( 'a', { href: mw.util.getUrl( newitem ) }, newitem ) );
				return;
			}
			move();
		} );
	}

	function init() {
		// Add click listener
		$( document ).on( 'click', '.wikibase-toolbareditgroup-editbutton:not(.wikibase-toolbarbutton-disabled)', function () {
			// edit
			$( '.wb-sitelinks .wikibase-toolbareditgroup-ineditmode .wikibase-toolbareditgroup-removebutton' )
			.after(
				$( '<a>' )
				.attr( {
					'class': 'wikibase-toolbarbutton',
					'href': '#'
				} )
				.before( '|' )
				.text( mw.msg( 'move-toolbar' ) )
				.click( function ( event ) {
					event.preventDefault();
					// open dialog
					$( '#move-result' ).empty();
					$( '#move' ).dialog( 'open' );
				} )
			);
		} );

		// Create dialog
		mw.loader.using( [ 'jquery.ui.dialog' ], function () {
			$( '<div>' )
			.attr( 'id', 'move' )
			.append(
				$( '<form>' )
				.submit( domove )
				.append(
					$( '<fieldset>' )
					.attr( 'id', 'sitelink-form' )
					.append(
						$( '<legend>' )
						.text( mw.msg( 'move' ) )
					) // </legend>
					.append(
						$( '<p>' )
						.attr( 'id', 'sitelink-intro' )
						.text( mw.msg( 'intro' ) )
					) // </p>
					.append(
						$( '<p>' )
						.append(
							$( '<label>' )
							.attr( {
								'for': 'move-newitem',
								'class': 'move-label'
							} )
							.text( mw.msg( 'newitem' ) + ': ' )
						)
						.append(
							$( '<input>' )
							.attr( {
								'type': 'text',
								'id': 'move-newitem',
								'class': 'move-input'
							} )
						)
					) // </p>
				) // </fieldset>
			) // </form>
			.append(
				$( '<p>' )
				.attr( 'id', 'move-result' )
			)
			.dialog( {
				title: '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Symbol_redirect_vote.svg/200px-Symbol_redirect_vote.svg.png" width="20" alt="->" title="->">' + mw.message( 'move' ).escaped(),
				autoOpen: false,
				modal: true,
				width: 500,
				close: cancel,
				buttons: [ {
					id: 'move-button-move',
					text: mw.msg( 'move' ),
					click: domove
				}, {
					id: 'move-button-close',
					text: mw.msg( 'close' ),
					click: function () {
						$( '#move' ).dialog( 'close' );
					}
				} ]
			} );
		} );
	}

	$( init );
} ( mediaWiki, wikibase, jQuery ) );