Redigerer
Modul:Valuta
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
--- Class for handling valuta entries local mt = {} local Valuta = setmetatable( {}, mt ) --- Fast lookup of all entities known to the lib local entitiesById = {} local idByCode = mw.loadData( 'Module:Valuta/data' ) --- The local language local contentLanguage = mw.getContentLanguage() --- Lookup of missing class members function Valuta:__index( key ) -- luacheck: no self return Valuta[key] end local validEntityTypes = {} validEntityTypes['item'] = true local validSchemaVersion = {} validSchemaVersion[2] = true function assertEntity( entity ) assert( entity ) assert( entity.id) assert( entity.type) assert( entity.schemaVersion ) assert( validSchemaVersion[entity.schemaVersion] ) assert( validEntityTypes[entity.type] ) end function assertEntityId( id ) assert( string.match( id, '^[qQ]%d+$') ) end --- Create a new instance function Valuta.create( ... ) local self = setmetatable( {}, Valuta ) self:_init( ... ) return self end --- Initialize a new instance function Valuta:_init( ... ) self._items = {} for _,arg in ipairs( {...} ) do local tpe = type( arg ) local value = arg if tpe == 'function' then value = arg() tpe = type( value ) end if tpe == 'string' then local id = idByCode[value] assertEntityId( id ) local entity = Valuta.loadEntity( id ) assertEntity( entity ) self.entity = entity elseif tpe == 'table' then assertEntity( value ) local entity = value Valuta.registerEntity( entity, true ) self.entity = entity elseif tpe == 'number' then self.value = value else error() end end return self end function mt.__call( tbl, ... ) return tbl.create( ... ) end function Valuta.registerEntity( entity, noAssert ) assertEntity( entity, noAssert ) local ucEntityId = string.upper( entity.id ) entitiesById[ucEntityId] = entity end function Valuta.loadEntity( entityId, noAssert ) assertEntityId( entityId, noAssert ) local ucEntityId = string.upper( entityId ) local entity = entitiesById[ucEntityId] if not entity then entity = mw.wikibase.getEntity( ucEntityId ) if not entity then return nil end Valuta.registerEntity( entity, true ) end return entity end function Valuta:getValue() return self.value end function Valuta:getBestStatements( propertyId ) return self.entity:getBestStatements( propertyId ) end function Valuta:getSymbolStatements() local claims = self:getBestStatements( 'P5061' ) if #claims == 0 then claims = self:getBestStatements( 'P558' ) end return claims end function Valuta:getSymbols() local rendered = {} for i,v in ipairs( self:getSymbolStatements() ) do rendered[i] = mw.wikibase.renderSnak( v.mainsnak ) end return rendered end function Valuta:getCodeStatements() return self:getBestStatements( 'P498' ) end function Valuta:getCodes() local rendered = {} for i,v in ipairs( self:getCodeStatements() ) do rendered[i] = mw.wikibase.renderSnak( v.mainsnak ) end return rendered end function Valuta:getLabel( lang ) return lang and self.entity:getLabel( lang ) or self.entity:getLabel() end function Valuta:getPriceStatements() local claims = self:getBestStatements( 'P2284' ) return claims end function Valuta:getSitelink( site ) return site and self.entity:getSitelink( site ) or self.entity:getSitelink() end function Valuta:formatTitlestring( lang ) local items = {} local label = self:getLabel( lang ) local symbol = unpack( self:getSymbols() ) if label and symbol then local formatted = string.format( '%s (%s)', label, symbol ) table.insert( items, formatted ) elseif label and not symbol then local formatted = string.format( '%s', label ) table.insert( items, formatted ) elseif not label and symbol then local formatted = string.format( '%s', symbol ) table.insert( items, formatted ) end local value = self:getValue() if value then --local formatted = string.format( '%g', value ) local formatted = contentLanguage:formatNum( value ) if #items > 0 then table.insert( items, ': ' ) end table.insert( items, formatted ) end return table.concat( items, '' ) end function Valuta:formatWikitext( site ) local items = {} local sitelink = self:getSitelink( site ) local code = unpack( self:getCodes() ) if sitelink and code then local formatted = string.format( '[[%s|%s]]', sitelink, code ) table.insert( items, formatted ) elseif sitelink and not code then local formatted = string.format( '[[%s]]', sitelink ) table.insert( items, formatted ) elseif not sitelink and code then local formatted = string.format( '[[%s]]', code ) table.insert( items, formatted ) end local value = self:getValue() if value then local formatted = contentLanguage:formatNum( value ) if #items > 0 then table.insert( items, ' ' ) end table.insert( items, formatted ) end return table.concat( items, '' ) end function Valuta:format( site, lang ) local html = mw.html.create( 'span' ) :addClass( 'note' ) :addClass( 'nowrap' ) :attr( 'title', self:formatTitlestring( lang ) ) :wikitext( self:formatWikitext( site ) ) return html end function Valuta.isValidCode( code ) return not not idByCode[code] end function Valuta.parse( str ) local items = {} local len = string.len( str ) local index = 1 local first = nil local last = nil local step = 10 local keep = index repeat local valuta = nil keep = index step = step - 1 first, last = string.find( str, '^%s+', index) if first then index = last+1 end first, last = string.find( str, '^[A-Z][A-Z][A-Z] *[0-9%.,]+[0-9]', index) if first then if string.find( string.sub( str, -1 ), '[%.,]' ) then last = last - 1 end local code = string.sub( str, first, first+2 ) local value = contentLanguage:parseFormattedNumber( string.sub( str, first+3, last ) ) if value and Valuta.isValidCode( code ) then valuta = Valuta.create( code, value ) end end if valuta then table.insert( items, string.sub( str, keep, first-1 ) ) table.insert( items, tostring( valuta:format() ) ) else table.insert( items, string.sub( str, keep, keep ) ) end index = (last or keep)+1 until (index > len) return table.concat( items, '' ) end function Valuta.query( frame ) local valutas = {} if not frame.args[1] then frame = frame:getParent() end for _,v in ipairs( frame.args ) do table.insert( valutas, Valuta.parse( v ) ) end return table.concat( valutas, ', ' ) end return Valuta
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Forhåndsvis en side som bruker denne malen
Mal som brukes på denne siden:
Modul:Valuta/dok
(
rediger
)
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Modul
Diskusjon
English
Visninger
Les
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon