require("strict")
local p = {}
function p.import(frame)
local wikiqid = "Q328"
local resolveEntity = require("Module:ResolveEntityId")._id
local coord2text = require("Module:Coordinates/sandbox")._coord2text
local args = frame.args or frame:getParent().args
if not args.config then
return "No configuation."
end
local config = {}
for c1,col in ipairs(mw.text.split(args.config,",")) do
config[c1] = mw.text.split(col,"-")
end
if not args.page then
return "No page specified."
end
local content = mw.title.new(args.page):getContent() -- read page specified
content = string.match(content,"%{%|(.+)%|%}") -- keep table only
local rows = mw.text.split(content,"|-",true) -- split table into rows
local output = ""
for rn,row in ipairs(rows) do
local import = {}
local qid
local columns = mw.text.split(row,"|") -- split table rom into columns
table.remove(columns,1) -- remove content before the first | character
--table.remove(columns,1) -- remove heading row
for cn,col in ipairs(columns) do
for c,ref in ipairs(mw.ustring.match(col,"%<ref%>.+%<%/ref%>")) do
col = mw.ustring.gsub(col,ref,"")
end
col = mw.text.trim(col)
if config[cn] then
if config[cn][1] == "label" then
local rawarticle = string.match(col,'%[%[(.+)%|') or string.match(col,'%[%[(.+)%]%]')
if rawarticle then
qid = resolveEntity(rawarticle)
end
elseif config[cn][1] == "wikilink" then
local rawarticle = string.match(col,'%[%[(.+)%|') or string.match(col,'%[%[(.+)%]%]')
local val
if rawarticle then
val = resolveEntity(rawarticle)
if val then
import[#import+1] = {}
import[#import].property = config[cn][2]
import[#import].value = val
end
end
elseif config[cn][1] == "year" then
import[#import+1] = {}
import[#import].property = config[cn][2]
import[#import].value = "+" .. col .. "-00-00T00:00:00Z/9"
elseif config[cn][1] == "quantity" then
import[#import+1] = {}
col = string.gsub(col,",","") -- remove any commas
import[#import].property = config[cn][2]
if string.upper(string.sub(config[cn][3],1,1)) == "Q" then
config[cn][3] = string.sub(config[cn][3],2)
end
import[#import].value = col .. "U" .. config[cn][3]
-- elseif config[cn][1] == "coord" then
-- import[#import+1] = {}
-- import[#import].property = config[cn][2]
-- import[#import].value = coord2text(col,"lat") .. "/" .. coord2text(col,"long")
end
end
end
if qid then
local qslink = ""
for cn = 1,#import do
qslink = qslink .. qid .. "|" .. import[cn].property .. "|" .. import[cn].value .. "|S143|" .. wikiqid .. "||"
end
output = output .. '<span class="qs">[[File:Commons to Wikidata QuickStatements.svg|20px|link=https://quickstatements.toolforge.org/#/v1=' .. mw.uri.encode(qslink,"PATH") .. ']]</span>'
end
end
return output
end
return p