Modul:Monumente
Documentația acestui modul poate fi creată la Modul:Monumente/doc
globalFrame = nil
lmi = {};
local coords = require("Modul:Coordonate")
local getArgs = require('Modul:Arguments').getArgs
function lmi.stripLinks(text)
local replacedText = mw.ustring.gsub(mw.text.killMarkers(text), "%[%[([^%]|]*)|?([^%]]*)%]%]", "%2")
return replacedText
end
function lmi.reportErrorLink(code)
local query = "action=edit§ion=new&preloadtitle=" .. mw.uri.encode("Eroare la [[Cod:LMI:" .. code .. "|]]") .. "&preload=P:MI/PRE"
--local uri = mw.uri.fullUrl("Proiect:Monumente istorice/Erori", query) -- too slow
local uri = "//ro.wikipedia.org/w/index.php?title=Proiect:Monumente_istorice/Erori&" .. query
return "[" .. tostring(uri) .. " Raportează eroare]"
end
function lmi.isCopyrighted(code, century, copyright)
if string.find(code, "-I-", 1, true) ~= nil then
return false
elseif copyright == "no" or copyright == "nu" then
return false
elseif copyright and copyright ~= "" then
year = tonumber(copyright)
if year == nil then
return true
elseif year + 70 < tonumber(os.date("%Y", os.time())) then
return false
else
return true
end
elseif century and string.find(century, "sec", 1, true) ~= nil and string.find(century, "XX", 1, true) == nil then
return false
elseif century and string.find(century, "sec", 1, true) == nil and string.match(century, "19%d%d", 1, true) == nil then
return false
else
return true
end
end
function lmi.uploadImageLink(code, commons, name,
lat, lon,
isCopyrighted,
label)
local upload = "["
if isCopyrighted == false then
upload = upload .. "//commons.wikimedia"
else
upload = upload .. "//ro.wikipedia"
end
upload = upload .. ".org/w/index.php?title=Special:UploadWizard&campaign=wlm-ro&id=" .. code .. "&description=" .. mw.uri.encode(lmi.stripLinks(name)) .. "&uselang=ro"
if lat ~= '' then
upload = upload .. "&lat=" .. lat
end
if lon ~= '' then
upload = upload .. "&lon=" .. lon
end
if commons ~= '' and isCopyrighted == false then
local t = mw.text.split( commons, ':', true)
upload = upload .. "&categories=" .. mw.uri.encode(t[#t])
end
upload = upload .. " " .. label .. "]"
return upload
end
function lmi.uploadVideoLink(code, commons, name, lat, lon, isCopyrighted, label)
if isCopyrighted then
return lmi.uploadImageLink(code, commons, name, lat, lon, isCopyrighted, label)
end
local upload = "[//video2commons.toolforge.org/?filedesc="
local location = ""
if lat ~= '' then
location = "{{Location|" .. lat .. "|" .. lon .. "}}"
end
local categories = ""
if commons ~= '' then
local t = mw.text.split( commons, ':', true)
categories = "[[Category:" .. t[#t] .. "]]"
end
contents = mw.uri.encode([[=={{int:filedesc}}==
{{Information
|description={{ro|]] .. lmi.stripLinks(name) .. [[}}{{Monument istoric|]] .. code .. [[}}
|date=]] .. os.date("%F %T") .. [[
|source={{own}}
|author=~~~
|permission={{cc-by-sa-4.0}}
}}
]] .. location .. categories)
-- [[
-- {{Wiki Loves Monuments 2019|ro}}
-- ]] .. categories)
upload = upload .. contents .. " " .. label .. "]"
return upload
end
function lmi.link2image(code, image, plan, commons, isCopyrighted)
local text = ''
local imageLink = ''
if image ~= '' then
text = "[[" .. image .. "|150px"
imageLink = image
elseif plan ~= '' then
text = "[[" .. plan .. "|150px"
imageLink = plan
else
return ''
end
if commons ~= '' and isCopyrighted == false then
return text .. "|link=" .. commons .. "|Alte imagini]]"
else
return text .. "]]"
end
end
function lmi.imageCell(frame)
local args = getArgs(frame)
local code = args[1] or ''
local image = args[2] or ''
local plan = args[3] or ''
local commons = args[4] or ''
local name = args[5] or ''
local lat = args[6] or ''
local lon = args[7] or ''
local century = args[8] or ''
local copyright = args[9] or ''
return lmi.buildImageCell(code, image, plan, commons, name, lat, lon, century, copyright)
end
function lmi.buildImageCell(code, image, plan, commons, name, lat, lon, century, copyright)
local isCopyrighted = lmi.isCopyrighted(code, century, copyright)
local imglink = lmi.link2image(code, image, plan, commons, isCopyrighted)
local upload = "\n<div class=\"noprint plainlinks small\">Încarcă " ..
lmi.uploadImageLink(code, commons, name, lat, lon, isCopyrighted, "foto") .. " | " ..
lmi.uploadVideoLink(code, commons, name, lat, lon, isCopyrighted, "video") .. "</div>"
if imglink ~= '' then return imglink else return imglink .. upload end
--return "***" .. string.match(century, "19%d%d", 1, true) .. "***"
end
function lmi.link2RAN(frame)
local code = frame.args[1]
elements = mw.text.split(code, '.', true)
if (table.maxn(elements) < 2) then
return code
end
ranCode = elements[1] .. "." .. elements[2]
return "[https://ran.cimec.ro/?codran=" .. ranCode .. " " .. code .. "]"
end
local function truncate(nr, decimals)
local n = tonumber(nr)
if n ~= nil then
return math.floor(n*10^decimals) / (10^decimals)
else
return nr
end
end
function lmi.coord(frame)
globalFrame = frame
args = {}
for i, v in ipairs(frame.args) do
local decimals = 5
args[i] = truncate(v, decimals)
end
args["name"] = mw.text.killMarkers(frame.args["name"])
args["full"] = false
--mw.logObject(args)
return coords.coordImpl(args)
--{{#invoke:Coordonate|simpleCoord|{{{Lat|{{{OsmLat|}}}}}}|N|{{{Lon|{{{OsmLon|}}}}}}|E|name={{{Cod|}}}}}
end
-- This function implements {{ElementLMI}}
function lmi.getElementLine(frame)
globalFrame = frame
local args = getArgs(frame)
local htmlRow = mw.html.create('tr')
:attr('id', args["Cod"])
local codPostfix = ""
--{{#if:{{{NotăCod|}}}{{{RefCod|}}}|{{#tag:ref|{{{NotăCod|}}}|name={{#if:{{{RefCod|}}}|{{{RefCod}}}|{{urlencode:{{{Cod|}}}}}}}}}|}}
if args['NotăCod'] then
local ref = frame:callParserFunction{ name = '#tag:ref', args = {
args['NotăCod'],
name = args['RefCod'] or args['Cod']
} }
codPostfix = codPostfix .. ref
end
if args['FostCod'] then
codPostfix = codPostfix .. "<br />(fost " .. args['FostCod'] .. ")"
end
if args['Cod92'] then
codPostfix = codPostfix .. "<br /><small>(LMI92: " .. args['Cod92'] .. ")</small>"
end
if args['Cod55'] then
codPostfix = codPostfix .. "<br /><small>(LMI55: " .. args['Cod55'] .. ")</small>"
end
if args['CodRan'] then
codPostfix = codPostfix .. "<br /><small>(RAN: " .. args['CodRan'] .. ")</small>"
end
htmlRow:tag('td')
:tag('span'):attr('class', 'nowrap'):wikitext(args['Cod']):done()
:wikitext(codPostfix)
:done()
htmlRow:tag('td'):wikitext(args['Denumire'] ):done()
:tag('td'):wikitext(args['Localitate']):done()
--coords
local decimals = 5
args['Lat'] = truncate(args['Lat'] or args['OsmLat'] or nil, decimals)
args['Lon'] = truncate(args['Lon'] or args['OsmLon'] or nil, decimals)
local coordCell = args['Adresă'] or ''
if args['Lat'] and args['Lon'] then
cargs = {}
cargs[1] = args['Lat']
cargs[2] = "N"
cargs[3] = args['Lon']
cargs[4] = "E"
cargs["name"] = mw.text.killMarkers(args['Denumire'])
cargs["full"] = false
coordCell = coordCell .. "<br/>" .. coords.coordImpl(cargs)
end
htmlRow:tag('td'):wikitext(coordCell):done()
-- datare, creatori
local dateCell = args['Datare'] or ''
if args['Datare'] and args['Creatori'] then
dateCell = dateCell .. "<br/>"
end
dateCell = dateCell .. (args['Creatori'] or '')
htmlRow:tag('td'):wikitext(dateCell):done()
--image
local imageCell = lmi.buildImageCell(args["Cod"] or '', args["Imagine"] or '',
args["Plan"] or '', args["Commons"] or '',
args['Denumire'] or '',
args['Lat'] or '', args['Lon'] or '',
args['Datare'] or '', args['Copyright'] or '')
htmlRow:tag('td'):attr('align', 'center'):wikitext(imageCell):done()
--error
local errlink = lmi.reportErrorLink(args["Cod"] or '')
htmlRow:tag('td'):attr("class", "noprint nomobile plainlinks small"):wikitext(errlink):done()
htmlRow:allDone()
return tostring(htmlRow)
end
-- This function implements {{ÎnceputTabelLMI}}
function lmi.getHeaderLine(frame)
globalFrame = frame
local htmlRow = mw.html.create('tr')
:tag('th'):wikitext('[[Cod LMI]]'):done()
:tag('th'):wikitext('Denumire'):done()
:tag('th'):wikitext('Localitate'):done()
:tag('th'):attr('class', 'unsortable'):wikitext('Localizare'):done()
:tag('th'):attr('class', 'unsortable'):wikitext('Datare, Creatori'):done()
:tag('th'):attr('class', 'unsortable'):wikitext('Imagine'):done()
if frame:getParent().args["erori"] ~= nil and frame:getParent().args["erori"] ~= 1 then
htmlRow:done()
else
htmlRow:tag('th'):attr('class', 'noprint nomobile unsortable'):wikitext('Erori'):done()
end
htmlRow:allDone()
return tostring(htmlRow)
end
return lmi