<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://secrets.warcraftwatch.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AAPI_info%2Frestricted</id>
	<title>Module:API info/restricted - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://secrets.warcraftwatch.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AAPI_info%2Frestricted"/>
	<link rel="alternate" type="text/html" href="https://secrets.warcraftwatch.com/w/index.php?title=Module:API_info/restricted&amp;action=history"/>
	<updated>2026-05-06T21:44:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://secrets.warcraftwatch.com/w/index.php?title=Module:API_info/restricted&amp;diff=7141&amp;oldid=prev</id>
		<title>imported&gt;Ketho at 17:39, 21 May 2025</title>
		<link rel="alternate" type="text/html" href="https://secrets.warcraftwatch.com/w/index.php?title=Module:API_info/restricted&amp;diff=7141&amp;oldid=prev"/>
		<updated>2025-05-21T17:39:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- https://warcraft.wiki.gg/wiki/Template:Restrictedapi&lt;br /&gt;
local m = {}&lt;br /&gt;
&lt;br /&gt;
local levels = {&lt;br /&gt;
	protected = &amp;quot;This can only be called from [[secure code]].&amp;quot;,&lt;br /&gt;
	hwevent = &amp;quot;This requires a hardware event i.e. keyboard/mouse input.&amp;quot;,&lt;br /&gt;
	nocombat = &amp;quot;This cannot be called while in combat.&amp;quot;,&lt;br /&gt;
	noinstance = &amp;quot;This only works outdoors and not in instanced content (dungeons/raids/battlegrounds/arena).&amp;quot;,&lt;br /&gt;
	noscript = &amp;quot;This cannot be called &amp;#039;&amp;#039;directly&amp;#039;&amp;#039; from /run and [[MACRO_script|/script]] ([[API_RunScript|RunScript]]) and [[API_loadstring|loadstring]], e.g. WowLua and WeakAuras.&amp;quot;,&lt;br /&gt;
	grouponly = &amp;quot;This can only be queried on units in your party or raid.&amp;quot;,&lt;br /&gt;
	secureframe = &amp;quot;This cannot be called on secure frames during combat; see [[SecureStateDriver]].&amp;quot;,&lt;br /&gt;
	restrictedframe = &amp;quot;This cannot be called on [https://us.forums.blizzard.com/en/wow/t/ui-changes-in-rise-of-azshara/202487 restricted frames] e.g. nameplates. ([[Object_security#Anchor_restricted_regions|Object security]])&amp;quot;,&lt;br /&gt;
	anchorfamily = &amp;quot;Frames that are anchored to a [https://us.forums.blizzard.com/en/wow/t/ui-changes-in-rise-of-azshara/202487 restricted frame] can only have their other anchors set to frames within that same anchor hierarchy. ([[Object_security#Anchor_restricted_regions|Object security]])&amp;quot;,&lt;br /&gt;
	nopermission = &amp;quot;[[UI_ERROR_MESSAGE]]: &amp;lt;code&amp;gt;You do not have permission to perform that function&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
	nofreetrial = &amp;quot;This is not available to Free Trial / non-subscriber accounts.&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- https://stackoverflow.com/a/7615129/1297035&lt;br /&gt;
local function strsplit(input, sep)&lt;br /&gt;
	local t = {}&lt;br /&gt;
	for s in string.gmatch(input, &amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
		table.insert(t, s)&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function contains(tbl, value)&lt;br /&gt;
	for _, v in pairs(tbl) do&lt;br /&gt;
		if value == v then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function GetInfoText(f, protectedTypes)&lt;br /&gt;
	local t = {}&lt;br /&gt;
	for _, v in pairs(protectedTypes) do&lt;br /&gt;
		if levels[v] then&lt;br /&gt;
			local tag = string.format(&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;lt;font color=\&amp;quot;#dda0dd\&amp;quot;&amp;gt;#%s&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, v)&lt;br /&gt;
			table.insert(t, string.format(&amp;quot;%s - %s&amp;quot;, tag, levels[v]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- tried {{{1}}} but then it wouldnt support formatted text fonts&lt;br /&gt;
	if #f.args.note &amp;gt; 0 then&lt;br /&gt;
		-- table.insert(t, string.rep(&amp;quot;&amp;amp;nbsp;&amp;quot;, 4)..f.args.info)&lt;br /&gt;
		table.insert(t, f.args.note)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(t, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local unrestrictedAmbox = {&lt;br /&gt;
	title = &amp;quot;Ambox&amp;quot;,&lt;br /&gt;
	args = {&lt;br /&gt;
		border = &amp;quot;green&amp;quot;,&lt;br /&gt;
		type = &amp;quot;&amp;#039;&amp;#039;&amp;#039;This function appears to not require HW events.&amp;#039;&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
		image = &amp;quot;[[Image:Inv_misc_toy_10.png|32px|link=]]&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function GetAmbox(f)&lt;br /&gt;
	local protectedTypes = strsplit(f.args.type, &amp;quot;,&amp;quot;)&lt;br /&gt;
	if contains(protectedTypes, &amp;quot;unrestricted&amp;quot;) then&lt;br /&gt;
		return f:expandTemplate(unrestrictedAmbox)&lt;br /&gt;
	end&lt;br /&gt;
	local template = {&lt;br /&gt;
		title = &amp;quot;Ambox&amp;quot;,&lt;br /&gt;
		args = {&lt;br /&gt;
			border = &amp;quot;blue&amp;quot;,&lt;br /&gt;
			type = &amp;quot;&amp;#039;&amp;#039;&amp;#039;This function is [[:Category:API functions/restricted|restricted]].&amp;#039;&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
			style = &amp;quot;width: auto; margin-left: 0.8em;&amp;quot;,&lt;br /&gt;
			info = GetInfoText(f, protectedTypes),&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if contains(protectedTypes, &amp;quot;protected&amp;quot;) then&lt;br /&gt;
		template.args.image = [=[&amp;lt;div style=&amp;quot;position: relative; padding: 0 5px 2px 0&amp;quot;&amp;gt;[[Image:Icon-terminal.svg|48px|link=]]&amp;lt;div style=&amp;quot;position:absolute; bottom: 0; right: 0&amp;quot;&amp;gt;[[File:Ambox padlock red.svg|32px|link=]]&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]=]&lt;br /&gt;
	elseif #f.args.icon &amp;gt; 0 then&lt;br /&gt;
		template.args.image = string.format(&amp;quot;[[File:%s.png|link=]]&amp;quot;, f.args.icon)&lt;br /&gt;
	else&lt;br /&gt;
		template.args.image = &amp;quot;[[File:Icon-addon-48x48.png|link=]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return f:expandTemplate(template)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- local function GetCategories(f)&lt;br /&gt;
-- 	local t = {}&lt;br /&gt;
-- 	local cats = strsplit(f.args.type, &amp;quot;,&amp;quot;)&lt;br /&gt;
-- 	for _, v in pairs(cats) do&lt;br /&gt;
-- 		table.insert(t, string.format(&amp;quot;[[Category:API functions/restricted/%s]]&amp;quot;, v))&lt;br /&gt;
-- 	end&lt;br /&gt;
-- 	return table.concat(t)&lt;br /&gt;
-- end&lt;br /&gt;
&lt;br /&gt;
function m.main(f)&lt;br /&gt;
	return GetAmbox(f)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return m&lt;/div&gt;</summary>
		<author><name>imported&gt;Ketho</name></author>
	</entry>
</feed>