Lovesick WI-FI Wiki

If you have redesign idea’s, or other types of suggestion’s. Message Kyomoaltered! Looey is the one currently most wanted to have redesign suggestion’s. Thanks for reading!

READ MORE

Lovesick WI-FI Wiki

Documentation for this module may be created at Module:Color scheme/doc

-- <nowiki>
--------------------------------------------------------------------------------
-- Color scheme template module.
--
-- @see [[Template:Color scheme]]
-- @example `{{#invoke:color scheme|main}}`
--
-- @module p
-- @version 1.1.0
-- @author Speedit
-- @author DarthKitty
--------------------------------------------------------------------------------
local p = {}
local getArgs = require('Dev:Arguments').getArgs
local i18n = require('Dev:I18n').loadMessages('Color scheme')
local title = mw.title.getCurrentTitle()

--------------------------------------------------------------------------------
-- Escapes a string for use in an HTML class, replacing every whitespace and
-- punctuation character with an underscore.
--
-- @param {string} str
--     The string to escape.
-- @returns {string}
--     The escaped string.
--------------------------------------------------------------------------------
local function escapeClass(str)
    return mw.ustring.lower(mw.ustring.gsub(str, '[%s%p]', '_'))
end

--------------------------------------------------------------------------------
-- Color scheme renderer (main function).
--
-- @example `{{#invoke:color scheme|main}}`
--
-- @param {table} frame
--     Frame invocation object.
-- @return {string}
--     HTML of color scheme template.
--------------------------------------------------------------------------------
function p.main(frame)
    local args = getArgs(frame, {
        parentOnly = true,
    })

    if not args.type then
        error('no "type" argument supplied')
    end

    local typedef = escapeClass(args.type:match('^(.-)/') or args.type)
    local name = escapeClass(title.rootText)
    local scheme = mw.html.create('ul')
        :addClass('color-scheme color-scheme__' .. name)
        :attr('id', 'color-scheme__' .. name .. '-' .. typedef)
        :css('display', 'inline')
        :css('font-size', args["font-size"] or '12px')
        :css('margin', args.margin or '20px 0')
        :css('text-align', 'center')

    for i = 1, math.huge, 4 do
        local colorHex = args[i]
        local colorName = args[i + 1]
        local colorPurpose = args[i + 2]
        local variableName = args[i + 3]

        if not (colorHex or colorName or colorPurpose or variableName) then
            break
        elseif not colorHex then
            error('missing hexadecimal color code at index' .. i)
        elseif not colorName then
            error('missing color name at index' .. (i + 1))
        elseif not colorPurpose then
            error('missing color purpose at index' .. (i + 2))
        elseif not variableName then
            error('missing variable name at index' .. (i + 3))
        end

        scheme:tag('li')
            :addClass('color-scheme__color')
            :attr('id', 'color-scheme__color-' .. typedef .. '-' .. i)
            :attr('data-color', '#' .. (colorHex or 'nil'))
            :css('align-items', 'center')
            :css('display', 'inline-flex')
            :css('flex-flow', 'column nowrap')
            :css('margin', '20px 10px 0')
            :css('width', '120px')
            :tag('div')
                :addClass('color-scheme__color-box')
                :addClass('pi-border-color')
                :css('background-color', '#' .. colorHex)
                :css('border-radius', '4px')
                :css('border-style', 'solid')
                :css('border-width', '2px')
                :css('height', '60px')
                :css('width', '60px')
                :done()
            :tag('b')
                :addClass('color-scheme__color-name')
                :wikitext(colorName)
                :done()
            :tag('span')
                :addClass('color-scheme__separator')
                :css('display', 'none')
                :wikitext(' - ')
                :done()
            :tag('code')
                :addClass('color-scheme__color-hex')
                :wikitext('#' .. colorHex)
                :done()
            :tag('span')
                :addClass('color-scheme__separator')
                :css('display', 'none')
                :wikitext(' (')
                :done()
            :tag('i')
                :addClass('color-scheme__color-purpose')
                :wikitext(i18n:inUserLang():msg('for', colorPurpose))
                :done()
            :tag('span')
                :addClass('color-scheme__separator')
                :css('display', 'none')
                :wikitext('; ')
                :done()
            :tag('var')
                :addClass('color-scheme__variable-name')
                :wikitext(' ' .. variableName)
                :done()
            :tag('span')
                :addClass('color-scheme__separator')
                :css('display', 'none')
                :wikitext(')')
                :done()
    end

    return tostring(scheme)
end

return p