Modul:GetItem
Dieses Modul ist getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf GetItem/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
Dieses Modul benutzt die Wikidata-Eigenschaften:
|
Funktion
Das Modul bietet einige Funktionen, um Wikidata-Eigenschaften anzuzeigen, die als Wikidata-Objekt gespeichert sind (wikibase-item
). Standardmäßig werden die Objekte in Form eines Wiki-Links ausgegeben, wenn zu dem Objekt ein Artikel existiert. Dabei gibt es folgende Prioritäten:
- deutsches Wikivoyage
- deutsche Wikipedia
- Wikipedia in der Landessprache des Ortes, wenn dem Objekt, dessen Eigenschaft ermittelt werden soll, ein Land zugewiesen ist.
Es werden generell nur die Objekte angezeigt, die auf Wikidata keinen Endzeitpunkt als Qualifikator besitzen. Bei einem gesetzten Endzeitpunkt geht das Modul von einem historischen Beitrag aus.
Im Submodul Modul:GetItem/Properties können einzelne Eigenschaften parametriert werden. Dem Modul nicht bekannte Eigenschaften werden trotzdem ausgegeben. Derzeit sind folgende Eigenschaften implementiert:
getItems
getItems ( id, property, values, show, delimiter, max )
- Aufruf in einer Vorlage:
{{#invoke:GetItem|getItems|id|property|values|show|delimiter}}
- Aufruf in einem Modul:
gs.GetItem().getItems(id,property,values,show,delimiter)
- Funktion: Liefert die Objekte als Link oder Text
- Aufruf in einer Vorlage:
Bei der Verwendung in anderen Modulen muss am Skriptanfang noch ein gs = require( 'Module:GetItem' )
eingefügt werden.
Die Funktion arbeitet mit den folgenden anonymen Parametern
|id=
Wikidata-ID des Objektes, kann leer bleiben, wenn der eigene Artikel abgefragt werden soll.|property=
Angabe der Eigenschaft, die abgefragt werden soll.|values=
gibt an, ob der erste gelieferte Wert, oder, wenn vorhanden, alle erfassten Werte ausgegeben werden. Standardmäßig werden alle gefundenen Werte angezeigt.|values=single
der erste Wert|values=all
alle Werte (Standard)
|show=
gibt die gewünschte Formatierung an.|show=sitelink
gibt das Objekt als Wikilink aus (Standard).|show=label
gibt nur die Bezeichnung als einfachen Text aus.|delimiter=
gibt die gewünschte Trennung zwischen den Werten an. Standardmäßig ist das ein Komma gefolgt von einem ungeschützten Leerzeichen.
Beispiele: Mehr Beispiele findest du dort.
- Thai Airways International (Allianz):
{{#invoke:GetItem|getItems|Q188710|P159}}
– Chatuchak - Thai Airways International (Bonusprogramm):
{{#invoke:GetItem|getItems|Q188710|P4446}}
– Royal Orchid Plus
getItemsQuickbar
Thai Airways International | |
Bonusprogr. | Royal Orchid Plus |
---|---|
Allianz | Star Alliance |
Hauptverwaltung | Chatuchak |
Tochtergesellschaften | Thai Smile, Nok Air |
Hauptstadt | Pretoria, Bloemfontein, Kapstadt |
getItemsQuickbar ( id, property, wikiValue, label )
- Aufruf in einer Vorlage:
{{#invoke:GetItem|getItemsQuickbar|id|property|wikiValue|label}}
- Aufruf in einem Modul:
gn.GetItem().getItemsQuickbar(id, property, wikiValue, label)
- Funktion: Liefert die Werte als Tabellenzeile zur Einbindung in einer Infobox (Quickbar). Es werden immer alle Werte abgerufen. Diese Funktion wird im Regelfall nur in anderen Modulen, speziell denen für die Quickbars, benutzt. Der Einsatz in individuell zusammengestellten Infoboxen direkt in Artikeln ist aber trotzdem möglich.
- Aufruf in einer Vorlage:
Dieser Funktion kann auch ein „Sollwert“ für die Ausgabe übergeben werden. Das bewirkt eine Ausgabe dieses Wertes und keine Ausgabe des auf Wikidata gespeicherten Wertes. Ungeachet dessen wird der übergebene Wert mit Wikidata verglichen. Das Ergebnis des Abgleich finden sich in einer Wartungskategorie sowie in zusätzlichen CSS-Klassen. Für den Leser gibt es ein zusätzliches Tooltip mit dem Ergebnis des Vergleichs und dem Wert von Wikidata.
Ein lokaler Wert kann hier auch angegeben werden. Er wird stattdessen ausgegeben aber trotzdem zusätzlich mit Wikidata verglichen. Mit dem optionalen Parameter label
kann man eine den Text in der linken Spalte vorgeben. Ansonsten wird die hinterlegte Standardanzeige verwendet.
Wartungskategorien
- Wikidata:Fehlende Eigenschaft (2)
- Wikidata:Unbekannte Eigenschaft (4)
- Kein Wert auf Wikidata: Amtssprache (3) • Bonusprogramm (11) • Fahrseite (0) • Hauptstadt (110) • Hauptverwaltung (1) • Luftfahrtdrehkreuz (2) • Luftfahrtallianz (19) • Notrufnummer (4) • Regierungsform (48) • Stecker-Typ (0) • Tochtergesellschaft (19)
- Identischer Wert auf Wikidata: Amtssprache (0) • Bonusprogramm • Hauptstadt (23) • Hauptverwaltung • Luftfahrtdrehkreuz • Luftfahrtallianz • Regierungsform (2) • Tochtergesellschaft
- Abweichender Wert auf Wikidata: Amtssprache (17) • Bonusprogramm • Hauptstadt (32) • Hauptverwaltung • Luftfahrtdrehkreuz • Luftfahrtallianz • Regierungsform (7) • Tochtergesellschaft
- Benutzung von Wikidata: Amtssprache (P37) (189) • Bonusprogramm (P4446) (43) • Fahrseite (P1622) (2) • Hauptstadt (P36) (1.329) • Hauptverwaltung (P159) (53) • Luftfahrtdrehkreuz (P113) (48) • Luftfahrtallianz (P114) (35) • Notrufnummer (P2852) (135) • Regierungsform (P122) (144) • Stecker-Typ (P2853) (2) • Tochtergesellschaft (P355) (35) • • • intern genutzt: Staat (P17) (17.185)
HTML bei Nutzung in den Quickbars
Folgendes HTML wird erzeugt:
<!-- Eintrag für die Zeile -->
<tr class="voy-qb-item voy-qb-item-xxx"> <!-- xxx: Eintrag für die Eigenschaft, Einsehbar in Modul:GetItem/Properties unter dem Eintrag "cssClass"-->
<!-- Eintrag für die erste Spalte -->
<th class="voy-qb-item-key">Eigenschaft</th>
<!-- Je nach Auswertung der Daten wird eine der folgenden Zellen ausgegeben -->
<!-- Ein Wikidata-Wert kann nicht ermittelt werden -->
<td class="voy-qb-item-value1 voy-qb-item-value-nowikidata" data-wikidata-id="Wikidata-ID, wenn vorhanden" data-wikidata-value="Wert" title="Tooltip-Info">Wert</td>
<!-- Wikidata-Wert und lokaler Wert sind identisch -->
<td class="voy-qb-item-value1 voy-qb-item-value-wikidata-equal voy-wikidata-content" data-wikidata-id="Wikidata-ID" data-wikidata-value="Wert" title="Tooltip-Info">Wert</td>
<!-- Wikidata-Wert und lokaler Wert unterscheiden sich -->
<td class="voy-qb-item-value1 voy-qb-item-value-wikidata-noequal voy-wikidata-content" data-wikidata-id="Wikidata-ID" data-wikidata-value="Wert" title="Tooltip-Info">Wert</td>
<!-- alle anderen Fälle -->
<td class="voy-qb-item-value1 voy-wikidata-content" data-wikidata-id="Wikidata-ID, wenn vorhanden" data-wikidata-value="Wert">Wert</td>
</tr>
CSS-Klassen bei Nutzung in den Quickbars
Jedes einzelne Informationsfeld der Quickbar lässt sich über CSS individuell gestalten, entweder zentral über die Systemdatei Mediawiki:common.css oder über benutzerspezifische Einstellungen Benutzer:<Dein Name>/common.css. Für Programmierer ist es damit auch möglich, an jedem Feld per Javascript Änderungen vorzunehmen und Werkzeuge zu programmieren.
Die gesamte Quickbar (<table>...</table>
) besitzt drei Klassen.
voy-qb
– Immer vorhanden ist die Klasseqb
. Über diese kann man jede Infobox beeinflussen.voy-qb-ort
- Alle Orts-Quickbars, die direkt oder indirekt über diese Vorlage eingebunden sind, besitzen diese Klassevoy-qb-<top-level-domain>
– Zusätzlich gibt es eine landesspezifische Klasse, die die Top-Level-Domain beinhaltet. Alle Artikel über Deutschland haben in ihrer Quickbar somit zusätzlich die Klassevoy-qb-de
hinterlegt. Lässt sich keine TLD ermitteln, heißt die Klasseqb-unknown-tld
.
Jede Zeile einer Quickbar besitzt eine allgemeine und eine eigene Klasse.
voy-qb-item
– Klasse, die alle Zeilen einer Infobox-Tabelle besitzen.
Jede Spalte einer Zeile der Quickbar (<tr>...</tr>
) hat eine individuelle Klasse, über die die Formatierungen angewendet werden können. Zusätzlich haben alle Spalten jeder Zeile eine individuelle Klasse:
voy-qb-item-key
– Erste Spalte mit der Eigenschaftsbezeichnung (standardmäßig fett geschrieben)voy-qb-item-value1
– Erste (und in der jetzigen Quickbar Ort im Regelfall einzige) Spalte mit einem Wert.voy-qb-item-value2
– weitere Spaltevoy-qb-item-value3
– weitere Spalte
Bei Bildern gibt es nur eine Tabellenzelle mit einem Div-Tag
voy-qb-item-image
– Klasse des<div>...</div>
. Die Positionierung der Bilder erfolgt dann über Flexboxen.
Die value-Spalten haben noch eine oder mehrere Klassen, wenn Daten aus Wikidata bezogen wurden.
voy-wikidata-content
– Zusätzliche Klasse, wenn die angezeigten Daten aus Wikidata stammen. Diese Klasse ist nicht auf die Quickbars beschränkt und kann überall im Artikel auftauchen.voy-qb-item-value-nowikidata
– Über Wikidata konnten keine Daten ermittelt werden. Es ist kein Objekt vorhanden, oder die gewünschte Information ist im Objekt nicht verfügbar.voy-qb-item-value-wikidata-equal
– Es gibt die Information auf Wikidata und es wirde ein lokaler Wert in der Quickbar angegeben (der auch angezeigt wird). Diese Klasse zeigt an, dass beide Werte identisch sind.voy-qb-item-value-wikidata-noequal
– Es gibt die Information auf Wikidata und es wirde ein lokaler Wert in der Quickbar angegeben (der auch angezeigt wird). Diese Klasse zeigt an, dass sich beide Werte unterscheiden.
Beispiele:
.voy-qb-item-population .voy-qb-item-value1 { color:blue; font-style:italic; }
– Die Einwohnerzahl wird blau und kursiv dargestellt..voy-qb-item-value-wikidata-equal { color:green; font-weight:bold; }
– Einträge werden grün und fett dargestellt, wenn sie lokal angegeben wurden und identisch mit Wikidata sind..voy-qb-item-value-wikidata-noequal { color:red; font-weight:bold; }
– Einträge werden rot und fett dargestellt, wenn sie lokal angegeben wurden sich von Wikidata unterscheiden.
Siehe auch:
- Wikivoyage:CSS-Klassen – Dokumentation der CSS-Klassen auf Wikivoyage
Verwendung in Vorlagen
Das Modul wird von folgenden Vorlagen verwendet:
- {{Quickbar Fluggesellschaft}} – Quickbar für Fluggesellschaften
- {{Quickbar Land}} – Quickbar für Länder
Submodule
- GetItem/Properties – Enthält Wartungkategorien und Voreinstellungen für die einzelnen Properties. Obwohl theoretisch jede Property ohne Voreinstellungen abgefragt werden kann, sollten häufig benutzte Properties hier konfiguriert werden.
Benötigte weitere Module
Dieses Modul benötigt folgende weitere Module: CountryData/Geography
- CountryData/Geography – Wkidata-IDs und Sprachcodes der Staaten
Verwendung in anderen Modulen
Dieses Modul ist notwendig für die Ausführung folgender Module. Bei Anpassungen sollte die Funktionstüchtigkeit der folgenden Module geprüft werden. Benutze dazu auch diese Tracking-Kategorie um Fehler zu finden, die sich dann auf Artikel auswirken:
- Quickbar Fluggesellschaft • Quickbar Land
- Modul benötigt das Modul GetItem – Wartungskategorie, in der nochmals alle Module gelistet sind, die von diesem Modul abhängig sind.
Verwandte Module
- GetP856 – Liefert die Offizielle Webseite eines Objektes.
- GetNumber – Liefert numerische Eigenschaften eines Objektes, wie z. B. Fläche, geografische Höhe und Einwohnerzahl von Regionen bzw. Orten.
- GetString – Liefert alphanumerische Eigenschaften eines Objektes (Datentypen string und monolingualtext)
- GetImage – Liefert Dateinamen von Bildateien.
- GetProvince – Ermittelt rekursiv die erste Verwaltungsstufe eines Ortes (Bundesland, Provinz usw.).
Trackingkategorien und Spezialseiten
- Seiten mit Skriptfehlern – Listet Seiten auf, bei denen Lua-Skripte Fehler verursachen.
- Gewünschte Kategorien – Gewünschte Kategorien. Hier tauche eine neue Kategorie der Art Seiten, die die Wikidata-Eigenschaft Pxxx benutzen auf, wenn eine bisher nicht genutzte Eigenschaft irgendwo verwendet wird.
- Die obige Dokumentation wurde aus der Seite Modul:GetItem/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
--[=[ GetItem 2023-02-12
* local GetItemsAsTable (internal use)
* getItems
* getItemsQuickbar
]=]
local GetItem = {}
-- categories and properties for data evaluation
-- its used to determine the official language of an country
local cg = mw.loadData( 'Module:CountryData/Geography' )
local gip = require ( 'Modul:GetItem/Properties' )
-- returns nil, if both values are equal, otherwise the value
-- similar to the SQL function nullif()
local function nilIf ( value, equalValue )
if ( value == nil ) then
return nil
elseif ( tostring ( value ) == tostring ( equalValue ) ) then
return nil
else
return value
end
end
-- returns the first value that is not nil
-- similar to the SQL function coalesce()
local function coalesce ( value1, value2, value3 )
return value1 or value2 or value3
end
-- GetItemsAsTable() -> just for internal use. it delivers the requested items as a table
-- item: Wikidata-ID
-- property: requested property
-- it delivers the requested items as a table
-- label: Label of the object
-- sitelink: Sitelink in the following order:
-- - German Wikivoyage
-- - German Wikipedia
-- - local Wikipedia (if the country of an object is known)
-- wiki: code of the wiki ("wikivoyage" for the German Wikivoyage )
-- wikilanguage: language of the wiki ("de" for the German Wikivoyage )
local getItemsAsTable = function ( id, property )
-- local variables
-- ID of the item
-- Determined, if not provided
-- compatibility to existing modules and templates:
-- some use the keyword "self" for using the own entity-ID
local localID = nilIf ( nilIf ( id, '' ), 'self' ) or mw.wikibase.getEntityIdForCurrentPage() or ''
-- no Wikidata object
if localID == '' then
return {}, '', ''
end
-- maintenance categories
local maintenanceCategory = ''
-- property
local requestedProperty = property or 'none';
if string.sub(requestedProperty,1,1) ~= 'P' then
requestedProperty = 'none'
end
-- no property given: category and exit
if requestedProperty == 'none' then
maintenanceCategory = maintenanceCategory .. gip.noProperty
return {}, localID, maintenanceCategory
end
-- property unknown in table "gip": category but continue
if not gip[requestedProperty] then
maintenanceCategory = maintenanceCategory .. gip.unknownProperty
end
-- getting the values
local wdStatements = mw.wikibase.getBestStatements( localID, requestedProperty )
-- variables to store the result
local wdValues = {}
local wdItem
local hasEndDate = false
-- setting the "property used" maintaining category
if #wdStatements > 0 then
maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft ' .. requestedProperty .. ' benutzen]]'
end
-- no data? > setting the "no data" category
if #wdStatements == 0 and gip[requestedProperty] ~= nil then
maintenanceCategory = maintenanceCategory .. gip[requestedProperty].noData
end
-- running through the array and store it in a simple table
for i, entry in pairs ( wdStatements ) do
wdItem = {}
-- Prüfen, ob Endzeittpunkt vorhanden ist
hasEndDate = false
if entry.qualifiers ~= nil then
if entry.qualifiers.P582 ~= nil then
hasEndDate = true
end
end
-- check for wikibase-item
if entry.mainsnak.datatype == 'wikibase-item'
and entry.mainsnak.datavalue ~= nil
and not ( hasEndDate )
then
-- getting the item
wdItem.item = entry.mainsnak.datavalue.value.id
-- getting the label
wdItem.label = mw.wikibase.getLabel( entry.mainsnak.datavalue.value.id ) or ''
-- getting the sitelink
wdItem.wiki = ''
wdItem.wikiLanguage = ''
-- trying German Wikivoyage first
wdItem.siteLink = mw.wikibase.getSitelink( entry.mainsnak.datavalue.value.id, 'dewikivoyage' ) or ''
if wdItem.siteLink ~= '' then
-- setting the wiki information
wdItem.wiki = 'wikivoyage'
wdItem.wikiLanguage = 'de'
else
-- trying the German Wikipedia
wdItem.siteLink = mw.wikibase.getSitelink( entry.mainsnak.datavalue.value.id, 'dewiki' ) or ''
if wdItem.siteLink ~= '' then
-- setting the wiki information
wdItem.wiki = 'wikipedia'
wdItem.wikiLanguage = 'de'
else
-- trying the local Wikipedia
-- first getting the country
local wdCountry = {}
local wdCountry = mw.wikibase.getBestStatements( localID, 'P17' )
if #wdCountry > 0 then
-- there where empty values
if wdCountry[1].mainsnak.datavalue ~= nil then
maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P17 benutzen]]'
if cg.countries[wdCountry[1].mainsnak.datavalue.value.id] ~= nil then
local language = cg.countries[wdCountry[1].mainsnak.datavalue.value.id].lang or ''
wdItem.siteLink = mw.wikibase.getSitelink( entry.mainsnak.datavalue.value.id, language .. 'wiki' ) or ''
-- found a local wikipedia?
if wdItem.siteLink ~= '' then
-- setting the wiki information
wdItem.wiki = 'wikipedia'
wdItem.wikiLanguage = language
end
end -- if #wdIso3166 > 0
end -- if wdCountry[1].mainsnak.datavalue ~= nil
end -- if #wdCountry > 0
end -- if wdItem.siteLink ~= ''
end -- if wdItem.siteLink ~= ''
-- getting the qualifiers
-- the qualifiers are set up in Modul:GetItem/Properties
if gip[requestedProperty] ~= nil then
if gip[requestedProperty].qualifiers ~= nil then
wdItem.qualifiers = {}
-- looping over the rquested qualifiers
for i, qualifier in ipairs( gip[requestedProperty].qualifiers ) do
if entry.qualifiers ~= nil then
if entry.qualifiers[qualifier] ~= nil then
-- Wikidata-Item
if entry.qualifiers[qualifier][1].datatype == 'wikibase-item' then
wdItem.qualifiers[i] = {}
wdItem.qualifiers[i].qualifier = qualifier
wdItem.qualifiers[i].value = mw.wikibase.getLabel ( entry.qualifiers[qualifier][1].datavalue.value.id ) or ''
end
end -- if entry.qualifiers.qualifier ~= nil
end -- if entry.qualifiers ~= nil
end -- for i, qualifier in ipairs( gip[requestedProperty].qualifiers )
end -- if gip[requestedProperty].qualifiers ~= nil
end -- f gip[requestedProperty] ~= nil
-- adding the capital to the list
table.insert( wdValues, wdItem )
end -- if entry.mainsnak.datatype == 'wikibase-item' and entry.mainsnak.datavalue ~= nil and not ( hasEndDate )
end -- for i, entry in ipairs ( wdStatements )
-- returning the items
return wdValues, localID, maintenanceCategory
end
-- GetItems()
-- gets the text of a property including its language
-- first parameters: see internal function
-- values:
-- - single: Only one (first) entry is shown
-- - all (standard): All entries ar shown
-- show:
-- - sitelink (standard): the sitelink with the label as link label
-- - label: just the label (removes tha category as well),
-- delimiter: delimiter between the numbers; standard is comma and breakable space
GetItem.getItems = function ( id, property, values, show, delimiter )
-- returning String
local returnString = ''
-- values
local requestedValues = coalesce ( nilIf ( values, '' ), 'all' )
-- WD-Values
local stringList = {}
local wikidataID = ''
local categories = ''
stringList, wikidataID, categories = getItemsAsTable ( id, property )
-- linkText
local linkText = ''
-- no delimiter in front of the first entry
local stringDelimiter = ''
-- qualifiers, if requested
local stringQualifier = ''
-- displaying the values
for key, value in pairs( stringList ) do
if value.qualifiers ~= nil then
if #value.qualifiers > 0 then
stringQualifier = ' ('
for i = 1, #value.qualifiers do
if i == 1 then
stringQualifier = stringQualifier .. value.qualifiers[i].value
else
stringQualifier = stringQualifier .. ', ' .. value.qualifiers[i].value
end
end
stringQualifier = stringQualifier .. ')'
end
end
if coalesce ( nilIf ( show, '' ), 'sitelink' ) == 'sitelink' and value.siteLink ~= '' then
returnString = returnString .. stringDelimiter .. '[['
if value.wiki == 'wikipedia' then
returnString = returnString .. 'w:' .. value.wikiLanguage .. ':'
end
linkText = coalesce ( nilIf ( value.label, '' ), value.siteLink )
returnString = returnString .. value.siteLink .. '|' .. linkText .. ']]' .. stringQualifier
else -- showing just the label
returnString = returnString .. stringDelimiter .. value.label .. stringQualifier
end
-- breaking,
if requestedValues ~= 'all' then
break;
end
stringDelimiter = coalesce ( nilIf ( delimiter, '' ), ', ' )
end
returnString = returnString
-- providing the list of capitals
if coalesce ( show, '' ) == 'label' then
return returnString, categories
else
return returnString .. categories, categories
end
end
-- Get the string as wiki markup for quickbars (infoboxes)
GetItem.getItemsQuickbar = function ( id, property, wikiValue, label, delimiter )
-- checking property
if coalesce ( property, '' ) == '' then
return ''
end
-- getting the link with the base function above
local wikidataID
local wikidataStrings = {}
local wikidataCategories
wikidataStrings, wikidataID, wikidataCategories = getItemsAsTable ( id, property )
-- if it is taken from wikidata, this variable provides an additional class for: MediaWiki:Gadget-Wikidata-Content.css
-- space is needed becaus its simply added to the existing class string
local wikidataClass = ' voy-wikidata-content'
-- comparing a possibly given value with Wikidata
local category = ''
-- is Wikidata value not available?
local wikidataNoData = false
if wikidataID == '' then
if gip[property] ~= nil then
category = gip[property].noData
wikidataNoData = true
end
wikidataClass = ''
end
-- creating text for display
local returnString = ''
local stringDelimiter = ''
local stringQualifier = ''
-- Wikidate comparision tags
-- is Wikidata available
local wikidataAvailable = true
-- is one of the entries equal to the wiki value?
local wikidataOneIsEqual = false
local wikidataEqualData = false
-- are none of the entries equal to the wiki value?
-- starting with false
-- later initialised to true, when local wiki value is given
local wikidataNothingIsEqual = false
local wikidataNoEqualData = false
-- processing nil value for wikiValue
if wikiValue == nil then
wikiValue = ''
end
-- wikivalues, that can be interpreted as "TRUE" are removed and Wikidata is used
-- it's used to switch entries on and off in Quickbars
if wikiValue =='yes'
or wikiValue == 'y'
or wikiValue == 'true'
or wikiValue == 'wahr'
or wikiValue == 'ja'
or wikiValue == 'j'
then
wikiValue = ''
end
-- wikivalues, that can be interpreted as "FALSE" suppress the whole row
if wikiValue =='no'
or wikiValue == 'n'
or wikiValue == 'false'
or wikiValue == 'falsch'
or wikiValue == 'nein'
then
return wikidataCategories
end
-- processing wikiValue
if coalesce ( wikiValue, '' ) ~= '' then
-- starting with TRUE by default
-- set to FALSE if one value is equal
wikidataNothingIsEqual = true
wikidataNoEqualData = true
end
-- displaying the values and compare with Wikidata
for key, value in pairs( wikidataStrings ) do
if value.qualifiers ~= nil then
if #value.qualifiers > 0 then
stringQualifier = ' ('
for i = 1, #value.qualifiers do
if i == 1 then
stringQualifier = stringQualifier .. value.qualifiers[i].value
else
stringQualifier = stringQualifier .. ', ' .. value.qualifiers[i].value
end
end
stringQualifier = stringQualifier .. ')'
end
end
if coalesce ( nilIf ( show, '' ), 'sitelink' ) == 'sitelink' and value.siteLink ~= '' then
returnString = returnString .. stringDelimiter .. '[['
if value.wiki == 'wikipedia' then
returnString = returnString .. 'w:' .. value.wikiLanguage .. ':'
end
linkText = coalesce ( nilIf ( value.label, '' ), value.siteLink )
returnString = returnString .. value.siteLink .. '|' .. linkText .. ']]' .. stringQualifier
else -- showing just the label
returnString = returnString .. stringDelimiter .. value.label .. stringQualifier
end
-- comparing with Wikidata
if coalesce ( wikiValue, '' ) ~= '' then
if mw.ustring.gsub ( wikiValue, '[%[%]]', '' ) == value.siteLink or mw.ustring.gsub ( wikiValue, '[%[%]]', '' ) == value.label then
wikidataOneIsEqual = true
end
end
-- Setting the delimiter
stringDelimiter = coalesce ( nilIf ( delimiter, '' ), ',<br />' )
-- resetting the qualifier
stringQualifier = ''
end
-- saving wikidata value in case of a local string is used
local wikidataString = returnString
-- do not state "different values", when no wikidata value is available
if #wikidataStrings == 0 then
wikidataNoEqualData = false
wikidataClass = ''
end
-- Setting Wikidata categories
if coalesce ( wikiValue, '' ) ~= '' then
-- setting the categories
if gip[property] ~= nil then
if wikidataOneIsEqual then
category = category .. gip[property].equalData
wikidataEqualData = true
end
if wikidataNothingIsEqual and #wikidataStrings > 0 then
category = category .. gip[property].noEqualData
wikidataNoEqualData = true
end
end
-- displaying the wikiValue
returnString = wikiValue
-- removing the WD-Class
wikidataClass = ''
end
-- displaying only, if any data available
local trClass = ''
if returnString == '' then
trClass = ' voy-qb-empty'
end
-- creating the table row
local tr = mw.html.create ( 'tr' )
-- first table cell (heading)
local trLabel = coalesce ( nilIf ( label, '' ), ' ' )
if gip[property] then
trClass = ' ' .. gip[property].cssClass .. trClass
if trLabel == ' ' then
trLabel = gip[property].label
end
end
tr:addClass('voy-qb-item' .. trClass )
:tag('th')
:addClass('voy-qb-item-key')
:wikitext(trLabel)
-- second table cell (the requested number)
if wikidataNoData then
tr:tag('td')
:addClass( 'voy-qb-item-value1 voy-qb-item-value-nowikidata' .. wikidataClass )
:attr('data-wikidata-id',wikidataID)
:attr('title','Keine Wert auf Wikidata')
:wikitext( returnString )
elseif wikidataEqualData then
tr:tag('td')
:addClass( 'voy-qb-item-value1 voy-qb-item-value-wikidata-equal' .. wikidataClass )
:attr('data-wikidata-id',wikidataID)
:attr('data-wikidata-value',wikidataString)
:attr('title','Daten identisch - Angabe auf Wikidata: ' .. wikidataString)
:wikitext( returnString )
elseif wikidataNoEqualData then
tr:tag('td')
:addClass( 'voy-qb-item-value1 voy-qb-item-value-wikidata-noequal' .. wikidataClass )
:attr('data-wikidata-id',wikidataID)
:attr('data-wikidata-value',wikidataString)
:attr('title','Daten unterschiedlich - Angabe auf Wikidata: ' .. wikidataString )
:wikitext( returnString )
else
tr:tag('td')
:addClass( 'voy-qb-item-value1' .. wikidataClass )
:attr('data-wikidata-id',wikidataID)
:attr('data-wikidata-value',wikidataString)
:wikitext( returnString )
end
-- returning the row
return tostring ( tr ) .. category .. wikidataCategories
end
GetItem.getEntityID = function()
return mw.wikibase.getEntityIdForCurrentPage() or ''
end
-- Providing template access
local p = {}
function p.getItems( frame )
return GetItem.getItems( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ], frame.args[ 4 ], frame.args[ 5 ] ) or ""
end
function p.getItemsQuickbar( frame )
return GetItem.getItemsQuickbar( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ], frame.args[ 4 ], frame.args[ 5 ] ) or ""
end
function p.getEntityID( frame )
return GetItem.getEntityID() or ""
end
-- for usage in other modules
-- using it the following way:
--
-- local GetItem = require( 'Module:GetItem' )
-- foo = GetItem.GetItem().xxx( id, lang )
function p.GetItem()
return GetItem
end
return p