Moduuli:TietolaatikkoKuva

Kohteesta Wikipedia
Loikkaa: valikkoon, hakuun

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:TietolaatikkoKuva/ohje

-- Määreet:
--    kuva - voi olla pelkkä tiedostonimi (ilman tai kera Tiedosto-alukkeen) tai täydellinen tiedostolinkki hakasulkeineen
--    paate - vaihtoehtoinen parametri tiedostopäätteelle kuten gif, jpg, jpeg, png, svg.
--    oletuspaate - vaihtoehtoinen parametri oletustiedostopäättteelle.
--    leveys - kuvan esittämisleveys
--    maksimileveys - kuvan suurin sallittu leveys
--    oletusleveys - kuvan oletusleveys jos leveys-parametrille ei määritellä arvoa
--    alt - kuvan alt-teksti
--    otsikko - kuvan otsikkoteksti
--    reunus - anna arvoksi kyllä jos haluat kuvaan reunuksen
--    keskitys - anna arvoksi kyllä jos haluat kuvan asettuvan keskitetysti
--    pysty - kuva pystyasennossa? (Suhteuttaa leveyden.)
--    piilotasijainen - anna arvoksi kyllä jos haluat sijaiskuvan piilottuvan

-- Tuloste:
--    Kuvan koodi.

local i = {};

