<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.you107657.duckdns.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ASprite</id>
	<title>Module:Sprite - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.you107657.duckdns.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ASprite"/>
	<link rel="alternate" type="text/html" href="https://wiki.you107657.duckdns.org/index.php?title=Module:Sprite&amp;action=history"/>
	<updated>2026-09-25T18:43:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.you107657.duckdns.org/index.php?title=Module:Sprite&amp;diff=5407&amp;oldid=prev</id>
		<title>imported&gt;Merge: merge.py</title>
		<link rel="alternate" type="text/html" href="https://wiki.you107657.duckdns.org/index.php?title=Module:Sprite&amp;diff=5407&amp;oldid=prev"/>
		<updated>2026-09-25T10:55:52Z</updated>

		<summary type="html">&lt;p&gt;merge.py&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;
local CurrentFrame = mw.getCurrentFrame()&lt;br /&gt;
local aliases = require(&amp;#039;Module:Inventory slot/Aliases&amp;#039;) -- Import the aliases table&lt;br /&gt;
&lt;br /&gt;
function p.base(f)&lt;br /&gt;
    local args = f&lt;br /&gt;
    if f == CurrentFrame then&lt;br /&gt;
        args = require(&amp;#039;Module:ProcessArgs&amp;#039;).merge(true)&lt;br /&gt;
    else&lt;br /&gt;
        f = CurrentFrame&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local data = args.data and mw.loadData(&amp;#039;Module:&amp;#039; .. args.data) or {}&lt;br /&gt;
    local settings = data.settings&lt;br /&gt;
&lt;br /&gt;
    -- Default settings&lt;br /&gt;
    local default = {&lt;br /&gt;
        scale = 1,&lt;br /&gt;
        sheetsize = 256,&lt;br /&gt;
        size = 16,&lt;br /&gt;
        pos = 1,&lt;br /&gt;
        align = &amp;#039;text-top&amp;#039;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local defaultStyle = mw.clone(default)&lt;br /&gt;
    if settings then&lt;br /&gt;
        for k, v in pairs(settings) do&lt;br /&gt;
            default[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function setting(arg)&lt;br /&gt;
        return args[arg] or default[arg]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local sprite = mw.html.create(&amp;#039;span&amp;#039;):addClass(&amp;#039;sprite&amp;#039;)&lt;br /&gt;
    local styles = {}&lt;br /&gt;
&lt;br /&gt;
    if not setting(&amp;#039;nourl&amp;#039;) and setting(&amp;#039;url&amp;#039;) then&lt;br /&gt;
        styles[#styles + 1] = &amp;#039;background-image:&amp;#039; .. (setting(&amp;#039;url&amp;#039;).url or setting(&amp;#039;url&amp;#039;))&lt;br /&gt;
    end&lt;br /&gt;
    if setting(&amp;#039;stylesheet&amp;#039;) then&lt;br /&gt;
        sprite:addClass(setting(&amp;#039;classname&amp;#039;) or mw.ustring.lower(setting(&amp;#039;name&amp;#039;):gsub(&amp;#039; &amp;#039;, &amp;#039;-&amp;#039;)) .. &amp;#039;-sprite&amp;#039;)&lt;br /&gt;
    elseif not setting(&amp;#039;url&amp;#039;) then&lt;br /&gt;
        styles[#styles + 1] = &amp;#039;background-image:&amp;#039; .. p.getUrl(setting(&amp;#039;image&amp;#039;) or setting(&amp;#039;name&amp;#039;) .. &amp;#039;Sprite.png&amp;#039;).url&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local class = setting(&amp;#039;class&amp;#039;)&lt;br /&gt;
    if class then&lt;br /&gt;
        sprite:addClass(class)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local width = setting(&amp;#039;width&amp;#039;) or setting(&amp;#039;size&amp;#039;)&lt;br /&gt;
    local height = setting(&amp;#039;height&amp;#039;) or setting(&amp;#039;size&amp;#039;)&lt;br /&gt;
    local sheetWidth = setting(&amp;#039;sheetsize&amp;#039;)&lt;br /&gt;
    local tiles = sheetWidth / width&lt;br /&gt;
    local pos = setting(&amp;#039;pos&amp;#039;) - 1&lt;br /&gt;
    local scale = setting(&amp;#039;scale&amp;#039;)&lt;br /&gt;
    local autoScale = setting(&amp;#039;autoscale&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    if pos then&lt;br /&gt;
        local left = pos % tiles * width * scale&lt;br /&gt;
        local top = math.floor(pos / tiles) * height * scale&lt;br /&gt;
        styles[#styles + 1] = &amp;#039;background-position:-&amp;#039; .. left .. &amp;#039;px -&amp;#039; .. top .. &amp;#039;px&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not autoScale and scale ~= defaultStyle.scale then&lt;br /&gt;
        styles[#styles + 1] = &amp;#039;background-size:&amp;#039; .. sheetWidth * scale .. &amp;#039;px auto&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    if height ~= defaultStyle.size or width ~= defaultStyle.size or (not autoScale and scale ~= defaultStyle.scale) then&lt;br /&gt;
        styles[#styles + 1] = &amp;#039;height:&amp;#039; .. height * scale .. &amp;#039;px&amp;#039;&lt;br /&gt;
        styles[#styles + 1] = &amp;#039;width:&amp;#039; .. width * scale .. &amp;#039;px&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local align = setting(&amp;#039;align&amp;#039;)&lt;br /&gt;
    if align ~= defaultStyle.align then&lt;br /&gt;
        styles[#styles + 1] = &amp;#039;vertical-align:&amp;#039; .. align&lt;br /&gt;
    end&lt;br /&gt;
    styles[#styles + 1] = setting(&amp;#039;css&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    sprite:cssText(table.concat(styles, &amp;#039;;&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
    local text = setting(&amp;#039;text&amp;#039;)&lt;br /&gt;
    local root&lt;br /&gt;
    local spriteText&lt;br /&gt;
    if text then&lt;br /&gt;
        if not args[&amp;#039;wrap&amp;#039;] then&lt;br /&gt;
            root = mw.html.create(&amp;#039;span&amp;#039;):addClass(&amp;#039;nowrap&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
        spriteText = mw.html.create(&amp;#039;span&amp;#039;):addClass(&amp;#039;sprite-text&amp;#039;):wikitext(text)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local title = setting(&amp;#039;title&amp;#039;)&lt;br /&gt;
    if title then&lt;br /&gt;
        (root or sprite):attr(&amp;#039;title&amp;#039;, title)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not root then&lt;br /&gt;
        root = mw.html.create(&amp;#039;&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    root:node(sprite)&lt;br /&gt;
    if spriteText then&lt;br /&gt;
        root:node(spriteText)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local link = setting(&amp;#039;link&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
    if link ~= &amp;#039;&amp;#039; and mw.ustring.lower(link) ~= &amp;#039;none&amp;#039; then&lt;br /&gt;
        if link:find(&amp;#039;//&amp;#039;) then&lt;br /&gt;
            return &amp;#039;[&amp;#039; .. link .. &amp;#039; &amp;#039; .. tostring(root) .. &amp;#039;]&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        local linkPrefix = setting(&amp;#039;linkprefix&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
        return &amp;#039;[[&amp;#039; .. linkPrefix .. link .. &amp;#039;|&amp;#039; .. tostring(root) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sprite(f)&lt;br /&gt;
    local args = f&lt;br /&gt;
    if f == CurrentFrame then&lt;br /&gt;
        args = require(&amp;#039;Module:ProcessArgs&amp;#039;).merge(true)&lt;br /&gt;
    else&lt;br /&gt;
        f = CurrentFrame&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local data = args.data and mw.loadData(&amp;#039;Module:&amp;#039; .. args.data) or {}&lt;br /&gt;
    local id = mw.text.trim(tostring(args[1] or &amp;#039;&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
    -- Check for aliases&lt;br /&gt;
    local alias = aliases[args[1] or &amp;#039;&amp;#039;]&lt;br /&gt;
    if alias then&lt;br /&gt;
        args.title = alias.title&lt;br /&gt;
        args.link = alias.link&lt;br /&gt;
        args.name = alias.name&lt;br /&gt;
        args.pos = nil -- Optional: reset position if not using sprite sheets&lt;br /&gt;
    else&lt;br /&gt;
        local idData = data.ids and (data.ids[id] or data.ids[mw.ustring.lower(id):gsub(&amp;#039;[%s%+]&amp;#039;, &amp;#039;-&amp;#039;)])&lt;br /&gt;
        if idData then&lt;br /&gt;
            args.pos = idData.pos&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return p.base(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.link(f)&lt;br /&gt;
    local args = f&lt;br /&gt;
    if f == CurrentFrame then&lt;br /&gt;
        args = require(&amp;#039;Module:ProcessArgs&amp;#039;).merge(true)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Check for aliases&lt;br /&gt;
    local alias = aliases[args[1] or &amp;#039;&amp;#039;]&lt;br /&gt;
    if alias then&lt;br /&gt;
        args.link = alias.link&lt;br /&gt;
        args.text = alias.title&lt;br /&gt;
        args.name = alias.name&lt;br /&gt;
    else&lt;br /&gt;
        local link = args[1]&lt;br /&gt;
        if args[1] and not args.id then&lt;br /&gt;
            link = args[1]:match(&amp;#039;^(.-)%+&amp;#039;) or args[1]&lt;br /&gt;
        end&lt;br /&gt;
        args.link = args.link or link&lt;br /&gt;
        args.text = args.text or args[2] or link&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return p.sprite(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getUrl(image, query, classname)&lt;br /&gt;
    local f = CurrentFrame&lt;br /&gt;
    local t = {&lt;br /&gt;
        url = f:expandTemplate{&lt;br /&gt;
            title = &amp;#039;FileUrl&amp;#039;,&lt;br /&gt;
            args = { image, query = query }&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
    if classname and classname ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        t.style = f:expandTemplate{&lt;br /&gt;
            title = &amp;#039;FileUrlStyle&amp;#039;,&lt;br /&gt;
            args = { classname, image, query = query }&lt;br /&gt;
        }&lt;br /&gt;
    end&lt;br /&gt;
    return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Merge</name></author>
	</entry>
</feed>