Module:Api methods

From Warcraft Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Api methods/doc

-- https://wowpedia.fandom.com/wiki/Template:Api_methods
local m = {}

local widget_data = {
	Object = {
		"GetDebugName",
		"GetParent",
		"GetParentKey",
		"SetParentKey",
	},
	FrameScriptObject = {
		"GetName",
		"GetObjectType",
		"IsForbidden",
		"IsObjectType",
		"SetForbidden",
	},
	ScriptRegion = {
		"ScriptRegion:CanChangeProtectedState",
		"ScriptRegion:EnableMouse",
		"ScriptRegion:EnableMouseWheel",
		"ScriptRegion:GetBottom",
		"ScriptRegion:GetCenter",
		"ScriptRegion:GetHeight",
		"ScriptRegion:GetLeft",
		"ScriptRegion:GetRect",
		"ScriptRegion:GetRight",
		"ScriptRegion:GetScaledRect",
		"ScriptRegion:GetScript",
		"ScriptRegion:GetSize",
		"ScriptRegion:GetSourceLocation",
		"ScriptRegion:GetTop",
		"ScriptRegion:GetWidth",
		"ScriptRegion:HasScript",
		"ScriptRegion:Hide",
		"ScriptRegion:HookScript",
		"ScriptRegion:IsAnchoringRestricted",
		"ScriptRegion:IsDragging",
		"ScriptRegion:IsMouseClickEnabled",
		"ScriptRegion:IsMouseEnabled",
		"ScriptRegion:IsMouseMotionEnabled",
		"ScriptRegion:IsMouseOver",
		"ScriptRegion:IsMouseWheelEnabled",
		"ScriptRegion:IsProtected",
		"ScriptRegion:IsRectValid",
		"ScriptRegion:IsShown",
		"ScriptRegion:IsVisible",
		"ScriptRegion:SetMouseClickEnabled",
		"ScriptRegion:SetMouseMotionEnabled",
		"ScriptRegion:SetParent",
		"ScriptRegion:SetPassThroughButtons",
		"ScriptRegion:SetScript",
		"ScriptRegion:SetShown",
		"ScriptRegion:Show",
		"ScriptRegionResizing:AdjustPointsOffset",
		"ScriptRegionResizing:ClearAllPoints",
		"ScriptRegionResizing:ClearPoint",
		"ScriptRegionResizing:ClearPointsOffset",
		"ScriptRegionResizing:GetNumPoints",
		"ScriptRegionResizing:GetPoint",
		"ScriptRegionResizing:GetPointByName",
		"ScriptRegionResizing:SetAllPoints",
		"ScriptRegionResizing:SetHeight",
		"ScriptRegionResizing:SetPoint",
		"ScriptRegionResizing:SetSize",
		"ScriptRegionResizing:SetWidth",
		"AnimatableObject:CreateAnimationGroup",
		"AnimatableObject:GetAnimationGroups",
		"AnimatableObject:StopAnimating",
	},
}

local inherited = {
	FrameScriptObject = {"Object"},
	ScriptRegion = {"FrameScriptObject", "Object"},
}

local fs = "[[API %s %s|%s:%s]]"

local function FormatLinks(widget)
	local widget_link = string.format("[[UIOBJECT_%s|%s]]", widget, widget)
	local t = {}
	for _, method in pairs(widget_data[widget]) do
		if method:find(":") then
			local widget2, method2 = method:match("(%w+):(%w+)")
			table.insert(t, fs:format(widget2, method2, widget2, method2)) -- hack
		else
			table.insert(t, fs:format(widget, method, widget, method))
		end
	end
	widget_list = string.format('\n<div style="margin-left:1em">%s</div>', table.concat(t, "<br>"))
	return widget_link..widget_list
end

local function GetWidgetMethods(args, widget)
	local t = {}
	if args.inherited == "1" and inherited[widget] then
		for _, v in pairs(inherited[widget]) do
			local inherited = FormatLinks(v)
			table.insert(t, inherited)
		end
	else
		local defind = FormatLinks(widget)
		table.insert(t, defind)
	end
	return table.concat(t)
end

function m.main(f)
	local widget = f.args[1]
	local methods = GetWidgetMethods(f.args, widget)
	local darktable = string.format('{| class="darktable\n|%s\n|}', methods)
	return darktable
end

return m