Modul:Messierobjekter
Moduldokumentasjon
local p = {}
-- henter inn nødvendige moduler
local getValueFromID = require('Modul:Sandkasse/Cocu/Wikidata').getValueFromID -- muliggjør arbitrary access
local ISOdate = require('Modul:ISOtilNorskdato').isodato -- formatterer dato
local function legend(frame, args)
local opencluster = mw.getCurrentFrame():expandTemplate{ title = 'Legend2'
, args = { '#eeeeff', '[[Stjernehop]]/[[Åpen stjernehop]] ', ['border'] = '1px solid #aaaaaa' } }
local globularcluster = mw.getCurrentFrame():expandTemplate{ title = 'Legend2'
, args = { '#ffe4b5', '[[Kulehop]] ', ['border'] = '1px solid #aaaaaa' } }
local nebula = mw.getCurrentFrame():expandTemplate{ title = 'Legend2'
, args = { '#ffcccc', '[[Stjernetåke]] ', ['border'] = '1px solid #aaaaaa' } }
local planetarynebula = mw.getCurrentFrame():expandTemplate{ title = 'Legend2'
, args = { '#ccffee', '[[Planetarisk tåke]] ', ['border'] = '1px solid #aaaaaa' } }
local supernovaremnant = mw.getCurrentFrame():expandTemplate{ title = 'Legend2'
, args = { '#ffccee', '[[Supernovarest]] ', ['border'] = '1px solid #aaaaaa' } }
local galaxy = mw.getCurrentFrame():expandTemplate{ title = 'Legend2'
, args = { '#ffffcc', '[[Galakse]] ', ['border'] = '1px solid #aaaaaa' } }
local other = mw.getCurrentFrame():expandTemplate{ title = 'Legend2'
, args = { '#ffffff', 'Andre', ['border'] = '1px solid #aaaaaa' } }
local result = opencluster .. globularcluster .. nebula ..
planetarynebula .. supernovaremnant .. galaxy .. other .. '\n'
return result
end
local function findQnr(frame)
return {
M1 = 10934, M2 = 11099, M3 = 11202, M4 = 11212, M5 = 11217, M6 = 11225, M7 = 11234, M8 = 11243, M9 = 11258, M10 = 11267,
M11 = 11294, M12 = 11307, M13 = 11312, M14 = 11320, M15 = 11332, M16 = 11349, M17 = 11357, M18 = 11370, M19 = 11374, M20 = 11377,
M21 = 11383, M22 = 11392, M23 = 11396, M24 = 13618, M25 = 13623, M26 = 13626, M27 = 13628, M28 = 13644, M29 = 13647, M30 = 13653,
M31 = 2469, M32 = 13720, M33 = 13724, M34 = 13729, M35 = 13736, M36 = 13738, M37 = 13878, M38 = 13880, M39 = 13883, M40 = 13886,
M41 = 13897, M42 = 13903, M43 = 13906, M44 = 13760, M45 = 13423, M46 = 13910, M47 = 13942, M48 = 13951, M49 = 13952, M50 = 13956,
M51 = 13957, M52 = 13958, M53 = 13960, M54 = 13962, M55 = 13965, M56 = 13967, M57 = 13969, M58 = 13970, M59 = 13971, M60 = 13976,
M61 = 13978, M62 = 13980, M63 = 13981, M64 = 13983, M65 = 13986, M66 = 13992, M67 = 13997, M68 = 14000, M69 = 14002, M70 = 14004,
M71 = 14006, M72 = 14008, M73 = 14009, M74 = 14013, M75 = 14014, M76 = 14015, M77 = 14017, M78 = 14018, M79 = 14019, M80 = 14021,
M81 = 14024, M82 = 14026, M83 = 14030, M84 = 14033, M85 = 14035, M86 = 2577, M87 = 14041, M88 = 14048, M89 = 14337, M90 = 14343,
M91 = 14344, M92 = 14346, M93 = 14347, M94 = 14349, M95 = 14351, M96 = 14354, M97 = 14359, M98 = 14361, M99 = 14364, M100 = 14365,
M101 = 14371, M102 = 14374, M103 = 14376, M104 = 4647, M105 = 14377, M106 = 4658, M107 = 4755, M108 = 4751, M109 = 4746, M110 = 4662,
}
end
local function header(frame, args)
return [=[{| class="wikitable"
![[Messierkatalogen|Messier-<br />nummer]]
![[NGC-katalogen|NGC]]-/IC-nummer
!Vanlig navn
!Bilde
!Objekt
!Oppdager
!Oppdaget
![[Stjernebilde]]
!Ref]=]
end
function p.row(frame, args)
retval = ''
i = 1
repeat
-- finner Q-nummeret til Messierobjektet
local qnr = findQnr(frame)
qnr = tostring(qnr['M' .. i])
-- definerer Q-iden for kobling mot Wikidata
Qid = 'Q' .. qnr
-- definerer Messiernummer
Mnr = 'M' .. i
-- definerer hva som skal stå i kolonnen for 'vanlig navn'. i denne tabellen brukes artikkelens etikett på Wikidata
if mw.wikibase.label("Q" .. qnr) == nil then
label = ''
else
label = mw.wikibase.label("Q" .. qnr)
end
local entity = mw.wikibase.getEntity("Q" .. qnr)
-- definerer hvilken side på nowp det skal lenkes til og hva som skal vises som lenketekst
local sitelink = mw.wikibase.sitelink("Q" .. qnr)
if sitelink == nil then
if label == '' then
sitelink = '[[Messier ' .. i .. '|' .. Mnr .. ']]'
else
sitelink = '[[' .. label .. '|' .. Mnr .. ']]'
end
else
sitelink = '[[' .. sitelink .. '|' .. Mnr .. ']]'
end
-- definerer om det skal vises noe i kolonnen for 'vanlig navn'. hvis objektet ikke har noe annet navn enn 'Messier xxx', så vises det ingenting
if label:match("Messier%s%d") or label:match("M%d") or label:match("M%s%d") then
label = ''
else
label = label
end
-- -- henter ut bilde fra Wikidata
local p18 = mw.wikibase.getEntityObject("Q" .. qnr).claims.P18
if not p18 then image = "" else image = "[[Fil:" .. p18[1].mainsnak.datavalue.value .. "|75px]]" end
-- henter ut objekttype(r) fra Wikidata
local claims = entity.claims["P31"]
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if label == nil then label = "" end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = label
end
end
objecttype = table.concat(out, "<br /> ")
else
objecttype = entity:formatPropertyValues("P31", mw.wikibase.entity.claimRanks).value
end
else
objecttype = ""
end
-- definerer radfargen på bakgrunn av objekktype
if objecttype == nil then
color = ""
elseif objecttype:match("..kulehop..") then
color = 'style="background:#ffe4b5"'
elseif objecttype:match("..stjernetåke..") or objecttype:match("..H.II..") or objecttype:match("..refleksjonståke..") then
color = 'style="background:#ffcccc"'
elseif objecttype:match("..galakse..") then
color = 'style="background:#ffffcc"'
elseif objecttype:match("..stjernehop..") or objecttype:match("..stjernesky..") then
color = 'style="background:#eeeeff"'
elseif objecttype:match("..supernova..") then
color = 'style="background:#ffccee"'
elseif objecttype:match("..planet..") then
color = 'style="background:#ccffee"'
else
color = 'style="background:#ffffff"'
end
-- henter ut oppdager(e) fra Wikidata
local claims = entity.claims["P61"]
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = label
end
end
discoverer = table.concat(out, "<br /> ")
else
discoverer = entity:formatPropertyValues("P61", mw.wikibase.entity.claimRanks).value
end
else
discoverer = ""
end
-- henter ut oppdagelsesdato fra Wikidata
discovered = ISOdate({args = {[1] = getValueFromID{args = {[1] = Qid, [2] = 'P575', [3] = 'hent_wikidata'}}}})
-- henter ut stjernebilde fra Wikidata
constellation = getValueFromID({args = {[1] = Qid, [2] = 'P59', [3] = 'hent_wikidata'}})
-- henter ut avstand fra Wikidata
distance = getValueFromID({args = {[1] = Qid, [2] = 'P2583', [3] = 'hent_wikidata'}})
-- henter ut tilsynelatende størrelsesklasse fra Wikidata
appmag = getValueFromID({args = {[1] = Qid, [2] = 'P1215', [3] = 'hent_wikidata'}})
-- henter ut luminositet fra Wikidata
luminosity = getValueFromID({args = {[1] = Qid, [2] = 'P2060', [3] = 'hent_wikidata'}})
-- henter ut andre katalognavn fra Wikidata
local claims = mw.wikibase.getEntity("Q" .. qnr).claims["P528"]
if claims then
catname = entity:formatPropertyValues("P528", mw.wikibase.entity.claimRanks).value
else
catname = ''
end
if string.match(catname, "NGC %d%d%d%d%d") == nil then
if string.match(catname, "NGC %d%d%d%d") == nil then
if string.match(catname, "NGC %d%d%d") == nil then
if string.match(catname, "NGC %d%d") == nil then
if string.match(catname, "NGC %d") == nil then
if string.match(catname, "IC %d%d%d%d%d") == nil then
if string.match(catname, "IC %d%d%d%d") == nil then
if string.match(catname, "IC %d%d%d") == nil then
if string.match(catname, "IC %d%d") == nil then
if string.match(catname, "IC %d") == nil then
ngcnr = "–"
else
ngcnr = string.match(catname, "IC %d")
end
else
ngcnr = string.match(catname, "IC %d&d")
end
else
ngcnr = string.match(catname, "IC %d%d%d")
end
else
ngcnr = string.match(catname, "IC %d%d%d%d")
end
else
ngcnr = string.match(catname, "IC %d%d%d%d%d")
end
else
ngcnr = string.match(catname, "NGC %d")
end
else
ngcnr = string.match(catname, "NGC %d%d")
end
else
ngcnr = string.match(catname, "NGC %d%d%d")
end
else
ngcnr = string.match(catname, "NGC %d%d%d%d")
end
else
ngcnr = string.match(catname, "NGC %d%d%d%d%d")
end
-- lager en referanse
-- definerer variabel i referansens url
if i < 10 then url0 = '00' elseif i > 99 then url0 = "" else url0 = '0' end
-- definerer variabel i referansens dato
if i < 105 then year = '1771' else year = '1783' end
ref = mw.getCurrentFrame():expandTemplate{ title = 'Kilde www', args = { ['tittel'] = 'Messier ' .. i, ['språk'] = 'engelsk', ['besøksdato'] = '2015-09-18',
['url'] = 'http://messier.seds.org/m/m' .. url0 .. i .. '.html', ['forfatter'] = 'Messier, Charles', ['dato'] = year } } -- skriver referanse
refstart = '<ref name="Messier' .. i .. '">'
refend = '</ref>'
-- setter sammen raden(e)
retval = retval .. '\n' .. [=[
|- ]=] .. color .. '\n' .. [=[
| ]=] .. sitelink .. '\n' .. [=[
|align="center"| ]=] .. ngcnr .. '\n' .. [=[
| <i>]=] .. label .. '</i>\n' .. [=[
|align="center"| ]=] .. image .. '\n' .. [=[
| ]=] .. objecttype .. '\n' .. [=[
| ]=] .. discoverer .. '\n' .. [=[
| ]=] .. discovered .. '\n' .. [=[
| ]=] .. constellation .. '\n' .. [=[
| ]=] .. frame:preprocess(refstart .. ref .. refend) .. '\n'
-- kjører loop
i=i+1
-- stopper her
until i > 110
-- returner radene
return retval
end
local function bottom(frame, args)
return [=[
|-
![[Messierkatalogen|Messier-<br />nummer]]
![[NGC-katalogen|NGC]]-/IC-nummer
!Vanlig navn
!Bilde
!Objekt
!Oppdager
!Oppdaget
![[Stjernebilde]]
!Ref
|}]=]
end
function p.build(frame, args)
legend = legend(frame, args)
header = header(frame, args)
row = p.row(frame, args)
bottom = bottom(frame, args)
return legend .. header .. row .. bottom
end
function p.navbox(frame, args)
navbox = ''
i = 1
repeat
-- finner Q-nummeret til Messierobjektet
local qnr = findQnr(frame)
qnr = tostring(qnr['M' .. i])
-- definerer Messiernummer
Mnr = 'M' .. i
-- finner labelen fra Wikidata
if mw.wikibase.label("Q" .. qnr) == nil then
label = ''
else
label = mw.wikibase.label("Q" .. qnr)
end
-- definerer hvilken side på nowp det skal lenkes til og hva som skal vises som lenketekst
local sitelink = mw.wikibase.sitelink("Q" .. qnr)
if i == 110 then
separator = ''
else
separator = ' · '
end
if sitelink == nil then
if label == '' then
sitelink = '[[Messier ' .. i .. '|' .. Mnr .. ']]' .. separator
else
sitelink = '[[' .. label .. '|' .. Mnr .. ']]' .. separator
end
else
sitelink = '[[' .. sitelink .. '|' .. Mnr .. ']]' .. separator
end
navbox = navbox .. sitelink
i=i+1
until i>110
return navbox
end
return p