Module:Commons link: Difference between revisions
From All Skies Encyclopaedia
imported>Hike395 (typo in comment) |
imported>Hike395 (refactor code, add getGalleryOrCategory, add test entry points, add doc strings) |
||
Line 3: | Line 3: | ||
local p = {} |
local p = {} |
||
local function _getTitleQID(qid) |
|||
-- Find the Commons gallery page associated with article |
|||
local titleObject = mw.title.getCurrentTitle() |
|||
function p.getGallery(frame) |
|||
qid = (qid or ""):upper() |
|||
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) |
|||
-- look up qid for current page (if not testing) |
|||
return p._getGallery(args[1],args.linktext,args.search,args.qid) |
|||
if qid == "" then |
|||
qid = mw.wikibase.getEntityIdForCurrentPage() |
|||
return titleObject.text, titleObject.namespace, qid |
|||
end |
|||
-- testing-only path: given a qid, determine title |
|||
-- use namespace from current page (to suppress tracking cat) |
|||
local title = mw.wikibase.sitelink(qid) |
|||
-- string any namespace from sitelink |
|||
local firstColon = mw.ustring.find(title,':',1,true) |
|||
if firstColon then |
|||
title = mw.ustring.sub(title,firstColon+1) |
|||
end |
|||
return title, titleObject.namespace, qid |
|||
end |
end |
||
-- Lookup Commons gallery in Wikidata |
|||
-- Arguments: |
|||
-- qid = QID of current article |
|||
-- fetch = whether to lookup Commons sitelink (bool) |
|||
-- commonsSitelink = default value for Commons sitelink |
|||
-- Returns: |
|||
-- categoryLink = name of Commons category, nil if nothing is found |
|||
-- consistent = multiple wikidata fields are examined: are they consistent? |
|||
-- commonsSitelink = commons sitelink for current article |
|||
local function _lookupGallery(qid,fetch,commonsSitelink) |
|||
local galleryLink = nil |
|||
local consistent = true |
|||
-- look up commons sitelink for article, use if not category |
|||
if fetch then |
|||
commonsSitelink = mw.wikibase.getSitelink(qid,"commonswiki") or commonsSitelink |
|||
end |
|||
if commonsSitelink and mw.ustring.sub(commonsSitelink,1,9) ~= "Category:" then |
|||
galleryLink = commonsSitelink |
|||
end |
|||
-- P935 is the "commons gallery" property for this article |
|||
local P935 = mw.wikibase.getBestStatements(qid, "P935")[1] |
|||
if P935 and P935.mainsnak.datavalue then |
|||
local gallery = P935.mainsnak.datavalue.value |
|||
if galleryLink and galleryLink ~= gallery then |
|||
consistent = false |
|||
else |
|||
galleryLink = gallery |
|||
end |
|||
end |
|||
return galleryLink, consistent, commonsSitelink |
|||
end |
|||
-- Find fallback category by looking up Commons sitelink of different page |
|||
-- Arguments: |
|||
-- qid = QID for current article |
|||
-- property = property that refers to other article whose sitelink to return |
|||
-- Returns: either category-stripped name of article, or nil |
|||
local function _lookupFallback(qid,property) |
|||
if not qid then |
|||
return nil |
|||
end |
|||
-- If property exists on current article, get value (other article qid) |
|||
local value = mw.wikibase.getBestStatements(qid, property)[1] |
|||
if value and value.mainsnak.datavalue and value.mainsnak.datavalue.value.id then |
|||
-- Look up Commons sitelink of other article |
|||
local sitelink = mw.wikibase.getSitelink(value.mainsnak.datavalue.value.id,"commonswiki") |
|||
-- Check to see if it starts with "Category:". If so, strip it and return |
|||
if sitelink and mw.ustring.sub(sitelink,1,9) == "Category:" then |
|||
return mw.ustring.sub(sitelink,10) |
|||
end |
|||
end |
|||
return nil |
|||
end |
|||
-- Find Commons category by looking in wikidata |
|||
-- Arguments: |
|||
-- qid = QID of current article |
|||
-- fetch = whether to lookup Commons sitelink (bool) |
|||
-- commonsSitelink = default value for Commons sitelink |
|||
-- Returns: |
|||
-- categoryLink = name of Commons category, nil if nothing is found |
|||
-- consistent = multiple wikidata fields are examined: are they consistent? |
|||
-- commonsSitelink = commons sitelink for current article |
|||
local function _lookupCategory(qid, fetch, commonsSitelink) |
|||
local categoryLink = nil |
|||
local consistent = true |
|||
-- look up commons sitelink for article, use if starts with "Category:" |
|||
if fetch then |
|||
commonsSitelink = mw.wikibase.getSitelink(qid,"commonswiki") or commonsSitelink |
|||
end |
|||
if commonsSitelink and mw.ustring.sub(commonsSitelink,1,9) == "Category:" then |
|||
categoryLink = mw.ustring.sub(commonsSitelink,10) |
|||
end |
|||
-- P373 is the "commons category" property for this article |
|||
local P373 = mw.wikibase.getBestStatements(qid, "P373")[1] |
|||
if P373 and P373.mainsnak.datavalue then |
|||
P373 = P373.mainsnak.datavalue.value |
|||
if categoryLink and categoryLink ~= P373 then |
|||
consistent = false |
|||
qid = nil -- stop searching on inconsistent data |
|||
else |
|||
categoryLink = P373 |
|||
end |
|||
end |
|||
-- P910 is the "topic's main category". Look for commons sitelink there |
|||
local fallback = _lookupFallback(qid,"P910") |
|||
if fallback then |
|||
if categoryLink and categoryLink ~= fallback then |
|||
consistent = false |
|||
qid = nil |
|||
else |
|||
categoryLink = fallback |
|||
end |
|||
end |
|||
-- P1754 is the "list's main category". Look for commons sitelink there |
|||
fallback = _lookupFallback(qid,"P1754") |
|||
if fallback then |
|||
if categoryLink and categoryLink ~= fallback then |
|||
consistent = false |
|||
else |
|||
categoryLink = fallback |
|||
end |
|||
end |
|||
return categoryLink, consistent, commonsSitelink |
|||
end |
|||
-- Create Commons gallery link corresponding to current article |
|||
-- Arguments: |
-- Arguments: |
||
-- default = use as Commons link, don't access wikidata |
-- default = use as Commons link, don't access wikidata |
||
Line 14: | Line 135: | ||
-- search = string to search for |
-- search = string to search for |
||
-- qid = QID to lookup in wikidata (for testing only) |
-- qid = QID to lookup in wikidata (for testing only) |
||
-- Returns: |
|||
-- formatted wikilink to Commons gallery |
|||
function p._getGallery(default,linktext,search,qid) |
function p._getGallery(default,linktext,search,qid) |
||
if default then |
if default then |
||
Line 21: | Line 144: | ||
return "[[Commons:Special:Search/"..search.."|"..(linktext or search).."]]" |
return "[[Commons:Special:Search/"..search.."|"..(linktext or search).."]]" |
||
end |
end |
||
local title, ns |
|||
local titleObject = mw.title.getCurrentTitle() |
|||
title, ns, qid = _getTitleQID(qid) |
|||
qid = (qid or ""):upper() |
|||
if qid == "" then |
|||
-- look up qid for current page (if not testing) |
|||
qid = mw.wikibase.getEntityIdForCurrentPage() |
|||
else |
|||
-- if qid specified, look up title from that |
|||
title = mw.wikibase.sitelink(qid) |
|||
end |
|||
-- construct default result (which searches for title) |
-- construct default result (which searches for title) |
||
local searchResult = "[[Commons:Special:Search/"..title.."|"..(linktext or title).."]]" |
local searchResult = "[[Commons:Special:Search/"..title.."|"..(linktext or title).."]]" |
||
if qid then |
if qid then |
||
local galleryLink = |
local galleryLink, consistent = _lookupGallery(qid,true) |
||
local consistent = true |
|||
-- look up commons sitelink for article, use if not category |
|||
local commonsSitelink = mw.wikibase.getSitelink(qid,"commonswiki") |
|||
if commonsSitelink and mw.ustring.sub(commonsSitelink,1,9) ~= "Category:" then |
|||
galleryLink = commonsSitelink |
|||
end |
|||
-- P935 is the "commons gallery" property for this article |
|||
local P935 = mw.wikibase.getBestStatements(qid, "P935")[1] |
|||
if P935 and P935.mainsnak.datavalue then |
|||
local gallery = P935.mainsnak.datavalue.value |
|||
if galleryLink and galleryLink ~= gallery then |
|||
consistent = false |
|||
else |
|||
galleryLink = gallery |
|||
end |
|||
end |
|||
-- use wikidata if either sitelink or P935 exist, and they both agree |
-- use wikidata if either sitelink or P935 exist, and they both agree |
||
if galleryLink and consistent then |
if galleryLink and consistent then |
||
Line 56: | Line 155: | ||
end |
end |
||
-- if not consistent, fall back to search and add to tracking cat |
-- if not consistent, fall back to search and add to tracking cat |
||
if not consistent and |
if not consistent and ns == 0 then |
||
searchResult = searchResult.."[[Category:Inconsistent wikidata for Commons gallery]]" |
searchResult = searchResult.."[[Category:Inconsistent wikidata for Commons gallery]]" |
||
end |
end |
||
Line 63: | Line 162: | ||
end |
end |
||
-- |
-- Create Commons category link corresponding to current article |
||
function p.getCategory(frame) |
|||
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) |
|||
return p._getCategory(args[1],args.linktext,args.search,args.qid) |
|||
end |
|||
-- Arguments: |
-- Arguments: |
||
-- default = use as Commons |
-- default = use as Commons category link, don't access wikidata |
||
-- linktext = text to display in link |
-- linktext = text to display in link |
||
-- search = string to search for |
-- search = string to search for |
||
-- qid = QID to lookup in wikidata (for testing only) |
-- qid = QID to lookup in wikidata (for testing only) |
||
-- Returns: |
|||
-- formatted wikilink to Commons gallery |
|||
function p._getCategory(default,linktext,search,qid) |
function p._getCategory(default,linktext,search,qid) |
||
if default then |
if default then |
||
Line 81: | Line 177: | ||
return "[[Commons:Special:Search/Category:"..search.."|"..(linktext or search).."]]" |
return "[[Commons:Special:Search/Category:"..search.."|"..(linktext or search).."]]" |
||
end |
end |
||
local title, ns |
|||
local titleObject = mw.title.getCurrentTitle() |
|||
title, ns, qid = _getTitleQID(qid) |
|||
qid = (qid or ""):upper() |
|||
if qid == "" then |
|||
-- look up qid for current page (if not testing) |
|||
qid = mw.wikibase.getEntityIdForCurrentPage() |
|||
else |
|||
-- if qid specified, look up title from that |
|||
title = mw.wikibase.sitelink(qid) |
|||
end |
|||
-- construct default result (which searches for title in Category space) |
-- construct default result (which searches for title in Category space) |
||
local searchResult = "[[Commons:Special:Search/Category:"..title.."|"..(linktext or title).."]]" |
local searchResult = "[[Commons:Special:Search/Category:"..title.."|"..(linktext or title).."]]" |
||
if qid then |
if qid then |
||
local categoryLink = |
local categoryLink, consistent = _lookupCategory(qid,true) |
||
-- if any of sitelink category, P373, and P910/P1754 commons sitelinks exist, |
|||
local consistent = true |
|||
-- look up commons sitelink for article, use if starts with "Category:" |
|||
local commonsSitelink = mw.wikibase.getSitelink(qid,"commonswiki") |
|||
if commonsSitelink and mw.ustring.sub(commonsSitelink,1,9) == "Category:" then |
|||
categoryLink = mw.ustring.sub(commonsSitelink,10) |
|||
end |
|||
-- P373 is the "commons category" property for this article |
|||
local P373 = mw.wikibase.getBestStatements(qid, "P373")[1] |
|||
if P373 and P373.mainsnak.datavalue then |
|||
P373 = P373.mainsnak.datavalue.value |
|||
if categoryLink and categoryLink ~= P373 then |
|||
consistent = false |
|||
else |
|||
categoryLink = P373 |
|||
end |
|||
end |
|||
-- P910 is the "topic's main category". Look for commons sitelink there |
|||
local P910 = mw.wikibase.getBestStatements(qid, "P910")[1] |
|||
if P910 and P910.mainsnak.datavalue and P910.mainsnak.datavalue.value.id then |
|||
P910 = P910.mainsnak.datavalue.value.id |
|||
local fallback = mw.wikibase.getSitelink(P910, "commonswiki") |
|||
if fallback and mw.ustring.sub(fallback,1,9) == "Category:" then |
|||
fallback = mw.ustring.sub(fallback,10) |
|||
if categoryLink and categoryLink ~= fallback then |
|||
consistent = false |
|||
else |
|||
categoryLink = fallback |
|||
end |
|||
end |
|||
end |
|||
-- if any of sitelink category, P373, and P910 commons sitelink exist, |
|||
-- use it. But don't use if they don't agree with each other |
-- use it. But don't use if they don't agree with each other |
||
if categoryLink and consistent then |
if categoryLink and consistent then |
||
Line 131: | Line 189: | ||
end |
end |
||
-- if not consistent, fall back to search, but add tracking category |
-- if not consistent, fall back to search, but add tracking category |
||
if not consistent and |
if not consistent and ns == 0 then |
||
searchResult = searchResult.."[[Category:Inconsistent wikidata for Commons category]]" |
searchResult = searchResult.."[[Category:Inconsistent wikidata for Commons category]]" |
||
end |
end |
||
Line 137: | Line 195: | ||
return searchResult |
return searchResult |
||
end |
end |
||
-- Returns "best" Commons link: first look for gallery, then try category |
|||
-- Arguments: |
|||
-- default = use as Commons link, don't access wikidata |
|||
-- linktext = text to display in link |
|||
-- search = string to search for |
|||
-- qid = QID to lookup in wikidata (for testing only) |
|||
-- Returns: |
|||
-- formatted wikilink to Commons "best" landing page |
|||
function p._getGalleryOrCategory(default,linktext,search,qid) |
|||
if default then |
|||
return "[[Commons:"..default.."|"..(linktext or default).."]]" |
|||
end |
|||
if search then |
|||
return "[[Commons:Special:Search/"..search.."|"..(linktext or search).."]]" |
|||
end |
|||
local title, ns |
|||
title, ns, qid = _getTitleQID(qid) |
|||
-- construct default result (which searches for title) |
|||
local searchResult = "[[Commons:Special:Search/"..title.."|"..(linktext or title).."]]" |
|||
local trackingCats = "" |
|||
if qid then |
|||
local galleryLink, consistent, commonsSitelink = _lookupGallery(qid,true) |
|||
-- use wikidata if either sitelink or P935 exist, and they both agree |
|||
if galleryLink and consistent then |
|||
return "[[Commons:"..galleryLink.."|"..(linktext or galleryLink).."]]" |
|||
end |
|||
if not consistent and ns == 0 then |
|||
trackingCats = "[[Category:Inconsistent wikidata for Commons gallery]]" |
|||
end |
|||
-- if gallery is not good, fall back looking for category |
|||
local categoryLink |
|||
categoryLink, consistent = _lookupCategory(qid,false,commonsSitelink) |
|||
if categoryLink and consistent then |
|||
return "[[Commons:Category:"..categoryLink.."|"..(linktext or categoryLink).."]]"..trackingCats |
|||
end |
|||
if not consistent and ns == 0 then |
|||
trackingCats = trackingCats.."[[Category:Inconsistent wikidata for Commons category]]" |
|||
end |
|||
end |
|||
return searchResult..trackingCats |
|||
end |
|||
-- Testing-only entry point for _getTitleQID |
|||
function p.getTitleQID(frame) |
|||
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) |
|||
local text, ns, qid = _getTitleQID(args[1]) |
|||
return text..","..ns..","..(qid or "nil") |
|||
end |
|||
-- Testing-only entry point for _lookupFallback |
|||
function p.lookupFallback(frame) |
|||
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) |
|||
local fallback = _lookupFallback(args[1],args[2]) |
|||
return fallback or "nil" |
|||
end |
|||
-- Find the Commons gallery page associated with article |
|||
function p.getGallery(frame) |
|||
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) |
|||
return p._getGallery(args[1],args.linktext,args.search,args.qid) |
|||
end |
|||
-- Find the Commons category page associated with article |
|||
function p.getCategory(frame) |
|||
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) |
|||
return p._getCategory(args[1],args.linktext,args.search,args.qid) |
|||
end |
|||
function p.getGalleryOrCategory(frame) |
|||
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) |
|||
return p._getGalleryOrCategory(args[1],args.linktext,args.search,args.qid) |
|||
end |
|||
return p |
return p |
Revision as of 09:28, 21 February 2020
Documentation for this module may be created at Module:Commons link/doc
-- Module to find commons galleries and categories based on wikidata entries
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function _getTitleQID(qid)
local titleObject = mw.title.getCurrentTitle()
qid = (qid or ""):upper()
-- look up qid for current page (if not testing)
if qid == "" then
qid = mw.wikibase.getEntityIdForCurrentPage()
return titleObject.text, titleObject.namespace, qid
end
-- testing-only path: given a qid, determine title
-- use namespace from current page (to suppress tracking cat)
local title = mw.wikibase.sitelink(qid)
-- string any namespace from sitelink
local firstColon = mw.ustring.find(title,':',1,true)
if firstColon then
title = mw.ustring.sub(title,firstColon+1)
end
return title, titleObject.namespace, qid
end
-- Lookup Commons gallery in Wikidata
-- Arguments:
-- qid = QID of current article
-- fetch = whether to lookup Commons sitelink (bool)
-- commonsSitelink = default value for Commons sitelink
-- Returns:
-- categoryLink = name of Commons category, nil if nothing is found
-- consistent = multiple wikidata fields are examined: are they consistent?
-- commonsSitelink = commons sitelink for current article
local function _lookupGallery(qid,fetch,commonsSitelink)
local galleryLink = nil
local consistent = true
-- look up commons sitelink for article, use if not category
if fetch then
commonsSitelink = mw.wikibase.getSitelink(qid,"commonswiki") or commonsSitelink
end
if commonsSitelink and mw.ustring.sub(commonsSitelink,1,9) ~= "Category:" then
galleryLink = commonsSitelink
end
-- P935 is the "commons gallery" property for this article
local P935 = mw.wikibase.getBestStatements(qid, "P935")[1]
if P935 and P935.mainsnak.datavalue then
local gallery = P935.mainsnak.datavalue.value
if galleryLink and galleryLink ~= gallery then
consistent = false
else
galleryLink = gallery
end
end
return galleryLink, consistent, commonsSitelink
end
-- Find fallback category by looking up Commons sitelink of different page
-- Arguments:
-- qid = QID for current article
-- property = property that refers to other article whose sitelink to return
-- Returns: either category-stripped name of article, or nil
local function _lookupFallback(qid,property)
if not qid then
return nil
end
-- If property exists on current article, get value (other article qid)
local value = mw.wikibase.getBestStatements(qid, property)[1]
if value and value.mainsnak.datavalue and value.mainsnak.datavalue.value.id then
-- Look up Commons sitelink of other article
local sitelink = mw.wikibase.getSitelink(value.mainsnak.datavalue.value.id,"commonswiki")
-- Check to see if it starts with "Category:". If so, strip it and return
if sitelink and mw.ustring.sub(sitelink,1,9) == "Category:" then
return mw.ustring.sub(sitelink,10)
end
end
return nil
end
-- Find Commons category by looking in wikidata
-- Arguments:
-- qid = QID of current article
-- fetch = whether to lookup Commons sitelink (bool)
-- commonsSitelink = default value for Commons sitelink
-- Returns:
-- categoryLink = name of Commons category, nil if nothing is found
-- consistent = multiple wikidata fields are examined: are they consistent?
-- commonsSitelink = commons sitelink for current article
local function _lookupCategory(qid, fetch, commonsSitelink)
local categoryLink = nil
local consistent = true
-- look up commons sitelink for article, use if starts with "Category:"
if fetch then
commonsSitelink = mw.wikibase.getSitelink(qid,"commonswiki") or commonsSitelink
end
if commonsSitelink and mw.ustring.sub(commonsSitelink,1,9) == "Category:" then
categoryLink = mw.ustring.sub(commonsSitelink,10)
end
-- P373 is the "commons category" property for this article
local P373 = mw.wikibase.getBestStatements(qid, "P373")[1]
if P373 and P373.mainsnak.datavalue then
P373 = P373.mainsnak.datavalue.value
if categoryLink and categoryLink ~= P373 then
consistent = false
qid = nil -- stop searching on inconsistent data
else
categoryLink = P373
end
end
-- P910 is the "topic's main category". Look for commons sitelink there
local fallback = _lookupFallback(qid,"P910")
if fallback then
if categoryLink and categoryLink ~= fallback then
consistent = false
qid = nil
else
categoryLink = fallback
end
end
-- P1754 is the "list's main category". Look for commons sitelink there
fallback = _lookupFallback(qid,"P1754")
if fallback then
if categoryLink and categoryLink ~= fallback then
consistent = false
else
categoryLink = fallback
end
end
return categoryLink, consistent, commonsSitelink
end
-- Create Commons gallery link corresponding to current article
-- Arguments:
-- default = use as Commons link, don't access wikidata
-- linktext = text to display in link
-- search = string to search for
-- qid = QID to lookup in wikidata (for testing only)
-- Returns:
-- formatted wikilink to Commons gallery
function p._getGallery(default,linktext,search,qid)
if default then
return "[[Commons:"..default.."|"..(linktext or default).."]]"
end
if search then
return "[[Commons:Special:Search/"..search.."|"..(linktext or search).."]]"
end
local title, ns
title, ns, qid = _getTitleQID(qid)
-- construct default result (which searches for title)
local searchResult = "[[Commons:Special:Search/"..title.."|"..(linktext or title).."]]"
if qid then
local galleryLink, consistent = _lookupGallery(qid,true)
-- use wikidata if either sitelink or P935 exist, and they both agree
if galleryLink and consistent then
return "[[Commons:"..galleryLink.."|"..(linktext or galleryLink).."]]"
end
-- if not consistent, fall back to search and add to tracking cat
if not consistent and ns == 0 then
searchResult = searchResult.."[[Category:Inconsistent wikidata for Commons gallery]]"
end
end
return searchResult
end
-- Create Commons category link corresponding to current article
-- Arguments:
-- default = use as Commons category link, don't access wikidata
-- linktext = text to display in link
-- search = string to search for
-- qid = QID to lookup in wikidata (for testing only)
-- Returns:
-- formatted wikilink to Commons gallery
function p._getCategory(default,linktext,search,qid)
if default then
return "[[Commons:Category:"..default.."|"..(linktext or default).."]]"
end
if search then
return "[[Commons:Special:Search/Category:"..search.."|"..(linktext or search).."]]"
end
local title, ns
title, ns, qid = _getTitleQID(qid)
-- construct default result (which searches for title in Category space)
local searchResult = "[[Commons:Special:Search/Category:"..title.."|"..(linktext or title).."]]"
if qid then
local categoryLink, consistent = _lookupCategory(qid,true)
-- if any of sitelink category, P373, and P910/P1754 commons sitelinks exist,
-- use it. But don't use if they don't agree with each other
if categoryLink and consistent then
return "[[Commons:Category:"..categoryLink.."|"..(linktext or categoryLink).."]]"
end
-- if not consistent, fall back to search, but add tracking category
if not consistent and ns == 0 then
searchResult = searchResult.."[[Category:Inconsistent wikidata for Commons category]]"
end
end
return searchResult
end
-- Returns "best" Commons link: first look for gallery, then try category
-- Arguments:
-- default = use as Commons link, don't access wikidata
-- linktext = text to display in link
-- search = string to search for
-- qid = QID to lookup in wikidata (for testing only)
-- Returns:
-- formatted wikilink to Commons "best" landing page
function p._getGalleryOrCategory(default,linktext,search,qid)
if default then
return "[[Commons:"..default.."|"..(linktext or default).."]]"
end
if search then
return "[[Commons:Special:Search/"..search.."|"..(linktext or search).."]]"
end
local title, ns
title, ns, qid = _getTitleQID(qid)
-- construct default result (which searches for title)
local searchResult = "[[Commons:Special:Search/"..title.."|"..(linktext or title).."]]"
local trackingCats = ""
if qid then
local galleryLink, consistent, commonsSitelink = _lookupGallery(qid,true)
-- use wikidata if either sitelink or P935 exist, and they both agree
if galleryLink and consistent then
return "[[Commons:"..galleryLink.."|"..(linktext or galleryLink).."]]"
end
if not consistent and ns == 0 then
trackingCats = "[[Category:Inconsistent wikidata for Commons gallery]]"
end
-- if gallery is not good, fall back looking for category
local categoryLink
categoryLink, consistent = _lookupCategory(qid,false,commonsSitelink)
if categoryLink and consistent then
return "[[Commons:Category:"..categoryLink.."|"..(linktext or categoryLink).."]]"..trackingCats
end
if not consistent and ns == 0 then
trackingCats = trackingCats.."[[Category:Inconsistent wikidata for Commons category]]"
end
end
return searchResult..trackingCats
end
-- Testing-only entry point for _getTitleQID
function p.getTitleQID(frame)
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false})
local text, ns, qid = _getTitleQID(args[1])
return text..","..ns..","..(qid or "nil")
end
-- Testing-only entry point for _lookupFallback
function p.lookupFallback(frame)
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false})
local fallback = _lookupFallback(args[1],args[2])
return fallback or "nil"
end
-- Find the Commons gallery page associated with article
function p.getGallery(frame)
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false})
return p._getGallery(args[1],args.linktext,args.search,args.qid)
end
-- Find the Commons category page associated with article
function p.getCategory(frame)
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false})
return p._getCategory(args[1],args.linktext,args.search,args.qid)
end
function p.getGalleryOrCategory(frame)
local args = getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false})
return p._getGalleryOrCategory(args[1],args.linktext,args.search,args.qid)
end
return p