模組:Official website

文档图示 模块文档

此模块包含于{{Official website}}。请参见模版页面的文档。

跟踪类别

参见

local makeUrl = require('Module:URL')._urllocal p = {}-- Wrapper for pcall which returns nil on failure.local function quickPcall(func)local success, result = pcall(func)if success thenreturn resultendend-- Gets the rank for a Wikidata property table. Returns 1, 0 or -1, in-- order of rank.local function getRank(prop)local rank = prop.rankif rank == 'preferred' thenreturn 1elseif rank == 'normal' thenreturn 0elseif rank == 'deprecated' thenreturn -1else-- No rank or undefined rank is treated as "normal".return 0endend-- Finds whether a Wikidata property is qualified as being in Chinese.local function isChinese(prop)local ret = quickPcall(function ()for i, lang in ipairs(prop.qualifiers.P407) doif lang.datavalue.value['numeric-id'] == 7850 thenreturn trueendendreturn falseend)return ret == trueend-- Fetches the official website URL from Wikidata.local fetchWikidataUrlfetchWikidataUrl = function()-- Get objects for all official sites on Wikidata.local websites = quickPcall(function ()return mw.wikibase.getEntityObject().claims.P856end)-- 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) dowebsite._index = iend-- 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 thenreturn r1 > r2endlocal e1 = isChinese(ws1)local e2 = isChinese(ws2)if e1 ~= e2 thenreturn e1endreturn ws1._index < ws2._indexend)local url = quickPcall(function ()return websites[1].mainsnak.datavalue.valueend)-- Cache the result so that we only do the heavy lifting once per #invoke.fetchWikidataUrl = function ()return urlendreturn urlend-- Render the URL link, plus other visible output.local function renderUrl(options)if not options.url and not options.wikidataurl thenlocal entity = mw.wikibase.getEntityObject() or {}local qid = entity.idlocal result = '<strong class="error">' ..'找不到URL。请在此处指定URL或在维基数据上添加。' ..'</strong>'if qid thenresult = result.. ' [[File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt=在维基数据上编辑此内容 |link=https://www.wikidata.org/wiki/' .. qid .. '#P856|在维基数据上编辑此内容]]'endreturn resultendlocal ret = {}ret[#ret + 1] = string.format('<span class="official-website">%s</span>',makeUrl(options.url or options.wikidataurl, options.display))if options.wikidataurl and not options.url thenlocal entity = mw.wikibase.getEntityObject() or {}local qid = entity.idif qid thenret[#ret + 1] = '[[File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt=在维基数据上编辑此内容|link=https://www.wikidata.org/wiki/' .. qid .. '#P856|在维基数据上编辑此内容]]'endendif options.format == 'flash' thenret[#ret + 1] = mw.getCurrentFrame():expandTemplate{title = 'Color',args = {'#505050', '(需要[[Adobe Flash Player]])'}}endif options.mobile thenret[#ret + 1] = '(' .. makeUrl(options.mobile, '-{zh-cn:移动端;zh-tw:行動端;zh-hk:流動端;}-') .. ')'endreturn table.concat(ret, ' ')end-- Render the tracking category.local function renderTrackingCategory(url, wikidataurl)if mw.title.getCurrentTitle().namespace ~= 0 thenreturn ''endlocal categoryif not url and not wikidataurl thencategory = '官方网站没有URL'elseif not url and wikidataurl thenreturn ''elseif url and wikidataurl thenif url:gsub('/%s*$', '') ~= wikidataurl:gsub('/%s*$', '') thencategory = '维基百科和维基数据上的官方网站不同'endelsecategory = '维基数据上没有官方网站'endreturn category and string.format('[[Category:%s]]', category) or ''endfunction p._main(args)local url = args[1] or args.URL or args.urllocal wikidataurl = fetchWikidataUrl()local formattedUrl = renderUrl{url = url,wikidataurl = wikidataurl,display = args[2] or args.name or '官方网站',format = args.format,mobile = args.mobile}return formattedUrl .. renderTrackingCategory(url, wikidataurl)endfunction p.main(frame)local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Official website'})return p._main(args)endreturn p