<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AUser_scripts_table</id>
	<title>Module:User scripts table - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AUser_scripts_table"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:User_scripts_table&amp;action=history"/>
	<updated>2026-04-09T02:03:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:User_scripts_table&amp;diff=147531&amp;oldid=prev</id>
		<title>imported&gt;Guarapiranga: /*  */ move to excerpt formation</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:User_scripts_table&amp;diff=147531&amp;oldid=prev"/>
		<updated>2022-06-15T09:28:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;: &lt;/span&gt; move to excerpt formation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function allcases(s)&lt;br /&gt;
	return s:gsub(&amp;#039;([%^%$%(%)%%%.%[%]%*%+%-])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
		:gsub(&amp;#039;%a&amp;#039;, function(letter) return &amp;#039;[&amp;#039;..letter:upper()..letter:lower()..&amp;#039;]&amp;#039; end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local rowsToGet = tonumber(frame.args[1]) or 200  -- use this to determine number of rows to get (default 200)&lt;br /&gt;
    local rowOffset = tonumber(frame.args[2]) or 0   -- use this offset to allow multiple calls to build larger table   &lt;br /&gt;
    local source = mw.title.new(&amp;#039;Wikipedia:User scripts/Most imported scripts&amp;#039;):getContent()&lt;br /&gt;
    local data = {}&lt;br /&gt;
	local rows = mw.html.create()&lt;br /&gt;
    local count = 0&lt;br /&gt;
    for script, total, active in source:gmatch(&amp;#039;\n| %[%[([^%]]+)%]%] -\n| (%d+) -\n| (%d+)&amp;#039;) do&lt;br /&gt;
		count = count + 1&lt;br /&gt;
		if count &amp;gt; rowOffset then&lt;br /&gt;
			local redirectTarget = mw.title.new(script).redirectTarget&lt;br /&gt;
			if redirectTarget then script = redirectTarget.prefixedText end&lt;br /&gt;
			local jsContent = mw.title.new(script):getContent()&lt;br /&gt;
			-- don&amp;#039;t include scripts that have been blanked or redirected as non-functional&lt;br /&gt;
			if not jsContent:find(&amp;quot;mw.log.warn( &amp;#039;You installed the userscript&amp;quot;, 1, true) then&lt;br /&gt;
				data[script] = { total = total, active = active }&lt;br /&gt;
				local desc = script:match(&amp;#039;(.-)%.[CJcj][Ss][Ss]?$&amp;#039;)&lt;br /&gt;
				local redirectTarget = mw.title.new(desc).redirectTarget&lt;br /&gt;
				if redirectTarget then desc = redirectTarget.prefixedText end&lt;br /&gt;
				local name = desc:match(&amp;#039;([^/:]-)$&amp;#039;)&lt;br /&gt;
				local author = script:match(&amp;#039;User:([^%/]+)&amp;#039;)&lt;br /&gt;
				local excerpt = mw.title.new(desc):getContent() or &amp;#039;&amp;#039;&lt;br /&gt;
				if excerpt ~= &amp;#039;&amp;#039; then&lt;br /&gt;
					excerpt = mw.text.truncate(excerpt&lt;br /&gt;
						--keep descriptions from template params&lt;br /&gt;
						--expand {{u}} at top level&lt;br /&gt;
						--remove other templates&lt;br /&gt;
						:gsub(&amp;quot;%b{}&amp;quot;, function(bracketed)&lt;br /&gt;
							local desc_first, desc_rest = bracketed:match(&amp;#039;|%s*[Dd][Ee][Ss][Cc][^=]+=%s*([^|])([^|]+)|&amp;#039;)&lt;br /&gt;
							if desc_first then&lt;br /&gt;
								return desc_first:upper() .. desc_rest&lt;br /&gt;
							end&lt;br /&gt;
							local user = bracketed:find &amp;quot;^{{[Uu]|([^}]+)}}&amp;quot;&lt;br /&gt;
							if user then&lt;br /&gt;
								return &amp;#039;[[User:&amp;#039; .. user .. &amp;#039;|&amp;#039; .. user .. &amp;#039;]]&amp;#039;&lt;br /&gt;
							end&lt;br /&gt;
							if bracketed:find(&amp;#039;^{{&amp;#039;) and bracketed:find(&amp;#039;}}$&amp;#039;) then&lt;br /&gt;
								return &amp;#039;&amp;#039;&lt;br /&gt;
							end&lt;br /&gt;
						end)&lt;br /&gt;
						--strip out images, files, media, categories&lt;br /&gt;
						:gsub(&amp;#039;%b[]&amp;#039;,&lt;br /&gt;
							function(bracketed)&lt;br /&gt;
								return bracketed:gsub(&amp;#039;^%[%[%s*(%a+):.-%]%]$&amp;#039;,&lt;br /&gt;
									function(link_prefix)&lt;br /&gt;
										link_prefix = link_prefix:lower()&lt;br /&gt;
										if link_prefix == &amp;quot;image&amp;quot; or link_prefix == &amp;quot;file&amp;quot;&lt;br /&gt;
										or link_prefix == &amp;quot;media&amp;quot; or link_prefix == &amp;quot;category&amp;quot; then&lt;br /&gt;
											return &amp;quot;&amp;quot;&lt;br /&gt;
										end -- otherwise leave it alone&lt;br /&gt;
									end)&lt;br /&gt;
							end)&lt;br /&gt;
						--remove spans while keeping text inside&lt;br /&gt;
						--strip out remaining tags and the text inside&lt;br /&gt;
						:gsub(&amp;#039;&amp;lt;(%a+)[^&amp;gt;]+&amp;gt;(.-)&amp;lt;/%1&amp;gt;&amp;#039;, function(tag, contents)&lt;br /&gt;
							if tag:lower() == &amp;quot;span&amp;quot; then&lt;br /&gt;
								return contents&lt;br /&gt;
							else&lt;br /&gt;
								return &amp;quot;&amp;quot;&lt;br /&gt;
							end&lt;br /&gt;
						end)&lt;br /&gt;
						:gsub(&amp;#039;%b&amp;lt;&amp;gt;&amp;#039;, &amp;#039;&amp;#039;) --remove any other tag markup&lt;br /&gt;
						:gsub(&amp;#039;__[^_]+__&amp;#039;, &amp;#039;&amp;#039;) --remove __ markups&lt;br /&gt;
						:gsub(&amp;#039;^=+[^=]+=+&amp;#039;, &amp;#039;&amp;#039;):gsub(&amp;#039;\n=+[^=]+=+&amp;#039;, &amp;#039;&amp;#039;) --remove section titles&lt;br /&gt;
						:gsub(&amp;quot;&amp;#039;&amp;#039;+&amp;quot;, &amp;quot;&amp;quot;) --strip out bold and italic markup&lt;br /&gt;
						:gsub(&amp;#039;&amp;amp;nbsp;&amp;#039;, &amp;#039; &amp;#039;) --replace nbsp spaces with regular spaces&lt;br /&gt;
						:gsub(&amp;#039;^[:;%s]+&amp;#039;, &amp;#039;&amp;#039;):gsub(&amp;#039;\n[:;%s]+&amp;#039;, &amp;#039;\n&amp;#039;) --strip indents, leading&lt;br /&gt;
						:gsub(&amp;#039;{|.-\n|}&amp;#039;, &amp;#039;&amp;#039;) --remove tables&lt;br /&gt;
						:gsub(&amp;#039;\n|[^\n]*\n&amp;#039;, &amp;#039;&amp;#039;) --remove table fragments&lt;br /&gt;
						:gsub(&amp;#039;%s+\n&amp;#039;, &amp;#039;\n&amp;#039;) --and trailing spaces&lt;br /&gt;
						:gsub(&amp;#039;(%s)%s+&amp;#039;, &amp;#039;%1&amp;#039;) --strip redundant spaces&lt;br /&gt;
						:gsub(allcases(name)..&amp;#039;(%s)&amp;#039;, &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;..name..&amp;quot;&amp;#039;&amp;#039;&amp;#039;%1&amp;quot;)&lt;br /&gt;
						, 600, &amp;#039;&amp;#039;):gsub(&amp;#039;(.+)\n&amp;#039;, &amp;#039;%1&amp;#039;) -- truncate at end of last paragraph before 600 chars&lt;br /&gt;
						..&amp;#039; &amp;#039;..&amp;#039;[[&amp;#039;..desc..&amp;#039;|→]]&amp;#039;&lt;br /&gt;
						.. &amp;#039;&amp;lt;!-- --&amp;gt;&amp;#039; -- add an empty HTML comment so that if the excerpt ends with an unclosed comment (such as [[User:Steel359/Protection js]]), it doesn&amp;#039;t break things&lt;br /&gt;
				end&lt;br /&gt;
				if not excerpt then excerpt = &amp;#039;&amp;#039; end&lt;br /&gt;
				local row = rows:tag(&amp;#039;tr&amp;#039;):attr(&amp;#039;id&amp;#039;, script):attr(&amp;#039;style&amp;#039;,&amp;#039;vertical-align:top&amp;#039;)&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;\&amp;#039;\&amp;#039;\&amp;#039;[[%s|%s]]\&amp;#039;\&amp;#039;\&amp;#039;&amp;lt;span id=&amp;quot;%s&amp;quot; class=scriptInstallerLink&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;, script, name, script))&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;[[User:%s|%s]]&amp;#039;, author, author))&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(frame:callParserFunction(&amp;#039;#time&amp;#039;, &amp;#039;j M Y&amp;#039;, frame:callParserFunction(&amp;#039;REVISIONTIMESTAMP&amp;#039;, script))):addClass(&amp;#039;nowrap&amp;#039;):attr(&amp;#039;style&amp;#039;,&amp;#039;text-align:right&amp;#039;)&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(excerpt)&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(data[script].active):attr(&amp;#039;style&amp;#039;,&amp;#039;text-align:right&amp;#039;)&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(data[script].total):attr(&amp;#039;style&amp;#039;,&amp;#039;text-align:right&amp;#039;)&lt;br /&gt;
				rows:wikitext(&amp;#039;\n&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	    if count &amp;gt;= rowsToGet + rowOffset then break end&lt;br /&gt;
    end&lt;br /&gt;
    return rows&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Guarapiranga</name></author>
	</entry>
</feed>