Zum Inhalt springen

Modul:Quickbar Ort/Test

Aus Wikivoyage
Dokumentation für das Modul Quickbar Ort/Test[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Verwendung

Das Submodul ist eine Testversion des Moduls Quickbar Ort und nicht für den Produktivbetrieb geeignet. Es dient der Weiterentwicklung des Moduls Quickbar Ort, damit sich Änderungen nicht auf alle Artikel auswirken, die das Modul benutzen.

Neu- und Weiterentwicklung des Moduls für die {{Quickbar Ort}}.

Testobjekte

Diese Testseite: Inklusive Provinzabfrage. Zeile sollte nicht dargestellt werden, aber die Fehlerkategorie Artikel ohne Objekt auf Wikidata vergeben werden.

Quickbar Ort/Test
Einwohnerzahl
Höhe

{{#invoke:Quickbar Ort/Test|qb_ort
}}

Europa: Inklusive Provinzabfrage. Zeile sollte nicht dargestellt werden, aber die Fehlerkategorie Artikel ohne Verwaltungseinheit auf Wikidata vergeben werden.

Europa
Einwohnerzahl744.831.142 (2024)
Höhe

{{#invoke:Quickbar Ort/Test|qb_ort
|id= Q46
|Namen = Europa
}}

Deutschland: Inklusive Provinzabfrage. Objekt ist ein Staat: Zeile sollte nicht dargestellt werden, aber die Fehlerkategorie Wikidata:Provinzsuche endet bei einem Staat vergeben werden.

Deutschland
Einwohnerzahl84.358.845 (2022)
Höhe
Lagekarte von Deutschland
Lagekarte von Deutschland
Deutschland

{{#invoke:Quickbar Ort/Test|qb_ort
|id= Q183
|Namen = Deutschland
}}

Brandenburg: Inklusive Provinzabfrage. Objekt selbst eine Provinz: Zeile sollte nicht dargestellt werden, aber die Fehlerkategorie Wikidata:Provinzsuche endet bei einem Staat vergeben werden.

Brandenburg
Einwohnerzahl2.449.193 (2013)
Höhe0 m
Lagekarte von Deutschland
Lagekarte von Deutschland
Brandenburg

{{#invoke:Quickbar Ort/Test|qb_ort
|id= Q1208
|Namen = Brandenburg
}}

Berlin
StaatDeutschland
Einwohnerzahl3.782.202 (2023)
Höhe34 m
Lagekarte von Deutschland
Lagekarte von Deutschland
Berlin

Berlin: Inklusive Provinzabfrage. Der Ort liegt in keiner Provinz, sondern stellt eine eigene Verwaltungseinheit dar. Damit ist die Angabe des Staates als "Provinz" in der Quickbar die gültige Alternative. Die Fehlerkategorie Wikidata:Provinzsuche endet bei einem Staat sollte nicht vergeben werden. {{#invoke:Quickbar Ort/Test|qb_ort
|id= Q64
|Namen= Berlin
|StaatOK= ja
}}

Kota Kinabalu:

Kota Kinabalu
BundesstaatSabah
Einwohnerzahl452.058
Höhe5 m
Tourist-Info+60 (0)88 212 121, +60 (0)88 232 121
www.sabahtourism.com
Lagekarte von Malaysia
Lagekarte von Malaysia
Kota Kinabalu

{{#invoke:Quickbar Ort/Test|qb_ort
|id=Q137271
|Namen= Kota Kinabalu
}}

Kota Kinabalu: (lokale Daten + Test IATA ohne typ „Flughafen“)

Stadtzentrum
Kota Kinabalu
BundesstaatSarawak
Einwohnerzahl452.058
Höhe2m
Tourist-Info+66 (0)12 345 67
www.wikivoyage.org
Lagekarte von Malaysia
Lagekarte von Malaysia
Kota Kinabalu

{{#invoke:Quickbar Ort/Test|qb_ort
|id=Q137271
|Namen= Kota Kinabalu
|BILD= [[Bild:Kota Kinabalu City Centre 0001.jpg|300px|Stadtzentrum]]
|Provinz= [[Sarawak]]
|Einwohner= 452.058
|Höhe= 2m
|touriinfotel= +66 12 34567
|touriinfoweb= [http://www.wikivoyage.org www.wikivoyage.org]
|iata= ABC
}}

Kota Kinabalu: (alles abschalten)

Kota Kinabalu
Lagekarte von Malaysia
Lagekarte von Malaysia
Kota Kinabalu

{{#invoke:Quickbar Ort/Test|qb_ort
|id=Q137271
|Namen= Kota Kinabalu
|BILD= no
|Provinz= nein
|Einwohner= false
|Höhe= n
|touriinfotel= no
|touriinfoweb= nein
}}

Pirna

Pirna
BundeslandSachsen
Einwohnerzahl39.303 (2023)
Höhe118 m
Tourist-Info+49 (0)3501 55 64 46
TouristService Pirna
Lagekarte von Sachsen
Lagekarte von Sachsen
Pirna

{{#invoke:Quickbar Ort/Test|qb_ort
|id=Q6477
|TouriInfoWeb= [https://www.pirna.de/pirna-erleben/tourismus/ TouristService Pirna]
|TouriInfoTel= +49 (0)3501 556446]
}}

Bergamo: (spezielle Location Map in der Modul:Quickbar Ort/Locmaps)

Bergamo
RegionLombardei
Einwohnerzahl119.534 (2023)
Höhe249 m
Lagekarte von Norditalien
Lagekarte von Norditalien
Bergamo

{{#invoke:Quickbar Ort/Test|qb_ort
|id=Q628
}}

Chania: (spezielle Location Map in der Modul:Quickbar Ort/Locmaps)

Chania
PräfekturChania
Einwohnerzahl54.559 (2021)
Höhe13 m
Lagekarte von Griechenland
Lagekarte von Griechenland
Chania

{{#invoke:Quickbar Ort/Test|qb_ort
|id=Q182299
}}


Hinweise
--[=[ Quickbar Notruf 2023-10-04
]=]

local yesno    = require( 'Modul:Yesno' )
local pnumber  = require( 'Module:GetNumber' )
local pstring  = require( 'Module:GetString' )
local p856     = require( 'Module:GetP856' )
local images   = require( 'Module:GetImage' )
local province = require( 'Module:GetProvince' )

-- 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

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 qbOrt = {}

function qbOrt.qb_ort ( 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 = ''

   -- province information are used twice
   -- variables for saving information
   local provinceName = ''
   local provinceCode = ''
   
   -- 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-ort' .. qbIso3166Class .. '">'

   -- the main image
   -- taken from Wikidata, if not provided
   display = display .. images.GetImage().getMainImageQuickbar ( qbID, coalesce ( templateArgs["bild"], '' ) )

   -- 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-item' )
   trHeader:tag('td')
      :attr('colspan', 2 )
      :addClass('voy-qb-header' )
      :wikitext(qbNamen)
   -- adding it to the quickbar
   display = display .. tostring ( trHeader )
   
   -- general information:
   -- an entry is only added when the parameter is used
   -- if the parameter is empty, the information is fetched from Wikidata
   -- if the parameter is not empty, the local information is used, but mostly compared Wikidata, and maintenance categories are used
   -- the parameter with the value "no" deactivates the entry
   
   -- province
   local displayString = ''
   displayString, provinceCode = province.GetProvince().getProvinceQuickbar ( qbID, coalesce ( templateArgs["provinz"], '' ), coalesce ( templateArgs["provinzlabel"], '' ), coalesce ( templateArgs["staatok"], 'no' ) )
   display = display .. displayString
   
   -- population
   display = display .. pnumber.GetNumber().getNumbersWithDateQuickbar ( qbID, 'P1082', coalesce ( templateArgs["einwohner"], '' ) )
   
   -- altitude
   display = display .. pnumber.GetNumber().getNumbersWithUnitQuickbar ( qbID, 'P2044', nil, 0, coalesce ( templateArgs["höhe"], '' ) )

   -- tourist info 
   -- it has two parameters: phone number and webseite
   -- they can used both or single
   
   -- Wikidata-ID of the tourist info
   local wdTouristInfo = {}   
   local touristInfoID = ''

   -- tourist info: phone number
   -- it contains the wiki markup of the whole row
   local touristInfoPhone = ''
   local touristInfoWeb = ''

   -- table row for the entries
   local trTouristInfo = ''

   -- displaying only, if its not switched off
   if ( yesno ( coalesce ( templateArgs["touriinfotel"], '' ), true ) ) then

      -- trying to find it on Wikidata, if empty
      if coalesce ( templateArgs["touriinfotel"], '' ) == '' and qbID ~= '' then

         wdTouristInfo = mw.wikibase.getBestStatements( qbID, 'P2872' )
         if #wdTouristInfo > 0 then
            touristInfoID = wdTouristInfo[1].mainsnak.datavalue.value["id"]
         end

         -- Found it on Wikidata? > showing the phone number
         if touristInfoID ~= '' then
            touristInfoPhone = pstring.GetString().getStringsQuickbar ( touristInfoID, 'P1329', nil, nil, 'Tourist-Info' )
         end

      -- if provided locally then just showing it
      elseif coalesce ( templateArgs["touriinfotel"], '' ) ~= '' then

         -- formatting and linking
         local cm = require( 'Module:CountryData' )
         local lp = require( 'Module:LinkPhone' )
         local lpArgs = {
            phone      = templateArgs["touriinfotel"],
            format     = true,
            isFax      = false,
            isTollfree = false
         }
         lpArgs.cc, lpArgs.size = cm.getCountryCode()
         templateArgs["touriinfotel"] = lp.linkPhoneNumbers( lpArgs )

         -- displaying the given info
         trTouristInfo = mw.html.create ( 'tr' )
         trTouristInfo:addClass('voy-qb-item voy-qb-tourist-info' )
            :tag('th')
            :addClass('voy-qb-item-key')
            :wikitext('Tourist-Info')
         trTouristInfo:tag('td')
            :addClass( 'voy-qb-item-value1' )
            :wikitext( templateArgs["touriinfotel"] )
         touristInfoPhone = tostring ( trTouristInfo )

      end

      -- showing the entry
      display = display .. touristInfoPhone

   end

   -- displaying only, if its not switched off
   if ( yesno ( coalesce ( templateArgs["touriinfoweb"], '' ), true ) ) then

      -- if there is a row for the phone number, then no label in the second row
      local trLabel
      if touristInfoPhone == '' then
         trLabel = 'Tourist-Info'
      else
         trLabel = ''
      end

      -- trying to find it on Wikidata, if empty
      if coalesce ( templateArgs["touriinfoweb"], '' ) == '' and qbID ~= '' then 

         -- is the WikidataID known already (from above)?
         if touristInfoID == '' then
            wdTouristInfo = mw.wikibase.getBestStatements( qbID, 'P2872' )
            if #wdTouristInfo > 0 then
               touristInfoID = wdTouristInfo[1].mainsnak.datavalue.value["id"]
            end
         end

         -- Found it on Wikidata? > showing the phone number
         if touristInfoID ~= '' then
            touristInfoWeb = p856.GetP856().getUrlAsLinkWithHostQuickbar ( touristInfoID, nil, trLabel )
         end

      -- if provided just showing it
      elseif coalesce ( templateArgs["touriinfoweb"], '' ) ~= '' then

         -- displaying the given info
         trTouristInfo = mw.html.create ( 'tr' )
         trTouristInfo:addClass('voy-qb-item voy-qb-tourist-information' )
            :tag('th')
            :addClass('voy-qb-item-key')
            :wikitext(trLabel)
         trTouristInfo:tag('td')
            :addClass( 'voy-qb-item-value1' )
            :wikitext( templateArgs["touriinfoweb"] )
         touristInfoWeb = tostring ( trTouristInfo )

      end

      -- showing the entry
      display = display .. touristInfoWeb

   end
   
   -- adding social media
   display = display .. pstring.GetString().getSocialMediaQuickbar ( qbID )

   -- location map 
   -- the location map is always shown, but you can switch it off
   if yesno ( coalesce ( templateArgs["karte"], '' ), true ) then

      -- reading latitude and longitude from Wikidata
      local breite
      local laenge
      breite, laenge = pnumber.GetNumber().getCoordinate( qbID )

      -- got coordinates? then creating the map
      if breite ~= 0 and laenge ~= 0 then

         -- loading the configuration fopr the location maps
         local cfgLocmaps = mw.loadData('Modul:Quickbar Ort/Locmaps')

         provinceCode = string.lower ( coalesce ( provinceCode, '' ) )

         -- determining the locmap, starting with the country code
         local locmapCode = qbIso3166

         -- some countries alays use province maps (see Modul:Quickbar_Ort/Locmaps)
         if cfgLocmaps.LocMapLevel[qbIso3166] ~= nil and provinceCode ~= '' then
            locmapCode = provinceCode
         end

         -- some province maps differ from the 3166 Code
         if cfgLocmaps.LocMapNoProvince[provinceCode] ~= nil and provinceCode ~= '' then
            locmapCode = cfgLocmaps.LocMapNoProvince[provinceCode]
         end

         -- some province maps are individually wanted although normally the country map is used
         if cfgLocmaps.ForceProvinceMap[provinceCode] ~= nil and provinceCode ~= '' then
            locmapCode = cfgLocmaps.ForceProvinceMap[provinceCode]
         end

         -- is a map-code given manually in the QB? then
         if nilIf ( templateArgs["karte"], '' ) ~= nil then
            locmapCode = templateArgs["karte"]
         end

         locmapCode = string.lower ( locmapCode )

         -- creating the location map
         if locmapCode ~= '' then

            local locMap = require('Modul:Location map')
            local success, mData = pcall(checkMapObject, locmapCode)

            -- location map available?
            if success then

               -- collecting all parameters
               local locMapArgs = 
                  { args = 
                     {  map = locmapCode, 
                        lat = breite,
                        long = laenge,
                        maptype = 'quickbar',
                        label = '<b>' .. mw.text.trim(mw.ustring.gsub(destinationName, '%s%(.*%)', '' )) .. '</b>' 
                     } 
                  }

               -- creating the row and adding to the quickbar
               local trLocMap = mw.html.create ( 'tr' )
               trLocMap:addClass( 'voy-qb-locmap' )
               trLocMap:tag('td')
                  :attr('colspan', 2 )
                  :wikitext(locMap.locationMap(locMapArgs))
               display = display .. tostring ( trLocMap )

            else
               categories = categories .. '[[Kategorie:Provinz ohne Location map]]'
            end

         end -- if locmapCode ~= ''

      end -- if breite ~= 0 and laenge ~= 0

   end --  if yesno ( coalesce ( templateArgs["karte"], '' ), true )

   -- finishing the HTML table
   display = display .. '</table>'

   return display .. categories
   
end

return qbOrt