Modul:Quickbar2

Aus Wikivoyage
Zur Navigation springen Zur Suche springen
Template-info.png Dokumentation für das Modul Quickbar2[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Dieses Modul enthält Funktionen für Vorlagen für Quickbars. Die Funktionen holen sich die Argumente aus der Vorlage und müssen beim Modulaufruf nicht nochmals übergeben werden. Sie können aber, dann werden genutzt, wenn sie bei Verwendung der Vorlage vergessen wurden. Komplett vergessene Parameter werden mit Standardwerten belegt, unbekannte Parameter werden als Fehlermeldung zusätzlich mit im Artikel ausgegeben.

Allgemein gültige Parameter

Die allgemein gültigen Parameter kann man sowohl innerhalb der Vorlage in der Parserfunktion invoke benutzen, als auch innerhalb des Artikels der Vorlage selbst übergeben. Der Paramter, der bei der Einbindung der Vorlage benutzt wird, hat dabei Vorrang. So kann man bestimmte Funktionalitäten für den generellen Gebrauch der Vorlage aktivieren (über invoke) und im Einzelfall im Artikel abschalten (bei der Verwendung der Vorlage).

  • |ignore_errors= auf 1 oder true gesetzt, werden die Ausgabe der Fehlermeldungen der Funktionen unterdrückt. Standardmäßig werden die Fehler angezeigt.
  • |no_category= auf 1 oder true gesetzt, werden die Artikel bei Fehlermeldungen des Moduls einer Fehlerkategorie zugeordnet. Standardmäßig werden Fehlermeldungen in die Kategorie Fehlerberichte des Moduls Quickbar2 eingefügt. Wurden unbekannte Parameter verwendet landen die Artikel zusätzlich in der Kategorie Vorlagen mit unbekannten Parametern.
  • |error_category= gibt den Namen einer Fehlerkategorie an, in der der Artikel bei auftretenden Fehlern einsortiert wird. Standardmäßig ist das Fehlerberichte des Moduls Quickbar2.


Submodule

  • Modul:Quickbar2/Params – enthält ein mehrdimensionales Array mit allen erlaubten Parametern für jede Funktion/Vorlage und ihre Standardbelegung.

Verwendete Module

  • Modul:Check2 – enthält Routinen zur Parameterprüfung und Fehlergenerierung. Für die Parameterprüfung benötigt das aktuelle Modul Informationen über die erlaubten Parameter einer Funktionen. Diese wird im Regelfall über das Submodul Modul:Quickbar2/Params bereitgestellt.
  • Modul:Wikidata2 – enthält eine Reihe von Routinen zur Einbindung von Daten von Wikidata
  • Modul:Location map – liefert Routinen zur Einbindung von Positionskarten in Infoboxen.

Einbindung in anderen Modulen

Dieses Modul wird in folgenden Modulen eingebunden und weiter verwendet. Änderungen an diesem Modul wirken sich daher möglicherweise auf andere Features aus sollten daher mit Bedacht vorgenommen werden. Sprich dich daher bitte mit den Modul- und Vorlagenprogrammierern ab.

Verwendung in anderen Vorlagen

Dieses Modul wird in folgenden Vorlagen verwendet:

Benötigte weitere Module

Dieses Modul benötigt folgende weitere Module: Check2 • Wikidata2 • Location map
Hinweise
local check    = require('Modul:Check2')
local wd       = require('Modul:Wikidata2')
local locMap   = require('Modul:Location map')

local cfgParams   = mw.loadData('Modul:Quickbar2/Params')

-- Auswertung und Prüfung von übergebenen Parametern
local function getParameter ( Frame, Params, Parameter )
   local argsParent = Frame:getParent().args
   local argsFrame = Frame.args
   for key,value in pairs ( argsParent ) do
      argsParent[string.lower(key)] = value
   end
   for key,value in pairs ( argsFrame ) do
      argsFrame[string.lower(key)] = value
   end
   return argsParent[Parameter] or argsFrame[Parameter] or Params[Parameter]
end

-- generiert Attibute für die Tabelle der Quickbar
local function theadAttr ( class, style )
   local tableAttr = 'cellspacing="0" class="' .. class ..'"'
   if (style ~= nil) and (style ~= '') then tableAttr = tableAttr .. ' style="' .. style .. '"' end
   return tableAttr
end

local quickbar = {}

-- erzeugt einen Überschrifteneintrag in der Quickbar
function quickbar.theader ( colSpan, text, rowClass )
   local class = rowClass or ''
   local tr = mw.html.create ( 'tr' )
   tr:addClass( class )
   tr:tag('td')
     :attr('colspan', colSpan )
     :addClass('qbHeader' )
     :wikitext(text)
   return tostring ( tr )
end

function quickbar.trItemTH ( className, text1, text2, text3, text4 )
   local tr = mw.html.create ( 'tr' )
   tr:addClass('qbItem ' .. className )
      :tag('th')
      :addClass('qbItem-key')
      :wikitext(text1)
   if ( text2 ~= nil ) then tr:tag('td'):addClass('qbItem-value1'):wikitext(text2) end
   if ( text3 ~= nil and text3 ~= '' ) then tr:tag('td'):addClass('qbItem-value2'):wikitext(text3) end
   if ( text4 ~= nil and text4 ~= '' ) then tr:tag('td'):addClass('qbItem-value3'):wikitext(text4) end
   return tostring ( tr )
end

function quickbar.trItemTD ( className, text1, text2, text3, text4 )
   local tr = mw.html.create ( 'tr' )
   tr:addClass('qbItem ' .. className )
      :tag('td')
      :addClass('qbItem-key')
      :wikitext(text1)
   if ( text2 ~= nil ) then tr:tag('td'):addClass('qbItem-value1'):wikitext(text2) end
   if ( text3 ~= nil ) then tr:tag('td'):addClass('qbItem-value2'):wikitext(text3) end
   if ( text4 ~= nil ) then tr:tag('td'):addClass('qbItem-value3'):wikitext(text4) end
   return tostring ( tr )
end

function quickbar.trSingleTD ( className, text, colSpan, attributes )
   if ( colSpan == nil ) then colSpan = '2' end
   local attrTable = { ['colspan'] = colSpan };
   if ( attributes ~= nil ) then
      for k,v in pairs(attributes) do attrTable[k] = v end
   end
   local tr = mw.html.create ( 'tr' )
   tr:addClass('qbItem ' .. className )
      :tag('td')
      :attr(attrTable)
      :addClass('qbItem-value')
      :wikitext(text)
   return tostring ( tr )
end

function quickbar.trImage ( className, imageFile, colSpan )
   if ( not colSpan ) then colSpan = 2 end
   local tr = mw.html.create ( 'tr' )
   tr:addClass('qbItem ' .. className )
     :tag('td')
     :attr('colspan', colSpan)
     :addClass('qbImageCell')
        :tag('div')
        :addClass('qbImage')
        :wikitext(imageFile)
   return tostring ( tr )
end

function quickbar.trTwoImages ( className, className1, className2, imageFile1, imageFile2, colSpan )
   if ( not colSpan ) then colSpan = 2 end
   
   local td1 = mw.html.create ( 'td' )
   td1:addClass( className1 )
        :tag('div')
        :addClass('qbImage')
        :wikitext(imageFile1)
        
   local td2 = mw.html.create ( 'td' )
   td2:addClass( className2 )
        :tag('div')
        :addClass('qbImage')
        :wikitext(imageFile2)
        
   local tr = mw.html.create ( 'tr' )
   tr:addClass('qbItem ' .. className )
     :tag('td')
     :attr('colspan', colSpan)
     :addClass('qbImageCell')
        :tag('table')
           :tag('tr')
              :node(td1)
              :node(td2)
   return tostring ( tr )
end

function quickbar.locmap ( colSpan, map, rowClass )
   local class = rowClass or ''
   local tr = mw.html.create ( 'tr' )
   tr:addClass('qbLocMap '..class)
     :tag('td')
     :attr('colspan', colSpan)
     :wikitext(locMap.locationMap(map))
   return tostring ( tr )
end

function quickbar.hr ( colSpan, rowClass )
   local class = rowClass or ''
   local hr = mw.html.create ( 'tr' )
   hr:addClass('qb-line '..class)
     :tag('td')
     :attr('colspan', colSpan)
       :tag('hr')
   return tostring ( hr )
end

-- Funktionen für Verwendung in Vorlagen

function quickbar.qb_table ( frame )

   local args = frame:getParent().args
   local errorStr = ''
   
   local topBorder = getParameter ( frame, cfgParams["qb_table"], 'topBorder' )
   local pos = getParameter ( frame, cfgParams["qb_table"], 'pos' )
   local qbTableClass = getParameter ( frame, cfgParams["qb_table"], 'tableclass' )
   local posPossible = { rechts = '', links = '', right = '', left = '', normal = '' }
   if posPossible[pos] == nil then errorStr = check._error ('Falscher Wert für Parameter <em>pos</em>: <em>' .. pos .. '</em> im Tabellenkopf', 'Quickbar' ) end
   
   local styles = args[1]
   if (styles == nil) or (styles == '') then styles = frame.args[1] end
--   if (styles == nil) or (styles == '') then styles = '' end -- 300px in Stilvorlage
   
   local classes = 'qb ' .. qbTableClass
   if pos == 'right' then classes = classes .. ' qbRight' end
   if pos == 'rechts' then classes = classes .. ' qbRight' end
--   if pos == 'normal' then classes = classes .. ' qbRight' end
   if pos == 'left' then classes = classes .. ' qbLeft' end
   if pos == 'links' then classes = classes .. ' qbLeft' end
     
   if topBorder == 'yes' then classes = classes .. ' qbTopBorder' end
   
   return errorStr .. check._testParams ( args, cfgParams["qb_table"], 'Quickbar2' ) .. theadAttr ( classes, styles )
end

function quickbar.qb_header ( frame )
   local qbColspan = getParameter ( frame, cfgParams["qb_header"], 'colspan' )
   local qbRowClass = getParameter ( frame, cfgParams["qb_header"], 'rowclass' )
   local qbText = frame.args[1] or frame:getParent().args[1] or getParameter ( frame, cfgParams["qb_header"], 'text' )
   return check._testParams ( frame:getParent().args, cfgParams["qb_header"], 'Quickbar2' ) .. quickbar.theader ( qbColspan, qbText, qbRowClass )
end

function quickbar.qb_item ( frame )
   local qbHeading = getParameter ( frame, cfgParams["qb_item"], 'heading' )
   local qbValue = getParameter ( frame, cfgParams["qb_item"], 'value' )
   local qbValue2 = getParameter ( frame, cfgParams["qb_item"], 'value2' )
   local qbValue3 = getParameter ( frame, cfgParams["qb_item"], 'value3' )
   local qbRowClass = getParameter ( frame, cfgParams["qb_item"], 'rowclass' )
   return check._testParams ( frame:getParent().args, cfgParams["qb_item"], 'Quickbar2' ) .. quickbar.trItemTH ( qbRowClass, qbHeading, qbValue, qbValue2, qbValue3 )
end

function quickbar.qb_image( frame )
   local display = ''
   local errorStr = ''
   local qbHeading = getParameter ( frame, cfgParams["qb_image"], 'heading' )
   local qbImage = getParameter ( frame, cfgParams["qb_image"], 'image' )
   local qbColspan = getParameter ( frame, cfgParams["qb_image"], 'colspan' )
   local qbWikidataProperty = getParameter ( frame, cfgParams["qb_image"], 'wikidataproperty' )
   local qbWikidataFormat = getParameter ( frame, cfgParams["qb_image"], 'wikidataformat' )
   local qbRowClass = getParameter ( frame, cfgParams["qb_image"], 'rowclass' )
   if ( qbImage == '' ) then 
      qbImage = wd.getProperty (
         wd.getBestStatement  (
            wd.EntityId(),
            qbWikidataProperty
            ).statement,
         qbWikidataFormat
         )
   end
   if ( qbHeading ~= '' ) then display = display .. quickbar.theader ( qbColspan, qbHeading, qbRowClass ) end
   display = display .. errorStr .. check._testParams ( frame:getParent().args, cfgParams["qb_image"], 'Quickbar2' ) .. quickbar.trImage ( qbRowClass, qbImage, qbColspan )
   return display
end

function quickbar.qb_line ( frame )
   local qbColspan = getParameter ( frame, cfgParams["qb_line"], 'colspan' )
   local qbRowClass = getParameter ( frame, cfgParams["qb_line"], 'rowclass' )
   local errorStr = ''
   if mw.ustring.match ( qbColspan, '^%d*$' ) == nil then 
      errorStr = check._error ('Falscher Wert für Parameter <em>colspan</em>: <em>' 
         .. qbColspan 
         .. '</em> bei einer Zwischenlinie. Bitte eine ganze Zahl eingeben', 'Quickbar' ) 
      qbColspan = cfgParams['qb_line']['colspan']
   end
   return errorStr .. check._testParams ( frame:getParent().args, cfgParams["qb_line"], 'Quickbar2' ) .. quickbar.hr ( qbColspan, qbRowClass )
end

function quickbar.createEntry ( localItem, wdItem, wdID, wdProperty, cssClass, itemName, noWDCat, diffCat, equalCat )
   local display = ''
   local displayItem
   if ( localItem ~= '' ) then 
      display = display .. quickbar.trItemTH ( cssClass, itemName, localItem )
      if ( localItem ~= wdItem and wdItem ~= '' and diffCat ~= nil ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'andere(r) ' .. itemName .. ' auf Wikidata [[File:View-so edit simple.svg|15px|link=' .. wd.getWikidataLink(wdID) .. '|class=noviewer|' .. itemName .. ' in Wikidata aktualisieren]] <div data-qb-item="'.. cssClass .. '" class="qb-edit-delete">[[File:Symbol delete vote.svg|15px|class=noviewer|Eintrag aus der Quickbar entfernen und Wikidata benutzen]]</div>' )
         display = display .. '[[Kategorie:' .. diffCat .. ']]'
      end
      if ( localItem == wdItem and localItem ~= '' ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'identische Angabe für ' .. itemName .. ' auf Wikidata. <div data-qb-item="'.. cssClass .. '" class="qb-edit-delete">[[File:Symbol delete vote.svg|15px|class=noviewer|Eintrag aus der Quickbar entfernen und Wikidata benutzen]]</div>' )
         if ( equalCat ~= nil ) then
            display = display .. '[[Kategorie:' .. equalCat .. ']]'
         end
      end
      displayItem = true
   elseif ( wdItem ~= '' ) then
   	  display = display .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft ' .. wdProperty .. ' benutzen]]'
      display = display .. quickbar.trItemTH ( cssClass, itemName, '<span class="wikidata-content">' .. wdItem .. '</span>' )
      displayItem = true
   else
      display = display .. quickbar.trItemTH ( 'qbEmpty ' ..  cssClass, itemName, '<em>unbekannt</em>' )
   end
   if ( wdItem == '' ) then
      if ( wdID ~= '' ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment', 'kein(e) ' .. itemName .. ' auf Wikidata: [[File:View-so edit simple.svg|15px|link=' .. wd.getWikidataLink(wdID) .. '|class=noviewer|' .. itemName .. ' nachtragen]]' )
         if ( noWDCat ~= nil ) then
            display = display .. '[[Kategorie:' .. noWDCat .. ']]'
         end
      else
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment', 'kein Objekt auf Wikidata: ([https://www.wikidata.org/w/index.php?search=&title=Special%3ASearch&go=Seite Suchen und Anlegen])' )
      end
   end
   return display
end

function quickbar.createEntryImage ( localItem, wdItem, wdID, wdProperty, cssClass, itemName, noWDCat, noItemCat )
   local display = ''
   local errorStr = ''
   if ( localItem ~= '' ) then 
      display = display .. quickbar.trImage ( 'qb-image ' .. cssClass, localItem )
   elseif ( wdItem ~= '' ) then
   	  display = display .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft ' .. wdProperty .. ' benutzen]]'
      local fileCheck = check._testFile ( wdItem, 'Quickbar2' )
      if ( fileCheck == '' ) then 
         display = display .. quickbar.trImage ( 'qb-image ' .. cssClass, mw.ustring.match ( wdItem, '%[%[.-%]%]' ) )
      else
          errorStr = errorStr .. fileCheck
      end   
   else
      errorStr = errorStr .. '[[Kategorie:' .. noItemCat .. ']]'
   end
   if ( wdItem == '' ) then
      if ( wdID ~= '' ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'kein(e) ' .. itemName .. ' auf Wikidata: [[File:View-so edit simple.svg|15px|link=' .. wd.getWikidataLink(wdID) .. '|class=noviewer|' .. itemName .. ' nachtragen]]' )
         if ( noWDCat ~= nil ) then
            errorStr = errorStr .. '[[Kategorie:' .. noWDCat .. ']]'
         end
      else
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'kein Objekt auf Wikidata: ([https://www.wikidata.org/w/index.php?search=&title=Special%3ASearch&go=Seite Suchen und Anlegen])' )
      end
   end
   return errorStr .. display
