Модуль:Natural monument

Материал из Wikivoyage

Для документации этого модуля может быть создана страница Модуль:Natural monument/doc

local p = {}

function p.monument(frame)
  local pArgs = frame:getParent().args

-- Технические ограничения на названия
  local m_type = pArgs['type']
-- Остальные переменные так же, как в шаблоне
  local address = pArgs["address"]
  local area = pArgs["area"]
  local biosphere = pArgs["biosphere"]
  local category = pArgs["category"]  
  local commonscat = pArgs["commonscat"]  
  local complex = pArgs["complex"]  
  local description = pArgs["description"] 
  local dismissed = pArgs["dismissed"] 
  local district = pArgs["district"]
  local document = pArgs["document"]
  local document2 = pArgs["document2"]
  local image = pArgs["image"]
  local knid = pArgs["knid"]
  local lat = pArgs["lat"]
  local link = pArgs["link"]
  local linkextra = pArgs["linkextra"]
  local long = pArgs["long"]
  local munid = pArgs["munid"]
  local municipality = pArgs["municipality"]
  local name = pArgs["name"]
  local noupload = pArgs["noupload"]
  local oopt = pArgs["oopt"]
  local ooptid = pArgs["ooptid"]
  local precise = pArgs["precise"]
  local region = pArgs["region"]
  local reorganized = pArgs["reorganized"]
  local status = pArgs["status"]
  local uid = pArgs["uid"]
  local unesco = pArgs["unesco"]
  local wdid = pArgs["wdid"]
  local wiki = pArgs["wiki"]
  local wikivoyage = pArgs["wikivoyage"]
  
  local m = require("Module:Monument")
  
