User:Fomafix/MediaWiki:Gadget-SitelinkCheck.js

Note: After publishing, 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 / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
( function ( mw, $, wbt ) {

	var debug = mw.util.getParamValue( 'sitelinkcheck' );
	if ( debug ) alert( wbt.id );

	var i18nData = {
		'en': {
			/* general */
			'check sitelink': 'Check sitelink',
			'intro': 'Check whether a specific site link is already in use. If so you will get the item, otherwise you can create the item.',
			/* Labels */
			'lang': 'Lang',
			'title': 'Title',
			'check': 'Check',
			'exit': 'Exit',
			'create': 'Create',
			'importinterwikis': 'Import interwiki links',
			'addlabels': 'Automatically add labels',
			/* Messages */
			'found': '$1 is linking to $2.',
			'nothing found': 'Nothing found linking to $1.',
			'redirect': 'The page $1 is redirecting to $2.',
			'missing': 'The page $1 does not exist.',
			'success': 'The item was successfully created.',
			'missing lang': 'The lang must be given.',
			'missing title': 'The title must be given.'
		},
		'bn': {
			/* general */
			'check sitelink': 'সাইটসংযোগ পরীক্ষা',
			'intro': 'একটি নির্দিষ্ট সাইট সংযোগ ইতিমধ্যে ব্যবহার করা হয়েছে কিনা তা পরীক্ষা করুন। যদি তৈরি হয়ে থাকে তাহলে আপনি আইটেমটি পাবেন, অন্যথায় আপনি নতুন একটি আইটেম তৈরি করুন।',
			/* Labels */
			'lang': 'ভাষা',
			'title': 'শিরোনাম',
			'check': 'পরীক্ষা করো',
			'exit': 'প্রস্থান',
			'create': 'তৈরি করো',
			'importinterwikis': 'আন্তঃউইকি সংযোগ আমদানি করো',
			'addlabels': 'স্বয়ংক্রিয়ভাবে লেবেল যোগ করো',
			/* Messages */
			'found': '$2 - $1 এর সাথে সংযুক্ত।',
			'nothing found': '$1 -এর সাথে সংযুক্ত করা এমন কিছু পাওয়া যায়নি।',
			'redirect': '$1 পাতাটি $2 -এ পুনঃনির্দেশিত।',
			'missing': '$1 পাতাটি বিদ্যমান নয়।',
			'success': 'আইটেমটি সফলভাবে তৈরি হয়েছে।',
			'missing lang': 'ভাষা (কোড) অবশ্যই দেওয়া লাগবে।',
			'missing title': 'শিরোনাম অবশ্যই দেওয়া লাগবে।'
		},
		'cs': {
			/* general */
			'check sitelink': 'Zkontroluj odkazy',
			'intro': 'Zkontroluje, zda je specifický odkaz již někde použit. Pokud ano, odkáže na něj, jinak umožní vytvořit novou položku.',
			/* Labels */
			'lang': 'Jazyk',
			'title': 'Název',
			'check': 'Zkontroluj',
			'exit': 'Konec',
			'create': 'Vytvoř',
			'importinterwikis': 'Importuj interwiki',
			'addlabels': 'Automaticky přidej štítky',
			/* Messages */
			'found': '$1 odkazuje na $2.',
			'nothing found': 'Na #1 nic neodkazuje.',
			'redirect': 'Stránka $1 je přesměrovaná na $2.',
			'missing': 'Stránka $1 neexistuje.',
			'success': 'Položka byla úspěšně vytvořena.',
			'missing lang': 'Jazyk musí být zadán.',
			'missing title': 'Název musí být zadán.'
		},
		'es': {
			'check sitelink': 'Comprobar los enlaces de un sitio',
			'intro': 'Comprobar si el enlace de un sitio específico ya está en uso. En este caso obtendrás el elemento, en caso contrario, podrás crear el elemento.',
			'lang': 'Idioma',
			'title': 'Título',
			'check': 'Comprobar',
			'exit': 'Salir',
			'create': 'Crear',
			'importinterwikis': 'Importar enlaces interwiki',
			'addlabels': 'Añadir las etiquetas automáticamente',
			'found': '$1 contiene el enlace $2.',
			'nothing found': 'Ningún elemento enlaza con $1.',
			'redirect': 'La página $1 redirige a $2.',
			'missing': 'La página $1 no existe.',
			'success': 'Se creó el elemento satisfactoriamente.',
			'missing lang': 'Tienes que proporcionar un idioma.',
			'missing title': 'Tienes que proporcionar un título.'
		},
		'ca': {
			'check sitelink': 'Verifica l’enllaç',
			'intro': 'Verifica si ja s’utilitza un enllaç web cap a un lloc específic. En aquest cas obtindreu l’element, si no podreu crear-lo.',
			'lang': 'Idioma',
			'title': 'Títol',
			'check': 'Verifica',
			'exit': 'Tanca',
			'nothing found': 'Cap pàgina trobada amb $1.',
			'found': '$1 conté l’enllaç $2.',
			'create': 'Crea',
			'addlabels': 'Afegeix automàticament una etiqueta'
		},
		'de': {
			'check sitelink': 'Websitelink überprüfen',
			'intro': 'Prüfe, ob ein bestimmter Websitelink bereits benutzt wird. Wenn ja, bekommst du das Datenelement, sonst kannst du ein neues Datenelement erstellen.',
			'lang': 'Sprache',
			'title': 'Titel',
			'check': 'Überprüfen',
			'exit': 'Schließen',
			'nothing found': 'Es wurde nichts gefunden, das auf $1 verlinkt.',
			'found': '$1 verlinkt auf $2.',
			'create': 'Erstellen',
			'addlabels': 'Automatisch Bezeichnungen ergänzen',
			'importinterwikis': 'Websitelink importieren',
			'redirect': 'Die Seite $1 leitet nach $2 weiter.',
			'missing': 'Es gibt die Seite $1 nicht.',
			'success': 'Das Datenelement wurde erfolgreich erstellt.'
		},
		'fa': {
			'check sitelink': 'بازبینی پیوند وب‌گاه',
			'intro': 'چک کنید شاید پیوند به وب‌گاه موجود باشد، در این صورت آیتم را خواهید یافت وگرنه می‌توانید آیتم را بسازید.',
			'lang': 'زبان',
			'title': 'عنوان',
			'check': 'بازبینی',
			'exit': 'خروج',
			'create': 'ایجاد',
			'importinterwikis': 'درون‌ریزی میان‌ویکی‌ها',
			'addlabels': 'افزودن برچسب به صورت خودکار',
			'found': '$1 به $2 پیوند دارد.',
			'nothing found': 'موردی یافت نشد که به $1 پیوند شده‌باشد.',
			'redirect': 'صفحهٔ $1 به $2 تغییر مسیر است.',
			'missing': 'صفحهٔ $1 وجود ندارد.',
			'success': 'آیتم با موفقیت ساخته شد.',
			'missing lang': 'زبان باید مشخص شود.',
			'missing title': 'عنوان باید مشخص شود.'
		},
		'fi': {
			'check sitelink': 'Tarkista sivustolinkki',
			'intro': 'Tarkista onko tietty sivustolinkki jo käytössä. Jos näin on, siirryt kohteeseen. Muussa tapauksessa voit luoda uuden kohteen.',
			'lang': 'Kieli',
			'title': 'Nimi',
			'check': 'Tarkista',
			'exit': 'Sulje',
			'create': 'Luo',
			'importinterwikis': 'Tuo kielilinkit',
			'addlabels': 'Lisää automaattisesti nimet',
			'found': '$1 on linkitetty sivuun $2.',
			'nothing found': 'Ei löytynyt linkkejä sivuun $1.',
			'redirect': 'Sivu $1 on uudelleenohjaus sivuun $2.',
			'missing': 'Sivua $1 ei löydy.',
			'success': 'Kohde luotu onnistuneesti.',
			'missing lang': 'Kieli täytyy antaa.',
			'missing title': 'Nimi täytyy antaa.'
		},
		'fr': {
			/* general */
			'check sitelink': 'Vérifier le lien',
			'intro': 'Ce gadget permet de vérifier si un article de Wikipédia est déjà lié à un élément de Wikidata, et dans l\'hypothèse négative, de créer un nouvel élément.',
			/* Labels */
			'lang': 'Langue',
			'title': 'Titre',
			'check': 'Vérifier',
			'exit': 'Quitter',
			'create': 'Créer',
			'importinterwikis': 'Importer les liens interwikis',
			'addlabels': 'Ajouter automatiquement les libellés',
			/* Messages */
			'found': '$1 est lié avec $2.',
			'nothing found': 'Aucun lien trouvé pour $1.',
			'redirect': 'La page $1 redirige vers $2.',
			'missing': 'La page $1 n\'existe pas.',
			'success': 'L\'élément a bien été créé',
			'missing lang': 'La langue doit être renseignée',
			'missing title': 'Le titre doit être renseigné.'
		},
		'gl': {
			'check sitelink': 'Comprobar as ligazóns dun sitio',
			'intro': 'Comprobar se a ligazón dun sitio específico xa está en uso. Neste caso obterás o elemento, en caso contrario, poderás crear o elemento.',
			'lang': 'Idioma',
			'title': 'Título',
			'check': 'Comprobar',
			'exit': 'Saír',
			'create': 'Crear',
			'importinterwikis': 'Importar as ligazóns interwiki',
			'addlabels': 'Engadir as etiquetas automaticamente',
			'found': '$1 contén a ligazón $2.',
			'nothing found': 'Ningún elemento liga con $1.',
			'redirect': 'A páxina $1 redirixe a $2.',
			'missing': 'A páxina $1 non existe.',
			'success': 'Creouse o elemento satisfactoriamente.',
			'missing lang': 'Tes que proporcionar un idioma.',
			'missing title': 'Tes que proporcionar un título.'
		},
		'id': {
			'check sitelink': 'Cek interwiki',
			'intro': 'Cek apakah interwiki yang dimaksud sudah digunakan. Jika sudah, Anda akan menemukan item. Jika belum, Anda akan membuat item baru.',
			'lang': 'Bahasa',
			'title': 'Judul',
			'check': 'Cek',
			'exit': 'Keluar',
			'create': 'Buat',
			'importinterwikis': 'Impor pranala interwiki',
			'addlabels': 'Otomatis menambahkan label',
			'found': '$1 terkait pada $2.',
			'nothing found': 'Tidak ada yang terkait pada $1.',
			'redirect': 'Halaman $1 dialihkan pada $2.',
			'missing': 'Halaman $1 tidak ada.',
			'success': 'Item berhasil dibuat.',
			'missing lang': 'Harus ada kode bahasa.',
			'missing title': 'Harus ada judul halaman.'
		},
		'ja': {
			'check sitelink': 'サイトリンクをチェック',
			'intro': '特定のサイトリンクが使用済みかどうかチェックできます。使用済みであればその項目へのリンクが表示され、未使用であればその項目を作成できます。',
			'lang': '言語コード',
			'title': 'ページ名',
			'check': 'チェック',
			'exit': '終了',
			'create': '作成',
			'importinterwikis': '言語間リンクを移入する',
			'addlabels': 'ラベルを自動的に追加する',
			'found': '$1 が $2 にリンクしています。',
			'nothing found': '$1 にリンクしている項目はありません。',
			'redirect': 'ページ $1 は $2 に転送されています。',
			'missing': 'ページ $1 は存在しません。',
			'success': '項目の作成に成功しました。',
			'missing lang': '言語コードは必須です。',
			'missing title': 'ページ名は必須です。'
		},
		'ko': {
			/* general */
			'check sitelink': '사이트링크 확인',
			'intro': '각 언어 위키백과의 문서가 위키데이터의 어떤 항목에 연결되어 있는지 확인합니다.',
			/* Labels */
			'lang': '언어',
			'title': '제목',
			'check': '확인',
			'exit': '닫기',
			'create': '생성',
			'importinterwikis': '사이트링크 추가',
			'addlabels': '자동적으로 레이블 삽입',
			/* Messages */
			'found': '$1 은 $2 에 링크되어 있습니다.',
			'nothing found': '$1 에 연결되어 있는 항목을 찾지 못했습니다.',
			'redirect': '$ 1 문서는 존재하지 않습니다.',
			'missing': 'T항목이 성공적으로 만들어졌습니다.',
			'success': '항목이 성공적으로 만들어졌습니다.',
			'missing lang': '언어를 입력하셔야 합니다.',
			'missing title': '제목을 입력하셔야 합니다.'
		},
		'ku': {
			'check sitelink': 'Înterwîkiyan his bike',
			'intro': 'His bike ka înterwîkiyek tê bi kar anîn.Heke belê, tê jixwe elementê bibînî, heke na yekî biafirîne',
			'lang': 'Ziman',
			'title': 'Sernav',
			'check': 'Kontrol bike',
			'exit': 'Derkeve',
			'create': 'Biafirîne',
			'importinterwikis': 'Înterwîkiyan ji derve bîne',
			'addlabels': 'Nîşanan otomatîk lê zêde bike',
			'found': '$1 contiene el enlace $2.',
			'nothing found': 'Ningún elemento enlaza con $1.',
			'redirect': 'Rûpel $1 beralî $2 dike.',
			'missing': 'Rûpel $1 tune ye.',
			'success': 'Element hate afirandin.',
			'missing lang': 'Ziman divê bê dayîn.',
			'missing title': 'Sernav divê bê dayîn.'
		},
		'min': {
			'check sitelink': 'Cek interwiki',
			'intro': 'Cek apokah interwiki nan dimakasuik alah digunoan. Kok alah, Sanak ka basobok jo item. Kok alun, Sanak akan mambuek item baru.',
			'lang': 'Bahaso',
			'title': 'Judul',
			'check': 'Cek',
			'exit': 'Kalua',
			'create': 'Buek',
			'importinterwikis': 'Impor pautan interwiki',
			'addlabels': 'Otomatis manambahan label',
			'found': '$1 takaik pado $2.',
			'nothing found': 'Indak ado nan takaik ka $1.',
			'redirect': 'Laman $1 dialiahkan ka $2.',
			'missing': 'Laman $1 indak ado.',
			'success': 'Item barasil dibuek.',
			'missing lang': 'Harus ado kode bahaso.',
			'missing title': 'Harus ado judul laman.'
		},
		'mk': {
			/* general */
			'check sitelink': 'Check sitelink',
			'intro': 'Проверка дали веќе се користи извесна врска до мрежно место. Ако ја има, тогаш ќе го добиете предметот. Во спротивно, можете да го создадете.',
			/* Labels */
			'lang': 'Јазик',
			'title': 'Наслов',
			'check': 'Провери',
			'exit': 'Излези',
			'create': 'Создај',
			'importinterwikis': 'Увоз на меѓувики-врски',
			'addlabels': 'Автоматски додај етикети',
			/* Messages */
			'found': '$1 води до $2.',
			'nothing found': 'Не најдов ништо што води до $1.',
			'redirect': 'Страницата $1 пренасочува кон $2.',
			'missing': 'Страницата $1 не постои.',
			'success': 'Предметот е успешно создаден.',
			'missing lang': 'Мора да зададете јазик.',
			'missing title': 'Мора да зададете наслов.'
		},
		'nl': {
			'check sitelink': 'Siteverwijzing controleren',
			'intro': 'Controleren of een siteverwijzing al in gebruik is. Als het in gebruik is dan krijg je het item, zo niet, dan kan je deze aanmaken.',
			/* Labels */
			'lang': 'Taal',
			'title': 'Titel',
			'check': 'Controleren',
			'exit': 'Sluiten',
			'create': 'Aanmaken',
			'importinterwikis': 'Interwiki verwijzingen importeren',
			'addlabels': 'Automatisch labels toevoegen',
			'found': '$1 linkt naar $2.',
			'nothing found': 'Er linkt niets naar $1.',
			'redirect': 'De pagina $1 verwijst door naar $2.',
			'missing': 'De pagina $1 bestaat niet.',
			'success': 'Het item is succesvol aangemaakt',
			'missing lang': 'De taal moet worden aangegeven.',
			'missing title': 'De titel moet worden gegeven.'
		},
		'ru': {
			'check sitelink': 'Проверить ссылки',
			'intro': 'Проверьте, используется ли уже определённая ссылка на сайт. Если это так, вы получите соответствующий элемент, в противном случае вы сможете его создать.',
			'lang': 'Язык',
			'title': 'Название',
			'check': 'Проверить',
			'exit': 'Выход',
			'create': 'Создать',
			'importinterwikis': 'Импортировать интервики-ссылки',
			'addlabels': 'Автоматически добавить метки',
			'found': '$1 ссылается на $2.',
			'nothing found': 'Не найдены ссылки на $1.',
			'redirect': 'Страница $1 перенаправляет на $2.',
			'missing': 'Страница $1 не существует.',
			'success': 'Элемент успешно создан.',
			'missing lang': 'Нужно указать язык.',
			'missing title': 'Нужно указать название.'
		},
		'zh': {
			'check sitelink': '检查站点链接',
			'intro': '检查指定站点的链接,如果链接已存在的话会给出相应的项目,不存在的话您可以创建此项目。',
			'lang': '语言',
			'title': '标题',
			'check': '检查',
			'exit': '退出',
			'create': '创建',
			'importinterwikis': '导入跨语言链接',
			'addlabels': '自动添加标签',
			'found': '$1 链接至 $2。',
			'nothing found': '未找到链接至 $1 的项目。',
			'redirect': '页面 $1 重定向至 $2。',
			'missing': '页面 $1 不存在。',
			'success': '已成功创建项目。'
		},
		'zh-hans': {
			'check sitelink': '检查站点链接',
			'intro': '检查指定站点的链接,如果链接已存在的话会给出相应的项目,不存在的话您可以创建此项目。',
			'lang': '语言',
			'title': '标题',
			'check': '检查',
			'exit': '退出',
			'create': '创建',
			'importinterwikis': '导入跨语言链接',
			'addlabels': '自动添加标签',
			'found': '$1 链接至 $2。',
			'nothing found': '未找到链接至 $1 的项目。',
			'redirect': '页面 $1 重定向至 $2。',
			'missing': '页面 $1 不存在。',
			'success': '已成功创建项目。'
		},
		'zh-hant': {
			'check sitelink': '檢查站點連結',
			'intro': '檢楂指定站點的連結,如果連結已存在的話會給出相應的項目,不存在的話您可以創建此項目。',
			'lang': '語言',
			'title': '標題',
			'check': '檢查',
			'exit': '退出',
			'create': '創建',
			'importinterwikis': '導入跨語言連結',
			'addlabels': '自動添加標籤',
			'found': '$1 連結至 $2。',
			'nothing found': '未找到連結至 $1 的項目。',
			'redirect': '頁面 $1 重定向至 $2。',
			'missing': '頁面 $1 不存在。',
			'success': '已成功創建項目。'
		}
	};

	var i18nSite = {
		/*These language codes have other codes as their interwiki codes */
		'zh-hans': 'zh',
		'zh-hant': 'zh'
	};
	var lang = mw.config.get( 'wgUserLanguage' );
	var langParam;
	if ( lang in i18nSite ) {
		langParam = i18nSite[lang];
	} else {
		langParam = lang;
	}

	if ( !( lang in i18nData ) ) {
		lang = 'en';
	}

	var urlLang = mw.util.getParamValue( 'site' );
	if ( urlLang !== null ) {
		langParam = urlLang.substr( 0, urlLang.length - 4 );
	}

	var titleParam = '';
	var urlTitle = mw.util.getParamValue( 'page' );
	if ( urlTitle !== null ) {
		titleParam = urlTitle;
	}

	if ( mw.util.getParamValue( 'createitem' ) === 'success' && wbt.id ) {
		mw.notify( i18n( 'success' ) );
	}

	function i18n( key ) {
		var msg;
		if ( i18nData[ lang ][ key ] ) {
			msg = i18nData[ lang ][ key ];
		}
		else if ( key in i18nData[ 'en' ] ) {
			msg = i18nData[ 'en' ][ key ];
		}
		else {
			msg = '<' + key + '>';
		}
		for ( var i = 1; i < arguments.length; i++ ) {
			msg = msg.replace( new RegExp( '\\$' + i, 'g' ), arguments[i] );
		}
		msg = jqueryMsg( msg );
		return msg.substr( 1, msg.length - 2 );
	}

	function init() {
		mw.loader.using( [ 'jquery.ui' ], function () {
			var $form = $( '<div>' )
			.attr( 'id', 'sitelink' )
			.append(
				$( '<form>' )
				.submit( check )
				.append(
					$( '<fieldset>' )
					.attr( 'id', 'sitelink-form' )
					.append(
						$( '<legend>' )
						.text( i18n( 'check sitelink' ) )
					) // </legend>
					.append(
						$( '<p>' )
						.attr( 'id', 'sitelink-intro' )
						.text( i18n( 'intro' ) )
					) // </p>
					.append(
						$( '<p>' )
						.append(
							$( '<label>' )
							.attr( {
								'for'	: 'sitelink-lang',
								'class'	: 'sitelink-label'
							} )
							.text( i18n( 'lang' ) + ': ' )
						)
						.append(
							$( '<input>' )
							.attr( {
								'type'	: 'text',
								'id'	: 'sitelink-lang',
								'class'	: 'sitelink-input',
								'value'	: langParam
							} )
						)
					) // </p>
					.append(
						$( '<p>' )
						.append(
							$( '<label>' )
							.attr( {
								'for'	: 'sitelink-title',
								'class'	: 'sitelink-label'
							} )
							.text( i18n( 'title' ) + ': ' )
						)
						.append(
							$( '<input>' )
							.attr( {
								'type'	: 'text',
								'id'	: 'sitelink-title',
								'class'	: 'sitelink-input',
								'value'	: titleParam
							} )
						)
					) // </p>
				) // </fieldset>
			) // </form>
			.append(
				$( '<p>' )
				.attr( 'id', 'sitelink-result' )
			); // </div>

			var contentForm = $( $form ).appendTo( '#content' );
			contentForm.dialog( {
				title: '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/2/29/Symbol_question_green.svg/200px-Symbol_question_green.svg.png" width="20" alt="?" title="?" style="margin-right: 1.5em;">' + i18n( 'check sitelink' ),
				autoOpen: false,
				modal: true,
				width: 500,
				buttons: [ {
					id: 'sitelink-button-check',
					text: i18n( 'check' ),
					click: check
				}, {
					id: 'sitelink-button-exit',
					text: i18n( 'exit' ),
					click: function () {
						$( '#sitelink' ).dialog( 'close' );
					}
				} ]
			} );
		} );

		var portletLink = mw.util.addPortletLink( 'p-tb', '#', i18n( 'check sitelink' ), 't-sitelink', i18n( 'check sitelink' ) );
		$( portletLink ).click( show );

		$( '#wb-createentity-submit' ).after(
			$( '<a>' )
			.attr( {
				'id': 'sitelink-createentity',
				'href': '#'
			} )
			.text( i18n( 'check sitelink' ) )
			.click( show )
		);
	}

	function show() {
		$( '#sitelink-result' ).html( '' );
		$( '#sitelink-title' ).attr( 'value', titleParam );
		$( '#sitelink' ).dialog( 'open' );
		$( '#sitelink-title' ).focus();
		return false;
	}

	function check() {
		var lang = $( '#sitelink-lang' ).attr( 'value' );
		var title = $( '#sitelink-title' ).attr( 'value' );
		if ( debug ) alert( 'lang: ' + lang );
		if ( debug ) alert( 'title: ' + title );

		if ( !lang ) {
			error( i18n( 'missing lang' ) );
			return;
		}
		if ( !title ) {
			error( i18n( 'missing title' ) );
			return;
		}
		createSpinner();

		$.ajax( {
			url: '//' + lang + '.wikipedia.org/w/api.php',
			data: {
				'format': 'json',
				'action': 'query',
				'prop': 'pageprops',
				'titles': title,
				'redirects': 'redirects'
			},
			dataType: 'jsonp'
		} )
		.done( function ( data ) {
			var prefix = '[[' + lang + ':';
			if ( data.error ) {
				error( data.error.info );
			}
			else if ( !data.query ) {
				error( i18n( 'api-error' ) );
			}
			else if ( data.query.pages['-1'] ) {
				error( i18n( 'missing', prefix + data.query.pages['-1'].title + ']]' ) );
			}
			else if ( data.query.redirects ) {
				var redirect = data.query.redirects[0];
				error( i18n( 'redirect', prefix + redirect.from + ']]', prefix + redirect.to + ']]' ) );
			}
			else {
				searchItem( lang, title );
			}
		} )
		.fail( function () {
			error( i18n( 'api-error' ) );
		} );
	}

	function searchItem( lang, title ) {
		$.ajax( {
			type: 'POST',
			url: mw.util.wikiScript( 'api' ),
			data: {
				'action': 'wbgetentities',
				'format': 'json',
				'sites': lang + 'wiki',
				'titles': title
			}
		} )
		.done( function ( data ) {
			var id = getKey( data.entities );
			var $message;
			if ( id === '-1' ) {
				$message = $( '<p>' ).append( i18n( 'nothing found', '[[' + lang + ':' + title + ']]' ) );
				if ( !mw.user.isAnon() ) {
					$message.after(
						$( '<p>' )
						.append(
							$( '<input>' )
							.attr( {
								type: 'checkbox',
								id: 'sitelink-importinterwikis'
							} )
						) // </input>
						.append(
							$( '<label>' )
							.attr( 'for', 'sitelink-importinterwikis' )
							.text( i18n( 'importinterwikis' ) )
						) // </label>
						// </p>
						.after(
							$( '<p>' )
							.append(
								$( '<input>' )
								.attr( {
									type: 'checkbox',
									id: 'sitelink-addlabels'
								} )
							) // </input>
							.append(
								$( '<label>' )
								.attr( 'for', 'sitelink-addlabels' )
								.text( i18n( 'addlabels' ) )
							) // </label>
						) // </p>
						.after(
							$( '<p>' )
							.append(
								$( '<button>' )
								.attr( {
									type: 'button',
									id: 'sitelink-createitem',
									'class': 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only',
									role: 'button'
								} )
								.click( function () {
									// create Item
									var addlabels = $( '#sitelink-addlabels' ).is( ':checked' );
									var importinterwikis = $( '#sitelink-importinterwikis' ).is( ':checked' );
									createSpinner();
									work( lang, title, addlabels, importinterwikis );
								} )
								.append(
									$( '<span>' )
									.attr( 'class', 'ui-button-text' )
									.text( i18n( 'create' ) )
								) // </span>
							) // </button>
						) // </p>
					);
				}
			}
			else {
				id = 'Q' + id.substr( 1 );
				$message = $( '<p>' ).append( i18n( 'found', '[[' + id + ']]', '[[' + lang + ':' + title + ']]' ) );
			}
			$( '#sitelink-result' ).html( $message );
		} )
		.fail( function () {
			error( i18n( 'api-error' ) );
		} );
	}

	function success( data ) {
		window.location.href = mw.config.get( 'wgArticlePath' ).replace( '$1', data.entity.id.toUpperCase() ) + '?createitem=success';
	}

	function error( msg ) {
		$( '#sitelink-result' ).html( msg );
	}

	function createSpinner() {
		$( '#sitelink-result' ).html( '<div id="sitelink-spinner" />' );
		$.createSpinner( {
			size: 'large',
			type: 'block',
			id: 'sitelink-spinner'
		} ).replaceAll( '#sitelink-spinner' );
	}

	function work( lang, title, addlabels, importinterwikis ) {
		var summary = '[[:' + lang + ':' + title + ']] ([[MediaWiki talk:Gadget-SitelinkCheck.js|SC]])';
		var data = { sitelinks: {} };
		var site = lang.replace( /-/g, '_' ) + 'wiki';
		data['sitelinks'][site] = {
			'site': site,
			'title': title
		};
		if ( addlabels ) {
			if ( debug ) alert( 'addlabels' );
			data['labels'] = {};
			data['labels'][lang] = {
				language: lang,
				value: title.replace( /\(.*\)/g, '' ) // regex
			};
		}
		if ( importinterwikis ) {
			if ( debug ) alert( 'importinterwikis' );
			wbt.getInterwikiLinks( lang, title, function ( links ) {
				for ( var lang in links ) {
					var title = links[lang];
					var site = lang.replace( /-/g, '_' ) + 'wiki';
					data['sitelinks'][site] = {
						'site': site,
						'title': title
					};
					if ( addlabels ) {
						data['labels'][lang] = {
							language: lang,
							value: title.replace( /\(.*\)/g, '' ) // regex
						};
					}
				}
				if ( debug ) alert( JSON.stringify( data ) );
				wbt.createItem( data, summary, success, error );
			}, error );
		}
		else {
			if ( debug ) alert( JSON.stringify( data ) );
			wbt.createItem( data, summary, success, error );
		}
	}

	function getKey( data ) {
		for ( var prop in data )
			return prop;
	}

	$( document ).ready( init );
} )( mediaWiki, jQuery, wikibaseTools );