Modül:Solar eclipse

Modül belgelemesi
local p = {}local args = {}local data_module_prefix = "Modül:Solar eclipse/db/"local function ifnotempty(s,a,b)if (s and s ~= '') thenreturn aelsereturn bendendlocal function ifexist(page)if not page then return false endif mw.title.new(page).exists then return true endreturn falseendlocal function parsedate(y,m,d)local lang = mw.language.getContentLanguage()d = (tonumber(d) < 10) and ('0' .. tonumber(d)) or (d)m = (tonumber(m) < 10) and ('0' .. tonumber(m)) or (m)local success, result = pcall(lang.formatDate, lang, 'j F Y', y .. '-' .. m .. '-' .. d)return success and result or nilendlocal function parsecoord(frame, s)local lat = s:match('^%s*([%d][%d.]*)%s*[NS]%s*[%d][%d.]*[EW]%s*$')local  NS = s:match('^%s*[%d][%d.]*%s*([NS])%s*[%d][%d.]*[EW]%s*$')local lon = s:match('^%s*[%d][%d.]*%s*[NS]%s*([%d][%d.]*)[EW]%s*$')local  EW = s:match('^%s*[%d][%d.]*%s*[NS]%s*[%d][%d.]*([EW])%s*$')if( lat and NS and lon and EW ) thenreturn frame:expandTemplate{ title = 'coord', args = {lat, NS, lon, EW, 'type:landmark'} }elsereturn sendendlocal function parsekm(frame, s)if(s and s:match('^%s*[%d][%d.]*%s*$')) thenreturn frame:expandTemplate{ title = 'convert', args = {s, 'km', 'mi', abbr = 'on'} }elseif(s and s ~= '') thenreturn s .. ' km'elsereturn nilendendendlocal function parsetime(s)if(s and s ~= '') thenlocal min = s:match('^%s*(%d+)m%s*%d+s%s*$')local sec = s:match('^%s*%d+m%s*(%d+)s%s*$')if( min and sec ) thenreturn tostring(tonumber(min)*60 + tonumber(sec)) .. '&nbsp;saniye' ..' (' .. min .. '&nbsp;d ' .. sec .. '&nbsp;s)'endendreturn sendlocal function cataloglink(c, y, m, d)y, m, d = tonumber(y), tonumber(m), tonumber(d)if tonumber(c) and y and m and d thend = (d < 10) and ('0' .. d) or dm = (m < 10) and ('0' .. m) or mreturn '[https://eclipse.gsfc.nasa.gov/SEsearch/SEdata.php?Ecl=+' .. y .. m .. d .. ' ' .. c .. ']'elsereturn cendendlocal function loadsolardb(frame, s)local yearstr = s:match('^%s*(%d%d%d%d)[A-Z][a-z][a-z]%d%d%s*$') or ''local function setarg(k, v)if(v and v ~= '') thenv = mw.ustring.gsub(v, '^%s*%-(%d)', '−%1')args[k] = vendendif( yearstr ~= '' ) thenlocal dbsubpage = math.floor( (tonumber(yearstr) - 1) / 50 ) * 5local dbpage  = data_module_prefix .. tostring( dbsubpage )if (ifexist(dbpage)) thenlocal data = mw.loadData(dbpage)local dargs = data[s] or error('Hata: Güneş tutulması bilgi kutusunda bilinmeyen tarih ' .. s .. ' ' , 0)setarg('date', parsedate(dargs['y'], dargs['m'] or dargs['m3'] or dargs['m2'], dargs['d'] or dargs['d2']))setarg('image', (dargs['Ph'] and dargs['Ph'] ~= '') and '[[Dosya:' .. dargs['Ph']  .. '|300px]]' or nil)setarg('caption', dargs['PhCap'])setarg('map', (dargs['Map'] and dargs['Map'] ~= '') and '[[Dosya:' .. dargs['Map']  .. '|300px]]' or nil)setarg('map_caption', 'Harita')setarg('type_ref', '')setarg('cat', cataloglink(dargs['Cat'], dargs['y'], dargs['m'] or dargs['m3'] or dargs['m2'], dargs['d'] or dargs['d2']) )setarg('nature', dargs['Ty'])setarg('gamma', dargs['Gam'])setarg('magnitude', dargs['Mag'])setarg('saros', dargs['Saros'] and '[[Güneş Sarosu ' .. dargs['Saros'] .. '|'  .. dargs['Saros'] .. ']]')setarg('saros_sequence', dargs['Mem'])setarg('saros_total', dargs['Max'])setarg('max_eclipse_ref', '')setarg('duration', parsetime(dargs['Dur']))setarg('location', '')setarg('coords', parsecoord(frame,dargs['Loc']))setarg('max_width', parsekm(frame,dargs['Wid']))setarg('times_ref', '')setarg('start_partial', dargs['TiPB'])setarg('start_total', dargs['TiTB'])setarg('start_central', '')setarg('greatest_eclipse', dargs['TiG'])setarg('end_central', '')setarg('end_total', dargs['TiTE'])setarg('end_partial', dargs['TiPE'])endendendlocal function infobox(frame)local abovestr = ifnotempty(args['date'],        (args['date'] or '') .. " Güneş tutulması","Kullanım talimatları için bkz. [[Şablon:Güneş tutulması bilgi kutusu]]")local bgcolor = args['background'] or args['bgcolour'] or ''local mapstr = ifnotempty(args['map'],"<div style='padding-bottom:0.5em;'>" ..(args['map'] or '') .. ifnotempty(args['map_caption'],"<div style='line-height:1.2em; padding-top:0.1em;'>" ..(args['map_caption'] or '') .. "</div>", '') .. '</div>')return frame:expandTemplate{ title = 'infobox', args = {["gövdesınıfı"] = "vevent",["gövdebiçimi"] = "width:25em; text-align:left; font-size:88%;",["üst"] = abovestr,["üstsınıf"] = "summary",["üstbiçim"] = "padding-bottom:0.25em; background:" .. bgcolor .. "; line-height:1.2em; text-align:center; font-size:115%;",------------------ Images and maps ------------------["resim"] = args['image'] or '',["resimbiçimi"] = "padding-bottom:0.5em;",["altyazı"] = args['caption'] or '',["başlıkbiçimi"] = "background:#eee; font-size:105%;",["veri1"] = mapstr,------------- Tutulmanın türü ve saros -------------["başlık2"] = "Tutulmanın türü" .. (args['type_ref'] or ''),["etiket3"]  = "Tür",["veri3"]   = args['nature'] or '',["etiket4"]  = "[[Gama (tutulma)|Gama]]",["veri4"]   = args['gamma'] or '',["etiket5"]  = "[[Tutulma büyüklüğü|Büyüklük]]",["veri5"]   = args['magnitude'] or '',------------------ Maksimum tutulma ------------------["başlık7"] = "Maksimum tutulma" .. (args['max_eclipse_ref'] or ''),["etiket8"] = "Süre",["veri8"] = args['duration'] or '',["etiket9"] = "Yer",["veri9"] = args['location'] or '',["sınıf9"] = "location",["etiket10"] = "Koordinatlar",["veri10"] = args['coords'] or '',["etiket11"] = "Maks.&nbsp;kuşak&nbsp;genişliği",["veri11"] = args['max_width'] or '',----------------------- Zaman -----------------------["başlık12"] = "Zaman ([[UTC]])" .. (args['times_ref'] or ''),["etiket13"] = "(P1) Parçalı tutulmanın başlangıcı",["veri13"] = args['start_partial'] or '',["etiket14"] = "(U1) Tam tutulmanın başlangıcı",["veri14"] = args['start_total'] or '',["etiket15"] = "(U2) Merkezi tutulmanın başlangıcı",["veri15"] = args['start_central'] or '',["etiket16"] = "En büyük tutulma",["veri16"] = args['greatest_eclipse'] or '',["etiket17"] = "(U3) Merkezi tutulmanın sonu",["veri17"] = args['end_central'] or '',["etiket18"] = "(U4) Tam tutulmanın sonu",["veri18"] = args['end_total'] or '',["etiket19"] = "(P4) Parçalı tutulmanın sonu",["veri19"] = args['end_partial'] or '',------------------------ Event references -------------------------["başlık20"] = "Kaynaklar",["etiket21"] = "[[Saros döngüsü|Saros]]",["veri21"] = (args['saros'] or '').. " (" .. (args['saros_sequence'] or '') .. " - " .. (args['saros_total'] or '') .. ")",["etiket22"] = "Katalog # (SE5000)",["veri22"] = args['cat'] or '',} }endfunction p.box(frame)args = require('Modül:Bağımsız değişkenler').getArgs(frame, {wrappers = 'Şablon:Güneş tutulması bilgi kutusu'})if( args['2'] and args['2'] ~= '') thenloadsolardb(frame,args['2'])elseif( args['1'] and args['1'] ~= '') thenloadsolardb(frame,args['1'])endreturn infobox(frame)endreturn p