Module:Sandbox/ElanHR/test-category-module

-- 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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.