请输入您要查询的百科知识:

 

词条 Module:Official website/sandbox
释义

local makeUrl = require('Module:URL')._url

local p = {}

-- Wrapper for pcall which returns nil on failure.

local function quickPcall(func)

local success, result = pcall(func)

if success then

return result

end

end

-- Gets the rank for a Wikidata property table. Returns 1, 0 or -1, in-- order of rank.

local function getRank(prop)

local rank = prop.rank

if rank == 'preferred' then

return 1

elseif rank == 'normal' then

return 0

elseif rank == 'deprecated' then

return -1

else

-- No rank or undefined rank is treated as "normal".

return 0

end

end

-- Finds whether a Wikidata property is qualified as being in English.

local function isEnglish(prop)

local ret = quickPcall(function ()

for i, lang in ipairs(prop.qualifiers.P407) do

if lang.datavalue.value['numeric-id'] == 1860 then

return true

end

end

return false

end)

return ret == true

end

-- Fetches the official website URL from Wikidata.

local fetchWikidataUrl

fetchWikidataUrl = function()

-- Get objects for all official sites on Wikidata.

local websites = quickPcall(function ()

return mw.wikibase.getEntityObject().claims.P856

end)

-- Clone the objects in case other code needs them in their original order.

websites = websites and mw.clone(websites) or {}

-- Add the table index to the objects in case it is needed in the sort.

for i, website in ipairs(websites) do

website._index = i

end

-- Sort the websites, first by highest rank, and then by websites in the

-- English language, then by the website's original position in the

-- property list. When we are done, get the URL from the highest-sorted

-- object.

table.sort(websites, function(ws1, ws2)

local r1 = getRank(ws1)

local r2 = getRank(ws2)

if r1 ~= r2 then

return r1 > r2

end

local e1 = isEnglish(ws1)

local e2 = isEnglish(ws2)

if e1 ~= e2 then

return e1

end

return ws1._index < ws2._index

end)

local url = quickPcall(function ()

return websites[1].mainsnak.datavalue.value

end)

-- Cache the result so that we only do the heavy lifting once per #invoke.

fetchWikidataUrl = function ()

return url

end

return url

end

-- Render the URL link, plus other visible output.

local function renderUrl(options)

if not options.url and not options.wikidataurl then

local entity = mw.wikibase.getEntityObject() or {}

local qid = entity.id

local result = '' ..

'No URL found. Please specify a URL here or add one to Wikidata.' ..

''

if qid then

result = result.. ' '

end

return result

end

local ret = {}

ret[#ret + 1] = string.format(

'%s',

makeUrl(options.url or options.wikidataurl, options.display)

)

if options.wikidataurl and not options.url then

local entity = mw.wikibase.getEntityObject() or {}

local qid = entity.id

if qid then

ret[#ret + 1] =

end

end

if options.format == 'flash' then

ret[#ret + 1] = mw.getCurrentFrame():expandTemplate{

title = 'Link note',

args = {note = 'Requires Adobe Flash Player'}

}

end

if options.mobile then

ret[#ret + 1] = '(' .. makeUrl(options.mobile, 'Mobile') .. ')'

end

return table.concat(ret, ' ')

end

-- Render the tracking category.

local function renderTrackingCategory(url, wikidataurl)

if mw.title.getCurrentTitle().namespace ~= 0 then

return

end

local category

if not url and not wikidataurl then

category = 'Official website missing URL'

elseif not url and wikidataurl then

return

elseif url and wikidataurl then

if url:gsub('/%s*$', ) ~= wikidataurl:gsub('/%s*$', ) then

category = 'Official website different in Wikidata and Wikipedia'

end

else

category = 'Official website not in Wikidata'

end

return category and string.format(, category) or

end

function p._main(args)

local url = args[1] or args.URL or args.url

local wikidataurl = fetchWikidataUrl()

local formattedUrl = renderUrl{

url = url,

wikidataurl = wikidataurl,

display = args[2] or args.name or 'Official website',

format = args.format,

mobile = args.mobile

}

return formattedUrl .. renderTrackingCategory(url, wikidataurl)

end

function p.main(frame)

local args = require('Module:Arguments').getArgs(frame, {

wrappers = 'Template:Official website'

})

return p._main(args)

end

return p

1 : %s

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/11 6:32:37