Redigerer
Modul:Autocategories
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!
-- module for replicating categories listed at Wikidata -- © John Erling Blad, Creative Commons by Attribution 3.0 -- don't pollute with globals require('strict') -- @var our exposed table local Autocategories = {} -- find the first entry that seems to be a Q-id -- @param table args argument list from the frame -- @return string first matching argument function Autocategories._findQid( args ) for key, value in ipairs( args ) do if value ~= '' and string.match(value, '^Q%d+$') then return value end end local entity = mw.wikibase.getEntity() if entity then return entity['id'] end return nil end -- find id for all statements -- @param table statement well-defined structure for a statement -- @return values for the provided statements function Autocategories._findId(statements) local ids = {} for _,statement in pairs(statements) do local mainsnak = statement["mainsnak"] if mainsnak then local datavalue = mainsnak['datavalue'] if datavalue then local value = datavalue['value'] if value then local entityType = value['entity-type'] local numericId = value['numeric-id'] if entityType and numericId and entityType == 'item' then ids[1+#ids] = numericId end end end end end return ids end -- find the P-ids from the argument lists -- note that this maintain argument sequence -- @param table vector forwarded from the method call -- @return table hash of matching arguments function Autocategories._findPidsInArgs( pids, args ) for _,value in ipairs( args ) do local _,_,action,pid = string.find(value, '^%s*(!?)(P%d+)%s*$') if pid then pids[pid] = action == '' and true or nil end end return pids end -- find the P-ids from the frame lists -- note that this maintain argument sequence -- @param table vector forwarded from the method call -- @return table hash of matching arguments function Autocategories._findPidsInFrames( ... ) local pids = {} --pids[1+#pids] = arg.n for i = 1,arg.n do local frame = arg[i] if frame then local firstArg = frame.args[1] --do return mw.text.split( firstArg, ',', true ) end if firstArg then pids = Autocategories._findPidsInArgs( pids, mw.text.split( firstArg, ',', true ) ) end end end return pids end -- find the P-ids from the frame lists -- note that this does not maintain argument sequence -- @param table frames forwarded from the method call -- @return table hash of matching arguments function Autocategories.findPids( ... ) local pids = Autocategories._findPidsInFrames( ... ) local keys = {} for key,_ in pairs( pids ) do keys[1+#keys] = key end return keys end -- do all allowable categorizations -- @param table frame arguments from invoke -- @return string status report during development, should be an empty string function Autocategories.run( frame ) --local qid = Autocategories._findQid( frame.args ) --first call is when the call is encapsulated in a template local pids = frame:getParent() and Autocategories.findPids( frame, frame:getParent() ) or Autocategories.findPids( frame ) if #pids == 0 then return '' end local entity = mw.wikibase.getEntity() if not entity then return '' end local categories = {} for _,pid in pairs(pids) do local statements = entity:getBestStatements( pid ) if statements then for _,id in pairs( Autocategories._findId( statements ) ) do local sitelink = mw.wikibase.sitelink( 'Q'..id ) if sitelink then categories[1+#categories] = (pid == 'P910' and '[['..sitelink..'| ]]' or '[['..sitelink..']]') end end end end return table.concat( categories, '\n' ) end -- export the accesspoint return Autocategories
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:Autocategories/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