מדיה ויקי:Gadget-WikidataBtn.js

מתוך ויקיפדיה, האנציקלופדיה החופשית

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
/*
 Written by [[User:ערן]]
 Adds a button to toolbar for searching/link to wikidata entity.
*/ 
'use strict';

mw.messages.set( 'wikidata-name', 'ויקינתונים' );
mw.messages.set( 'wikidata-entity-title', 'שם בוויקי אחרת' );
mw.messages.set( 'wikidata-entity-lang', 'שם הוויקי' );
mw.messages.set( 'wikidata-search', 'חיפוש בוויקינתונים' );
mw.messages.set( 'wikidata-entity-doesnt-exist', 'חיפוש הישות בוויקינתונים עלה בתוהו ;(' );
mw.messages.set( 'wikidata-entity-exist', 'הישות נמצאה בוויקינתונים ומקושרת לדף: $1' );
mw.messages.set( 'wikidata-toolbar-title', 'קישור לוויקינתונים' );


function searchWikidata( entityTitle, entityLang ){
	var site = mw.config.get( 'wgDBname' );

	$.getJSON( '//www.wikidata.org/w/api.php?callback=?', {
		action: 'wbgetentities', 
		sites: entityLang,
		titles: entityTitle,
		props: 'sitelinks',
		format: 'json'
	}, 
	function ( data ) {
		$.each( data.entities, function ( entityId, entity ) {
			if( entityId === '-1' ){
				mw.notify( mw.msg('wikidata-entity-doesnt-exist') );
				return false;
			}
			if ( entity.sitelinks.hasOwnProperty( site ) ) {
				mw.notify( mw.msg('wikidata-entity-exist', entity.sitelinks[ site ].title ) );
			}
			else {
				$( '<div style="text-align:center;"><iframe src="//www.wikidata.org/wiki/' + entityId + '?printable=yes" style="width:90%;height:450px;overflow-x:hidden;"></iframe></div>' ).dialog( {
					bgiframe: true,
					title: mw.msg( 'wikidata-name' ),
					width: '650px',
					show: 'bounce'
				} );
			}
		} );
	} );
}

function wikidataSearchDialog() {
	var enName = $('#wpTextbox1').val().match(/\[\[en:(.*?)\]\]/);
	enName = enName ? enName[1] : '';

	var wikidataForm = '<div><label for="wikidata-entity-title" rel="wikidata-entity-title">' + mw.msg('wikidata-entity-title') + ':</label><br>';
	wikidataForm += '<input id="wikidata-entity-title" value="' + enName + '"><p>';
	wikidataForm += '<label for="wikidata-entity-lang" rel="wikidata-entity-lang">' + mw.msg('wikidata-entity-lang') + ': </label><br>';
	wikidataForm += '<input id="wikidata-entity-lang" dir="ltr" value="enwiki"></div>';

	var dialogConfig = {
		title: mw.msg( 'wikidata-search' ),
		buttons: {}
	};

	dialogConfig.buttons[ mw.msg( 'wikidata-search' ) ] = function () {
		searchWikidata( $( '#wikidata-entity-title' ).val(), $( '#wikidata-entity-lang' ).val() );
		$( this ).dialog( 'close' ).remove();
	};

	$( wikidataForm ).dialog( dialogConfig );
}

if ( ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) + 1 ) ) {
	if ( mw.user.options.get( 'usebetatoolbar' ) ) {
		var wikidatacheck = {
			label: mw.msg( 'wikidata-toolbar-title' ),
			type: 'button',
			icon: '//upload.wikimedia.org/wikipedia/commons/thumb/8/83/Wikidata-check.svg/22px-Wikidata-check.svg.png',
			action: {
				type: 'callback',
				execute: wikidataSearchDialog
			}
		};

		if ( $( '.wikiEditor-ui-toolbar .section-main' ).length ) {
			$( '#wpTextbox1' )
				.wikiEditor( 'addToToolbar', {
					section: 'main',
					group: 'insert',
					tools: {
						wikidatacheck: wikidatacheck
					}
				} );
		} else {
			$( '#wpTextbox1' ).on( 'wikiEditor-toolbar-buildSection-main', function( event, section ) {
				section.groups.insert.tools.wikidatacheck = wikidatacheck;
			} );
		}
	} else {
		$( 'div #toolbar' ).append( // "old style"
			$( '<img>', {
				src: '//upload.wikimedia.org/wikipedia/commons/thumb/8/83/Wikidata-check.svg/22px-Wikidata-check.svg.png',
				title: mw.msg( 'wikidata-toolbar-title' ),
				'class': 'mw-toolbar-editbutton'
			} )
				.css( { cursor: 'pointer' } )
				.click( wikidataSearchDialog )
		);
	}
}