MediaWiki:Gadget-WikidataLink.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
if (mw.config.get('wgAction') == 'view') {
	location.search.indexOf("printable=yes") == -1 && $(function($) {
		var translate = {
			'en': {
				notfound: "Wikidata item not found.",
				intro: "Wikidata: ",
				nolabel: "(No label)",
				nodescription: "no description given",
				aliases: "Aliases: ",
				noaliases: "None"
			},
			'uk': {
				notfound: "Тотожного елемента Вікіданих не знайдено [створити].",
				intro: "Вікідані: ",
				nolabel: "(без назви)",
				nodescription: "без опису",
				aliases: "Інші назви: ",
				noaliases: "нема"
			}
		}
		var namespace = mw.config.get('wgNamespaceNumber'),
			lang = mw.config.get('wgPageContentLanguage'),
			page = (namespace -= (namespace > 0 && namespace % 2)) === 0 ? mw.config.get('wgTitle') : mw.config.get('wgFormattedNamespaces')[namespace] + ':' + mw.config.get('wgTitle');

		namespace != 2 && $.ajax({
			url: '//www.wikidata.org/w/api.php',
			data: {
				'format': 'json',
				'action': 'wbgetentities',
				'sites': mw.config.get('wgDBname'),
				'titles': page,
				'props': 'info|labels|descriptions|aliases',
				'languages': lang
			},
			dataType: 'jsonp',
			success: function(data) {
				if (data.success) {
					var m = translate[lang] || translate.en;
					for (var i in data.entities) {
						if (i == -1) {
							try {
								mw.util.addSubtitle($("<a>").attr("href", "//www.wikidata.org/wiki/Special:CreateItem?site=" + mw.config.get("wgDBname") + "&page=" + page).text(m.notfound)[0])
							} catch (e) {
								// Occurs in Content Translation skin for example [[Special:ContentTranslation]].
								return;
							}

							var api = new mw.Api();
							api.get({
									action: 'query',
									titles: page,
									prop: 'langlinks',
									lllimit: 'max'
								})
								.done(function(data) {
									var pg, ll, hasItem;
									for (pg in data.query.pages)
										if (!data.query.pages[pg].missing)
											for (ll in data.query.pages[pg].langlinks) {
												lang = data.query.pages[pg].langlinks[ll].lang;
												$.ajax({
													url: '//www.wikidata.org/w/api.php',
													data: {
														'format': 'json',
														'action': 'wbgetentities',
														'sites': data.query.pages[pg].langlinks[ll].lang + 'wiki',
														'titles': data.query.pages[pg].langlinks[ll]["*"],
														'props': 'info|labels|descriptions|aliases',
														'languages': lang
													},
													dataType: 'jsonp',
													success: function(data) {
														if (!hasItem)
															for (var i in data.entities)
																if (i != -1) {
																	hasItem = data.entities[i];
																	var i = 0,
																		aliases = [];
																	try {
																		for (; i < item.aliases[lang].length; i++)
																			aliases.push(item.aliases[lang][i].value);
																	} catch (e) {}
																	mw.util.addSubtitle($('<div>').append($("<a>").attr("href", "//www.wikidata.org/wiki/" + hasItem.title).text(" Можливо, потрібний елемент: " + ((hasItem.labels && hasItem.labels[lang]) ? hasItem.labels[lang].value : "") + " (" + hasItem.title + ")"),
																		$("<span>").text(", "),
																		$("<i>").text(hasItem.descriptions && hasItem.descriptions[lang] ? hasItem.descriptions[lang].value : m.nodescription),
																		$("<br>"),
																		$("<span>").text(m.aliases + (aliases.join(", ") || m.noaliases)))[0])
																	break;
																}
													}
												});
											}
								})
								.fail(function(error) {
									alert(error);
								});

						} else {
							var item = data.entities[i],
								i = 0,
								aliases = [];
							try {
								for (; i < item.aliases[lang].length; i++) {
									aliases.push(item.aliases[lang][i].value);
								}
							} catch (e) {}
							mw.util.addSubtitle(
								$('<div>').append(
									$("<a>").attr("href", "//www.wikidata.org/wiki/" + item.title).text(m.intro + ((item.labels && item.labels[lang]) ? item.labels[lang].value : m.nolabel) + " (" + item.title + ")"),
									$("<span>").text(", "),
									$("<i>").text(item.descriptions && item.descriptions[lang] ? item.descriptions[lang].value : m.nodescription),
									$("<br>"),
									$("<span>").text(m.aliases + (aliases.join(", ") || m.noaliases)))[0]
							)
						}
					}
				}
			}
		});
	});
} // if 'view'