end



function quickbar.createEntryTwoImages ( 
			localItem1, wdItem1, wdID1, wdProperty1, cssClass1, itemName1, noWDCat1, noItemCat1, 
			localItem2, wdItem2, wdID2, wdProperty2, cssClass2, itemName2, noWDCat2, noItemCat2,
			cssClass
		)
   local display = ''
   local display1 = ''
   local display2 = ''
   local errorStr = ''
   local fileCheck1 = ''
   local fileCheck2 = ''
   local rowClass = cssClass or ''
   
   if ( localItem1 ~= '' ) then 
      display1 = localItem1
   elseif ( wdItem1 ~= '' ) then
   	  display = display .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft ' .. wdProperty1 .. ' benutzen]]'
      fileCheck1 = check._testFile ( wdItem1, 'Quickbar2' )
      if ( fileCheck1 == '' ) then 
         display1 = mw.ustring.match ( wdItem1, '%[%[.-%]%]' )
      else
          errorStr = errorStr .. fileCheck1
      end   
   else
      errorStr = errorStr .. '[[Kategorie:' .. noItemCat1 .. ']]'
   end
   
   if ( localItem2 ~= '' ) then 
      display2 = localItem2
   elseif ( wdItem2 ~= '' ) then
   	  display = display .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft ' .. wdProperty2 .. ' benutzen]]'
      fileCheck2 = check._testFile ( wdItem2, 'Quickbar2' )
      if ( fileCheck2 == '' ) then 
         display2 = mw.ustring.match ( wdItem2, '%[%[.-%]%]' )
      else
          errorStr = errorStr .. fileCheck2
      end   
   else
      errorStr = errorStr .. '[[Kategorie:' .. noItemCat2 .. ']]'
   end

   if ( display1 ~= '' and display2 ~= '' ) then
      display = display .. quickbar.trTwoImages ( 'qb-image ' .. rowClass, cssClass1, cssClass2, display1, display2, 2 )
   elseif ( display1 ~= '' and display2 == '' ) then
      display = display .. quickbar.trImage ( 'qb-image ' .. cssClass1, display1 )
   elseif ( display1 == '' and display2 ~= '' ) then
      display = display .. quickbar.trImage ( 'qb-image ' .. cssClass2, display2 )
   else
   	
   end
   
   if ( wdItem1 == '' ) then
      if ( wdID1 ~= '' ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'kein(e) ' .. itemName1 .. ' auf Wikidata: [[File:View-so edit simple.svg|15px|link=wikidata:' .. wdID1 .. '|class=noviewer|' .. itemName1 .. ' nachtragen]]' )
         if ( noWDCat1 ~= nil ) then
            errorStr = errorStr .. '[[Kategorie:' .. noWDCat1 .. ']]'
         end
      else
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'kein Objekt auf Wikidata: ([https://www.wikidata.org/w/index.php?search=&title=Special%3ASearch&go=Seite Suchen und Anlegen])' )
      end
   end
   
   if ( wdItem2 == '' ) then
      if ( wdID2 ~= '' ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'kein(e) ' .. itemName2 .. ' auf Wikidata: [[File:View-so edit simple.svg|15px|link=wikidata:' .. wdID2 .. '|class=noviewer|' .. itemName2 .. ' nachtragen]]' )
         if ( noWDCat2 ~= nil ) then
            errorStr = errorStr .. '[[Kategorie:' .. noWDCat2 .. ']]'
         end
      else
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel1', 'kein Objekt auf Wikidata: ([https://www.wikidata.org/w/index.php?search=&title=Special%3ASearch&go=Seite Suchen und Anlegen])' )
      end
   end
   
   return errorStr .. display
end



function quickbar.createEntryQuantity ( localItem, wdItem, wdID, wdProperty, wdFormat, cssClass, itemName, noWDCat, diffCat, equalCat )
   local display = ''
   local errorStr = ''
   local property = ''
   local displayItem
   if ( localItem ~= '' ) then 
   	  if ( cssClass == 'qb-altitude' ) then
         display = display .. quickbar.trItemTH ( cssClass, itemName, localItem:gsub ( ' ', '' ):gsub ( 'm', '' ) .. '&nbsp;m' )
      else
      	display = display .. quickbar.trItemTH ( cssClass, itemName, localItem )
      end
      localItem = localItem:gsub ( '%.', '' ):gsub ( ',', '' ):gsub ( '&nbsp;', '' ):gsub ( 'ca', '' ):gsub ( ' ', '' ):gsub ( '<small>.*</small>', '' ):gsub ( '%(.*%)', '' ):gsub ( 'km²', '' ):gsub ( 'km2', '' ):gsub ( 'km<sup>2</sup>', '' ):gsub ( 'm', '' )
      if ( localItem ~= wdItem and wdItem ~= '' and diffCat ~= nil ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel2', 'anderer Wert für ' .. itemName .. ' auf Wikidata: ' .. wdItem .. ' [[File:View-so edit simple.svg|15px|link=' .. wd.getWikidataLink(wdID, wdProperty) .. '|class=noviewer|' .. itemName .. ' in Wikidata aktualisieren]] <span data-qb-item="'.. cssClass .. '" class="qb-edit-delete">[[File:Symbol delete vote.svg|15px|class=noviewer|Eintrag aus der Quickbar entfernen und Wikidata benutzen]]</span>', '2', { ['title'] = 'Wikivoyage: ' .. localItem .. '- Wikidata: ' .. wdItem } )
         display = display .. '[[Kategorie:' .. diffCat .. ']]'
      end
      if ( localItem == wdItem and localItem ~= '' ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel2', 'identische Angabe für ' .. itemName .. ' auf Wikidata. <div data-qb-item="'.. cssClass .. '" class="qb-edit-delete">[[File:Symbol delete vote.svg|15px|class=noviewer|Eintrag aus der Quickbar entfernen und Wikidata benutzen]]</div>' )
         if ( equalCat ~= nil ) then
            display = display .. '[[Kategorie:' .. equalCat .. ']]'
         end
      end
      displayItem = true
   elseif ( wdItem ~= '' ) then
	  display = display .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft ' .. wdProperty .. ' benutzen]]'
   	  property = wd.getProperty ( wd.getBestStatement( wdID, wdProperty ).statement, wdFormat )
   	  property = property:gsub('<div class="qbItemSmall">%(%)</div>','')
      display = display .. quickbar.trItemTH ( cssClass, itemName, '<div class="wikidata-content">' .. property .. '</div>' )
      displayItem = true
   else
      display = display .. quickbar.trItemTH ( 'qbEmpty ' .. cssClass , itemName , '<em>unbekannt</em>' )
   end
   if ( wdItem == '' ) then
      if ( wdID ~= '' ) then
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel2', 'kein Wert für ' .. itemName .. ' auf Wikidata: [[File:View-so edit simple.svg|15px|link=' .. wd.getWikidataLink(wdID, wdProperty) .. '|class=noviewer|' .. itemName .. ' nachtragen]]' )
         if ( noWDCat ~= nil ) then
            errorStr = errorStr .. '[[Kategorie:' .. noWDCat .. ']]'
         end
      else
         display = display .. quickbar.trSingleTD ( 'qb-wd-comment carousel2', 'kein Objekt auf Wikidata: ([https://www.wikidata.org/w/index.php?search=&title=Special%3ASearch&go=Seite Suchen und Anlegen])' )
      end
   end
   return errorStr .. display
end

return quickbar