-- Шапка
  local tmp = ''
  if status == "destroyed" or status == "rejected" or status == "reorganized" or status == "perspective" then
    tmp = 'style="color:#808080;"'
  end
  local t = [[{| id=]] .. knid .. [[ class="monument" border=0 style="font-size:97%;width:100%;"
 |- valign="top" ]] .. tmp 

-- Изображение
  local imagelink = '[[File:Natural landmark without photo.svg|border|150x150px|center|Нет фото]]'
  if image and image ~= '' then
    --imagelink = '[[File:' .. image .. '|150x150px|center|' .. name .. ']]'
    imagelink = string.format('[[File:%s|150x150px|center|%s]]', image, name)
  end 
  t = t .. '\n| width="160px" | ' .. imagelink 

-- Цвет карточки
  local background_color = ''
  if complex and complex ~= '' then
    if complex == knid then
	  background_color = "#BAFFC1;"
	else
	  background_color = "#E1FFE4;"
    end
  else 
    background_color = "#F8F8F8;"
  end
  
  t = t .. '\n| style=" background-color:' .. background_color .. ' padding-left:10px;" valign="middle" | '
  
-- Иконка памятника
  t = t .. "<span id=" ..  mw.uri.anchorEncode(knid or '') .. "></span>"
  if m_type == 'sanctuary' then
    t = t .. "[[File:WLE reserve3.svg|20px]] "
  elseif m_type == 'reserve' then
    t = t .. "[[File:WLE reserve2.svg|17px]] "
  elseif m_type == 'park' or m_type == 'nature park' or m_type == 'national park' then
    t = t .. "[[File:WLE park.svg|20px]] "
  elseif m_type == 'city park' then
    t = t .. "[[File:WLE CityPark1.svg|20px]] "
  elseif m_type == 'arboretum' then
    t = t .. "[[File:WLE arboretum.svg|20px]] "	
  elseif m_type == 'garden' then
    t = t .. "[[File:WLE garden2.svg|20px]] "	
  elseif m_type == 'resource reserve' then
    t = t .. "[[File:Twemoji2 1f48e.svg|20px]] "
  elseif m_type == 'traditional' then
    t = t .. "[[File:WLE traditional.svg|20px]] "
  elseif m_type == 'resort' then
    t = t .. "[[File:WLE resort1.svg|20px]] "
  elseif m_type == 'general' or m_type == 'nature' then
    t = t .. "[[File:WLE nature.svg|20px]] "
  end

-- ЮНЕСКО, биосферные резерваты:  
  if unesco and unesco ~= '' then
    t = t .. "&nbsp;[[File:Swedish world heritage sign.PNG|18px|Объект ЮНЕСКО]]&thinsp;"
  end
  if biosphere and biosphere ~= '' then
    t = t .. "&nbsp;[[File:Man and the Biosphere Programme Logo.svg|18px|Биосферный заповедник]]&thinsp;"
  end

-- Главный элемент в составе комплекса - иконка: 
  if knid == complex then
    t = t .. '[[File:Location dot darkslategray.svg|10px|главный элемент комплекса]]&nbsp;'
  end

-- Название объекта и опциональная иконка Викигида:
  t = t .. '<span class="monument-name" style="font-size:115%; font-weight:bold">'
  if wikivoyage and wikivoyage ~= '' then
    t = t .. '[[File:Wikivoyage-logo.svg|15px]]&nbsp;[[' .. wikivoyage .. '|' .. name .. ']]'
  else
    t = t .. name
  end
  t = t .. '</span><br>'

-- Адрес:
  t = t .. "''Адрес:'' "
  local addressprecomma = '';
  if municipality and municipality ~= '' then
    t = t .. "''" .. municipality .. "''"
    addressprecomma = ',&nbsp;'
  end
  if munid and munid ~= '' then
    t = t .. '&nbsp;[[File:Wikidata-logo.svg|18px|link=//wikidata.org/wiki/' .. mw.uri.encode(munid, "PATH") .. ']]'
  end
  if address and address ~= '' then
    t = t .. addressprecomma .. address
  end

-- Площадь:
  if area and area ~= '' then
    t = t.. string.format("&nbsp;&nbsp;&nbsp;&nbsp;''Площадь:'' %s га", area)
  end
  t = t .. '<br>'

-- Номер объекта:
  t = t .. "''Номер объекта:'' " .. '<span style="font-size:93%">[[Природные памятники России#Номера объектов|' .. knid .. ']]'
  if not knid or knid == '' then
    t = t .. '<span style="color:red;">Не указан</span>'
  end
  if uid and uid ~= '' then
    t = t .. "&nbsp;&nbsp;/&nbsp;&nbsp;[[:wikipedia:uk:Вікіпедія:Вікі_любить_Землю|" .. uid .. ']]'
  end
  t = t .. ' </span>'

  t = t .. "&nbsp;&nbsp;&nbsp;''Ссылки:''&nbsp; "

-- Координаты (ссылка на карту):
  if lat and long and lat~= '' and long ~= '' then
    t = t .. string.format('&nbsp;[[File:Map mag.png|17px|link=//ru_monuments.toolforge.org/monmap/index.htm?lat=%s&long=%s&zoom=13&layer=X&no-group-markers=true&name=%s|Расположение на карте]]', lat, long, mw.uri.encode(mw.title.getCurrentTitle().fullText, "WIKI"))
    if precise ~= 'yes' then
      t = t .. '<span style="color:#FF0000">!</span>'
    end 
  end

-- Статья в Википедии:
  if wiki and wiki ~= '' then
    t = t .. '&nbsp;[[File:Wikipedia-logo-v2.svg|19px|link=//ru.wikipedia.org/wiki/' .. mw.uri.encode(wiki, "PATH") .. '|Статья в Википедии]]'
  end
-- Категория на Викискладе:
  if commonscat and commonscat ~= '' then
    t = t .. '&nbsp;[[File:Commons-logo.svg|13px|link=//commons.wikimedia.org/wiki/Category:' .. mw.uri.encode(commonscat, "PATH") .. '|Категория на Викискладе]]'
  end
-- Элемент в Викиданных:
  if wdid and wdid ~= '' then
    t = t .. '&nbsp;[[File:Wikidata-logo-without-paddings.svg|18px|link=//www.wikidata.org/wiki/' .. mw.uri.encode(wdid, "PATH") .. '|Элемент в Викиданных]]'
  end
-- Внешняя ссылка №1:
  if link and link ~= '' then
    t = t .. '&nbsp;[[Image:P geography 3 b.png|22px|link=' .. link .. '|Внешняя ссылка]]'
  end
-- Внешняя ссылка №2:
  if linkextra and linkextra ~= '' then
    t = t .. '&nbsp;[[Image:P geography 3 b.png|22px|link=' .. linkextra .. '|Внешняя ссылка]]'
  end
-- На сайте ООПТ России:
  t = t .. '<span style="font-size:80%">'
    if ooptid and ooptid ~= '' then
      t = t .. string.format('&nbsp; [http://oopt.aari.ru/node/%s на сайте ООПТ России],&nbsp;', ooptid)
    elseif oopt and oopt ~= '' then
      t = t .. string.format('&nbsp; [%s на сайте ООПТ России],&nbsp;', oopt)
    end 
  t = t .. '</span>'

-- Галерея 
  t = t .. string.format('&nbsp;[[:commons:Category:Protected areas of Russia/%s|галерея]]', knid)
  t = t .. "<br>"
-- Тип:
  t = t .. "''Описание:'' "  
  local types = {reserve = "Заповедник", 
                 sanctuary = "Заказник",
                 ["nature park"] = "Природный парк", 
                 ["national park"] = "Национальный парк", 
                 park = "Парк",
                 garden = "Памятник садово-паркового искусства",
                 arboretum = "Ботанический сад / дендрарий",
                 resort = "Рекреационная местность / курорт",
                 ["resource reserve"] = "Ресурсный резерват",
                 ["city park"] = "Городской парк",
                 traditional = "Территории традиционного природопользования",
                 nature = "Памятник природы",
                 general = "Прочие ООПТ"}
  t = t .. types[m_type or ''] or ''
-- Категория охраны:
  if category or '' == '' then
    local catd = {["0"] = "federal", 
              ["1"] = "regional", 
              ["2"] = "municipal"}
    category = catd[mw.ustring.sub(knid, 3, 3)] or ''
  end
  if category == "federal" then
    t = t .. "&nbsp;федерального значения."
  elseif category == "regional" then
    t = t .. "&nbsp;регионального значения."
  elseif category == "municipal" then
    t = t .. "&nbsp;местного значения."
  else
    t = t .. ", не охраняется."
  end

-- Документ:
  if document and document ~= '' then
    t = t .. frame:extensionTag{name = 'ref', '', args = {name = document}}
  end
  if document2 and document2 ~= '' then
    t = t .. frame:extensionTag{name = 'ref', '', args = {name = document2}}
  end

-- Статус:
  if status == "dismissed" then
    t = t .. "&nbsp;Упразднённый."
    if dismissed and dismissed ~= "" then
      t = t .. frame:extensionTag{name = 'ref', '', args = {name = dismissed}}
    end    
  elseif status == "destroyed" then
    t = t .. "&nbsp;Утраченный."
    if dismissed and dismissed ~= "" then
      t = t .. frame:extensionTag{name = 'ref', '', args = {name = dismissed}}
    end    
  elseif status == "rejected" then
    t = t .. "&nbsp;Предложенный, не созданный."
  elseif status == "reorganized" then
    t = t .. "&nbsp;Реорганизованный."
    if reorganized and reorganized ~= "" then
      t = t .. frame:extensionTag{name = 'ref', '', args = {name = reorganized}}
    end    
  elseif status == "planned" then
    t = t .. "&nbsp;Перспективный."
  elseif status == "reserved" then
    t = t .. "&nbsp;Резервированные земли."
  end
  t = t .. ' '

-- ЮНЕСКО и биосферные резерваты:
  if biosphere and biosphere ~= '' then
    if biosphere == 'yes' then
      t = t .. "Биосферный резерват.&nbsp;"
    elseif string.sub(biosphere, 1, 1) == "Q" then
      t = t .. "Входит в состав биосферного резервата «" .. mw.wikibase.getEntityObject(biosphere).sitelinks['ruwiki'].title .. "».&nbsp;"
    end   
  end
  if unesco and unesco ~= '' then
    local unesco_title = ''
    if string.sub(unesco, 1, 1) == "Q" then
      unesco_title = mw.wikibase.getEntityObject(unesco).sitelinks['ruwiki'].title
    else
      local unesco_list = require("Module:Monument/unesco")
      unesco_title = unesco_list.unesco(unesco)
    end
    t = t .. " Входит в состав объекта Всемирного наследия ЮНЕСКО «" .. unesco_title .. "»."
  end

-- Описание объекта:
  if description and description ~= "" then
    if mw.ustring.sub(description, -1) ~= '.' then
      description = description .. '.'
    end
    t = t .. " " .. description
  end

-- Ссылка на загрузку
  if noupload ~= 'yes' then
    t = t .. '\n| class="plainlinks" style="width:10%; text-align:center; vertical-align:middle; background-color:#FFFACD; padding:0 1em" '
    local campaign = "wle-ru"
    if region == "ru-km" or region == "ru-sev" then
      campaign = "wle-crimea"
    end
    t = t .. "| [//commons.wikimedia.org/w/index.php?title=Special:UploadWizard&campaign=" .. mw.uri.encode(campaign, "PATH")
    t = t .. [[&id=]] .. mw.uri.encode(knid or '', "PATH")
    t = t .. [[&id2=]] .. mw.uri.encode(uid or '', "PATH")

    local upload_desc = (mw.ustring.gsub(name, '"', '')  or '') .. ": "
    if address and address ~= '' then
      upload_desc = upload_desc .. address .. ", "
    end
    if municipality and municipality ~= '' and (municipality or '') ~= (district or '') then
      upload_desc = upload_desc .. municipality .. ", "
    end
    if district and district ~= '' then
      upload_desc = upload_desc .. district .. ", "
    end
    upload_desc = upload_desc .. (m.region_name(region) or '')
    t = t .. [[&description=]] .. mw.uri.encode(upload_desc, "PATH")
--    if not commonscat or commonscat == '' then
--      local ccat = mw.loadData("Module:Monument/commonscat")
--      if ccat[region] then
--        commonscat = ccat[region][(district or '') .. '_' .. (municipality or '')] or ccat[region][district] or ccat[region]["default"] 
--      end
--    end
    t = t .. [[&categories=]] .. mw.uri.encode(commonscat or '', "PATH")
    t = t .. '&uselang=ru <span class="mw-ui-button">Загрузить&nbsp;фото</span>]'
  end
  t = t .. "\n|}<hr>"
  return t
 end

return p;