Wowpedia
Advertisement

Documentation for this module may be created at Module:API info/type/widget/doc

local infobox_module = require("Module:API_info/util/infobox")
local wowprog_data = mw.loadData("Module:API_info/wowprog/widgets")
local m = {}

local function GetGithubLink(apiType, search)
	if apiType == "widget" and wowprog_data[search] == "abstract" then return end
	local item = {
		icon = "GitHub_Octocat.png",
		text = "FrameXML",
		url = string.format("https://github.com/Gethe/wow-ui-source/search?q=%s", search),
	}
	return item
end

local function GetWowprogLink(apiType, widget, method)
	local item = {
		icon = "Wowprogramming.png",
		text = "Wowprogramming",
	}
	if apiType == "widget" then
		if wowprog_data[widget] then
			item.url = string.format("https://wowprogramming.com/docs/widgets/%s.html", widget)
		end
	elseif apiType == "widgetmethod" then
		local wowprog_widget = wowprog_data[widget..":"..method]
		if wowprog_widget then
			-- certain Region api are documented as VisibleRegion
			if type(wowprog_widget) == "string" then
				widget = wowprog_widget
			end
			item.url = string.format("https://wowprogramming.com/docs/widgets/%s/%s.html", widget, method)
		end
	end
	if item.url then
		return item
	end
end

function m.main(f)
	local apiType = f.args.t
	local pageName = f.args.name
	local github_tbl, wowprog_tbl
	if apiType == "widget" then
		local widget = pageName:match("UIOBJECT (%w+)")
		if widget then
			github_tbl = GetGithubLink(apiType, widget)
			wowprog_tbl = GetWowprogLink(apiType, widget)
		end
	elseif apiType == "widgetmethod" then
		local widget, method = pageName:match("API (%w+) (%w+)")
		github_tbl = GetGithubLink(apiType, method)
		wowprog_tbl = GetWowprogLink(apiType, widget, method)
	end
	local source = {
		"! Links",
		{github_tbl, wowprog_tbl},
	}
	if #source[2] > 0 then
		return infobox_module:main({}, source)
	end
end

return m
Advertisement