Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/ElanHR/test-category-module
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
-- For unit tests, see [[Module:Bananas/testcases]] local p = {} local messageBox = require('Module:Message box') local mArguments -- Lazily initialise Module:Arguments local wd = require('Module:Wikidata') local wikidata_category_subclasses = {'Q28326730', 'Q23894246', 'Q13331174', 'Q20010800', 'Q58118449', 'Q38084761', 'Q30330522', 'Q24514938', 'Q24046192', 'Q23894233', 'Q20769287', 'Q59542487', 'Q59541917', 'Q56428020', 'Q54662266', 'Q30432511', 'Q24574745', 'Q24571879', 'Q15647814', 'Q15407973', 'Q4167836'} -- local wd_id = 'Q4115189' local wd_id = wd.pageId() local set_cat_desc = 'Wikipedia:Categorization#Set category' local topic_cat_desc = 'Wikipedia:Categorization#Topic category' function p.get_page_type() local page_types = {} -- check if it's an instance of (P31) a country (Q6256) and terminate the chain if it is local inst = mw.wikibase.getAllStatements(wd_id, "P31") if #inst > 0 then for k, v in ipairs(inst) do local instid = v.mainsnak.datavalue.value.id -- stop if it's a country (or a country within the United Kingdom if skip is true) --if instid == "Q6256" or (skip and instid == "Q3336843") then if instid == 'Q59542487' then page_types['SET'] = true elseif instid == 'Q59541917' then page_types['TOPIC'] = true elseif instid == 'Q15647814' then page_types['ADMIN'] = true end end end return page_types end -- {{#invoke:Message box|cmbox}} -- {{set cat}} definition -- {{Cmbox -- | type = notice -- | text = This is a '''[[Wikipedia:Categorization#Set category|set category]]'''. It should only contain pages that are '''{{#if:{{{first|}}}|{{{first}}}|{{#if:{{{alternative|}}}|{{{alternative}}}|{{PAGENAME}}}}}}''' or '''lists of {{#if:{{{alternative|}}}|{{{alternative}}}|{{PAGENAME}}}}''', as well as '''[[Wikipedia:Categorization#Subcategorization|subcategories]]''' containing those things. Topics about {{#if:{{{alternative|}}}|{{{alternative}}}|{{PAGENAME}}}} in general should be placed in {{#if:{{{topic|}}}|[[:Category:{{{topic}}}]] or one of it subcategories|relevant [[Wikipedia:Categorization#Topic category|topic categories]]}}. {{#if:{{{single}}}|Categories related to only an individual {{{single}}} should not be in this category.}} -- }} -- {{Single namespace|category|[[Category:Set categories]]} -- {{Wikipedia category|container=yes|hidden=yes|tracking=yes|shortcut=WP:CINA}} local function get_sparql_queries() local sparql_queries = {} for i, item in pairs(mw.wikibase.getBestStatements(wd_id, 'P3921' )) do sparql_queries[i] = item['mainsnak']['datavalue']['value'] end return sparql_queries end -- {{#if:{{{sparql|}}}| -- [//query.wikidata.org/# {{urlencode:{{{sparql|}}}|PATH}} SPARQL] {{!}} }} function p.get_wdqs_link_for_query_with_en_articles(query) local select_query = 'SELECT ?item ?itemLabel ?itemDescription ?article WHERE {SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }' .. query .. ' ?article schema:about ?item . ?article schema:isPartOf <https://en.wikipedia.org/>. }' local link_text = '' if query then link_text = "https://query.wikidata.org/#" .. mw.uri.encode( select_query, "PATH" ) .."" end return link_text end function p.get_wdqs_link_for_query_without_en_articles(query) local select_query = 'SELECT ?item ?itemLabel ?itemDescription ?article WHERE {SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }' .. query .. ' FILTER NOT EXISTS { ?article schema:about ?item . ?article schema:isPartOf <https://en.wikipedia.org/>. } }' local link_text = '' if query then link_text = "https://query.wikidata.org/#" .. mw.uri.encode( select_query, "PATH" ) .."" end return link_text end local function get_category_contains() return '' end function p.hello() return "Hello, world!" end function p.test_template() local box = messageBox.main( 'cmbox', { type='notice', text='This is a test template. Wikidata ID:' .. wd.pageId(), -- More parameters... }) return box end function p.get_set_cat_template(set_item, set_item_pluralized, topic) local _item if set_item then _item = set_item elseif set_item_pluralized then _item = set_item_pluralized else _item = mw.title.getCurrentTitle().text end local _item_pluralized if set_item then _item_pluralized = set_item elseif set_item_pluralized then _item_pluralized = set_item_pluralized else _item_pluralized = mw.title.getCurrentTitle().text end local _topic if topic then _topic = topic else _topic = "[[:Category:{{{topic}}}]]" end -- local set_cat_item = {} -- set_cat_item['entity-type'] = 'item' -- set_cat_item['numeric-id'] = '59542487' local set_cat_text = "This is a [[".. set_cat_desc .."|set category]]. It should only contain pages that are " .. _item .. " or lists of " .. _item_pluralized .. "as well as [[Wikipedia:Categorization#Subcategorization|subcategories]] containing those things." -- "Topics about " .. _item_pluralized .. " in general should be placed in " .. _topic .. " or one of it subcategories|relevant [[Wikipedia:Categorization#Topic category|topic categories]]}}. {{#if:{{{single}}}|Categories related to only an individual {{{single}}} should not be in this category.}}" local sparql_queries = get_sparql_queries() if sparql_queries then set_cat_text = set_cat_text .. '\n\n\nTools:\n<div class="toccolours mw-collapsible mw-collapsed";">\n' for i, item in pairs(sparql_queries) do set_cat_text = set_cat_text .. '* ['.. p.get_wdqs_link_for_query_with_en_articles(item) ..' EN articles]\n' set_cat_text = set_cat_text .. '* ['.. p.get_wdqs_link_for_query_without_en_articles(item) ..' No EN articles]\n' set_cat_text = set_cat_text .. '* [https://petscan.wmflabs.org/?common_wiki_other=&edits%5Bbots%5D=both&ns%5B0%5D=1&wikidata_item=any&interface_language=en&language=en&search_max_results=500&categories='.. mw.title.getCurrentTitle().text ..'&edits%5Bflagged%5D=both&edits%5Banons%5D=both&cb_labels_any_l=1&project=wikipedia&cb_labels_no_l=1&depth=5&cb_labels_yes_l=1&langs_labels_any=&doit= petscan]' set_cat_text = set_cat_text .. '</div>' end end local output_wikitext = messageBox.main( 'cmbox', { type='notice', text=set_cat_text -- More parameters... }) return output_wikitext end function p._main(args) local page_types = p.get_page_type() if page_types['SET'] then return p.get_set_cat_template(args['first'], args['alternative']) --.. mw.title.getCurrentTitle().prefixedText .. '\n ' .. mw.title.getCurrentTitle().text .. '\n ' .. mw.title.getCurrentTitle().baseText .. '\n ' .. mw.title.getCurrentTitle().subpageText .. ' ' elseif page_types['TOPIC'] then return 'TOPIC CAT' end --if page_types['TOPIC'] then return tostring(page_types) ..' | HELLO |'.. tostring(wd_id) --end end function p.set_cat_template(frame) mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame, {removeBlanks = false}) local ret = p._main(args) return ret or '' end function p.dump(o) if type(o) == 'table' then local s = '{ ' for k,v in pairs(o) do if type(k) ~= 'number' then k = '"'..k..'"' end s = s .. '['..k..'] = ' .. dump(v) .. ',' end return s .. '} ' else return tostring(o) end end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Sandbox/ElanHR/test-category-module/doc
(
edit
)