Bu modul uchun Modul:Monument uz/doc nomli hujjat sahifasini yaratishingiz mumkin

local p = {}

function p.monument(frame)

  local pArgs = frame:getParent().args
  local lang = pArgs['lang'] or 'uz' 
  local country = pArgs['country']
  local region = pArgs['region'] or ''
  local llanguage = 'uz'
  local campaign = 'wlm-uz'
  local noupload = 'yes'
  local dcat = 'Cultural heritage monuments in Uzbekistan'
  
  local rcat = {
  	["Q487384"] = "Cultural heritage monuments in Andijan Region",
	["Q487656"] = "Cultural heritage monuments in Andijan",
	["Q487372"] = "Cultural heritage monuments in Bukhara Region",
	["Q5764"] = "Cultural heritage monuments in Bukhara",
	["Q1658752"] = "Cultural heritage monuments in Kagan",
	["Q487089"] = "Cultural heritage monuments in Fergana Region",
	["Q489890"] = "Cultural heritage monuments in Kokand",
	["Q488811"] = "Cultural heritage monuments in Jizzax Region",
	["Q474876"] = "Cultural heritage monuments in Namangan Region",
	["Q492552"] = "Cultural heritage monuments in Namangan",
	["Q487570"] = "Cultural heritage monuments in Navoiy Region",
	["Q487577"] = "Cultural heritage monuments in Qashqadaryo Region",
	["Q569766"] = "Cultural heritage monuments in Shahrisabz",
	["Q484245"] = "Cultural heritage monuments in Karakalpakstan",
	["Q487532"] = "Cultural heritage monuments in Samarqand Region",
	["Q5753"] = "Cultural heritage monuments in Samarqand",
	["Q487547"] = "Cultural heritage monuments in Sirdaryo Region",
	["Q487537"] = "Cultural heritage monuments in Surxondaryo Region",
	["Q491879"] = "Cultural heritage monuments in Termez",
	["Q269"] = "Cultural heritage monuments in Tashkent",
	["Q487585"] = "Cultural heritage monuments in Tashkent Region",
	["Q487561"] = "Cultural heritage monuments in Xorazm Region",
	["Q486195"] = "Cultural heritage monuments in Xiva",
	[""] = "Cultural heritage monuments in Uzbekistan"
  }
  
  local title = [=[<div align="center">[[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Toshkent shahri|Toshkent shahri]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Andijon viloyati|Andijon viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Buxoro viloyati|Buxoro viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Fargʻona viloyati|Fargʻona viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Jizzax viloyati|Jizzax viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Namangan viloyati|Namangan viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Navoiy viloyati|Navoiy viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Qashqadaryo viloyati|Qashqadaryo viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Samarqand viloyati|Samarqand viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Sirdaryo viloyati|Sirdaryo viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Surxondaryo viloyati|Surxondaryo viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Toshkent viloyati|Toshkent viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Xorazm viloyati|Xorazm viloyati]] • [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Qoraqalpogʻiston respublikasi|Qoraqalpogʻiston respublikasi]]</div>]=]

  local regtitle = {
  	["uz-an"] = [=['''Andijon viloyati:'''
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Andijon viloyati 1|1-qism: Andijon shahri]]
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Andijon viloyati 2|2-qism: Andijon tumani, Asaka tumani, Baliqchi tumani, Boʻz, Buloqboshi tumani, Izboskan, Jalaquduq, Marhamat, Oltinkoʻl, Paxtaobod tumani, Qoʻrgʻontepa tumani, Shahrixon, Ulugʻnor, Xonobod, Xoʻjaobod tumani]]]=],
  	["uz-bu"] = [=[
'''Buxoro viloyati:''' [
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Buxoro viloyati 1|1-qism: Buxoro shahri]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Buxoro viloyati 2|2-qism: Buxoro tumani, Gʻijduvon tumani, Jondor tumani, Kogon, Kogon tumani, Peshku tumani, Qorakoʻl tumani, Qorovulbozor tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Buxoro viloyati 3|3-qism: Romitan tumani, Shofirkon tumani, Vobkent tumani]] ]=],
  	["uz-ji"] = [=['''Jizzax viloyati :'''
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Jizzax viloyati 1|1-qism: Arnasoy tumani, Doʻstlik tumani, Forish tumani, Gʻallaorol tumani, Mirzachoʻl tumani, Paxtakor tumani, Yangiobod tumani, Zarbdor tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Jizzax viloyati 2|2-qism: Baxmal tumani, Jizzax, Jizzax tumani, Zomin tumani]] ]=],
  	["uz-nw"] = [=[
'''Navoiy viloyati:''' 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Navoiy viloyati 1|1-qism: Konimex tumani, Navoiy, Nurota tumani, Tomdi, Uchquduq tumani, Zarafshon (shahar)]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Navoiy viloyati 2|2-qism: Karmana tumani, Navbahor tumani, Qiziltepa tumani, Xatirchi tumani]] ]=],
  	["uz-qa"] = [=['''Qashqadaryo viloyati:'''
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Qashqadaryo viloyati 1|1-qism: Dehqonobod tumani, Kasbi tumani, Shahrisabz, Shahrisabz tumani]]
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Qashqadaryo viloyati 2|2-qism: Chiroqchi tumani, Kitob tumani]]
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Qashqadaryo viloyati 3|3-qism: Koson tumani, Mirishkor tumani, Muborak tumani, Nishon tumani, Qamashi tumani, Qarshi, Qarshi tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Qashqadaryo viloyati 4|4-qism: Gʻuzor tumani, Yakkabogʻ tumani]] ]=],
  	["uz-sa"] = [=['''Samarqand viloyati:'''
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Samarqand viloyati 1|1-qism: Samarqand shahar, 1-qism]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Samarqand viloyati 2|2-qism: Samarqand shahar, 2-qism]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Samarqand viloyati 3|3-qism: Bulung‘ur tumani, Ishtixon tumani, Jomboy tumani, Kattaqoʻrgʻon, Kattaqoʻrgʻon tumani, Narpay tumani, Nurobod tumani, Qoʻshrabot tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Samarqand viloyati 4|4-qism: Pastdargʻom tumani, Payariq tumani, Urgut tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Samarqand viloyati 5|5-qism: Oqdaryo tumani, Paxtachi tumani, Samarqand tumani, Toyloq tumani]] ]=],
  	["uz-su"] = [=[
'''Surxondaryo viloyati:''' 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Surxondaryo viloyati 1|1-qism: Angor tumani, Boysun tumani, Denov tumani, Jarqoʻrgʻon tumani, Muzrabot tumani, Oltinsoy tumani, Qiziriq tumani, Qumqoʻrgʻon tumani, Sariosiyo tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Surxondaryo viloyati 2|2-qism: Sherobod tumani, Shoʻrchi tumani, Termiz, Termiz tumani, Uzun tumani]] ]=],
  	["uz-to"] = [=[
'''Toshkent viloyati:''' 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Toshkent viloyati 1|1-qism: Angren, Bekobod, Bekobod tumani, Boʻka tumani, Boʻstonliq tumani, Chinoz tumani, Chirchiq, Oʻrta Chirchiq tumani, Zangiota tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Toshkent viloyati 2|2-qism: Ohangaron tumani, Olmaliq, Oqqoʻrgʻon tumani, Oʻrta Chirchiq tumani, Parkent tumani]] 
* [[Vikipediya:Viki yodgorliklarni sevadi Oʻzbekiston/Roʻyxat/Toshkent viloyati 3|3-qism: Piskent tumani, Qibray tumani, Quyi chirchiq tumani, Toshkent tumani, Yangiyoʻl tumani]] ]=],
  }

  local t = title .. (regtitle[region] or '') .. '\n'
  
  if (pArgs['headeronly'] and pArgs['headeronly'] == 'yes') then
    return t
  end
  
  local params = (pArgs['years'] and mw.text.jsonDecode(pArgs['years'] or '', mw.text.JSON_TRY_FIXING)) or {}
  local year = {}
  local mtype = {}
  local images = {}
  for i, j in ipairs(params) do
  	year[j.id] = j.year or ''
  	mtype[j.id] = j["type"] or ''
  	images[j.id] = j.image
  end

  local background_color = "#F8F8F8;"
  local mwl = mw.language.new( lang )
  local sort = pArgs['sort'] or 'no'
  local sortlevel = tonumber(pArgs['sortlevel']) or 1
  local sections = pArgs['sections'] or ''
   
  local wdids = pArgs['wdid'] or ''
  wdids = mw.text.split( wdids, ",", true) or {}
  local wdids_for_map = ""
  
  values = {}

  for i, wdid in ipairs(wdids) do
  	wdids_for_map = wdids_for_map .. "wd:" .. wdid .. " "
    values[i] = {}
	values[i]['wdid'] = wdid
	local p2186 = mw.wikibase.getBestStatements(wdid, 'P2186')
    values[i]['id'] = (p2186[1] and p2186[1]['mainsnak']['datavalue']['value']) or ''
    values[i]['name'] = mw.wikibase.getLabelByLang(wdid, lang) or mw.wikibase.getLabelByLang(wdid, llanguage) or ''
    values[i]['wiki'] = mw.wikibase.getSitelink(wdid, lang .. 'wiki') or ''
    values[i]['image'] = mw.wikibase.getBestStatements(wdid, 'P18')
    values[i]['image'] = images[values[i]['id']] or (values[i]['image'][1] and values[i]['image'][1]['mainsnak']['datavalue']['value'])
    values[i]['commonscat'] = mw.wikibase.getBestStatements(wdid, 'P373')
    values[i]['commonscat'] = (values[i]['commonscat'][1] and values[i]['commonscat'][1]['mainsnak']['datavalue']['value']) or ''
    local coords = mw.wikibase.getBestStatements(wdid, 'P625')
    values[i]['lat'] = (coords[1] and coords[1]['mainsnak']['datavalue']['value'].latitude) or ''
    values[i]['long'] = (coords[1] and coords[1]['mainsnak']['datavalue']['value'].longitude) or ''
    local p17 = mw.wikibase.getBestStatements(wdid, 'P17')
    p17 = (p17[1] and p17[1]['mainsnak']['datavalue']['value']['id']) or ''
    values[i]['municipality'] = mw.wikibase.getBestStatements(wdid, 'P131') or ''
    values[i]['defaultcat'] = rcat[(values[i]['municipality'][1] and values[i]['municipality'][1]['mainsnak']['datavalue']['value']['id']) or ''] or ''
    values[i]['municipality'] = (values[i]['municipality'][1] and mw.wikibase.getLabelByLang(values[i]['municipality'][1]['mainsnak']['datavalue']['value']['id'], lang)) or ''
    values[i]['first_level'] = values[i]['municipality']
    values[i]['munlevels'] = values[i]['municipality']
    if values[i]['municipality'] ~= '' then
      local x = mw.wikibase.getBestStatements(wdid, 'P131')
      x = mw.wikibase.getBestStatements(x[1]['mainsnak']['datavalue']['value']['id'], 'P131')
      while x and next(x) and x[1]['mainsnak']['datavalue']['value']['id'] ~= p17 do
	    values[i]['first_level'] = mw.wikibase.getLabelByLang(x[1]['mainsnak']['datavalue']['value']['id'], lang) or ''
        values[i]['municipality'] =  values[i]['first_level'] .. ", " .. values[i]['municipality']
        values[i]['munlevels'] =  values[i]['first_level'] .. "#%" .. values[i]['munlevels']
        if values[i]['defaultcat'] == '' and rcat[x[1]['mainsnak']['datavalue']['value']['id']] then
        	values[i]['defaultcat'] = rcat[x[1]['mainsnak']['datavalue']['value']['id']]
        end
        x = mw.wikibase.getBestStatements(x[1]['mainsnak']['datavalue']['value']['id'], 'P131')
      end
      values[i]['munlevels'] = mw.text.split(values[i]['munlevels'], "#%", true)
    end
	local p1435 = mw.wikibase.getBestStatements(wdid, 'P1435')
    local p2795 = mw.wikibase.getBestStatements(wdid, 'P2795')
    values[i]['address'] = (p2795[1] and p2795[1]['mainsnak']['datavalue']['value']['text']) or ''
    values[i]['year'] = year[values[i]['id']] or ''
    values[i]['mtype'] = mtype[values[i]['id']] or ''
  end

  local csection = ''
  if sort and sort == "yes" then
    function comp(a, b)
	  if (a.munlevels[sortlevel] or '') < (b.munlevels[sortlevel] or '') or ((a.munlevels[sortlevel] or '') == (b.munlevels[sortlevel] or '') and (b.address or '') > (a.address or '')) then
	    return true
	  else
	    return false
	  end
	end
    table.sort( values, comp )
  end
 
  t = t .. '<div style="text-align:center; position:relative; float:right;">'
  t = t .. frame:extensionTag{ name = 'maplink', content = [=[ {
  "type": "ExternalData",
  "service": "geopoint",
  "query": "SELECT DISTINCT ?id ?geo ?title (CONCAT('[', STR(?id), ' ', SUBSTR(STR(?id), 32, 400), ']', coalesce(sample(?file), '')) AS ?description) (coalesce(max(?marker_color), '#444444') as ?marker_color) WHERE {?id wdt:P625 ?geo . VALUES ?id {]=] .. wdids_for_map .. [=[} OPTIONAL { ?id wdt:P18 ?image. BIND(COALESCE(CONCAT('\\n[[file:', substr(str(?image), 52, 400), '|300px]]'), '') as ?file)} OPTIONAL { ?id wdt:P31 ?type . } OPTIONAL {VALUES (?type ?marker_color) { (wd:Q839954 '#008000') (wd:Q4989906 '#800000') (wd:Q2319498 '#000080') (wd:Q570116 '#AAAA00') }} SERVICE wikibase:label { bd:serviceParam wikibase:language ']=] .. lang .. [=[' . ?id rdfs:label ?title.} } GROUP BY ?id ?geo ?title " } ]=], 
  args = { ["text"] = "Xaritani ochish"} } .. '\n</div>'

  local layout = require( "Modul:Monument/layout" )

  for i, m in ipairs(values) do
   if sections and sections == 'yes' and (m.munlevels[sortlevel] or '') ~= csection then
      t = t .. "\n== " .. (m.munlevels[sortlevel] or '') .. " ==\n"
	  csection = (m.munlevels[sortlevel] or '')
	end
    t = t .. layout.monument_header(m.id, "", m.image, "", background_color)
    
    local icon = ''
    local iconsize = '20'
    
    if m.mtype == 'architecture' then
    	icon = 'PorticoIcon.svg'
    elseif m.mtype == 'sight' then
    	icon = 'PorticoIcon.svg'
    elseif m.mtype == 'archeology' then
    	icon = 'ArcheologyIcon .svg'
    	iconsize = '22'
    elseif m.mtype == 'monument' then
    	icon = 'MonumentIcon .svg'
    end

    t = t .. layout.monument_title(m.name, icon, iconsize)
    t = t .. layout.makelabel("Manzil", m.address, "<br>") 
    t = t .. layout.makelabel("ID", '<span style="font-size:93%">' .. m.id .. "</span>", "&nbsp;&nbsp;&nbsp;&nbsp;")
    local links = ''
    if m.wiki and m.wiki ~= '' then
      links = links .. layout.wikipedialink(lang, m.wiki, "Vikipediya maqolasi")
    end
    if m.commonscat and m.commonscat ~= '' then
      links = links .. layout.commonslink(m.commonscat, "Vikiombor toifasi")
    end
    links = links .. layout.wikidatalink(m.wdid, "Vikimaʼlumotlar bandi")
    if m.lat and m.lat ~= '' and m.long and m.long ~= '' then
      links = links .. '&nbsp;' .. frame:extensionTag{ name = 'maplink',  content = [=[{
  "type": "Feature",
  "geometry": { "type": "Point", "coordinates": []=] .. m.long .. [=[, ]=] .. m.lat .. [=[] },
}]=], args = { ["latitude"] = m.lat, ["longitude"] = m.long, ["zoom"] = 15} } .. '\n</div>'
    end    
    t = t .. layout.makelabel("Havolalar", links, "<br>") 
    t = t .. layout.makelabel("Tavsifi", m.year, "<br>")
    if m.commonscat == '' then
    	if m.defaultcat == '' then
    		m.commonscat = dcat
    	else
    		m.commonscat = m.defaultcat
    	end
    end
    if m.lat ~= '' and m.long ~= '' then
    	t = t .. '<span class="coords" id="' .. m.lat .. '_' .. m.long .. '"></span>'
    end
    t = t .. layout.uploadlink(campaign, "Fayl&nbsp;yuklash", m.wdid, "", m.name .. ": " .. m.municipality .. ", " .. m.address, m.commonscat)
  end
  
  return t
end

return p;