Modulo:InfoboxImage

Dokumentado Dokumentado


Ŝablona programadoDiskutojLuaTestojSubpaĝoj
ModuloEsperantoEnglishDeutsch

Modulo:Dokumentado


Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.)
-- InfoboxImage, 20190928-- Inputs:--    image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link--    ending - An optional parameter for the file ending, like gif, jpg, jpeg, png, svg.--    endingdefault - An optional parameter for the default ending.--    size - size to display the image--    maxsize - maximum size for image--    sizedefault - default size to display the image if size param is blank--    alt - alt text for image--    title - title text for image--    border - set to yes if border--    center - set to yes, if the image has to be centered--    upright - upright image param--    link - page to visit when clicking on image--    suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it--    usecaption - if yes then the caption from the image is used, else it isn't used--                 and the infobox has to add it. this avoids dupplicates-- Outputs:--    Formatted image.local i = {};local placeholder_image = {    "Blue - Replace this image female.svg",    "Blue - Replace this image male.svg",    "Female no free image yet.png",    "Flag of None (square).svg",    "Flag of None.svg",    "Flag of.svg",    "Green - Replace this image female.svg",    "Green - Replace this image male.svg",    "Image is needed female.svg",    "Image is needed male.svg",    "Location map of None.svg",    "Male no free image yet.png",    "Missing flag.png",    "No flag.svg",    "No free portrait.svg",    "No portrait (female).svg",    "No portrait (male).svg",    "Red - Replace this image female.svg",    "Red - Replace this image male.svg",    "Replace this image female (blue).svg",    "Replace this image female.svg",    "Replace this image male (blue).svg",    "Replace this image male.svg",    "Silver - Replace this image female.svg",    "Silver - Replace this image male.svg",}function i.IsPlaceholder(image)    -- change underscores to spaces    image = mw.ustring.gsub(image, "_", " ");    assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") ne redonu nenion')    -- if image starts with [[ then remove that and anything after |    if mw.ustring.sub(image,1,2) == "[[" then        image = mw.ustring.sub(image,3);        image = mw.ustring.gsub(image, "([^|]*)|.*", "%1");        assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") ne redonu nenion')    end    -- Trim spaces    image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');    assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') ne redonu nenion")    -- remove prefix if exists    local allNames = mw.site.namespaces[6].aliases    allNames[#allNames + 1] = mw.site.namespaces[6].name    allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName    for i, name in ipairs(allNames) do        if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then            image = mw.ustring.sub(image, mw.ustring.len(name) + 2);            break        end    end    -- Trim spaces    image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');    -- capitalise first letter    image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);    for i,j in pairs(placeholder_image) do        if image == j then            return true        end    end    return falseendfunction i.ValidateEnding (f)    -- analyzes the valid endings for images in the Wikipedia.     -- according to http://commons.wikimedia.org/wiki/Commons:File_types,     -- but not tiff, because browser can have some problems with this format     -- xcf works only in MediaWiki    local f = mw.ustring.lower(f)    if f == "gif" or f == "jpg" or f == "jpeg" or f == "png" or f == "svg" then         return true    else return false    end    end    function i.AddEnding (image, ending, endingdefault)        -- analyzes, if an ending already exists in the image        local f = image:gsub("^(.*)%.","")         f = mw.ustring.lower(f)  -- it changes letters into lower case letters        if i.ValidateEnding(f) == true then             return image  -- if yes, it returns the image name without change        end        -- add an ending to the image name        if ending ~="" and ending ~=nil then            if i.ValidateEnding(ending) == true then                 image = image .. "." .. ending            end            elseif endingdefault ~="" and endingdefault ~=nil then            if i.ValidateEnding(endingdefault) == true then                 image = image .. "." .. endingdefault            end            end          return imageend-- funkction for #invoke: in infoboxesfunction i.InfoboxImage(frame)    local image = frame.args["image"];    local usecaption = frame.args["usecaption"];        local ending = frame.args["ending"];        local endingdefault = frame.args["endingdefault"];          local page = frame.args["page"];                local size = frame.args["size"];        local maxsize = frame.args["maxsize"];                local sizedefault = frame.args["sizedefault"];        local alt = frame.args["alt"];        local link = frame.args["link"];        local title = frame.args["title"];        local border = frame.args["border"];        local upright = frame.args["upright"] or "";        local thumbtime = frame.args["thumbtime"] or "";        local center = frame.args["center"]        local placeholder = frame.args["suppressplaceholder"]        local caption = frame.args["caption"] or ""        local wd = frame.args["wd"] or ""                -- test, if there are more than one image in a string, for example if the code is from Wikidata        local strings = ""        local n = 1        local cap = ""        local ncap = 1        local alttext = ""        local nalt = 1        -- only use this code, if the image comes from Wikidata        if image ~= "" and image ~= nil and wd == "yes" then        -- strings = mw.text.split(image, ",", plain)        strings = mw.text.split(image, ";;;", plain)  -- in the relating template is now used the module Wikidata        n = #strings         -- number of images        cap = mw.text.split(caption,";;;", plain) -- ;; could appear in a caption, if before ; is an entity eg. &#285;      alttext = mw.text.split(alttext,";;;", plain) -- ;; could appear in an alt, if before ; is an entity eg. &#285;               ncap = #cap        nalt = #alttext        end        if n>1 then        local images = ""        local nc = 1        for k,v in pairs(strings) do        --local cap1 = cap[nc] or ""        local cap1 = cap[k] or ""        local alt1 = alttext[k] or ""        -- remove space in the alt        if alt1 == " " then        alt1 = nil        end        images = images .. i._InfoboxImage(v, ending, endingdefault, size, maxsize, sizedefault, alt1, link, title, border, upright, thumbtime, center, usecaption, placeholder, cap1, page)         nc = nc + 1        end        return images        end   return  i._InfoboxImage(image, ending, endingdefault, size, maxsize, sizedefault, alt, link, title, border, upright, thumbtime, center, usecaption, placeholder, caption, page) end        -- function for other modulesfunction i._InfoboxImage(image, ending, endingdefault, size, maxsize, sizedefault, alt, link, title, border, upright, thumbtime, center, usecaption, placeholder, caption, page)    if image == "" or image == nil then        return "";    end    if image == "&nbsp;" then        return image;    end        --if frame.args["suppressplaceholder"] ~= "no" then    if placeholder ~= "no" then            if i.IsPlaceholder(image) == true then            return "";        end    end    if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "http:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "[http:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[[http:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "https:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[https:" then        return "";    end    if mw.ustring.lower(mw.ustring.sub(image,1,8)) == "[[https:" then        return "";    end    if mw.ustring.sub(image,1,2) == "[[" then    -- search for thumbnail images and add to tracking cat if found        if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]") or mw.ustring.find(image, "|%s*eta%s*[|%]]")) thenreturn image .. "[[Kategorio:Paĝoj uzantaj informkestojn kun etaj bildoj]]";        elsereturn image;        end    elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then        return image;    elseif mw.ustring.sub(image,1,1) == "<" then        return image;    elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127).."UNIQ" then        -- Found strip marker at begining, so pass don't process at all        return image;        elseif mw.ustring.sub(image,4,9) == "`UNIQ-" then        -- Found strip marker at begining, so pass don't process at all        return image;            else        local result = "";                -- remove prefix if exists        local allNames = mw.site.namespaces[6].aliases        allNames[#allNames + 1] = mw.site.namespaces[6].name        allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName        for i, name in ipairs(allNames) do            if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then                image = mw.ustring.sub(image, mw.ustring.len(name) + 2);                break            end        end             if maxsize ~= "" and maxsize ~= nil then            -- if no sizedefault then set to maxsize            if sizedefault == "" or sizedefault == nil then                sizedefault = maxsize            end            -- check to see if size bigger than maxsize            if size ~= "" and size ~= nil then                local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;                local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;                if sizenumber>maxsizenumber and maxsizenumber>0 then                    size = maxsize;                end            end        end        -- add px to size if just a number        if (tonumber(size) or 0) > 0 then            size = size .. "px";        end        image = i.AddEnding (image,ending,endingdefault)                result = "[[File:" .. image;        if page ~= "" and page ~= nil then            result = result .. "|page=" .. page;        end                if size ~= "" and size ~= nil then            result = result .. "|" .. size;        elseif sizedefault ~= "" and sizedefault ~= nil then            result = result .. "|" .. sizedefault;        else            result = result .. "|frameless";        end        if center == "yes" then            result = result .. "|center"        end        if alt ~= "" and alt ~= nil then            result = result .. "|alt=" .. alt;        elseif caption ~= "" and caption ~= nil then            result = result .. "|alt=" .. caption;               end        if link ~= "" and link ~= nil then        result = result .. "|link=" .. link;        end        if border == "yes" then            result = result .. "|border";        end        if upright == "yes" then            result = result .. "|upright";        elseif upright ~= "" then            result = result .. "|upright=" .. upright;        end          if thumbtime ~= "" then        result = result .. "|thumbtime=" .. thumbtime;        end        if title ~= "" and title ~= nil then            result = result .. "|" .. title;        elseif alt ~= "" and alt ~= nil then            result = result .. "|" .. alt;        elseif caption ~= "" and caption ~= nil then            result = result .. "|" .. caption;                end                  result = result .. "]]";                -- add caption after the image        if caption ~= "" and caption ~= " " and caption ~= nil then        caption = "<div>" .. caption .. "</div>"                result = result .. caption        end                return result;    endendreturn i;