Mòdul:Proofreadpage index template
Mòdul que construeix la informació mostrada al namespace Llibre (Index).
El mòdul és cridat per MediaWiki:Proofreadpage index template, però pot ser provat amb el següent codi:
{{#invoke:Proofreadpage index template|fields|paràmetres}}
fields
és la funció del mòdul encarregada de construir la pàgina, segons la resta de paràmetres.
- Paràmetres:
Qid
(obligatori): és l'identificador de Wikidata del Llibre. Per exemple, «Q19533394». A partir d'ell es recuperen les següents dades del Llibre des de Wikidata, explicades a Ajuda:Llibre:Autor
,Títol
,Data
,Lloc
,Traductor
,Il·lustrador
iEditor
. Aquests paràmetres, si s'informen a mà, tenen preferència sobre els de Wikidata. La resta de dades (Subtítol, Compositor, Pròleg, Impressor, i Número d'edició) són capturades pel mòdul des de Wikidata, si existeixen, sense possibilitat de modificar-les des del formulari del Llibre (ni com a paràmetres d'aquest mòdul).
Pàgines
(obligatori): és la taula amb les pàgines del Llibre que MediaWiki:Proofreadpage index data config s'encarrega de passar a MediaWiki:Proofreadpage index template. Per fer proves, podem posar qualsevol literal.
NomPag
(obligatori): és el {{NOMPAGE}} de la pàgina del Llibre. Per fer proves podem posar el nom del fitxer, com «Mar y cel (1903).djvu». Es fa servir per mostrar la imatge del fitxer així com l'enllaç per purgar les pàgines.
NomPagE
(obligatori): és el {{NOMPAGEE}} de la pàgina del Llibre. Per fer proves podem posar el nom del fitxer, com «Mar_y_cel_(1903).djvu». Es fa servir per mostrar la imatge del fitxer.
Sumari
(opcional): només es pot informar a mà. Correspon als enllaços als diferents capítols.
Exemples
- Codi mínim de proves:
{{#invoke:Proofreadpage index template|fields|NomPag=Mar y cel (1903).djvu|NomPagE=Mar_y_cel_(1903).djvu|Pàgines=proves}}
- Codi mínim de proves que captura dades de Wikidata:
{{#invoke:Proofreadpage index template|fields|NomPag=Mar y cel (1903).djvu|NomPagE=Mar_y_cel_(1903).djvu|Pàgines=proves|Qid=Q19533394}}
--------------------------------------------------------------------------------
-- Adaptat de https://en.wikisource.org/wiki/Module:Proofreadpage_index_template
-- This is a module to implement logic for [[MediaWiki:Proofreadpage index template]]
--------------------------------------------------------------------------------
local Wikidata = require('Module:Wikidata')
local getArgs = require('Module:Arguments').getArgs
local p = {} --p stands for package
-- mapping of field ID to field properties
local headings = {
author = { txt = 'Autor', },
compositor = { txt = 'Compositor' },
year = { txt = 'Data d\'edició', },
source = { txt = 'Digitalització', },
edition = { txt = 'Edició', },
editor = { txt = 'Editor', },
epilogue = { txt = 'Epíleg' },
illustrator = { txt = 'Il·lustrador' },
printer = { txt = 'Impressor', },
place = { txt = 'Lloc d\'edició', },
quality = { txt = 'Nivell', },
parts = { txt = 'Parts' },
prologue = { txt = 'Pròleg' },
subtitle = { txt = 'Subtítol', },
title = { txt = 'Títol', },
translator = { txt = 'Traductor', },
volum = { txt = 'Volum' },
wikidata = { txt = 'Wikidata', }
}
local function get_heading(id)
if headings[id] then
return headings[id]['txt']
end
error( "Can't find heading for ID: " .. id )
end
local function construct_imatge(content, sumari, nompage, qid, nompag)
if nompage == nil or nompage == '' then error('nompage no pot ser nul') end
local s = ''
--Mirem si a WD hi ha 1 o més P996, agafem el que coincideixi, i li mirem el P4714 (nº pàg. amb títol).
local P4714 = ''
if qid then
local FileOnCommonsStmts = mw.wikibase.getAllStatements (qid, 'P996');
if FileOnCommonsStmts then
for _, stmt in pairs( FileOnCommonsStmts ) do
local commonsFilename = stmt['mainsnak']['datavalue']['value']
--Cal decodificar nompag, per exemple, per l'apòstrof "'" arriba com "'"
if mw.text.decode(nompag) == commonsFilename then
P4714 = Wikidata.claim{item=qid, property="P996", qualifier="P4714", lang="ca", list=false, editicon=false}
end
end
end
end
s = s .. '<td><div style="float:left;">'
if content then
else
if P4714 == '' then
content = '1' --si no hi ha res de res
else
content = P4714
end
if content == nil then content = '1' end
end
if tonumber(content) == nil then
s = s .. content
else
s = s .. '<span id="ws-cover" style="display:none; speak:none;">'
s = s .. nompage .. "/" .. content .. "</span>"
s = s .. '[[File:' .. nompage .. '|page=' .. content .. '|frameless]]'
end
s = s .. '</div></td>\n'
if sumari == nil then
s = s .. '<td>'
else
s = s .. '<td width="45%">'
end
s = s .. '<table>' --es tanca a construct_field_pagines
return s
end
local function construct_field_pagines(content, nompage)
if nompage == nil or nompage == '' then return "Error nompage a construct_field_pagines" end
if content == nil or content == '' then return "Error content a construct_field_pagines" end
local s = ''
s = s .. '\n<td valign="top"><span class="plainlinks">'
s = s .. '<b>[//ca.wikisource.org/wiki/Index:' .. nompage .. '?action=purge Pàgines]</b></span></td>\n'
s = s .. '<td valign="top" align="left" bgcolor="#F0F0F0">\n'
s = s .. '<div style="padding-left:0.5em">\n' .. content .. '</div>'
s = s .. '</td>'
s = s .. '</table>'
return s
end
local function construct_field_sumari(content)
local s = ''
if content then
s = '<td width="45%">' .. content .. '</td>'
end
return s
end
-- construct a basic "field" row
local function construct_field(id, content, qid, nompag)
if id == nil then error( "Error a construct_field" ) end
local CatError = "[[Categoria:Llibres amb discrepàncies respecte a Wikidata"
local contentAux = content
local noVT = false --hi ha contingut a WD i a VT (cal esborrar-lo)
local noWD = false --hi ha contingut a VT però no a WD (cal moure'l i esborrar-lo)
if id == 'author' then
if qid then
local AutorP50 = Wikidata.claim{item=qid, property="P50", lang="ca", list=true, editicon=false}
if AutorP50 then
if AutorP50 == 'valor desconegut' then AutorP50 = '[[Autor:Anònim|Anònim]]' end
if content then
noVT = true
else
content = AutorP50
end
else
if content then
noVT = true
else
AutorP50 = Wikidata.claim{item=qid, property="P2093", lang="ca", list=true, editicon=false} -- p.ex. Q122228052
if AutorP50 then content = AutorP50 end
end
end
if not AutorP50 and content then noWD = true end
end
end
if id == 'translator' then
if qid then
local wTraductor = Wikidata.claim{item=qid, property="P655", lang="ca", list=true, editicon=false}
if wTraductor then
if content then
noVT = true
else
content = wTraductor
end
end
if not wTraductor and content then noWD = true end
end
end
if id == 'title' then
if qid then
local wSiteLink = Wikidata.getSiteLink{item=qid}
local wTitol = Wikidata.claim{item=qid, property="P1476", lang="ca", list=false, editicon=false}
if wSiteLink then
if content then
noVT = true
else
if wTitol then
content = "''[[" .. wSiteLink .. "|" .. wTitol .. "]]''"
else
content = "''[[" .. wSiteLink .. "]]''"
end
end
else
if content then
noWD = true
else
if wTitol then content = "''[[" .. wTitol .. "]]''" end
end
end
end
end
if id == 'subtitle' then --No vé per paràmetre
if qid then
local wSubtitol = Wikidata.claim{item=qid, property="P1680", lang="ca", list=false, editicon=false}
if wSubtitol then
content = "''" .. wSubtitol .. "''"
else
content = ''
end
end
end
if id == 'volum' then --No vé per paràmetre
if qid then
local wVolum = Wikidata.claim{item=qid, property="P478", lang="ca", list=true, editicon=false}
if wVolum then
content = wVolum
else
content = ''
end
end
end
if id == 'parts' then --No vé per paràmetre
if qid then
local wParts = Wikidata.claim{item=qid, property="P527", lang="ca", list=true, editicon=false}
if wParts then
content = wParts
else
content = ''
end
end
end
if id == 'prologue' then --No vé per paràmetre
if qid then
local wProleg = Wikidata.claim{item=qid, property="P2679", lang="ca", list=true, editicon=false}
if wProleg then
content = wProleg
else
content = ''
end
end
end
if id == 'epilogue' then --No vé per paràmetre
if qid then
local wEpileg = Wikidata.claim{item=qid, property="P2680", lang="ca", list=true, editicon=false}
if wEpileg then
content = wEpileg
else
content = ''
end
end
end
if id == 'illustrator' then
if qid then
local wIlustrator = Wikidata.claim{item=qid, property="P110", lang="ca", list=true, editicon=false}
if wIlustrator then
if content then
noVT = true
else
content = wIlustrator
end
end
if not wIlustrator and content then noWD = true end
end
end
if id == 'compositor' then --No vé per paràmetre
if qid then
local wCompositor = Wikidata.claim{item=qid, property="P86", lang="ca", list=true, editicon=false}
if wCompositor then
content = wCompositor
else
content = ''
end
end
end
if id == 'editor' then
if qid then
local wPublisher = Wikidata.claim{item=qid, property="P123", lang="ca", list=true, editicon=false, formatting='label'}
if wPublisher then
if content then
noVT = true
else
content = wPublisher
end
end
if not wPublisher and content then noWD = true end
end
end
if id == 'printer' then --No vé per paràmetre
if qid then
local wImpressor = Wikidata.claim{item=qid, property="P872", lang="ca", list=false, editicon=false, formatting='label'}
if wImpressor then
content = wImpressor
else
content = ''
end
end
end
if id == 'place' then
if qid then
local wPlace = Wikidata.claim{item=qid, property="P291", lang="ca", list=false, editicon=false, formatting='label'}
if wPlace then
if content then
noVT = true
content = content .. "[[Categoria:Llibres editats a " .. contentAux .. "]]"
else
local LlistaLlocs = Wikidata.claim{item=qid, property="P291", lang="ca", list=true, editicon=false, formatting='label'}
content = LlistaLlocs .. "[[Categoria:Llibres editats a " .. wPlace .. "]]" --només categ. 1er
end
end
if not wPlace and content then noWD = true end
else
if content then
content = content .. "[[Categoria:Llibres editats a " .. contentAux .. "]]"
end
end
end
if id == 'year' then
if qid then
local wData = Wikidata.claim{item=qid, property="P577", lang="ca", list=false, editicon=false, formatting=" j xg Y"}
if wData then
if content then
noVT = true
else
content = wData
end
end
if not wData and content then noWD = true end
end
end
if id == 'edition' then --No vé per paràmetre
if qid then
local wEdicio = Wikidata.claim{item=qid, property="P393", lang="ca", list=false, editicon=false, formatting='label'}
if wEdicio then
content = wEdicio
else
content = ''
end
end
end
if id == 'source' then
if content == nil then
if nompag == nil then
content = content .. CatError .. "|Nompag]]"
else
content = "[[:File:" .. nompag .. "|Fitxer]]"
end
else
noWD = true
end
end
if id == 'wikidata' then
if nompag == nil then
return CatError .. "|Pagename]]"
end
if content == nil then
return "[[Categoria:Llibres no connectats amb Wikidata]]"
end
content = "[[File:Wikidata-logo.svg|20px|link=d:" .. contentAux .. "]] [[d:" .. contentAux .. "|" .. contentAux .. "]]"
if mw.wikibase.entityExists(qid) == false then
content = content .. CatError .. "|Qid]]"
end
if Wikidata.validProperty{"P996", item=qid} == nil then
local wTitol = mw.title.getCurrentTitle() --Nom sense "Llibre:"
if wTitol.text then
local wFitxer = mw.title.new( wTitol.text, 'File' )
if wFitxer.exists then
--Fitxer no està a Commons però és localment a Viquitexts (casos excepcionals)
else
--No hi fitxer local ni P996: cal afegir-la (fitxer a Commons) a l'ítem (a Wikidata)
content = content .. CatError .. "|Commons]]"
end
else
content = content .. CatError .. "|Error]]"
end
else
local FileMatch = ''
local FileOnCommonsStmts = mw.wikibase.getAllStatements (qid, 'P996');
for _, stmt in pairs( FileOnCommonsStmts ) do
local commonsFilename = stmt['mainsnak']['datavalue']['value']
--Cal decodificar nompag, per exemple, per l'apòstrof "'" arriba com "'"
if mw.text.decode(nompag) == commonsFilename then
FileMatch = commonsFilename
end
end
if FileMatch == '' then
content = content .. CatError .. "|Fitxer]]"
end
end
end
if id == 'quality' then
if qid then
local badges = require("Module:Edition").badge{args={qid=qid}}
if badges then
if content then noVT = true end
content = "I"
if badges == "Q20748093" then content = "V" end
if badges == "Q20748092" then content = "R" end
if badges == "Q20748091" then content = "I" end
if badges == "Q20748094" then content = "E" end
else
if content then noWD = true end
end
if contentAux then --de moment, té preferència allò posat a mà
content = contentAux
end
end
if content == nil then
content = "Per defecte [[Categoria:Llibres no revisats]][[:Categoria:Llibres no revisats|Llibre incomplet]]"
elseif content == 'I' then
content = "[[Categoria:Llibres no revisats]][[:Categoria:Llibres no revisats|Llibre incomplet]]"
elseif content == 'R' then
content = "[[Categoria:Llibres revisats]][[:Categoria:Llibres revisats|Llibre amb pàgines pendents de validar]]"
elseif content == 'V' then
content = "[[Categoria:Llibres validats]][[:Categoria:Llibres validats|Llibre validat]]"
elseif content == 'E' then
content = "[[Categoria:Llibres amb errors]][[:Categoria:Llibres amb errors|Llibre amb errors]]"
else
content = "Per defecte [[Categoria:Llibres no revisats]][[:Categoria:Llibres no revisats|Llibre incomplet]]"
end
end
if content == nil or content == '' then
return ''
end
local title = get_heading( id )
if noVT == true then
content = content .. "[[Categoria:Llibres amb dades a Wikidata]]"
title = title .. "<span style='color:red; font-size:75%;'>*</span>"
end
if noWD == true then
content = content .. "[[Categoria:Llibres amb dades per a Wikidata]]"
title = title .. "<span style='color:green; font-size:75%;'>*</span>"
end
local s = ''
s = s .. '\n<tr>'
s = s .. '<th valign="top" align="left"><b>' .. title .. '</b></th>\n'
s = s .. '<td>' .. content .. '</td>\n'
s = s .. '</tr>\n'
return s
end
function p.fields(frame)
local args = getArgs(frame)
local s = ""
s = s .. '<table><tr valign="top">'
s = s .. construct_imatge(args['Imatge'], args['Sumari'], args['NomPagE'], args['Qid'], args['NomPag'])
s = s .. construct_field('author', args['Autor'], args['Qid'])
s = s .. construct_field('translator', args['Traductor'], args['Qid'])
s = s .. construct_field('title', args['Títol'], args['Qid'])
s = s .. construct_field('subtitle', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('volum', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('parts', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('prologue', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('epilogue', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('illustrator', args['Il·lustrador'], args['Qid'])
s = s .. construct_field('compositor', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('editor', args['Editor'], args['Qid'])
s = s .. construct_field('printer', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('place', args['Lloc'], args['Qid'])
s = s .. construct_field('year', args['Any'], args['Qid'])
s = s .. construct_field('edition', args['Qid'], args['Qid']) --sense arg.
s = s .. construct_field('source', args['Font'], args['Qid'], args['NomPag'])
s = s .. construct_field('wikidata', args['Qid'], args['Qid'], args['NomPag'])
s = s .. construct_field('quality', args['Nivell'], args['Qid'])
s = s .. construct_field_pagines(args['Pàgines'], args['NomPagE'])
s = s .. construct_field_sumari(args['Sumari'])
s = s .. '</tr></table>'
return s
end
return p