Module:Ημερολόγια
Τεκμηρίωση module[δημιουργία] [ανανέωση]
p ={}
local df = require("Module:DateFunctions")
--επιστρέφει το κείμενο σε div με σφάλμα
--και εντάσσει τη σελίδα σε κατηγορία με σφάλματα
errorhere = function(errstring)
return '<div class="error">' .. errstring .. '</div>[[Κατηγορία:Σελίδες με σφάλματα στο ημερολόγιο]]'
end
--επιστρέφει true αν είναι αλφαριθμητικό και έχει έστω και έναν χαρακτήρα
exeikati = function(onearg)
if onearg == nil then
return false
end
if type(onearg) == 'string' then
return (mw.ustring.len(onearg) > 0)
else
return false
end
end
monthtable = function (poiosmhnas)
local currentdays = {}
local tmpnum = 0
local monthnum = tonumber(poiosmhnas)
local monthname = df['μήνες'][monthnum]['όνομα']
local monthg = df['μήνες'][monthnum]['γεν']
local etos = os.date('*t').year
local firstday = df.get_day_of_week (1, monthnum, etos)
if firstday == 7 then
firstday = 1
else
firstday = firstday + 1
end
local monthdays = df['μήνες'][monthnum]['ημ']
--φέρνει 29 για το φλεβάρη από το: Module:DateFunctions
if monthnum == 2 and (not df.isleapyear(etos)) then monthdays = 28 end
for xcounter = 1,7 do
if firstday > xcounter then
currentdays[xcounter] = '|colspan="1"| '
else
tmpnum = (xcounter - firstday + 1)
currentdays[xcounter] = '| [[' .. tmpnum .. ' ' .. monthg .. '|' .. tmpnum ..']]'
end
end
for xcounter = 8,28 do
tmpnum = (xcounter - firstday + 1)
currentdays[xcounter] = '| [[' .. tmpnum .. ' ' .. monthg .. '|' .. tmpnum ..']]'
end
for xcounter = 29,35 do
if monthdays + firstday > xcounter then
tmpnum = (xcounter - firstday + 1)
currentdays[xcounter] = '| [[' .. tmpnum .. ' ' .. monthg .. '|' .. tmpnum ..']]'
else
currentdays[xcounter] = '|colspan="1"| '
end
end
newtable = [=[{| style="float:right; margin-left: 1em; text-align:center; background-color:#f9f9f9; border:1px solid #aaaaaa;font-size:90%;"
|- style="background:#ccccff;"
|colspan="7"|'''[[]=] .. monthname .. [=[]]'''
|- style="background:#ccccff;"
|width="14%"| Κυρ.
|width="14%"| Δευτ.
|width="14%"| Τρ.
|width="14%"| Τετ.
|width="14%"| Πέμ.
|width="14%"| Παρ.
|width="14%"| Σάβ.
|-]=]
local daytoshow = 0
for ycounter = 1,5 do
for xcounter = 1,7 do
--if ycounter < 2 then
--daytoshow = xcounter
--else
daytoshow = (((ycounter - 1 ) * 7) + xcounter)
--mw.log(type(daytoshow))
newtable = newtable .. '\n' .. currentdays[daytoshow] .. '\n'
end
newtable = newtable .. '\n' .. '|-'
--αν έχει 28 ημέρες και τις έχεις ήδη δείξει βγες
if (monthdays + firstday) < 29 and (daytoshow > 27) then break end
end
newtable = newtable .. [=[
|colspan="7"|
|- style="background:#ccccff"
|colspan="7"| [[]=] .. etos .. ']]\n' .. [=[
|}]=]
return newtable
end
--συνάρτηση που δίνει τον πίνακα του μήνα (με το τρέχον έτος του server)
p['πίνακαςμήνα'] = function (frame)
local lemmaargs = frame:getParent().args
if lemmaargs[1] == nil then return errorhere('Δεν δόθηκε η παράμετρος μήνας!') end
return frame:preprocess(monthtable(lemmaargs[1]))
end
--συνάρτηση που δίνει τις ημέρες του μήνα (με το τρέχον έτος του server)
--σε σειρά οριζόντια
p['πίνακαςημερώνμήνα'] = function (frame)
local lemmaargs = frame:getParent().args
if lemmaargs[1] == nil then return errorhere('Δεν δόθηκε η παράμετρος μήνας!') end
local etos = os.date('*t').year
local monthnum = tonumber(poiosmhnas)
local monthname = df['μήνες'][monthnum]['όνομα']
local monthgen = df['μήνες'][monthnum]['γεν']
local monthdays = df['μήνες'][monthnum]['ημ']
-- αν δεν τις βάζουμε όλες του φλεβάρη...
--if monthnum == 2 and df.isleapyear(etos) then monthdays = 29 end
local oneline = '<center>'
for xcounter = 1, monthdays do
oneline = oneline .. ' [[' .. xcounter .. ' ' .. monthgen .. '|' .. xcounter .. ']] '
if monthdays > xcounter then oneline = oneline .. '|' end
end
oneline = oneline .. '</center>'
return frame:preprocess(oneline)
end
p['5μήνες'] = function (frame)
local lemmaargs = frame:getParent().args
if lemmaargs['μ'] == nil then return errorhere('Δεν δόθηκε η παράμετρος μήνας!') end
local output = '<center>'
local month = tonumber(lemmaargs['μ'])
firstmonth = month-3
for xcounter = 1,2 do
output = output .. '[[' .. df.getmonthname(df.realmonthnum(firstmonth + xcounter)) .. ']] | '
end
output = output .. '<b>[[' .. df.getmonthname(df.realmonthnum(firstmonth + 3)) .. ']]</b>'
for xcounter = 4,5 do
output = output .. ' | [[' .. df.getmonthname(df.realmonthnum(firstmonth + xcounter)) .. ']]'
end
output = output .. '</center>'
return frame:preprocess(output)
end
--###############################
--το σκεπτικό είναι να μετατρέπουμε σε ακέραιο αριθμό το έτος.
--Το πρόβλημα είναι ότι στους υπολογισμούς προκύπτουν και έτη μηδέν.
--Αυτά δεν μπορούν απλά να μετατραπούν σε έτος 1 μ.Χ. ή 1 π.Χ.
--(Θα πρέπει να γνωρίζουμε αν προήλθαν από πρόσθεση ή αφαίρεση)
--Μάλλον καλύτερη προσέγγιση είναι:
--Αντιστοιχούμε όλα τα έτη μ.Χ. στον αντίστοιχο ακέραιο αριθμό
--και τα έτη π.Χ. σε αρνητικό στον οποίο προσθέτουμε 1
--Έτσι έχουμε
--(..., 235 π.Χ., ..., 3 π.Χ., 2 π.Χ, 1 π.Χ.)
--(..., -234, ..., -2, -1, 0)
--για τα υπόλοιπα (δεκαετίες, αιώνες, χιλιετίες)
--χρησιμοποιούμε ένα οποιοδήποτε πραγματικό έτος τους
--για να πάρουμε την ονομασία τους
centurystring = function(etosasnum)
--αν είναι αρνητικός αριθμός
--τα έτη 0 μέχρι -99 είναι στον 1ο π.Χ. αιώνα
--αυτό το παίρνουμε επειδή μετατρέπονται σε 100 μέχρι 199
if etosasnum < 1 then
return tostring(math.floor((100+math.abs(etosasnum))/100)) .. 'ος αιώνας π.Χ.'
end
--αλλιώς προσθέτουμε 99
--ώστε τα έτη 1 μέχρι 100
--να μας δώσουν 100 μέχρι 199
return tostring(math.floor((etosasnum+99)/100)) .. 'ος αιώνας'
end
decadestring = function(etosasnum)
--ας μην έχουμε δεκαετίες π.Χ. για την ώρα
--για αυτές θα χρειαστεί άλλη προσέγγιση αφού πρέπει να περιλμβάνουν 2 έτη στον τίτλο
--ας τις περιορίσουμε επίσης στο διάστημα 1700 μέχρι τώρα
if etosasnum < 1 then return nil end
return tostring(10 * math.floor(etosasnum/10) )
end
yearstring = function(etosasnum)
if etosasnum < 1 then
return tostring(math.abs(etosasnum) + 1) .. ' π.Χ.'
end
return tostring(etosasnum)
end
--[=[Δοκιμές στη κονσόλα αποσφαλμάτωσης (debug console) στο κάτω μέρος
με
=p.aiones(1)
=p.aiones(1999)
=p.aiones(0) --δηλαδή 1 π.Χ.
κλπ.
]=]
p.aiones = function(etosasnum)
local output = '[[' .. centurystring(etosasnum - 200) .. '|◄]]'
output = output .. ' [[' .. centurystring(etosasnum - 100) .. ']]'
output = output .. ' [[' .. centurystring(etosasnum) .. ']]'
local tempstr = centurystring(etosasnum + 100)
--ΠΡΟΣΟΧΗ!! expensive!!
--ίσως να ελέγχουμε αν είναι μετά από τώρα και να μην το εμφανίζουμε
--θεωρώντας ότι δεν θα υπάρχει
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. ']]'
tempstr = centurystring(etosasnum + 200)
--ΠΡΟΣΟΧΗ!! expensive!!
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. '|►]]'
end
end
return output
end
--[=[Δοκιμές στη κονσόλα αποσφαλμάτωσης (debug console) στο κάτω μέρος
με
=p.dekaeties(1)
=p.dekaeties(1999)
=p.dekaeties(0) --δηλαδή 1 π.Χ. --εεε... χμμμμ... Όχι ακόμα!
κλπ.
]=]
p.dekaeties = function(etosasnum)
--Πρέπει να αποφασιστεί τι θα κάνουμε
--1. Να ελέγχουμε αν υπάρχει (expensive)
--2. Να το βάζουμε έτσι κι αλλιώς (θα έχει κόκκινα που μπορεί κάποιος χρήστης να τα δημιουργήσει μόνο και μόνο επειδή έκανε κλικ)
--3. Να έχουμε ένα όριο προς τα πίσω πριν από το οποίο δεν θα δημιουργήσουμε δεκαετίες (υπάρχουν όμως ήδη ακόμα και π.Χ.)
--Η τρέχουσα προσέγγιση είναι η 2
--Για την ώρα δεν επιστρέφει πριν το 30 μ.Χ.
if etosasnum < 30 then return nil end
local output = '[[Δεκαετία ' .. decadestring(etosasnum - 20) .. '|◄]]'
output = output .. ' [[Δεκαετία ' .. decadestring(etosasnum - 10) .. ']]'
output = output .. ' [[Δεκαετία ' .. decadestring(etosasnum) .. ']]'
local tempstr = 'Δεκαετία ' .. decadestring(etosasnum + 10)
--ΠΡΟΣΟΧΗ!! expensive!!
--ίσως να ελέγχουμε αν είναι μετά από τώρα και να μην το εμφανίζουμε
--θεωρώντας ότι δεν θα υπάρχει
if mw.title.new(tempstr).exists then
output = output .. ' [[Δεκαετία ' .. tempstr .. ']]'
tempstr = 'Δεκαετία ' .. decadestring(etosasnum + 20)
--ΠΡΟΣΟΧΗ!! expensive!!
if mw.title.new(tempstr).exists then
output = output .. ' [[Δεκαετία ' .. tempstr .. '|►]]'
end
end
return output
end
--[=[Δοκιμές στη κονσόλα αποσφαλμάτωσης (debug console) στο κάτω μέρος
με
=p.eth(1)
=p.eth(1999)
=p.eth(0) --δηλαδή 1 π.Χ.
κλπ.
]=]
p.eth = function(etosasnum)
local output = '[[' .. yearstring(etosasnum - 10) .. '|◄◄]]'
output = output .. ' [[' .. yearstring(etosasnum - 5) .. '|◄]]'
output = output .. ' [[' .. yearstring(etosasnum - 4) .. ']]'
output = output .. ' [[' .. yearstring(etosasnum - 3) .. ']]'
output = output .. ' [[' .. yearstring(etosasnum - 2) .. ']]'
output = output .. ' [[' .. yearstring(etosasnum - 1) .. ']]'
output = output .. ' [[' .. yearstring(etosasnum) .. ']]'
local tempstr = yearstring(etosasnum + 1)
--ΠΡΟΣΟΧΗ!! expensive!!
--καλύτερα ίσως να ελέγχουμε αν είναι μετά από σήμερα και να μην το εμφανίζουμε
--θεωρώντας ότι δεν θα υπάρχει
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. ']]'
tempstr = yearstring(etosasnum + 2)
--ΠΡΟΣΟΧΗ!! expensive!!
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. ']]'
tempstr = yearstring(etosasnum + 3)
--ΠΡΟΣΟΧΗ!! expensive!!
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. ']]'
tempstr = yearstring(etosasnum + 4)
--ΠΡΟΣΟΧΗ!! expensive!!
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. ']]'
tempstr = yearstring(etosasnum + 5)
--ΠΡΟΣΟΧΗ!! expensive!!
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. '|►]]'
tempstr = yearstring(etosasnum + 10)
--ΠΡΟΣΟΧΗ!! expensive!!
if mw.title.new(tempstr).exists then
output = output .. ' [[' .. tempstr .. '|►►]]'
end
end
end
end
end
end
return output
end
--για χρήση στο πρότυπο έτος και έτος π.Χ.
--εμπεριέχει και την κατηγορία
--δεν εμφανίζει σωστά το div
p['πρότυποέτος'] = function (frame)
PAGENAME = mw.title.getCurrentTitle().text
--αν έχει π.Χ. να το αφαιρούμε και να γίνει αρνητικός αριθμός
local startx, stopx
startx, stopx = mw.ustring.find(PAGENAME, ' π.Χ.')
if startx == nil then
etosasnum = tonumber(PAGENAME)
--αν έχει στον τίτλο το π.Χ.
--τον μετατρέπω σε αρνητικό +1
--το 1 π.Χ. θα γίνει 0, το 2 π.Χ. θα γίνει -1
else
etosasnum = 1-tonumber(mw.ustring.sub(PAGENAME,1,startx-1))
end
--δεν επεξεργάζεται το <div> με preprocess
local output = ''
output = p.aiones(etosasnum)
--η "εδώ" προσέγγιση είναι να μην εμφανίζονται δεκαετίες πριν το 1900
--(ίσως να γίνεται έλεγχος για το αν υπάρχουν αλλά είναι expensive!!!-)
--Επίσης μπορεί να αφαιρεθεί εξ ολοκλήρου η εμφάνιση των δεκαετιών
--Αν χρειαστεί μπορούμε να τις προσθέσουμε στο πινακάκι
--if etosasnum >= 1900 then
--output = output .. '<br/>' .. p.dekaeties(etosasnum)
--end
output = output .. '<br/>' .. p.eth(etosasnum)
--Κατηγορία χ αιώνας
--output = output .. ' [[Κατηγορία:' .. centurystring(etosasnum) .. '|#' .. mw.ustring.format(etosasnum,'%5d') .. ']]'
local preprocessed = frame:preprocess(output)
local boiled = '<div class="metadata" style="border: 1px solid #ccd2d9; background: white; padding: 0.5em 1em 0.5em 1em; text-align: center;">'
boiled = boiled .. preprocessed .. '</div> [[Κατηγορία:' .. centurystring(etosasnum) .. '|#' .. mw.ustring.format(etosasnum,'%5d') .. ']]'
return boiled
--return frame:preprocess(output)
end
--###############################
return p