Dokumentation für das Modul Quickbar Land[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Dieses Modul erzeugt eine Quickbar für Ortsartikel Es gibt nur eine Funktion, die Erzeugung einer Infobox (Quickbar) für Länder. Eine detaillierte Dokumentation findest du auf der Vorlage Quickbar Land. Daher sind die Parameter hier nicht noch mal aufgelistet.

Das Modul erzeugt indirekt auch eine Reihe von Wartungskategorien durch die verwendeten Wikidata-Module. Diese kannst du auf den Modulseiten der eingebundenen Getxxx-Module einsehen.

Verwandte Module

Verwendung

  • Quickbar Land – Die Vorlage dient zur Ausgabe von Kurzdaten für Länder. Die Anzeige erfolgt als umflossene Box am rechten Rand, die Box ist 300px breit. Alle angezeigten Infos sind optional und zum großen Teil in der Lage, ihre Werte auch von Wikidata zu beziehen.

Benötigte weitere Module

Dieses Modul benötigt folgende weitere Module: CountryData/Geography • GetNumber • GetImage • GetItem • Währung/Länder • Yesno
Hinweise
--[=[ Quickbar Land 2023-11-10 ]=]  local yesno    = require( 'Modul:Yesno' ) local pnumber  = require( 'Module:GetNumber' ) local images   = require( 'Module:GetImage' ) local items    = require( 'Module:GetItem' )  local cfgCurrencies = mw.loadData('Modul:Währung/Länder') local cfgCountries  = mw.loadData('Modul:CountryData/Geography')  local lang = mw.language.new( 'de' )   -- 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   -- round function, which is not available in Lua local _round = function  ( value, precision )    local rescale = math.pow(10, precision or 0);    return math.floor(value * rescale + 0.5) / rescale; end   -- returns a manually created quickbar row local function createTr ( text, label, trClass )     -- check for valid text    -- if there is no text, then display nothing    if text == '' then         return ''     else        -- displaying the given info       local tr = mw.html.create ( 'tr' )       tr:addClass('voy-qb-item ' .. trClass )          :tag('th')          :addClass('voy-qb-item-key')          :wikitext( label )       tr:tag('td')          :addClass( 'voy-qb-item-value1' )          :wikitext( text )       return tostring ( tr )    end  end   local function checkMapObject ( id )    local region = require ( 'Modul:Location map data ' .. id )    if ( region ~= nil ) and ( region.data ~= nil ) then       region.data['id'] = id       return region    else       return nil    end end   local qbLand = {}  function qbLand.qb_land ( frame )       -- copying and lowering the given parameters    local templateArgs = {}    for key,value in pairs ( frame.args ) do       templateArgs[string.lower(key)] = value    end    for key,value in pairs ( frame:getParent().args ) do       templateArgs[string.lower(key)] = value    end     -- variables for the whole quickbar content and the categories    local display = ''    local categories = ''        -- contains some site.infos    -- needed as fallback for the  parameter "Namen" and the location map    local page = {}    page = mw.title.getCurrentTitle()        -- getting or determining (if needed) the wikidata-ID    if templateArgs.id == '' then templateArgs.id = nil end    local qbID = nilIf ( nilIf ( templateArgs.id, 'self' ), '' ) or mw.wikibase.getEntityIdForCurrentPage() or ''     -- getting object name    -- uses WD sitelink and the page name as fallback    local destinationName    if qbID ~= '' then        destinationName = coalesce ( mw.wikibase.getSitelink( qbID, 'dewikivoyage' ), page.text, 'Ort')    else       destinationName = coalesce ( page.text, 'Ort')    end     -- determining the country     -- (not urgently needed, but if someone wants to develop country- specific quickbars)    -- getting from Wikidata, if not provided    -- if you want to save processing time, you should provide it    -- e.g. in country specific infobox tables    local qbIso3166 = templateArgs["iso-3166"] or ''    local qbIso3166Class = ''     if qbIso3166 == '' then       if qbID ~= '' then          local wdCountry = mw.wikibase.getBestStatements( qbID, 'P17' )          local wdIso3166 = {}          if #wdCountry > 0 then             -- there where empty values             if wdCountry[1].mainsnak.datavalue ~= nil then                wdIso3166 = mw.wikibase.getBestStatements( wdCountry[1].mainsnak.datavalue.value["id"], 'P297' )                if #wdIso3166 > 0 then                   if wdIso3166[1].mainsnak.snaktype == 'value' then                      qbIso3166 = string.lower(wdIso3166[1].mainsnak.datavalue.value)                      qbIso3166Class =  ' voy-qb-' .. qbIso3166                   else                   	 qbIso3166Class = ''                   end                else                   qbIso3166Class = ''                end             else                 qbIso3166Class = ''             end          end       end    else       qbIso3166Class = ' voy-qb-' .. qbIso3166    end     -- DEBUG: showing the parameters    -- it was just for development    -- display = display .. '<br />Parameter:<br />' ..  mw.dumpObject(templateArgs)     -- starting the quickbar table    display = display .. '<table cellspacing="0" class="voy-qb voy-qb-right voy-qb-country' .. qbIso3166Class .. '">'     -- heading    -- is mandatory, even if you do not provide it, its shown (with the sitename)    -- initialising with given heading    local qbNamen = coalesce ( templateArgs["namen"], '' )        -- if no heading is provided, get the sitename    if qbNamen == '' then       qbNamen = destinationName    end        -- creating the row with the heading    local trHeader = mw.html.create ( 'tr' )    trHeader:addClass( 'voy-qb-header' )    trHeader:tag('td')       :attr('colspan', 2 )       :wikitext(qbNamen)     -- adding it to the quickbar    display = display .. tostring ( trHeader )     -- the position map    -- taken from Wikidata, if not provided    display = display .. images.GetImage().getPositionMapQuickbar ( qbID, nil, nil, coalesce ( templateArgs["lage"], '' ) )        -- creating the row with the flag heading    trHeader = mw.html.create ( 'tr' )    trHeader:addClass( 'voy-qb-header voy-qb-header-flag' )    trHeader:tag('td')       :attr('colspan', 2 )       :wikitext('Flagge')     -- adding it to the quickbar    display = display .. tostring ( trHeader )     -- flag    -- always taken from Wikidata    display = display .. images.GetImage().getEmblemsQuickbar ( qbID, 'F' )        -- creating the row with the info heading    trHeader = mw.html.create ( 'tr' )    trHeader:addClass( 'voy-qb-header voy-qb-header-info' )    trHeader:tag('td')       :attr('colspan', 2 )       :wikitext('Kurzdaten')     -- adding it to the quickbar    display = display .. tostring ( trHeader )     -- capital    display = display .. items.GetItem().getItemsQuickbar ( qbID, 'P36', coalesce ( templateArgs["hauptstadt"], '') )     -- basic form of government    display = display .. items.GetItem().getItemsQuickbar ( qbID, 'P122', coalesce ( templateArgs["staatsform"], '') )     -- currency    if cfgCurrencies[qbID] ~= nil then        -- getting exchange rate       local exchangeRate = 0       local exchangeDate = ''       local exchangeSource = ''       local exchangeTable = {}        -- trying Commons: Data:ECB euro foreign exchange reference rates.tab       exchangeTable = mw.ext.data.get( 'ECB euro foreign exchange reference rates.tab' )        for i, entry in pairs ( exchangeTable.data ) do          if entry[1] == cfgCurrencies[qbID][4] then             exchangeRate = _round ( tonumber ( entry[2] ), 3 )             exchangeDate = entry[3]             exchangeSource = exchangeTable.sources             break          end       end        -- trying Commons: Data:Xe.com exchange rates.tab       if exchangeRate == 0 then           exchangeTable = mw.ext.data.get( 'Xe.com exchange rates.tab' )           for i, entry in pairs ( exchangeTable.data ) do             if entry[1] == cfgCurrencies[qbID][4] then                exchangeRate = _round ( tonumber ( entry[3] ), 3 )                exchangeDate = entry[6]                exchangeSource = exchangeTable.sources                break             end          end        end        if exchangeRate > 0 and cfgCurrencies[qbID][4] ~= 'EUR' then           -- formatting exchange rate          local exchangeRateText = '<br />'           -- first row (EUR > local)          exchangeRateText = exchangeRateText .. '1&#x202F;EUR&#x202F;=&#x202F;' .. lang:formatNum ( exchangeRate ) ..  '&#x202F;' .. cfgCurrencies[qbID][4]           -- second row (local > EUR)          exchangeRateText = exchangeRateText .. '<br />'           if exchangeRate > 10000 then             exchangeRateText = exchangeRateText .. '100.000&#x202F;' .. cfgCurrencies[qbID][4] .. '&#x202F;=&#x202F;' .. lang:formatNum ( _round ( 100000 / exchangeRate, 3 ) ) ..  '&#x202F;EUR'          elseif exchangeRate > 1000 then             exchangeRateText = exchangeRateText .. '10.000&#x202F;' .. cfgCurrencies[qbID][4] .. '&#x202F;=&#x202F;' .. lang:formatNum ( _round ( 10000 / exchangeRate, 3 ) ) ..  '&#x202F;EUR'          elseif exchangeRate > 100 then             exchangeRateText = exchangeRateText .. '1.000&#x202F;' .. cfgCurrencies[qbID][4] .. '&#x202F;=&#x202F;' .. lang:formatNum ( _round ( 1000 / exchangeRate, 3 ) ) ..  '&#x202F;EUR'          elseif exchangeRate > 10 then             exchangeRateText = exchangeRateText .. '100&#x202F;' .. cfgCurrencies[qbID][4] .. '&#x202F;=&#x202F;' .. lang:formatNum ( _round ( 100 / exchangeRate, 3 ) ) ..  '&#x202F;EUR'          elseif exchangeRate > 1 then             exchangeRateText = exchangeRateText .. '10&#x202F;' .. cfgCurrencies[qbID][4] .. '&#x202F;=&#x202F;' .. lang:formatNum ( _round ( 10 / exchangeRate, 3 ) ) ..  '&#x202F;EUR'          else             exchangeRateText = exchangeRateText .. '1&#x202F;' .. cfgCurrencies[qbID][4] .. '&#x202F;=&#x202F;' .. lang:formatNum ( _round ( 1 / exchangeRate, 3 ) ) ..  '&#x202F;EUR'          end           -- adding the ref-Tag          exchangeSource = frame:extensionTag{ name = 'ref', content = '[' .. exchangeSource .. ']' }           display = display .. createTr ( cfgCurrencies[qbID][3] .. exchangeRateText, 'Währung<br />Kurs&#x202F;<span class="voy-small">(' .. lang:formatDate ( 'd.m.Y', exchangeDate ) .. ')' .. exchangeSource .. '</span>', 'voy-commons-content voy-qb-item-currency' )        else           display = display .. createTr ( cfgCurrencies[qbID][3] .. ' (' .. cfgCurrencies[qbID][4] .. ')', 'Währung', 'voy-qb-item-currency' )        end    end     -- area    display = display .. pnumber.GetNumber().getNumbersWithUnitQuickbar ( qbID, 'P2046', nil, 0, coalesce ( templateArgs["fläche"], '' ) )     -- population    display = display .. pnumber.GetNumber().getNumbersWithDateQuickbar ( qbID, 'P1082', coalesce ( templateArgs["bevölkerung"], '' ) )     -- official language    display = display .. items.GetItem().getItemsQuickbar ( qbID, 'P37', coalesce ( templateArgs["amtssprache"], ''), nil, ', ' )     -- religion (no wikidata)    if coalesce ( templateArgs["religion"], '' ) ~= '' then       display = display .. createTr ( templateArgs["religion"], 'Religion', 'voy-qb-item-religion' )    end     -- electricity    -- getting the Voltage    local voltage = coalesce ( nilIf ( templateArgs["stromnetz"], '' ), pnumber.GetNumber().getNumbersWithUnit( qbID, 'P2884' ) , '' )     -- getting the plugs    -- when fetching the items as "label only", no categories are provided, they are saved in the second result    -- "label only" has zo beused, because the result is used in a link and the categories destroy the link     -- normally getItems delivers complete links (if available) with the maintenance categories    local plugs, plugsaCat = coalesce ( nilIf ( templateArgs["stecksysteme"], '' ), mw.ustring.gsub ( items.GetItem().getItems( qbID, 'P2853', nil, 'label', '/&#8203;' ), 'Stecker%-Typ ', '' ), '' )     if voltage ~= '' or plugs ~= '' then        local electricity = voltage       local electricityLabel = ''       if plugs ~= '' then          if voltage ~= '' then             electricity = electricity .. ';<br />[[Stromsysteme#Steckertypen|' .. plugs .. ']]'             electricityLabel = '[[Stromsysteme|Strom/Stecker]]'             categories = categories .. coalesce ( plugsaCat, '' )          else             electricity = '[[Stromsysteme#Steckertypen|' .. plugs .. ']]'             electricityLabel = '[[Stromsysteme|Stecker]]'          end       else          electricityLabel = '[[Stromsysteme|Stromnetz]]'       end       display = display .. createTr ( electricity, electricityLabel, 'voy-qb-item-electricity' )    end     -- calling code    if cfgCountries.countries[qbID] ~= nil then          display = display .. createTr ( cfgCountries.countries[qbID].cc, 'Telefonvorwahl', 'voy-qb-item-calling-code' )    end        if cfgCountries.adminEntities[qbID] ~= nil then          display = display .. createTr ( cfgCountries.adminEntities[qbID].cc, 'Telefonvorwahl', 'voy-qb-item-calling-code' )    end     -- top level domain    display = display .. items.GetItem().getItemsQuickbar ( qbID, 'P78', nil, nil, ', ' )     -- timezone (no wikidata, for several reasons discussed in community)    if coalesce ( templateArgs["zeitzone"], '' ) ~= '' then       display = display .. createTr ( templateArgs["zeitzone"], 'Zeitzone', 'voy-qb-item-time-zone' )    end     -- finishing the HTML table    display = display .. '</table>'     return display .. categories     end  return qbLand