| Modul ini dinilai siap digunakan secara umum. Modul ini sudah matang dan diperkirakan bebas dari bug dan siap digunakan pada tempat yang tepat di manapun. Modul ini siap disinggung di halaman-halaman bantuan dan sumber informasi Wikipedia lainnya sebagai pilihan untuk dipelajari para pengguna baru. Untuk mengurangi beban server dan output yang tidak diharapkan, modul ini harus diperlengkapi dengan halaman bak pasir dan kasus uji daripada harus melakukan suntingan coba-dan-salah berulang-ulang. |
| Modul Lua ini digunakan pada sekitar 169.000 halaman. Untuk mencegah suntingan mengganggu skala besar dan beban peladen, setiap perubahan harus diuji di subhalaman /bak pasir atau /kasus uji Modul:Commons link, atau bak pasir modul Anda. Perubahan yang telah diuji kemudian dapat ditambahkan ke halaman ini dalam satu suntingan. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya. |
| Modul ini menggunakan Lua: |
Untuk menguji bak pasir, lihat atau buat di Modul:Commons link/bak pasir/kasus uji.
PenggunanPenggunan
{{#invoke:Commons link|getGallery}}
- Menggunakan Wikidata untuk menemukan galeri Commons yang sesuai dengan artikel. Jika tidak dapat menemukan galeri di Wikidata, diatur secara default untuk mencari PAGENAME di Commons.
{{#invoke:Commons link|getGallery|title|linktext=text}}
- Tautan ke galeri Commons di
title. Secara opsional, gunakantextsebagai teks tautan yang ditampilkan.
{{#invoke:Commons link|getGallery|search=string|linktext=text}}
- Tautan ke pencarian Commons untuk
string. Secara opsional, gunakantextsebagai teks tautan yang ditampilkan.
{{#invoke:Commons link|getCategory|fallback=string|linktext=text}}
- Gunakan wikidata terlebih dahulu, kemudian jika gagal, gunakan pencarian Commons untuk
string. Secara opsional, gunakantextsebagai teks tautan yang ditampilkan.
{{#invoke:Commons link|getCategory}}
- Gunakan wikidata untuk menemukan kategori Commons yang sesuai dengan artikel ini. Jika tidak dapat menemukan kategori di wikidata, default untuk mencari Kategori:PAGENAME di Commons.
{{#invoke:Commons link|getCategory|title|linktext=text}}
- Tautkan ke kategori Commons di
Category:title. Secara opsional, gunakantextsebagai teks tautan yang ditampilkan.
{{#invoke:Commons link|getCategory|search=string|linktext=text}}
- Tautan ke pencarian Commons untuk
Category:string. Secara opsional, gunakantextsebagai teks tautan yang ditampilkan.
{{#invoke:Commons link|getCategory|fallback=string|linktext=text}}
- Gunakan wikidata terlebih dahulu, kemudian jika gagal, gunakan pencarian Commons untuk
Category:string. Secara opsional, gunakantextsebagai teks tautan yang ditampilkan.
{{#invoke:Commons link|getGalleryOrCategory}}
- Gunakan wikidata untuk menemukan tautan tunggal "terbaik" di Commons:coba galeri terlebih dahulu, kemudian kategori. Argumen lain seperti di atas.
{{#invoke:Commons link|getGalleryAndCategory}}
- Lua untuk mengimplementasikan {{commons and category}}: mengembalikan galeri Commons, kategori Commons, atau keduanya (jika keduanya ditemukan)
{{#invoke:Commons link|getGalleryAndCategory|GalleryName|CategoryName}}
- Baik GalleryName atau CategoryName atau keduanya dapat diberikan, akan menggantikan pencarian wikidata
{{#invoke:Commons link|bold=1|italic=1|nowrap=1|lcfirst=1}}
- Format tautan pertama dapat ditentukan (kombinasi huruf tebal, miring, nowrap, dan huruf kecil pertama)
{{#invoke:Commons link|linktext=link|categoryText=category}}
- Teks di tautan pertama, dan tautan (kategori) kedua juga dapat diganti.
{{#invoke:Commons link|tracking=1}}
- Modul akan menghasilkan kategori pelacakan untuk ketidakcocokan antara argumen yang diberikan dan Wikidata.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
require('strict') localgetArgs=require('Modul:Arguments').getArgs localp={} -- Check if string is a valid QID -- Argument: QID to check -- Returns: valid (bool) localfunction_validQID(qid) returnqidandmw.ustring.find(qid,"^[Qq]%d+$") end -- Check if string is a valid wikidata property string -- Argument: property string to check -- Returns: valid (bool) localfunction_validProp(prop) returnpropandmw.ustring.find(prop,"^[Pp]%d+$") end -- lookup nestedIndex in outer table -- Example: fetchNested(foo,{'bar','baz','quux'}) will return -- foo and foo.bar and foo.bar.baz and foo.bar.baz.quux localfunction_fetchNested(outer,nestedIndex) ifnotouterortype(outer)~='table'ornotnestedIndexortype(nestedIndex)~='table'then returnnil end localcurrent=outer for_,indxinipairs(nestedIndex)do current=current[indx] ifnotcurrentthen returncurrent end end returncurrent end localfunction_lcfirst(s) returnmw.ustring.lower(mw.ustring.sub(s,1,1))..mw.ustring.sub(s,2) end -- Format displayed linktext -- Arguments: -- s = string to display -- formatting = formatting table: -- formatting.linktext = if defined, override s -- formatting.lcfirst = lower case the first letter in display -- formatting.bold = whether to bold the display -- formatting.italic = whether to italicize the display -- formatting.nowrap = set nowrapping -- Returns: -- formatted string localfunction_formatResult(s,formatting) localresultVal=formatting.linktextors ifformatting.lcfirstthen resultVal=_lcfirst(resultVal) end localstyle="" ifformatting.italicthenstyle="font-style:italic; "end ifformatting.boldthenstyle=style.."font-weight:bold; "end ifformatting.nowrapthenstyle=style.."white-space:nowrap; "end ifstyle~=""then resultVal='<span style="'..mw.text.trim(style)..'">'..resultVal..'</span>' end returnresultVal end -- Get title, namespace, and QID for current page -- Arguments: -- qid = testing only: get title of alternative page with QID=qid -- nsQid = whether to return the ns of the qid page or current -- Returns: -- title, namespace (string), qid of current page (or test page) localfunction_getTitleQID(qid,nsQid) localtitleObject=mw.title.getCurrentTitle() -- look up qid for current page (if not testing) localnsText=string.gsub(titleObject.nsText,"_"," ")-- [[phab:T369784]] ifnot_validQID(qid)then qid=mw.wikibase.getEntityIdForCurrentPage() returntitleObject.text,nsText,qid end -- testing-only path: given a qid, determine title -- always use namespace from current page (to suppress tracking cat) qid=qid:upper() localtitle=mw.wikibase.getSitelink(qid)or"" -- strip any namespace from sitelink localfirstColon=mw.ustring.find(title,':',1,true) localqidNsText="" iffirstColonthen qidNsText=mw.ustring.sub(title,1,firstColon-1) title=mw.ustring.sub(title,firstColon+1) end ifnsQidthen returntitle,qidNsText,qid end returntitle,nsText,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 localfunction_lookupGallery(qid,fetch,commonsSitelink) ifnot_validQID(qid)then returnnil,true,nil end qid=qid:upper() localgalleryLink=nil localconsistent=true -- look up commons sitelink for article, use if not category iffetchthen commonsSitelink=mw.wikibase.getSitelink(qid,"commonswiki")orcommonsSitelink end ifcommonsSitelinkandmw.ustring.sub(commonsSitelink,1,9)~="Category:"then galleryLink=commonsSitelink end -- P935 is the "commons gallery" property for this article localP935=mw.wikibase.getBestStatements(qid,"P935") localgallery=_fetchNested(P935,{1,'mainsnak','datavalue','value'}) ifgallerythen ifgalleryLinkandgalleryLink~=gallerythen consistent=false else galleryLink=gallery end end returngalleryLink,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 localfunction_lookupFallback(qid,property) ifnot_validQID(qid)ornot_validProp(property)then returnnil end qid=qid:upper() property=property:upper() -- If property exists on current article, get value (other article qid) localvalue=mw.wikibase.getBestStatements(qid,property) localotherQid=_fetchNested(value,{1,'mainsnak','datavalue','value','id'}) ifotherQidthen -- Look up Commons sitelink of other article localsitelink=mw.wikibase.getSitelink(otherQid,"commonswiki") -- Check to see if it starts with "Category:". If so, strip it and return ifsitelinkandmw.ustring.sub(sitelink,1,9)=="Category:"then returnmw.ustring.sub(sitelink,10) end end returnnil 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 localfunction_lookupCategory(qid,fetch,commonsSitelink) ifnot_validQID(qid)then returnnil,true,nil end qid=qid:upper() localcategoryLink=nil localconsistent=true -- look up commons sitelink for article, use if starts with "Category:" iffetchthen commonsSitelink=mw.wikibase.getSitelink(qid,"commonswiki")orcommonsSitelink end ifcommonsSitelinkandmw.ustring.sub(commonsSitelink,1,9)=="Category:"then categoryLink=mw.ustring.sub(commonsSitelink,10) end -- purposefully do not look in P373 ("commons category" property) -- if P373 is desired, then restore search code here -- P910 is the "topic's main category". Look for commons sitelink there localfallback=_lookupFallback(qid,"P910") iffallbackthen ifcategoryLinkandcategoryLink~=fallbackthen 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") iffallbackthen ifcategoryLinkandcategoryLink~=fallbackthen consistent=false qid=nil else categoryLink=fallback end end -- P373 is the "commons category" property for this article. This is -- a low-quality field, so should only be used as a last resort. ifcategoryLink==niland_validQID(qid)then localP373=mw.wikibase.getBestStatements(qid,"P373") categoryLink=_fetchNested(P373,{1,'mainsnak','datavalue','value'}) ifcategoryLinkthen consistent=true-- P373 is never used if anything else is available end end returncategoryLink,consistent,commonsSitelink end -- Does the article have a Commons gallery, and is it consistent? -- Arguments: -- qid = QID to lookup in wikidata (for testing only) -- Returns: -- filename at Commons, bool: is wikidata consistent for this article? functionp._hasGalleryConsistent(qid) localwp_title,wp_ns wp_title,wp_ns,qid=_getTitleQID(qid) return_lookupGallery(qid,true) end -- Does the article have a corresponding Commons gallery? -- Arguments: -- qid = QID to lookup in wikidata (for testing only) -- Returns: -- filename at Commons if so, false if not functionp._hasGallery(qid) localgalleryLink,consistent=p._hasGalleryConsistent(qid) returnconsistentandgalleryLink end -- Does the article have a Commons category? Is wikidata consistent for that? -- Arguments: -- qid = QID to lookup in wikidata (for testing only) -- prefix = whether to add "Category:" to return string (default true) -- Returns: -- filename at Commons, bool: consistent functionp._hasCategoryConsistent(qid,prefix) ifprefix==nilthen prefix=true end localwp_title,wp_ns wp_title,wp_ns,qid=_getTitleQID(qid) localcategoryLink,consistent=_lookupCategory(qid,true) ifcategoryLinkandprefixthen categoryLink="Kategori:"..categoryLink end returncategoryLink,consistent end -- Does the article have a corresponding Commons category? -- Arguments: -- qid = QID to lookup in wikidata (for testing only) -- prefix = whether to add "Category:" to return string (default true) -- Returns: -- filename at Commons if so, blank if not functionp._hasCategory(qid,prefix) localcategoryLink,consistent=p._hasCategoryConsistent(qid,prefix) returnconsistentandcategoryLink end localfunction_mediaSearchLink(query,formatting,linktext) query=queryor"" -- MediaSearch uses query-string parameters. Do not use an interwiki -- link such as [[Commons:Special:MediaSearch?...]], because the wiki -- link parser treats the ? as part of the page title and encodes it -- as %3F. Use an external Commons URL instead. localencodedQuery=mw.uri.encode(query,"QUERY") localdisplayText=linktextorquery localurl="https://commons.wikimedia.org/wiki/Special:MediaSearch?type=image&search="..encodedQuery return"["..url.." ".._formatResult(displayText,formatting).."]" end -- Create Commons link corresponding to current article -- Arguments: -- namespace = namespace in Commons ("" for galleries) -- default = use as Commons link, don't access wikidata -- search = string to search for -- fallback = string to search for if wikidata fails -- formatting = formatting parameters -- qid = QID to lookup in wikidata (for testing only) -- Returns: -- formatted wikilink to Commons in specified namespace functionp._getCommons(namespace,default,search,fallback,formatting,qid) localnsColon ifnotnamespaceornamespace==""then nsColon="" else nsColon=namespace..":" end ifdefaultthen return"[[Commons:"..nsColon..default.."|".._formatResult(default,formatting).."]]" end ifsearchthen return_mediaSearchLink(search,formatting,search) end localwp_title,wp_ns wp_title,wp_ns,qid=_getTitleQID(qid) localcommonsLink=nil localconsistent=true ifnsColon==""then commonsLink,consistent=_lookupGallery(qid,true) elseifnamespace:lower()=="category"then commonsLink,consistent=_lookupCategory(qid,true) end -- use wikidata if consistent ifcommonsLinkandconsistentthen return"[[Commons:"..nsColon..commonsLink.."|".._formatResult(commonsLink,formatting).."]]" end -- if not consistent, fall back to search and add to tracking cat -- construct default result (which searches for title) localsearchResult=_mediaSearchLink(fallbackorwp_title,formatting,fallbackorwp_title) ifnotconsistentandwp_ns==""then localfriendlyNS ifnsColon==""then friendlyNS="gallery" else friendlyNS=namespace:lower() end searchResult=searchResult.."[[Kategori:Wikidata tidak konsisten untuk "..friendlyNS.." di Commons]]" end returnsearchResult end -- Returns "best" Commons link: first look for gallery, then try category -- Arguments: -- default = use as Commons link, don't access wikidata -- search = string to search for -- fallback = string to search for if wikidata lookup fails -- formatting = formatting parameters -- qid = QID to lookup in wikidata (for testing only) -- Returns: -- formatted wikilink to Commons "best" landing page functionp._getGalleryOrCategory(default,search,fallback,formatting,qid) ifdefaultthen return"[[Commons:"..default.."|".._formatResult(default,formatting).."]]" end ifsearchthen return_mediaSearchLink(search,formatting,search) end localwp_title,wp_ns wp_title,wp_ns,qid=_getTitleQID(qid) localtrackingCats="" localgalleryLink,consistent,commonsSitelink=_lookupGallery(qid,true) -- use wikidata if either sitelink or P935 exist, and they both agree ifgalleryLinkandconsistentthen return"[[Commons:"..galleryLink.."|".._formatResult(galleryLink,formatting).."]]" end ifnotconsistentandwp_ns==""then trackingCats="[[Kategori:Wikidata tidak konsisten untuk galeri Commons]]" end -- if gallery is not good, fall back looking for category localcategoryLink categoryLink,consistent=_lookupCategory(qid,false,commonsSitelink) ifcategoryLinkandconsistentthen return"[[Commons:Category:"..categoryLink.."|".._formatResult(categoryLink,formatting).."]]"..trackingCats end ifnotconsistentandwp_ns==""then trackingCats=trackingCats.."[[Kategori:Wikidata yang tidak konsisten untuk kategori Commons]]" end -- return search result looking for title as last attempt return_mediaSearchLink(fallbackorwp_title,formatting,fallbackorwp_title)..trackingCats end -- Return link(s) Commons gallery, or category, or both from wikidata -- Arguments: -- defaultGallery = default gallery link to use, instead of wikidata -- defaultCategory = default category link to use, instead of wikidata -- categoryText = if both gallery and category, text to use in category link ("category" by default) -- oneSearch = only emit one search result -- formatting = formatting parameters -- qid = qid of page to lookup in wikidata (testing only) functionp._getGalleryAndCategory(defaultGallery,defaultCategory, categoryText,oneSearch,formatting,qid ) localwp_title,wp_ns wp_title,wp_ns,qid=_getTitleQID(qid) categoryText=categoryTextor"kategori" localtrackingCats="" localgalleryLink,galleryConsistent localcommonsSitelink=nil ifdefaultGallerythen galleryLink=defaultGallery galleryConsistent=true else galleryLink,galleryConsistent,commonsSitelink=_lookupGallery(qid,true) end localgalleryGood=galleryLinkandgalleryConsistent ifnotgalleryConsistentandwp_ns==""then trackingCats="[[Kategori:Wikidata tidak konsisten untuk galeri Commons]]" end localcategoryLink,categoryConsistent ifdefaultCategorythen categoryLink=defaultCategory categoryConsistent=true else categoryLink,categoryConsistent=_lookupCategory(qid,defaultGallery,commonsSitelink) end localcategoryGood=categoryLinkandcategoryConsistent ifnotcategoryConsistentandwp_ns==""then trackingCats=trackingCats.."[[Kategori:Wikidata tidak konsisten untuk kategori Commons]]" end localfirstLink -- construct default result (which searches for title) localsearchResult=_mediaSearchLink(wp_title,formatting,wp_title) ifnotoneSearchthen searchResult=searchResult.." (".._mediaSearchLink(wp_title,formatting,categoryText)..")" end locallinkText=nil ifgalleryGoodthen firstLink=galleryLink linkText=galleryLink elseifcategoryGoodthen firstLink="Category:"..categoryLink linkText=categoryLink else returnsearchResult..trackingCats end localresultVal="[[Commons:"..firstLink.."|".._formatResult(linkText,formatting).."]]" ifgalleryGoodandcategoryGoodthen resultVal=resultVal.." ([[Commons:Category:"..categoryLink.."|"..categoryText.."]])" end returnresultVal..trackingCats end -- Compare two titles with their namespaces stripped localfunctiontitleMatch(s1,s2) s1=s1or"" s2=s2or"" s1=mw.ustring.gsub(s1,"^[^:]+:","") s2=mw.ustring.gsub(s2,"^[^:]+:","") returns1==s2 end localgalleryTrackingCats={ commons_link_on_wikidata='[[Kategori:Pranala Commons ada di Wikidata]]', commons_link_defined_as_pagename='[[Kategori:Pranala Commons didefinisikan sebagai nama halaman]]', commons_link_locally_defined='[[Kategori:Pranala Commons ditentukan secara lokal]]', commons_link_from_wikidata='[[Kategori:Pranala Commons dari Wikidata]]', commons_link_is_pagename='[[Kategori:Pranala Commons dari nama halaman]]', inconsistent='[[Kategori:Wikidata tidak konsisten untuk galeri Commons]]' } localcategoryTrackingCats={ commons_link_on_wikidata='[[Kategori:Pranala kategori Commons ada di Wikidata]]', commons_link_defined_as_pagename='[[Kategori:Pranala kategori Commons didefinisikan sebagai nama halaman]]', commons_link_locally_defined='[[Kategori:Pranala kategori Commons ditentukan secara lokal]]', commons_link_from_wikidata='[[Kategori:Pranala kategori Commons dari Wikidata]]', commons_link_is_pagename='[[Kategori:Pranala kategori Commons dari nama halaman]]', inconsistent='[[Kategori:Wikidata tidak konsisten untuk kategori Commons]]' } localfunctionselectTrackingCat(trackingCats,wikidata,consistent,default,title) ifnotconsistentthen returntrackingCats.inconsistent end ifdefaultthen -- construct warning message ifdefault==wikidatathen returntrackingCats.commons_link_on_wikidata end localwarning="" ifwikidatathen localgenerateWarning=require('Modul:If preview')._warning warning=generateWarning({ "Pranala Commons tidak cocok dengan Wikidata – [[Templat:Commons_category#Memperbaiki_perbedaan|silakan periksa]]" }) end iftitleMatch(default,title)then returntrackingCats.commons_link_defined_as_pagename..warning end returntrackingCats.commons_link_locally_defined..warning end ifwikidatathen returntrackingCats.commons_link_from_wikidata end returntrackingCats.commons_link_is_pagename end -- Figure out tracking categories and editor warnings -- Arguments: -- default = Commons link argument passed to template -- fetchGallery = whether to fetch a gallery from Wikidata -- fetchCategory = whether to fetch a category from Wikidata -- qid = force a qid for testing -- Returns: -- tracking category and possible user warning -- -- Note: the logic for the tracking is quite different than the logic -- for generating Commons links (above). Thus, it is separated into another -- function for code clarity and maintainability. This should not seriously -- affect performance: server time is dominated by fetching wikidata entities, -- and those entities should be cached and shared between the Commons generating -- code and this tracking code. functionp._tracking(default,fetchGallery,fetchCategory,qid) localtitle,wp_ns,wp_qid=_getTitleQID(qid,true) ifwp_ns~=""then title=wp_ns..":"..title end -- only track if test or namespace=article or namespace=category ifnot(qidorwp_ns==""orwp_ns=="Category")then return"" end -- determine title and namespace of wikidata and wp article localwikidata=nil localconsistent=nil -- Tracking code works for all 4 cases of states of fetchGallery/Category -- fetchGallery takes precedence iffetchGallerythen wikidata,consistent=p._hasGalleryConsistent(qid) ifdefaultornotfetchCategoryor(consistentandwikidata)then returnselectTrackingCat(galleryTrackingCats,wikidata,consistent, default,title) end end iffetchCategorythen localcat_wikidata,cat_consistent=p._hasCategoryConsistent(qid,true) ifnotfetchGalleryor(cat_consistentandcat_wikidata)then returnselectTrackingCat(categoryTrackingCats,cat_wikidata, cat_consistent,default,title) end returnselectTrackingCat(galleryTrackingCats,wikidata,consistent, default,title) end return""-- nothing fetched, nothing tracked end localfunction_createFormatting(args) localformatting={} formatting.linktext=args.linktext localyesNo=require('Modul:Yesno') formatting.lcfirst=yesNo(args.lcfirst) formatting.bold=yesNo(args.bold) formatting.italic=yesNo(args.italic) formatting.nowrap=yesNo(args.nowrap) returnformatting end -- Testing-only entry point for _getTitleQID functionp.getTitleQID(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) localtext,ns,qid=_getTitleQID(args[1],args[2]) returntext..","..ns..","..(qidor"nil") end -- Testing-only entry point for _lookupFallback functionp.lookupFallback(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) localfallback=_lookupFallback(args[1],args[2]) returnfallbackor"nil" end -- Find the Commons gallery page associated with article functionp.getGallery(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) returnp._getCommons("",args[1],args.search,args.fallback,_createFormatting(args),args.qid) end -- Find the Commons category page associated with article functionp.getCategory(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) localretval=p._getCommons("Category",args[1], args.search,args.fallback,_createFormatting(args),args.qid ) ifargs.trackingthen localdefault=nil ifargs[1]then default="Category:"..args[1] end retval=retval..p._tracking(default,false,true,args.qid) end returnretval end functionp.getGalleryOrCategory(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) localretval=p._getGalleryOrCategory( args[1],args.search,args.fallback,_createFormatting(args),args.qid ) ifargs.trackingthen retval=retval..p._tracking(args[1],true,true,args.qid) end returnretval end functionp.hasGallery(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) returnp._hasGallery(args.qid)or"" end functionp.hasCategory(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) returnp._hasCategory(args.qid)or"" end functionp.hasGalleryOrCategory(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) returnp._hasGallery(args.qid)orp._hasCategory(args.qid)or"" end functionp.getGalleryAndCategory(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) returnp._getGalleryAndCategory(args[1],args[2], args.categoryText,args.oneSearch,_createFormatting(args),args.qid) end functionp.tracking(frame) localargs=getArgs(frame,{frameOnly=true,parentOnly=false,parentFirst=false}) returnp._tracking(args[1],args.fetchGallery,args.fetchCategory,args.qid) end returnp