Difference between revisions of "Module:Anchor/sandbox"

From blackwiki
Jump to navigation Jump to search
blackwiki>Makyen
(Move entity to within each inner span. This is to maintain compatibility with IE8. IE8 does not scroll the window to the correct position if the span with the ID does not have an entity.)
m (16 revisions imported)
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
-- This module implements {{anchor}}.
 
-- This module implements {{anchor}}.
 
local getArgs = require('Module:Arguments').getArgs
 
local tableTools = require('Module:TableTools')
 
  
 
local p = {}
 
local p = {}
  
 
function p.main(frame)
 
function p.main(frame)
-- Get the positional arguments from #invoke, remove any nil values,
+
-- Algorithm:
-- and pass them to p._main.
+
-- Step 1. Create a local variable to store the anchors,
local args = getArgs(frame)
+
--   initialised to the empty string.
local argArray = tableTools.compressSparseArray(args)
+
local ret = ""
return p._main(unpack(argArray))
+
-- Step 2. Create a iterator variable, initialised to 1.
end
+
local i = 1
 
+
-- Step 3. While there exists a positional argument referenced by
function p._main(...)
+
--   the iterator variable, do the following:
-- Generate the list of anchors.
+
    while not (frame.args[i] == nil)
local anchors = {...}
+
    do
local ret = {}
+
    -- (a) Add a empty span whose id is the value of the argument
ret[#ret + 1] = '<span style="position: relative; top: -48px;z-index:-1;">'
+
    --   to the local variable storing the anchors;
for _, anchor in ipairs(anchors) do
+
        ret = ret .. '<span id="' .. frame.args[i] .. '"></span>'
ret[#ret + 1] = '<span id="' .. anchor .. '">&#8203;</span>'
+
        -- (b) Increment the iterator variable.
end
+
        i = i + 1
ret[#ret + 1] = '</span>'
+
    end
return table.concat(ret)
+
    -- Step 4. Return the value of the local variable storing the anchors.
 +
    return ret
 
end
 
end
  
 
return p
 
return p

Latest revision as of 13:08, 26 September 2020

Documentation for this module may be created at Module:Anchor/sandbox/doc

-- This module implements {{anchor}}.

local p = {}

function p.main(frame)
	-- Algorithm:
	-- Step 1. Create a local variable to store the anchors,
	--   initialised to the empty string.
	local ret = ""
	-- Step 2. Create a iterator variable, initialised to 1.
	local i = 1
	-- Step 3. While there exists a positional argument referenced by
	--   the iterator variable, do the following:
    while not (frame.args[i] == nil)
    do
    	-- (a) Add a empty span whose id is the value of the argument
    	--   to the local variable storing the anchors;
        ret = ret .. '<span id="' .. frame.args[i] .. '"></span>'
        -- (b) Increment the iterator variable.
        i = i + 1
    end
    -- Step 4. Return the value of the local variable storing the anchors.
    return ret
end

return p