Modul:GetImage
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 GetImage/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 auf Wikidata angegebene Dateien zu beziehen und anzuzeigen.
Im Submodul Modul:GetImage/Properties können einzelne Eigenschaften parametriert werden. Dem Modul nicht bekannte Eigenschaften werden trotzdem ausgegeben. Derzeit sind folgende Eigenschaften implementiert:
getImage
getImage ( id, property )
- Aufruf in einer Vorlage:
{{#invoke:GetImage|getImage|id|property}}
- Aufruf in einem Modul:
gi.GetImage().getImage(id,property)
- Funktion: Liefert den Dateinamen aus der gewünschten Wikidataeigenschaft. Die Datei wird ohne Wiki-Markup geliefert, daher auch immer nur ein Dateiname. Daher wird auch keine Kategorie der Art Seiten, die die Wikidata-Eigenschaft Pxxx benutzen vergeben. Sind mehrere hinterlegt, wird der erste ausgegeben, der von der Datenbank geliefert wird.
- Aufruf in einer Vorlage:
Bei der Verwendung in anderen Modulen muss am Skriptanfang noch ein gi = require( 'Module:GetImage' )
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.
Beispiele: Mehr Beispiele findest du dort.
- Cottbus (Bild):
{{#invoke:GetImage|getImage|Q3214|P18}}
– Cottbus 07-2017 img23 Altmarkt.jpg
getMainImageQuickbar
Cottbus |
getMainImageQuickbar ( id, localImage )
- Aufruf in einer Vorlage:
{{#invoke:GetImage|getMainImageQuickbar|id|localImage}}
- Aufruf in einem Modul:
gn.GetImage().getMainImageQuickbar(id, localImage)
- Funktion: Liefert das Hauptbild in einer Infobox (Quickbar). Ein Vergleich mit Wikidata erfolgt hierbei nicht, auf Wikidata wird nicht zurückgegriffen, wenn ein Bild angegeben ist.
- Aufruf in einer Vorlage:
getEmblemsQuickbar
Sabah |
getEmblemsQuickbar ( id, emblems )
- Aufruf in einer Vorlage:
{{#invoke:GetImage|getEmblemsQuickbar|id|emblems}}
- Aufruf in einem Modul:
gn.GetImage().getEmblemsQuickbar(id, emblems)
- Funktion: Liefert Flagge, Siegel, Wappen und/oder Logo in einer Infobox (Quickbar). Die Dateien werden generell von Wikidata geholt. Eine lokale Angabe ist nicht möglich. Was dargestellt wird, wird durch einen Buchstaben kodiert. Die Reihenfolge der Buchstaben bestimmt die Reihenfolge in der Quickbar. Also:
CFS
stellt nebeneinander Wappen (Coat of Arms), Flagge (Flag) und Siegel (Seal) dar. Es sind die Anfangsbuchstaben der englischen Bezeichnungen. Zusätzlich gibt es das „L“ für das Logo.
- Aufruf in einer Vorlage:
getPositionMapQuickbar
Deutschland | |
getPositionMapQuickbar ( id, collectionCategory, widthPositionMap, localPositionMap, imageMap, qbFrame )
- Aufruf in einer Vorlage:
{{#invoke:GetImage|getPositionMapQuickbar|id|collectionCategory|widthPositionMap|localPositionMap|imageMap}}
- Aufruf in einem Modul:
gn.GetImage().getPositionMapQuickbar(id, collectionCategory, widthPositionMap, localPositionMap, imageMap, qbFrame)
- Funktion: Stellt eine Lagekarte dar, wie sie in Infoboxen für Provinzen und Ländern Anwendung findet. Es kann dabei eine geünschte Sammlung vorgeggeben werden, die verwendet werden soll. Ist diese nicht verfügbar, wird erste andere Karte verwendet, die Wikidata liefert. Eine individuelle Karte kann lokal in der Vorlage angegeben werden, die dann Vorrang vor Wikidata hat. Die Funktion ist auch in der Lage, eine Imagemap über die Lagerkarte zu legen.
- Aufruf in einer Vorlage:
Die Funktion arbeitet mit den folgenden anonymen Parametern
|id=
Wikidata-ID des Objektes, kann leer bleiben, wenn der eigene Artikel abgefragt werden soll.|collectionCategory=
Angabe der Sammlung aud er die Karte bevorzugt kommen soll werden soll. Dies kann auf GetImage/Properties voreingestellt werden. Diese beiden Sammlungen werden derzeit bei der Darstellung bevorzugt[1]:
- Grau-grüne orthografische Projektionskarten
- Karten im Globus-Format - Optisch gleichformatige Alternative zur vorgenannten Sammlung
- grau-grüne Positionskarten
- Rote und pinke Positionskarten
- Eine beliebige andere Karte
|widthPositionMap=
Breite der Lagekarte.|localPositionMap=
Lokale Angabe einer Karte, die angezeigt werden soll.|imageMap=
Angabe einer Imagemap, die über die Karte gelegt werden soll.
Wartungskategorien
- Wikidata:Fehlende Eigenschaft
- Wikidata:Unbekannte Eigenschaft
- Kein Wert auf Wikidata: Bild • Collage • Flagge • Lagekarte • Logo • Panoramaansicht • Siegel • Wappen
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:GetImage/Properties unter dem Eintrag "cssClass"-->
<td colspan="2" data-wikidata-id="Wikidata-ID, wenn vorhanden">
<div class="voy-qb-item-image">
<a><img></a>
<!-- Bei Bedarf weitere Bilder (A-Tags) -->
</div>
</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 Flughafen}} – Quickbar für Flughäfen
- {{Quickbar Land}} – Quickbar für Länder
- {{Quickbar Ort}} – Quickbar für Orte
- {{Quickbar Region}} – Quickbar für Regionen
Submodule
- GetImage/Properties – Submodul mit Voreinstellungen zu den einzelnen Eigenschaften.
Verwendete Module
Es werden keine anderen Module verwendet
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 Flughafen • Quickbar Land • Quickbar Ort • Quickbar Region
- Modul benötigt das Modul GetImage – 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)
- GetItem – Liefert Eigenschaften, die als Wikidata-Objekt erfasst sind. Das Ergebnis können Links auf Wikivoyage oder Wikipedia-Artikel sein.
- 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.
Einzelnachweise
- Die obige Dokumentation wurde aus der Seite Modul:GetImage/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
--[=[ getImage 2024-08-20
*
* getImagesAsTable (internal use)
*
* getImage ( id, property )
* getSchematic ( id, frame )
* getMainImageQuickbar ( id, localImage )
* getEmblemsQuickbar ( id, emblems )
* getPositionMapQuickbar ( id, collectionCategory, widthPositionMap, localPositionMap, imageMap, qbFrame )
*
]=]
local GetImage = {}
-- categories and properties for data evaluation
local gip = require ( 'Modul:GetImage/Properties' )
-- local tables > maybe moving into a separate module later
-- categories for data evaluation
local wikidataCat = {
-- common wikidata categories
noProperty = '[[Kategorie:Wikidata:Fehlende Eigenschaft]]',
unknownProperty = '[[Kategorie:Wikidata:Unbekannte Eigenschaft]]'
}
-- 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
-- determines the length of a key-value table
-- the # operator does not work here
local function getTableLength(tbl)
local getN = 0
for n in pairs(tbl) do
getN = getN + 1
end
return getN
end
--[[
- getImagesAsTable() -> just for internal use.
- it delivers the images including qualifiers
- images are saved into two subtables
- - "images" contains the images including the folowing qualifiers
- - P585 (point of time)
- - P195 (ID of the collection)
- - "collections" contains the images with the Wikidata-ID of the collection as key
- ranking: options
- - best (standard) : uses getBestStatement
- - all: uses getStatementAll (is used for locator maps only,
because the wanted collection scheme is not alwas available
with the bestStatemenmt function, e. g. Germany Q183)
--]]
local getImagesAsTable = function ( id, property, ranking )
-- 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 = coalesce ( nilIf ( nilIf ( id, 'self' ), '' ), mw.wikibase.getEntityIdForCurrentPage(), '' )
-- initialising returning table
local wdValues = {}
wdValues.images = {}
wdValues.collections = {}
-- no Wikidata object
if localID == '' then
return wdValues, '', ''
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
local wdStatements = {}
-- getting the values
if coalesce ( ranking, '' ) == 'all' then
wdStatements = mw.wikibase.getAllStatements( localID, requestedProperty )
else
wdStatements = mw.wikibase.getBestStatements( localID, requestedProperty )
end
-- running through the array and store it in a simple table
local entryValueImage
for i, entry in ipairs ( wdStatements ) do
-- check for number
if entry.mainsnak.datatype == 'commonsMedia' then
-- new data set
entryValue = {}
-- getting the image
entryValue.image = entry.mainsnak.datavalue.value
-- initialising qualifiers
entryValue.year = 0
-- read qualifiers
if entry.qualifiers ~= nil then
-- read P585-Qualifiers (date/time of validity)
if entry.qualifiers.P585 ~= nil then
if entry.qualifiers.P585[1].datavalue.value.precision == 9 then
entryValue.year = tonumber ( entry.qualifiers.P585[1].datavalue.value.time:sub( 2, 5 ) )
end
if entry.qualifiers.P585[1].datavalue.value.precision == 10 then
entryValue.year = tonumber ( entry.qualifiers.P585[1].datavalue.value.time:sub( 2, 5 ) )
end
if entry.qualifiers.P585[1].datavalue.value.precision == 11 then
entryValue.year = tonumber ( entry.qualifiers.P585[1].datavalue.value.time:sub( 2, 5 ) )
end
-- maintenance category
maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P585 benutzen]]'
end
-- read the P195-Qualifiers (collection)
if entry.qualifiers.P195 ~= nil then
-- adding to the images-subtable
entryValue.collectionID = entry.qualifiers.P195[1].datavalue.value.id
-- adding to the collection.subtable
wdValues.collections[entry.qualifiers.P195[1].datavalue.value.id] = entry.mainsnak.datavalue.value
-- maintenance category
maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P195 benutzen]]'
end
end
-- adding to the list
table.insert( wdValues.images, entryValue )
end -- if entry.mainsnak.datatype == 'commonsMedia'
end -- for i, entry in ipairs ( wdStatements )
-- adding usage category
if #wdStatements > 0 then
maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft ' .. requestedProperty .. ' benutzen]]'
end
-- adding missing data categories
if #wdStatements == 0 then
if gip[requestedProperty] ~= nil then
maintenanceCategory = maintenanceCategory .. gip[requestedProperty].noData
end
end
return wdValues, localID, maintenanceCategory
end
-- getImage()
-- gets the images (filenames)
-- it fetches only a single entry, because its provided without wiki markup
-- it does not provide the wikidata usage category for the same reason
GetImage.getImage = function ( id, property )
-- returning String
local imageString = ''
-- making empty parameters to nil
if unit == '' then unit = nil end
-- WD-Values
local imageList = {}
local wikidataID = ''
local categories = ''
imageList, wikidataID, categories = getImagesAsTable ( id, property )
-- getting the filename, if at least one is returned
if #imageList.images > 0 then
imageString = imageList.images[1].image
end
-- providing the image, not followed by categories,
-- because its just the filename which has to be packed into wiki markup later
return imageString
end
-- provides the schematic image (P5555) with year
-- some symbols can be added in the caption as well
GetImage.getSchematic = function ( id, frame, parentFrame )
local WikidataID = string.upper(id)
if ( WikidataID:find('Q%d') == nil ) or ( string.sub(WikidataID,1,1) ~= 'Q' ) then
return '<span class="error">Keine Wikidata-ID übergeben!</span>'
end
-- WD-Values
local imageString = '[[File:'
local imageList = {}
local categories = ''
local orientation = ''
local figcaption = ''
imageList, wikidataID, categories = getImagesAsTable ( id, 'P5555' )
-- in case of errors an empty table is returned. Try P15
if imageList == {} then
imageList, wikidataID, categories = getImagesAsTable ( id, 'P15' )
end
-- in case of errors an empty table is returned. Checking this first.
if imageList == {} then
return ''
end
-- getting the filename, if at least one is returned
if #imageList.images > 0 then
imageString = imageString .. imageList.images[1].image .. '|thumb|'
else
return gip.P5555.noData
end
-- at least one symbol given?
if frame.args[2] ~= nil then
-- iterating through all symboles
local i = 2
local symbol = ''
while frame.args[i] ~= nil do
symbol = string.lower(frame.args[i])
-- check whether symbol is cofigured and use it
if gip.publicTransportSymbols[symbol] ~= nil then
figcaption = figcaption .. '[[File:' .. gip.publicTransportSymbols[symbol] .. '|20px]] '
end
-- upright option used?
if symbol == 'upright' then
orientation = 'upright|'
end
i = i + 1
end
end
-- same procedure for the parent farme
if parentFrame ~= nil then
if parentFrame.args[2] ~= nil then
-- iterating through all symboles
local i = 2
local symbol = ''
while parentFrame.args[i] ~= nil do
symbol = string.lower(parentFrame.args[i])
-- check whether symbol is cofigured and use it
if gip.publicTransportSymbols[symbol] ~= nil then
figcaption = figcaption .. '[[File:' .. gip.publicTransportSymbols[symbol] .. '|20px]] '
end
-- upright option used?
if symbol == 'upright' then
orientation = 'upright|'
end
i = i + 1
end
end
end
-- Qualifier P585 used?
if imageList.images[1].year ~= nil then
figcaption = figcaption .. '(' .. imageList.images[1].year .. ')'
end
-- concenating
imageString = imageString .. orientation .. figcaption
return imageString:gsub("|*$","") .. ']]'.. categories
end
-- provides the main image for quickbars
-- Only P18 is used for the main image
GetImage.getMainImageQuickbar = function ( id, localImage )
-- making nil to empty string
if localImage == nil then localImage = '' end
-- getting the specific class for the item
local trClass = gip.P18.cssClass or ''
-- image from Wikidata
if localImage == '' then
-- getting the link with the base function above
local wikidataImages = {}
local wikidataID = ''
local wikidataCategories = ''
wikidataImages, wikidataID, wikidataCategories = getImagesAsTable ( id, 'P18' )
local tr = mw.html.create ( 'tr' )
-- no image? -> invisible row row
if #wikidataImages.images == 0 then
trClass = trClass .. ' voy-qb-empty'
tr:addClass('voy-qb-item ' .. trClass )
:tag('td')
:attr('colspan','2')
:attr('data-wikidata-id',wikidataID)
:tag('div')
:addClass('voy-qb-item-image')
:wikitext('')
-- returning the row
return tostring ( tr ) .. wikidataCategories
end
-- creating the table row with the image
tr:addClass('voy-qb-item ' .. trClass )
:tag('td')
:attr('colspan','2')
:attr('data-wikidata-id',wikidataID)
:tag('div')
:addClass('voy-qb-item-image')
:wikitext('[[File:' .. wikidataImages.images[1].image .. '|' .. gip.quickbarSettings.widthP18 .. ']]')
-- returning the row
return tostring ( tr ) .. wikidataCategories
-- or local image
else
-- wikivalues, that can be interpreted as "FALSE" suppress the whole row
if localImage =='no'
or localImage == 'n'
or localImage == 'false'
or localImage == 'falsch'
or localImage == 'nein'
or localImage == '0'
then
return ''
end
-- creating the table row with the image
local tr = mw.html.create ( 'tr' )
tr:addClass('voy-qb-item ' .. trClass )
:tag('td')
:attr('colspan','2')
:tag('div')
:addClass('voy-qb-item-image')
:wikitext(localImage)
return tostring ( tr )
end
end
-- provides flag, coat of arms, seal or/and logo in one row for quickbars
-- the emblems parameter describes selection and order of the elements
-- F: flag (P41)
-- C: coat of arms (P94)
-- S: seal (P158)
-- L: logo (P154)
GetImage.getEmblemsQuickbar = function ( id, emblems )
-- set to empty string, if nil
if emblems == nil then emblems = '' end
-- break, if empty
if emblems == '' then
return ''
end
-- initialising the temporary variables for getting the images from Wikidata
local wikidataImages = {}
local wikidataID = ''
local wikidataCategories = ''
-- single category to collect categories on every loop run
local wikidataCategory = ''
-- contains the wikitext to be inserted into the TD-Tag
local imageString = ''
-- contains the width of an item,
-- Modul:GetImage/Properties
-- dependet from amount of items in a row
local imageWidth = ''
-- contains options as like the border incase of flags
local imageOptions = ''
-- contains a list of image specific classes for the row
local trClass = ''
-- contains error categories
local errorCategory = ''
-- running through the emblems parameter
for c in emblems:gmatch"." do
imageOptions = ''
if c:upper() == 'F' then
-- getting the link with the base function above
wikidataImages, wikidataID, wikidataCategory = getImagesAsTable ( id, 'P41' )
-- setting the border
imageOptions = '|border'
-- determining the width
if string.upper(emblems) == 'F' then
imageWidth = gip.quickbarSettings.widthP41.single
else
imageWidth = gip.quickbarSettings.widthP41.twoItems
end
-- setting the css class
trClass = trClass .. ' ' .. coalesce ( gip.P41.cssClass, '' )
elseif c:upper() == 'C' then
-- getting the link with the base function above
wikidataImages, wikidataID, wikidataCategory = getImagesAsTable ( id, 'P94' )
-- determining the width
if string.upper(emblems) == 'C' then
imageWidth = gip.quickbarSettings.widthP94.single
else
imageWidth = gip.quickbarSettings.widthP94.twoItems
end
-- setting the css class
trClass = trClass .. ' ' .. coalesce ( gip.P94.cssClass, '' )
elseif c:upper() == 'S' then
-- getting the link with the base function above
wikidataImages, wikidataID, wikidataCategory = getImagesAsTable ( id, 'P158' )
-- determining the width
if string.upper(emblems) == 'S' then
imageWidth = gip.quickbarSettings.widthP158.single
else
imageWidth = gip.quickbarSettings.widthP158.twoItems
end
-- setting the css class
trClass = trClass .. ' ' .. coalesce ( gip.P158.cssClass, '' )
elseif c:upper() == 'L' then
-- getting the link with the base function above
wikidataImages, wikidataID, wikidataCategory = getImagesAsTable ( id, 'P154' )
-- determining the width
if string.upper(emblems) == 'L' then
imageWidth = gip.quickbarSettings.widthP154.single
else
imageWidth = gip.quickbarSettings.widthP154.twoItems
end
-- setting the css class
trClass = trClass .. ' ' .. coalesce ( gip.P154.cssClass, '' )
else
-- error handling for unknown chracters
errorCategory = '[[Kategorie:Quickbar:Unbekannter Parameter für Hoheitszeichen]]'
end
-- got image? -> add it
if #wikidataImages.images > 0 then
imageString = imageString .. '[[File:' .. wikidataImages.images[1].image .. '|' .. imageWidth .. imageOptions .. '|class=notpageimage]]'
wikidataCategories = wikidataCategories .. wikidataCategory
end
end
-- if not any item available, doing nothing
if imageString == '' then
return ''
end
-- creating the table row with the image(s)
local tr = mw.html.create ( 'tr' )
tr:addClass('voy-qb-item' .. trClass )
:tag('td')
:attr('colspan','2')
:attr('data-wikidata-id',wikidataID)
:tag('div')
:addClass('voy-qb-item-image')
:wikitext(imageString)
-- returning the row
return tostring ( tr ) .. wikidataCategories
end
-- provides the position map in quickbars
-- it's the map with a highlighted region, not the map with a pin
-- it can fetch a map thats a part of a requested collection
-- an imagemap can be added to the map image
GetImage.getPositionMapQuickbar = function ( id, collectionCategory, widthPositionMap, localPositionMap, imageMap, qbFrame )
-- making nil to empty string
if collectionCategory == nil then collectionCategory = '' end
if widthPositionMap == nil then widthPositionMap = '' end
if localPositionMap == nil then localPositionMap = '' end
if imageMap == nil then imageMap = '' end
-- setting standard values
if widthPositionMap == '' then widthPositionMap = gip.quickbarSettings.widthP242 end
-- getting the specific class for the item
local trClass = gip.P242.cssClass
-- final content to be returned
local wikidataCategories = ''
local wikidataID = 'null'
local finalMap = ''
-- image from Wikidata
if localPositionMap == '' then
-- getting the link with the base function above
local wikidataImages = {}
wikidataImages, wikidataID, wikidataCategories = getImagesAsTable ( id, 'P242', 'all' )
-- no image? -> no row
if #wikidataImages.images == 0 then
return wikidataCategories
end
-- trying to find the position map that ispart of the requested collection
-- if not, take the first one
local filePositionMap = ''
-- are collections available at all?
if getTableLength ( wikidataImages.collections ) > 0 then
-- is a collection requested and availabe?
if ( collectionCategory ~= '' ) and ( wikidataImages.collections[collectionCategory] ~= nil ) then
filePositionMap = wikidataImages.collections[collectionCategory]
-- if not requested, trying to find one of the standard collections, given in Modul:GetImage/Properties
else
-- running reversly trough the standard requests
for i = 1, #gip.P242.collections do
if wikidataImages.collections[gip.P242.collections[#gip.P242.collections + 1 - i]] ~= nil then
filePositionMap = wikidataImages.collections[gip.P242.collections[#gip.P242.collections + 1 - i]]
end
end
-- nothing found? > take the first one
if filePositionMap == '' then
filePositionMap = wikidataImages.images[1].image
end
end
else
-- if not, just take the first position map
filePositionMap = wikidataImages.images[1].image
end
finalMap = 'File:' .. filePositionMap
else
finalMap = localPositionMap
end
-- Imagemap wanted?
if imageMap ~= '' then
local displayImagemapText = ''
local imagemapText = mw.loadData ( 'Modul:Imagemap/' .. imageMap )
for k,v in pairs ( imagemapText ) do
displayImagemapText = displayImagemapText .. v .. '\n'
end
finalMap = qbFrame:extensionTag( 'imagemap', finalMap .. '|' .. widthPositionMap .. '\n' .. displayImagemapText )
else
finalMap = '[[' .. finalMap .. '|' .. widthPositionMap .. '|class=notpageimage|Lagekarte]]'
end
-- creating the table row with the image
local tr = mw.html.create ( 'tr' )
tr:addClass('voy-qb-item ' .. trClass )
:tag('td')
:attr('colspan','2')
:attr('data-wikidata-id',wikidataID)
:tag('div')
:addClass('voy-qb-item-image')
:wikitext(finalMap)
-- returning the row
return tostring ( tr ) .. wikidataCategories
end
-- returns any value from Modul:GetImage/Properties
-- useful to show current settings on documentation sites
GetImage.getPropertySetting = function ( key1, key2, key3 )
-- returning the row
if coalesce ( key3, '' ) ~= '' then
return gip[key1][key2][key3]
elseif coalesce ( key2, '' ) ~= '' then
return gip[key1][key2]
elseif coalesce ( key1, '' ) ~= '' then
return gip[key1]
else return ''
end
end
-- Providing template access
local p = {}
function p.getImage( frame )
return GetImage.getImage( frame.args[ 1 ], frame.args[ 2 ] ) or ""
end
function p.getSchematic( frame )
return GetImage.getSchematic( frame.args[ 1 ] or frame:getParent().args[ 1 ], frame, frame:getParent() ) or ""
end
function p.getMainImageQuickbar( frame )
return GetImage.getMainImageQuickbar ( frame.args[ 1 ], frame.args[ 2 ] ) or ""
end
function p.getEmblemsQuickbar( frame )
return GetImage.getEmblemsQuickbar ( frame.args[ 1 ], frame.args[ 2 ] ) or ""
end
function p.getPositionMapQuickbar( frame )
return GetImage.getPositionMapQuickbar ( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ], frame.args[ 4 ], frame.args[ 5 ], frame ) or ""
end
function p.getPropertySetting( frame )
return GetImage.getPropertySetting ( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ] ) or ""
end
-- for usage in other modules
-- using it the following way:
--
-- local getImage = require( 'Module:GetImage' )
-- foo = getImage.GetImage().xxx( id, lang )
function p.GetImage()
return GetImage
end
return p