Zum Inhalt springen

Modul:GetImage

Aus Wikivoyage
Dokumentation für das Modul GetImage[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

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.

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.
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.
getPositionMapQuickbar
Deutschland
Lagekarte
  • 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.

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]:
  1. Grau-grüne orthografische Projektionskarten
  2. Karten im Globus-Format - Optisch gleichformatige Alternative zur vorgenannten Sammlung
  3. grau-grüne Positionskarten
  4. Rote und pinke Positionskarten
  5. 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

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 Klasse qb. Über diese kann man jede Infobox beeinflussen.
  • voy-qb-ort - Alle Orts-Quickbars, die direkt oder indirekt über diese Vorlage eingebunden sind, besitzen diese Klasse
  • voy-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 Klasse voy-qb-de hinterlegt. Lässt sich keine TLD ermitteln, heißt die Klasse qb-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 Spalte
  • voy-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:

Verwendung in Vorlagen

Das Modul wird von folgenden Vorlagen verwendet:

Submodule

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:

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

Hinweise
--[=[ getImage 2024-09-03
*
* 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 categories2 = ''
   local orientation = ''
   local figcaption = ''
   imageList, wikidataID, categories = getImagesAsTable ( WikidataID, 'P5555' )

   -- in case of errors an empty table is returned. Try P15
   if #imageList.images == 0 then
      imageList, wikidataID, categories2 = getImagesAsTable ( WikidataID, 'P15' )
   end

   -- in case of errors an empty table is returned. Checking this first.
   if #imageList.images == 0 then
      return categories .. categories2
   end

   -- getting the filename, if at least one is returned
   if #imageList.images > 0 then
      imageString = imageString .. imageList.images[1].image .. '|thumb|'
   else
      return categories
   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