Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
localp={} localWikidataIB=require("Module:WikidataIB") require('strict') functionp.getMID() return"M"..mw.title.getCurrentTitle().id end functionp.getFilename() returnmw.title.getCurrentTitle().nsText..':'..mw.title.getCurrentTitle().text end functionp.getP180vals(frame) localmid=frame.args[1] localprefix=frame.args[2]or'' localpostfix=frame.args[3]or' ' localtext='' localtablevals=mw.wikibase.getBestStatements(mid,'P180') fori,vinipairs(tablevals)do text=text..prefix..v.mainsnak.datavalue.value.id..postfix end returntext end functionp.getCombinedWikidataTemplates(frame) localqid=frame.args[1]or'' localoutputcode='' ifmw.text.trim(qidor'')~=''then localtablevals=mw.wikibase.getAllStatements(qid,'P971') fori,vinipairs(tablevals)do outputcode=outputcode..frame:expandTemplate{title='Wikidata Infobox/core',args={qid=v.mainsnak.datavalue.value.id,embed='Yes',conf_authoritycontrol='yes'}} end end returnoutputcode end functionp.ifThenShow(frame) ifmw.text.trim(frame.args[1]or'')~=''then return(frame.args[3]or'')..(frame.args[1]or'')..(frame.args[4]or'') else return(frame.args[2]or'') end end -- Given an input area, return a map zoom level to use with mw:Extension:Kartographer in {{Wikidata Infobox}}. Defaults to mapzoom=15. functionp.autoMapZoom(frame) localsize=tonumber(frame.args[1])or0 localLUT={5000000,1000000,100000,50000,10000,2000,150,50,19,14,5,1,0.5} forzoom,scaleinipairs(LUT)do ifsize>scalethen returnzoom+1 end end return15 end functionp.formatLine(frame) localpart2=mw.text.trim(frame.args[2]or'') localreturnstr='' ifpart2~=''then returnstr='<tr ' if(frame.args.mobileor'n')=='y'then returnstr=returnstr..'class="wdinfo_nomobile"' end localnewframe={} newframe.args={} newframe.args.qid=frame.args[1] returnstr=returnstr..'><th class="wikidatainfobox-lcell">'..mw.getContentLanguage():ucfirst(WikidataIB.getLabel(newframe)) returnstr=returnstr..'</th><td ' if(frame.args.wrapor'n')=='y'then returnstr=returnstr..'style="white-space: nowrap"' end returnstr=returnstr..'>'..part2..'</td></tr>' end returnreturnstr end functionp.hasValue(tab,val) forindex,valueinipairs(tab)do ifvalue==valthen returntrue end end returnfalse end -- baseLang is a utility function that returns the base language in use -- so for example, both English (en) and British English (en-gb) return 'en' -- from https://commons.wikimedia.org/wiki/Module:Wikidata2 functionp.baseLang(frame) localtxtlang=frame:callParserFunction("int","lang")or"" -- This deals with specific exceptions: be-tarask -> be_x_old iftxtlang=="be-tarask"then return"be_x_old" end localpos=txtlang:find("-") localret="" ifposthen ret=txtlang:sub(1,pos-1) else ret=txtlang end returnret end functionp.langDirection(frame) locallang=mw.text.trim(frame.args[1]or'') if(notmw.language.isSupportedLanguage(lang))then lang=frame:callParserFunction("int","lang")-- get user's chosen language end returnmw.getLanguage(lang):getDir() end --[[ convertChar returns the non-diacritic version of the supplied character. stripDiacrits replaces words with diacritical characters with their non-diacritic equivalent. strip_diacrits is available for export to other modules. stringIsLike tests two words, returning true if they only differ in diacritics, false otherwise. stringIs_like is available for export to other modules. --]] localfunctioncharacterMap() -- table with characters with diacrits and their equivalent basic latin characters localcharMap_from,charMap_to charMap_from='ÁÀÂÄǍĂĀÃÅĄƏĆĊĈČÇĎĐḌÐÉÈĖÊËĚĔĒẼĘẸĠĜĞĢĤĦḤİÍÌÎÏǏĬĪĨĮỊĴĶĹĿĽĻŁḶḸṂŃŇÑŅṆŊÓÒÔÖǑŎŌÕǪỌŐØŔŘŖṚṜŚŜŠŞȘṢŤŢȚṬÚÙÛÜǓŬŪŨŮŲỤŰǗǛǙǕŴÝŶŸỸȲŹŻŽ'.. 'áàâäǎăāãåąəćċĉčçďđḍðéèėêëěĕēẽęẹġĝğģĥħḥıíìîïǐĭīĩįịĵķĺŀľļłḷḹṃńňñņṇŋóòôöǒŏōõǫọőøŕřŗṛṝśŝšşșṣťţțṭúùûüǔŭūũůųụűǘǜǚǖŵýŷÿỹȳźżž' charMap_to='AAAAAAAAAAACCCCCDDDDEEEEEEEEEEEGGGGHHHIIIIIIIIIIIJKLLLLLLLMNNNNNNOOOOOOOOOOOORRRRRSSSSSSTTTTUUUUUUUUUUUUUUUUWYYYYYZZZ'.. 'aaaaaaaaaaacccccddddeeeeeeeeeeegggghhhiiiiiiiiiiijklllllllmnnnnnnoooooooooooorrrrrssssssttttuuuuuuuuuuuuuuuuwyyyyyzzz' localcharMap={} fori=1,mw.ustring.len(charMap_from)do charMap[mw.ustring.sub(charMap_from,i,i)]=mw.ustring.sub(charMap_to,i,i) end charMap['ß']='ss' returncharMap end functionp.convertChar(frame) localch=frame.args.charormw.text.trim(frame.args[1])or"" localcharMap=characterMap() returncharMap[ch]orch end functionp.strip_diacrits(wrd) ifwrdthen localcharMap=characterMap() wrd=string.gsub(wrd,"[^\128-\191][\128-\191]*",charMap) end returnwrd end functionp.stripDiacrits(frame) returnp.strip_diacrits(frame.args.wordormw.text.trim(frame.args[1])) end functionp.stringIs_like(wrd1,wrd2) returnp.strip_diacrits(wrd1)==p.strip_diacrits(wrd2) end functionp.stringIsLike(frame) localwrd1=frame.args.word1orframe.args[1] localwrd2=frame.args.word2orframe.args[2] ifp.strip_diacrits(wrd1)==p.strip_diacrits(wrd2)then returntrue else returnnil end end functionp.expandhiero(frame,hiero) -- added by Jura1 -- for string values in Wikihiero syntax -- inline recommended by https://meta.wikimedia.org/wiki/Help_talk:WikiHiero_syntax#Unwanted_newlines https://en.wikipedia.org/wiki/Help:WikiHiero_syntax -- maybe not needed in all contexts returnframe:preprocess('<div style="text-align:center;display:inline"> <hiero> '..hiero..' </hiero> </div>') end localfunctionformat2rowline(cell1,cell2) -- added by Jura1 localtr="" tr='<tr><th class="wikidatainfobox-lcell" style="text-align: left; vertical-align: text-top;" colspan="2">'..cell1..'</th></tr>' tr=tr..'<tr><td valign="top" colspan="2">'..cell2..'</td></tr>' returntr end localfunctionformat1rowline(trqid,cell1,cell2) -- added by Jura1 localtr="" tr='<tr id="'..trqid..'"><th class="wikidatainfobox-lcell" style="vertical-align: top">'..cell1..'</th>' tr=tr..'<td valign="top" style="vertical-align: top">'..cell2..'</td></tr>' returntr end functionp.hieroP7383(frame) -- added by Jura1 -- expand P7383 value in <hiero></hiero> tags localqid=mw.text.trim(frame.args.qidor"") localrows="" localcheckentry=mw.wikibase.isValidEntityId(qid) ifnotcheckentrythen return'' end localentity=mw.wikibase.getEntityObject(qid) ifnotentitythen return'' end localmylang=frame:preprocess('{{int:lang}}') ifentity.claimsandentity.claims.P7383then for_,vinipairs(entity.claims.P7383)do localidv=v.mainsnak.datavalue.value ifv.qualifiersandv.qualifiers.P3831then for_,winipairs(v.qualifiers.P3831)do ifw.snaktype=="value"then localqualid=w.datavalue.value["id"] localencod=mw.wikibase.getEntityObject(qualid) rows=rows..format2rowline(encod:getLabel(mylang),p.expandhiero(frame,idv)) end end else rows=rows..format2rowline("Name",p.expandhiero(frame,idv)) end end end returnrows end functionp.urn(frame) localqid=mw.text.trim(frame.args.qidor"") localmylang=frame:preprocess('{{int:lang}}') localentity=mw.wikibase.getEntityObject(qid) ifnotentitythen return'' end localurn="" returnurn --- return "<div style='display:none'>" .. urn .. "</span>" end functionp.numberInfo(frame) -- from additions by Jura1 -- tests at Category:987_(number) Category:8_(number) localqid=mw.text.trim(frame.args.qidor"") localmylang=frame:preprocess('{{int:lang}}') localrows="" localcheckentry=mw.wikibase.isValidEntityId(qid) ifnotcheckentrythen return'' end localentity=mw.wikibase.getEntityObject(qid) ifnotentitythen return'' end ifentity.claims.P487then for_,vinipairs(entity.claims.P487)do localidv=v.mainsnak.datavalue.value ifv.qualifiersandv.qualifiers.P3831then for_,winipairs(v.qualifiers.P3831)do ifw.snaktype=="value"then localqualid=w.datavalue.value["id"] localencod=mw.wikibase.getEntityObject(qualid) rows=rows..format1rowline(qualid,encod:getLabel(mylang),idv) end end end end end -- use code/encoding and render as encoding/code ifentity.claims.P3295then for_,vinipairs(entity.claims.P3295)do localidv=v.mainsnak.datavalue.value localcommonsc="" ifv.qualifiersandv.qualifiers.P805then for_,tinipairs(v.qualifiers.P805)do ift.snaktype=="value"then localsubjectframe={} subjectframe.args={} subjectframe.args.qid=t.datavalue.value["id"] commonsc=WikidataIB.getCommonsLink(subjectframe) end end end ifv.qualifiersandv.qualifiers.P3294then for_,winipairs(v.qualifiers.P3294)do ifw.snaktype=="value"then localqualid=w.datavalue.value["id"] localencod=mw.wikibase.getEntityObject(qualid) localencodeframe={} localencodecommons="" encodeframe.args={} encodeframe.args.qid=qualid encodecommons=WikidataIB.getCommonsLink(encodeframe)or"" ifencodecommons==""then encodecommons=encod:getLabel(mylang) else encodecommons="[[:"..encodecommons.."|"..encod:getLabel(mylang).."]]" end ifqualid=="Q68101340"then idv=p.expandhiero(frame,idv) elseifcommonsc~=""then idv="[[:"..commonsc.."|"..idv.."]]" end rows=rows..format1rowline(qualid,encodecommons,idv) end end end end end ifentity.claims.P7415then for_,vinipairs(entity.claims.P7415)do localidv=v.mainsnak.datavalue.value ifv.qualifiersandv.qualifiers.P3294then for_,winipairs(v.qualifiers.P3294)do ifw.snaktype=="value"then localqualid=w.datavalue.value["id"] localencod=mw.wikibase.getEntityObject(qualid) rows=rows..format1rowline(qualid,encod:getLabel(mylang),'[[File:'..idv..'|none|35px|'..entity:getLabel(mylang)..' ('..encod:getLabel(mylang)..')]]') end end end end end returnrows -- return '<table class="wikitable"><tr><th>Encoding </th><td>code</td></tr>' .. rows ..'</table>' end returnp