Jump to content

Module:Higher education task force test

From Wikipedia, the free encyclopedia
require("strict")
local yesNo = require("Module:Yesno")
local getArgs = require("Module:Arguments").getArgs
--local banner = require("Module:Higher_education_task_force_test2")
local banner = require("Module:WikiProject_banner")
local p = {}

--[[------------------------< _main >---------------------------------
Internal function to retrieve data for a task force.
]]----------------------------------------------------------------------------
function p._oldmain(args, data)
	local dataModule = require('Module:Higher education task force/data')
	local taskForceCode = args.code or args[1]
	local taskForceData

	if taskForceCode then
		taskForceCode = taskForceCode:match('^%s*(.-)%s*$'):lower() -- trim whitespace and put in lower case
		taskForceData = dataModule[taskForceCode]
	end

	return taskForceData
end

--[[------------------------< getCanonicalCode >---------------------------------
Gets the canonical code for a task force. 		return tfData.canonicalCode

]]----------------------------------------------------------------------------


-- Takes an input string "r" in the form "|a=b" (no spaces around the =) used in templates and adds it to the table
function p.tab2arg(trable,r)
   local t = mw.text.split(r, "=", true, true) -- Split by comma, trim whitespace, remove empty strings
   local x = mw.text.split(t[1], "|", true, true) -- Split by comma, trim whitespace, remove empty strings
   
   trable[x[2] ]=t[2]
   return trable
end

-- Adds an element to a table (syntactic sugar)
function p.ma1(frame,s1,s2)
   frame[s1]=s2
end

--[[ pulls out our specially named parameter from the list of template-like args, and expands
     it into the appropriate task force table entries
 ]]--
function p.fudgeTaskforceParameters(frame)
    local args = getArgs(frame)
	local taskforcesStr = ""
    taskforcesStr = args["HETF_TASKFORCES_TO_EXPAND"]
	if not taskforcesStr then
		return "" 
 	end

	local taskforceCodes = mw.text.split(taskforcesStr, ",", true, true) -- Split by comma, trim whitespace, remove empty strings
	local tfCounter = 1
    local trable=args

	for _, code in ipairs(taskforceCodes) do
		local tfData = p._oldmain({code})
		if tfData then
            trable = p.tab2arg(trable,string.format("|tf %d=%dyes", tfCounter,tfCounter))
			trable = p.tab2arg(trable,string.format("|TF_%d_LINK=%s", tfCounter, tfData.link))
			trable = p.tab2arg(trable,string.format("|TF_%d_NAME=%s", tfCounter, tfData.name))
			trable = p.tab2arg(trable,string.format("|TF_%d_NESTED=%s", tfCounter, tfData.nested))
			trable = p.tab2arg(trable,string.format("|TF_%d_IMAGE=%s", tfCounter, tfData.image))
			trable = p.tab2arg(trable,string.format("|TF_%d_MAIN_CAT=%s", tfCounter, tfData.category))
			tfCounter = tfCounter + 1
		end
	end
    frame.args=trable
    return frame
end

function p.fudgeTaskforceParametersArgs(args)
	local taskforcesStr = ""
    taskforcesStr = args["HETF_TASKFORCES_TO_EXPAND"]
	if not taskforcesStr then
		return args
 	end

	local taskforceCodes = mw.text.split(taskforcesStr, ",", true, true) -- Split by comma, trim whitespace, remove empty strings
	local tfCounter = 1
    local trable=args

	for _, code in ipairs(taskforceCodes) do
		local tfData = p._oldmain({code})
		if tfData then
            trable = p.tab2arg(trable,string.format("|tf %d=%dyes", tfCounter,tfCounter))
			trable = p.tab2arg(trable,string.format("|TF_%d_LINK=%s", tfCounter, tfData.link))
			trable = p.tab2arg(trable,string.format("|TF_%d_NAME=%s", tfCounter, tfData.name))
			trable = p.tab2arg(trable,string.format("|TF_%d_NESTED=%s", tfCounter, tfData.nested))
			trable = p.tab2arg(trable,string.format("|TF_%d_IMAGE=%s", tfCounter, tfData.image))
			trable = p.tab2arg(trable,string.format("|TF_%d_MAIN_CAT=%s", tfCounter, tfData.category))
			tfCounter = tfCounter + 1
		end
	end
    args=trable
    return args