local sijaiskuva = {
    "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(kuva)
    -- vaihtaa alaviivat välilyönneiksi
    kuva = mw.ustring.gsub(kuva, "_", " ");
    -- jos parametrin arvo alkaa [[, poistaa sulkeet ja kaiken merkin | jälkeen
    if mw.ustring.sub(kuva,1,2) == "[[" then
        kuva = mw.ustring.sub(kuva,3);
        kuva = mw.ustring.gsub(kuva, "([^|]*)|.*", "%1");
    end
    -- poistaa ylimääräiset välilyönnit
    kuva = mw.ustring.gsub(kuva, '^[ ]*(.-)[ ]*$', '%1');
    -- poistaa etuliitteen file: tai tiedosto: tai kuva:
    if mw.ustring.lower(mw.ustring.sub(kuva,1,5)) == "file:" then
        kuva = mw.ustring.sub(kuva,6);
    end
    if mw.ustring.lower(mw.ustring.sub(kuva,1,6)) == "tiedosto:" then
        kuva = mw.ustring.sub(kuva,7);
    end
    if mw.ustring.lower(mw.ustring.sub(kuva,1,8)) == "kuva:" then
        kuva = mw.ustring.sub(kuva,9);
    end
    -- poistaa ylimääräiset välilyönnit
    kuva = mw.ustring.gsub(kuva, '^[ ]*(.-)[ ]*$', '%1');
    -- ensimmäinen kirjain isolla
    kuva = mw.ustring.upper(mw.ustring.sub(kuva,1,1)) .. mw.ustring.sub(kuva,2);

    for i,j in pairs(sijaiskuva) do
        if kuva == j then
            return true
        end
    end
    return false
end

function i.ValidateEnding (f)
    -- analysoi Wikipediassa sallitut kuvatiedostojen päätteet 
    -- sivun http://commons.wikimedia.org/wiki/Commons:File_types mukaan 
    -- poislukien tiff, koska se ei toimi kaikilla selaimilla 
    -- xcf toimii vain MediaWikissä
    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 (kuva, paate, oletuspaate)
        -- testaa onko kuvan arvossa jo pääte
        local f = kuva:gsub("^(.*)%.","") 
        f = mw.ustring.lower(f)  -- kirjaimet pieniksi
        if i.ValidateEnding(f) == true then 
            return kuva  -- jos on pääte, palauttaa arvon sellaisenaan
        end
        -- lisää tiedostopäätteen kuvan nimeen
        if paate ~="" and paate ~=nil then
            if i.ValidateEnding(paate) == true then 
                kuva = kuva .. "." .. paate
            end    
        elseif oletuspaate ~="" and oletuspaate ~=nil then
            if i.ValidateEnding(oletuspaate) == true then 
                kuva = kuva .. "." .. oletuspaate
            end    
        end  
        return kuva
end

function i.TietolaatikkoKuva(frame)
    local kuva = frame.args["kuva"];
    
    if kuva == "" or kuva == nil then
        return "";
    end
    if kuva == " " then
        return kuva;
    end    
    if frame.args["piilotasijainen"] == "kyllä" then
        if i.IsPlaceholder(kuva) == true then
            return "";
        end
    end

    if mw.ustring.lower(mw.ustring.sub(kuva,1,5)) == "http:" then
        return "";
    end
    if mw.ustring.lower(mw.ustring.sub(kuva,1,6)) == "[http:" then
        return "";
    end
    if mw.ustring.lower(mw.ustring.sub(kuva,1,7)) == "[[http:" then
        return "";
    end
    if mw.ustring.lower(mw.ustring.sub(kuva,1,6)) == "https:" then
        return "";
    end
    if mw.ustring.lower(mw.ustring.sub(kuva,1,7)) == "[https:" then
        return "";
    end
    if mw.ustring.lower(mw.ustring.sub(kuva,1,8)) == "[[https:" then
        return "";
    end
    if mw.ustring.sub(kuva,1,2) == "[[" then
    -- etsii pienoiskuvaa (thumbnail) and add to tracking cat if found
        if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(kuva, "|%s*thumb%s*[|%]]") or mw.ustring.find(kuva, "|%s*thumbnail%s*[|%]]") or mw.ustring.find(kuva, "|%s*eta%s*[|%]]")) then
            return kuva .. "[[Luokka:Pages using infoboxes with thumbnail images]]";
        else
            return kuva;
        end
    elseif mw.ustring.sub(kuva,1,2) == "{{" and mw.ustring.sub(kuva,1,3) ~= "{{{" then
        return kuva;
    elseif mw.ustring.sub(kuva,1,1) == "<" then
        return kuva;
    elseif mw.ustring.sub(kuva,1,5) == mw.ustring.char(127).."UNIQ" then
        -- jos alussa strip marker, ohittaa ja palauttaa annetun arvon sellaisenaan
        return kuva;        
    else
        local result = "";
        local paate = frame.args["paate"];
        local oletuspaate = frame.args["oletuspaate"];
        local leveys = frame.args["leveys"];
        local maksimileveys = frame.args["maksimileveys"];        
        local oletusleveys = frame.args["oletusleveys"];
        local alt = frame.args["alt"];
        local otsikko = frame.args["otsikko"];
        local reunus = frame.args["reunus"];
        local pysty = frame.args["pysty"] or "";
        local keskitys = frame.args["keskitys"]
        
        -- poistaa alukkeen file: tai tiedosto: or kuva:
        if mw.ustring.lower(mw.ustring.sub(kuva,1,5)) == "file:" then
            kuva = mw.ustring.sub(kuva,6);
        end
        if mw.ustring.lower(mw.ustring.sub(kuva,1,6)) == "tiedosto:" then
            kuva = mw.ustring.sub(kuva,7);
        end
        if mw.ustring.lower(mw.ustring.sub(kuva,1,8)) == "kuva:" then
            kuva = mw.ustring.sub(kuva,9);
        end        

        if maksimileveys ~= "" and maksimileveys ~= nil then
            -- jos ei oletusleveysa, aseta kuvan leveys maksimileveyson
            if oletusleveys == "" or oletusleveys == nil then
                oletusleveys = maksimileveys
            end
            -- tarkista onko leveys suurempi kuin maksimileveys
            if leveys ~= "" and leveys ~= nil then
                local sizenumber = tonumber(mw.ustring.match(leveys,"%d*")) or 0;
                local maxsizenumber = tonumber(mw.ustring.match(maksimileveys,"%d*"));
                if sizenumber>maxsizenumber and maxsizenumber>0 then
                    leveys = maksimileveys;
                end
            end
        end
        -- lisää leveysmääreeseen "px" jos puuttuu
        if (tonumber(leveys) or 0) > 0 then
            leveys = leveys .. "px";
        end
        kuva = i.AddEnding (kuva,paate,oletuspaate)
        
        result = "[[Tiedosto:" .. kuva;
        if leveys ~= "" and leveys ~= nil then
            result = result .. "|" .. leveys;
        elseif oletusleveys ~= "" and oletusleveys ~= nil then
            result = result .. "|" .. oletusleveys;
        else
            result = result .. "|frameless";
        end
        if keskitys == "kyllä" then
            result = result .. "|center"
        end
        if alt ~= "" and alt ~= nil then
            result = result .. "|alt=" .. alt;
        end
        if reunus == "kyllä" then
            result = result .. "|border";
        end
        if pysty ~= "" then
            result = result .. "|upright=" .. upright;
        end    
        if otsikko ~= "" and otsikko ~= nil then
            result = result .. "|" .. otsikko;
        elseif alt ~= "" and alt ~= nil then
            result = result .. "|" .. alt;
        end          
        result = result .. "]]";
        
        return result;
    end
end

return i;