---------------------------------------------------------------------------------- Adaptado de https://en.wikisource.org/wiki/Module:Proofreadpage_index_template-- y https://ca.wikisource.org/wiki/Module:Proofreadpage_index_template-- This is a module to implement logic for [[MediaWiki:Proofreadpage index template]]---------------------------------------------------------------------------------- Ejemplo (función p.fields):-- {{#invoke:Proofreadpage index template|fields|NomPag=El Robinson suizo (1864).pdf|Paginas=tabla|Wikidata=Q107297266}}--------------------------------------------------------------------------------localWikidata=require('Module:Wikidata')localObra=require('Módulo:Obra')localgetArgs=require('Module:Arguments').getArgslocalcats=require('Módulo:Categorías')localwTitulo=mw.title.getCurrentTitle()--Nombre sin "Índice:"localp={}-- mapping of field ID to field propertieslocalheadings={title={txt='Título',index='Titulo',p='P1476'},subtitle={txt='Subtítulo',index='Subtitulo',p='P1680'},serie={txt='Serie o colección',index='Serie',p='P361'},--P361:"forma parte de"volume={txt='Volumen',index='Volumen',p='P478'},author={txt='Autor',emblem='[[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Ayuda:Autores]]',index='Autor',p='P50'},editor={txt='Editor',index='Editor',p='P98'},illustrator={txt='Ilustrador',index='Ilustrador',p='P110'},translator={txt='Traductor',index='Traductor',p='P655'},introducer={txt='Prologuista',index='Prologuista',p='P2679'},year={txt='Año',index='Ano',p='P577'},editorial={txt='Editorial',emblem='[[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Portal:Imprentas_y_editoriales]]',index='Editorial',p='P123'},printer={txt='Imprenta',emblem='[[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Portal:Imprentas_y_editoriales]]',index='Imprenta',p='P872'},place={txt='Lugar',index='Lugar',p='P291'},country={txt='País',emblem='[[Archivo:PD-icon.svg|20px|alt=|frameless|link=Wikisource:Derechos_de_autor]]',index='derechos'},--derechos (P495) pasar a Wikidata realmente?editionof={txt='Obra',index='Obra',p='P629'},source={txt='Fuente',emblem='[[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Wikisource:Recursos_libres]]',index='Fuente'},modernizar={txt='Modernización de la ortografía',emblem='[[Archivo:Commons-emblem-notice.svg|20px|alt=|frameless|link=Wikisource:Modernización_de_textos]]',index='Modernizacion'},quality={txt='Progreso',index='Progreso'},wikidata={txt='Metadatos',index='Wikidata'},}localfunctionasterisco(color,titulo)return" <span style='color:"..color.."; font-size:75%;' title='"..titulo.."'>*</span>"endlocalfunctionaCadena(id,obj)iftype(obj)=='string'thenifobj=='valor desconocido'thenifid=='translator'orid=='illustrator'orid=='editor'orid=='introducer'orid=='editorial'orid=='printer'orid=='serie'orid=='editionof'thenobj='Anónimo'elseifid=='author'thenobj='[[:Categoría:Obras de autores anónimos|Anónimo]]'endendreturnobjelseiftype(obj)=='table'thenifobj.textthenreturnaCadena(id,obj.text)endlocalresult={}fork,vinpairs(obj)dotable.insert(result,aCadena(id,v))endreturnmw.text.listToText(result)endendlocalfunctionconstruct_image(content,c)ifc.nompage==nilorc.nompage==''thenerror('nompage no puede ser nulo')endlocals=''--Miramos si en WD hay 1 o más P996, capturamos el que coincida, y le miramos el P4714 (nº pág. con título).localP4714=''ifc.qidthenfor_,fileinpairs(c.commonsFile.WD)doifmw.text.decode(c.commonsFile.WS)==mw.text.decode(file)then--decode por si apóstrofe llega como "'"P4714=Wikidata.claim{item=c.qid,property="P996",qualifier="P4714",lang="es",list=false}endendends=s..'<tr><td valign="top">'ifcontentthenelseifP4714==''thencontent='1'--si no hay nada de nadaelsecontent=P4714endifcontent==nilthencontent='1'endendiftonumber(content)==nilthens=s..contentelses=s..'<span id="ws-cover" style="display:none; speak:none;">'s=s..c.nompage.."/"..content.."</span>"s=s..'[[File:'..c.nompage..'|page='..content..'|frameless]]'ends=s..'</td>'s=s..'<td valign="top"><table style="margin-left:0">'--se cierran en construct_field_paginasreturnsendlocalfunctionconstruct_field_paginas(content,c)ifc.nompage==nilorc.nompage==''thenreturn"Error en construct_field_pagines (nompage)"endifcontent==nilorcontent==''thenreturn"Error en construct_field_pagines (content)"endlocals=''s=s..'</table></td></tr>'s=s..'<tr><td valign="top" colspan="2"><span class="plainlinks">'s=s..'<b>[//es.wikisource.org/wiki/File:'..c.nompage..'?action=purge Páginas]</b></span>'s=s..' ([[Ayuda:Nivel_de_las_páginas|Nivel]])\n's=s..'<div style="padding-left:0.5em; background-color:#F0F0F0; color:black;">\n'..content..'</div></td></tr>'s=s..'</table></td>'returnsendlocalfunctionconstruct_field_sumario(content)locals=''ifcontentthens='<td width="33%" valign="top">'..content..'</td>'endreturnsendlocalfunctiongetBadge(qid)localbadges=Wikidata.badge{args={qid=qid,raw=true}}if#badges>0thenfork,vinpairs(badges)doifvthenreturnvendendendendlocalfunctionconsolidado(args,obra)localc={}c.qid=obra.qidforidinpairs(headings)dolocalidx=headings[id]c[id]={}ifidx.indexthen--toma datos del índicec[id].WS=args[idx.index]endifc.qidthen--tiene propiedad en Wikidatac[id].WD=aCadena(id,obra[id])end-- content: prioridad WSc[id].content=c[id].WSorc[id].WDendc.commonsFile={WD=obra.commonsFile,WS=args.NomPag}c.nompage=mw.uri.encode(args.NomPag,'WIKI')returncend-- construct a basic "field" rowlocalfunctionconstruct_field(id,c)ifid==nilthenerror("Error en construct_field")endlocalqid=c.qidlocalP=headings[id].plocalemblem=headings[id].emblemlocaltitle=headings[id].txtlocalidx=c[id]localcontent=idx.contentlocalCatError="[[Categoría:Índices con discrepancias respecto a Wikidata"localsiWDsiWS=idx.WDandidx.WS--hay contenido en WD y en WS (se puede borrar)localnoWDsiWS=notidx.WDandidx.WS--no hay contenido en WD pero sí en WS (no borrar hasta migrarlo a WD)localsiWDnoWS=idx.WDandnotidx.WSlocaleqWDWS=siWDsiWSandidx.WD==idx.WSlocalcaterror=false--campo generó errorifid=='title'thenifnotidx.WSthenlocalwSiteLink=mw.wikibase.getSitelink(qidor'')ifwSiteLinkthenifidx.WDthencontent="''[["..wSiteLink.."|"..idx.WD.."]]''"elsecontent="''[["..wSiteLink.."]]''"endelseifidx.WDthencontent="''[["..idx.WD.."]]''"endendendifid=='modernizar'thenifcontentthenifcontent=='S'thencontent='[[Wikisource:Modernización de textos|Ortografía antigua — El lector puede elegir modernizar la ortografía]]'elsecontent='[[Wikisource:Modernización de textos|No modernizar]]'endendendifid=='source'thenifcontent==nilthenifc.commonsFile.WS==nilthencontent=CatError.."|Nompag]]"caterror='ERROR: Nompag'else--todo: se podría buscar los identificadores de Wikidata P675 (GB), P724 (IA), etc.content="[[:File:"..c.commonsFile.WS.."|Archivo]]"cats:addCat('Índices sin fuente')endelse-- revisar: en general la fuente la explicitamos localmente con una plantilla-- tenemos que trackear si está en Wikidata? cual propiedad?-- noWDsiWS = trueendendifid=='wikidata'thenifcontent==nilthencats:addCat('Índices no conectados a Wikidata')return""endcontent="[[File:Wikidata-logo.svg|20px|link=d:"..content.."]] [[d:"..content.."|"..content.."]]"ifmw.wikibase.entityExists(qid)==falsethencontent=content..CatError.."|Qid]]"caterror='ERROR: QID NO EXISTE'endifnotc.commonsFile.WDthenifwTitulo.textthenlocalwArchivo=mw.title.new(wTitulo.text,'File')ifwArchivo.existsthen--Archivo no está en Commons pero sí localmente en Wikisource (casos excepcionales)else--No hay archivo local ni P996: hay que añadirlo (archivo en Commons) al ítem en Wikidata.content=content..CatError.."|Commons]]"caterror='ERROR: SIN P996 (archivo en Commons)'endelsecontent=content..CatError.."|Error]]"caterror='ERROR: SIN TEXTO EN ÍNDICE'endelseifc.commonsFile.WSthenlocalFileMatchfor_,fileinpairs(c.commonsFile.WD)doifmw.text.decode(c.commonsFile.WS)==mw.text.decode(file)then--decode por si apóstrofe llega como "'"FileMatch=fileendendifnotFileMatchthencontent=content..CatError.."|Fichero]]"caterror='ERROR: P996 REFIERE OTRO FICHERO'endendendifid=='quality'thenlocalbadges={C="Q20748091",P="Q20748091",V="Q20748092",T="Q20748093",L="Q20748094",E="Q20748094"}localbadge_WS=badges[content]ifqidthenlocalbadge_WD=getBadge(qid)ifbadge_WDthenifbadge_WD=="Q20748091"thencontent="C"endifbadge_WD=="Q20748092"thencontent="V"endifbadge_WD=="Q20748093"thencontent="T"endifbadge_WD=="Q20748094"thencontent="L"endifbadge_WS~=badge_WDthen-- Todo: manejar discrepancia endelse-- if content then noWDsiWS = true endendend-- prioridad localifidx.WSandidx.WS~=''thencontent=idx.WSendifcontent==nilthencontent="[[:Categoría:Índices con progreso desconocido|Progreso desconocido]]"cats:addCat('Índices con progreso desconocido')elseifcontent=='C'thencontent="[[:Categoría:Índices no corregidos|Por corregir]]"cats:addCat('Índices no corregidos')elseifcontent=='P'thencontent="[[:Categoría:Índices sin pagelist|Por corregir - pendiente crear <nowiki><pagelist/></nowiki>]]"cats:addCat('Índices no corregidos')cats:addCat('Índices sin pagelist')elseifcontent=='V'thencontent="[[:Categoría:Índices corregidos|Corregido — Todas las páginas corregidas pero no todas validadas]]"cats:addCat('Índices corregidos')elseifcontent=='T'thencontent="[[:Categoría:Índices validados|Terminado — Todas las páginas validadas]]"cats:addCat('Índices validados')elseifcontent=='L'thencontent="[[:Categoría:Índices dañados|Archivo fuente debe ser arreglado antes de corregirlo]]"cats:addCat('Índices dañados')elseifcontent=='E'thencontent="[[:Categoría:Índices en extractos|Extracto]]"cats:addCat('Índices en extractos')elsecontent="[[:Categoría:Índices con progreso desconocido|Progreso desconocido]]"cats:addCat('Índices con progreso desconocido')endend-- categorías de seguimientoifid=='editionof'thenifcontent==nilorcontent==''thencats:addCat('Índices sin obra asociada')return''elsecats:addCat('Índices con obra asociada')endend-- parámetros que no deben pasar a WikidataifnotPorid=='serie'ornotqidorqid==''thennoWDsiWS=falseendifcontent==nilorcontent==''thenreturn''endifsiWDnoWS==truethenlocallapiz=' <span class="penicon" data-bridge-edit-flow="single-best-value">'.."[[File:Arbcom ru editing.svg|10px|baseline|"..string.gsub(mw.message.new('Wikibase-client-data-bridge-bailout-suggestion-go-to-repo-button'):inLanguage("es"):plain(),'{{WBREPONAME}}','Wikidata')ifid=='title'thencontent=content..lapiz.."|link=https://www.wikidata.org/wiki/"..qid.."?uselang=es#sitelinks-wikisource]]</span>"elseifPandP~=''thencontent=content..lapiz.."|link=https://www.wikidata.org/wiki/"..qid.."?uselang=es#"..P.."]]</span>"endendendifeqWDWSthencats:addCat('índices con datos duplicados en Wikidata')title=title..asterisco('blue','Datos duplicados en Wikidata')elseifsiWDsiWSthencats:addCat('Índices con datos en Wikidata')title=title..asterisco('blue','Datos en Wikidata')endifnoWDsiWSthencats:addCat('índices con datos para Wikidata')title=title..asterisco('green','Datos para Wikidata')endifcaterrorandcaterror~=''thentitle=title..asterisco('red',caterror)endlocals=''s=s..'\n<tr>'s=s..'<td valign="top">'..(emblemor'')..'</td>\n's=s..'<th valign="top" align="left"><b>'..title..'</b></th>\n's=s..'<td>'..content..'</td>\n's=s..'</tr>\n'returnsendfunctionp.fields(frame)localargs=getArgs(frame)localobra=Obra.newWork(args.Wikidata)localc=consolidado(args,obra)locals=""s=s..'<table width="100%"><tr><td valign="top"><table>'s=s..construct_image(args['Imagen'],c)-- Tras la imagen, intentamos mostrar una fila por campo (si no hay contenido, no aparece)s=s..construct_field('author',c)s=s..construct_field('translator',c)s=s..construct_field('editor',c)s=s..construct_field('introducer',c)s=s..construct_field('title',c)s=s..construct_field('subtitle',c)s=s..construct_field('volume',c)s=s..construct_field('year',c)s=s..construct_field('place',c)s=s..construct_field('country',c)s=s..construct_field('printer',c)s=s..construct_field('editorial',c)s=s..construct_field('illustrator',c)s=s..construct_field('editionof',c)s=s..construct_field('source',c)s=s..construct_field('serie',c)s=s..construct_field('modernizar',c)s=s..construct_field('wikidata',c)s=s..construct_field('quality',c)s=s.."<tr><td>[[Archivo:Commons-emblem-notice.svg|20px|enlace=|alt=|frameless]]</td><td> '''[[Ayuda:Índices|Ayuda]]'''</td></tr>"s=s..construct_field_paginas(args['Paginas'],c)s=s..construct_field_sumario(args['Notas'])s=s..'</tr></table>'ifwTitulo:inNamespace(104)thens=s..cats:getCats()elsemw.log(cats:getCats())endreturnsendreturnp