end

function p.printentry(e)
   if type(e) == "table" then
      return p.printtab(e)
      end
   return e
end

function p.printtab(tab)
   local s=""
   for k,v in pairs(tab) do
--      s=s..(k)
      s=s..("("..p.printentry(k).." = "..p.printentry(v)..")")
   end
   return s
end

function p.printargs(frame)
   local str=getArgs(frame,{wrappers = {"Module:WikiProject banner shell","banner shell",'Template:Banner holder'}})
   return p.printtab(str)
end



---------------------------
-- Initialise arguments --  this function copied from WikiProject banner ---
---------------------------
local yesno = require('Module:Yesno')

local copiedinitialise = function(args, raw_args, inactive_status)
local frame = mw.getCurrentFrame()
local parent_args = getArgs(frame, {parentOnly = true})
local category = parent_args.category or args.category or true
local demo_page = parent_args.demo_page
local on_template_page = false
local sandbox-- = '/sandbox' -- BE SURE TO COMMENT OUT this definition when deploying to live
local cfg = mw.loadData('Module:WikiProject banner/config' .. (sandbox or ''))
local lang = mw.getLanguage(cfg.language)
local current_title = mw.title.getCurrentTitle()
local auxiliary = cfg.auxiliary_module .. (sandbox or '')


local banner_name = mw.title.new(args.BANNER_NAME or 'Template:WikiProject ' .. (args.PROJECT or 'PROJECT'))
if not demo_page then
	if yesno(category, true) then
		on_template_page = current_title.rootPageTitle==banner_name.rootPageTitle
	else
		demo_page = true
	end
end
local project_name = args.PROJECT_NAME or 'WikiProject ' .. (args.PROJECT or 'PROJECT')
local unknown_parameters = ''
if banner_name.exists and not demo_page then -- check for unknown parameters
	local parameters = {}
	for parameter in banner_name:getContent():gmatch('{{{([^|}]+)') do
		table.insert(parameters, parameter)
	end
	parameters.showblankpositional = "1"
	local check_for_unknown = require('Module:Check for unknown parameters')._check
	local unknowns = check_for_unknown(parameters, parent_args)
	if unknowns and unknowns~='' then -- there are some unknown parameters
		parameters.preview = cfg.unknown_parameters.preview:format(wikilink(banner_name.fullText))
		local unknown_category = cfg.unknown_parameters.tracking:format(project_name)
		if not mw.title.new(unknown_category).exists then
			unknown_category = cfg.unknown_parameters.default
		end
		parameters.unknown = unknown_category and '[[' .. unknown_category .. '|_VALUE_]]' or ''
		unknown_parameters = check_for_unknown(parameters, parent_args)
	end
end
if on_template_page then
	local templatepage = require('Module:WikiProject banner/templatepage' .. (sandbox or '')).templatepage
	return templatepage(args, raw_args, inactive_status)
else
	return unknown_parameters
		.. banner._main(args, raw_args, demo_page, banner_name, inactive_status and true or false), nil -- nil to disregard subsequent returned values
end
end





-- More or less a wrapper for WikiProject Banner with some argument sweetening
function p.omain(frame)
    local oframe=frame
--    local a=p.printargs(frame)
    local retv=p.fudgeTaskforceParameters(frame)

    local ret=banner.main(retv)
    return ret
end

p.main = function(frame)
	local args = getArgs(frame, {frameOnly = true})
	local raw_args = getArgs(frame, {frameOnly = true, removeBlanks = false})
    args=p.fudgeTaskforceParametersArgs(args)
--    raw_args=p.fudgeTaskforceParameters(raw_args)

    local i=copiedinitialise(args, raw_args)
    local a=p.printtab(raw_args)
	return i..a
end



p[''] = function (frame) return p._main(frame.args) end

return p