Module:Sandbox/P.a.a/Test
Τεκμηρίωση module[προβολή] [επεξεργασία] [ιστορικό] [ανανέωση]
Πολύ αρχικό στάδιο για τη δημηιουργία module για πληροφορίες προσώπου με υποστήριξη wikidata και whitelist
Το αποτέλεσμα φαίνεται στη σελίδα Χρήστης:P.a.a/Test
Η παραπάνω τεκμηρίωση ενσωματώνεται από τη σελίδα Module:Sandbox/P.a.a/Test/τεκμηρίωση. (επεξεργασία | ιστορικό) Οι συντάκτες μπορούν να πειραματίζονται στο πρόχειρο (δημιουργία | αντίγραφο) και στις δοκιμαστικές σελίδες (δημιουργία) του module. Υποσελίδες αυτού του module. |
local Date = require('Module:Sandbox/P.a.a/Test/Date')._Date;
local infoboximage = require('Module:InfoboxImage').InfoboxImage;
local infobox = require('Module:Infobox').infobox;
local separatedentries = require('Module:Separated entries')._main
local wdmodule = require('Module:Wikidata')
local navbar = require('Module:Navbar')._navbar;
local TableTools = require('Module:TableTools')
local cfg = require('Module:Sandbox/P.a.a/Test/config')
local args = {};
local extraargs = {};
local rowcounter = 0;
local rows = {}
local fetchwikidata = 'ALL'
local qid = nil;
local A = {}
setmetatable(A, {
__index = function(t, key)
local found = nil
if('table' == type(cfg.arguments[key].aliases)) then
for _,v in ipairs(cfg.arguments[key].aliases) do
if args[v] then
found = args[v];
break
end
end
else
found = args[cfg.arguments[key].aliases];
end
return found
end
})
local WD = {}
setmetatable(WD,{
__index = function(t, key)
local found = false;
if nil == cfg.arguments[key].wikidata then return nil end
if('table' == type(cfg.arguments[key].aliases)) then
for _,v in ipairs(cfg.arguments[key].aliases) do
if (fetchwikidata == 'ALL') or TableTools.inArray(fetchwikidata, v) then
found = true;
break
end
end
elseif (fetchwikidata == 'ALL') or TableTools.inArray(fetchwikidata, cfg.arguments[key].aliases) then
found = true;
end
local ret = nil;
if found then
local wdfn = cfg.arguments[key].wikidata.fn
local wdparams = mw.clone(cfg.arguments[key].wikidata.params)
if qid then
wdparams.id = qid
end
ret = wdmodule[wdfn](wdparams)
end
return ret
end
})
local function split(str, pat)
local t = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap = str:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t, mw.text.trim(cap))
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, mw.text.trim(cap))
end
return t
end
local function addrow(row)
rowcounter = rowcounter + 1;
local rowstr = tostring(rowcounter);
if row.header then
rows["header" .. rowstr] = row.header
elseif row.label and row.data then
rows["label" .. rowstr] = row.label;
rows["data" .. rowstr] = row.data;
elseif row.data then
rows["data" .. rowstr] = row.data
end
end
local function addHeader(str)
addrow({header=str})
end
local function addData(str)
addrow({data=str})
end
local function addLabelData(str1, str2)
addrow({
label=str1,
data=str2
})
end
local function addStyle(styles)
local stylekeys = {"bodyclass","bodystyle","abovestyle","aboveclass","headerstyle","imagestyle","captionstyle","belowclass","belowstyle"};
for k, v in ipairs(stylekeys) do
if styles[v] then
rows[v] = styles[v]
end
end
end
local function addBelow(str)
rows["below"] = str;
end
local function addAbove(str)
rows["above"] = str
end
local function is_set( var )
return not (var == nil or var == '');
end
local function any_set(props)
for _,v in ipairs(props) do
if is_set(A[v]) or WD[v] then return true end
end
return false
end
local function main(frame)
local pframe = frame:getParent();
for k, v in pairs( pframe.args ) do
if v ~= '' then
args[k] = v;
end
end
for k, v in pairs( frame.args ) do
extraargs[k] = v;
end
if args.fetchwikidata and (args.fetchwikidata ~= 'ALL') then
fetchwikidata = split(args.fetchwikidata,';')
end
qid = args.id
addStyle({
bodyclass = 'biography vcard',
headerstyle = 'background:#EEEEEE; line-height: 1.5em',
imagestyle = 'padding:0.7em 0.8em',
captionstyle = 'font-size:0.9em;',
belowclass = 'plainlinks noprint',
belowstyle = 'border-top:1px solid #DFDFDF; text-align:right; font-size:90%;',
abovestyle = A['AboveStyle']
})
addAbove(separatedentries({
separator='<br/>',
A['HonorificPrefix'] or WD['HonorificPrefix'],
A['Name'] or WD['Name'],
A['ΗonorificΣuffix'] or WD['ΗonorificΣuffix']
}));
rows['image'] = infoboximage{args={image=(A['Image'] or WD['Image']),upright='yes'}}
if is_set(A['Caption']) then rows['caption'] = A['Caption'] end
local generalinfoparams = {
'NativeName', 'NativeNameLang', 'Pronunciation', 'ShortName', 'BirthName', 'BirthDate', 'BirthPlace', 'Baptised',
'DisappearedDate', 'DisappearedPlace', 'Status', 'DeathDate', 'DeathPlace', 'DeathCause', 'MannerOfDeath', 'BurialPlace',
'BurialPlaceCoordinates', 'RestingPlace', 'RestingPlaceCoordinates', 'Residence', 'Nationality', 'OtherNames', 'Nickname',
'Ethnicity', 'Citizenship', 'Demeship', 'Religion', 'FeastDay', 'ReligiousOrder', 'Height', 'Weight'
}
if any_set(generalinfoparams) then
addHeader('Γενικές πληροφορίες')
--addLabelData('Όνομα στη μητρική γλώσσα', A['NativeName'] or WD['NativeName'])
--addLabelData('Προφορά', A['Pronunciation'] or WD['Pronunciation'])
addLabelData('Όνομα γεννήσεως', A['BirthName'] or WD['BirthName'])
addLabelData('Σύντομο όνομα', A['ShortName'] or WD['ShortName'])
local rawBirthDate = wdmodule.getRawValueFromLua({id=qid, property='P569'})
local rawDeathDate = wdmodule.getRawValueFromLua({id=qid, property='P570'})
local birth = Date(rawBirthDate.year, rawBirthDate.month, rawBirthDate.day)
local death = Date(rawDeathDate.year, rawDeathDate.month, rawDeathDate.day)
local age = death-birth
addLabelData('Γέννηση', separatedentries({
separator='<br/>',
A['BirthDate'] or WD['BirthDate'],
A['BirthPlace'] or WD['BirthPlace']
}))
addLabelData('Βάπτιση', A['Baptised'])
addLabelData('Θάνατος', separatedentries({
separator='<br/>',
A['DeathDate'] or WD['DeathDate'] .. ' (' .. age.years .. ' χρονών)',
A['DeathPlace'] or WD['DeathPlace']
}))
end
local educationparams = {
'NativeLanguage', 'Languages', 'Education', 'AlmaMater'
}
if any_set(educationparams) then
addHeader('Εκπαίδευση και γλώσσες')
addLabelData('Μητρική γλώσσα', A['NativeLanguage'] or WD['NativeLanguage'])
addLabelData('Ομιλούμενες γλώσσες', A['Languages'] or WD['Languages'])
addLabelData('Εκπαίδευση', A['Education'] or WD['Education'])
addLabelData('Σπουδές', A['AlmaMater'] or WD['AlmaMater'])
end
addBelow('[//www.wikidata.org/wiki/Special:ItemByTitle?site=elwiki&page=' .. mw.title.getCurrentTitle():partialUrl() .. ' δεδομένα] ' ..
navbar({'Πληροφορίες προσώπου', mini=true, fontstyle='font-size:75%;'}))
return infobox(rows);
end
return {
main = main,
}