Jump to content

Մոդուլ:InfoboxImage

Documentation for this module may be created at Մոդուլ:InfoboxImage/doc

-- Մուտքեր.
--    image - Կրնայ ըլլալ պարզ ֆայլի անուն մը (File:/Image: նախածանցով կամ առանց անոր)
--            կամ ամբողջութեամբ ձեւաւորուած պատկերի յղում մը
--    page - Բազմէջ պատկերներու (DjVu) պարագային ցուցադրուելիք էջը
--    size - Պատկերին ցուցադրման չափը
--    maxsize - Պատկերին առաւելագոյն չափը
--    sizedefault - Պատկերին ցուցադրման լռելեայն չափը, երբ size պարամեթրը դատարկ է
--    alt - Պատկերին այլընտրանքային բնագիրը
--    title - Պատկերին վերնագրի բնագիրը
--    border - set to yes if border
--    center - set to yes, if the image has to be centered
--    upright - upright image param
--    suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it
--    link - page to visit when clicking on image
--    class - HTML classes to add to the image
-- Outputs:
--    Formatted image.
-- More details available at the "Module:InfoboxImage/doc" page

local i = {}

-- Փոխարինող պատկերներու ցանկը եւ հետագծման կատեգորիաները պահուած են [[Module:InfoboxImage/data]]-ի մէջ։
-- Այլ հաստատուններ.
--   համակարգի մակարդակով սահմանուած մանրապատկերի լռելեայն չափը (px)
local defaultThumbnailSize = 250

-- Եթէ էջը օգտատիրոջ էջ մը չէ, վերադարձնել հետագծման կատեգորիան։ Հակառակ պարագային՝ դատարկ բան վերադարձնել։
local function trackingCat(cat)
local ns = mw.title.getCurrentTitle().nsText:lower()
local categories = mw.loadData('Module:InfoboxImage/data').categories
return (ns ~= 'user' and ns ~= 'user talk' and categories[cat]) or ""
end

-- Որոշել՝ պատկերը փոխարինող պատկեր մըն է, թէ ոչ։
function i.IsPlaceholder(image)
-- ընդգծումները փոխարինել բացատներով
image = mw.ustring.gsub(image, "*", " ");
assert(image ~= nil, 'mw.ustring.gsub(image, "*", " ") must not return nil')
-- եթէ պատկերը կը սկսի [[-ով, հեռացնել զայն եւ |-էն ետք եղած ամբողջը
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") must not return nil')
end
-- Հեռացնել բացատները
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil")
-- Հեռացնել նախածանցը, եթէ գոյութիւն ունի
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
-- Հեռացնել բացատները
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
-- Առաջին տառը դարձնել մեծատառ
image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);

local placeholder_image = mw.loadData('Module:InfoboxImage/data').placeholder_image
return placeholder_image[image]

end

local function isempty(x)
return (not x) or x == ""
end

-- Հիմնական մուտքի կէտը
function i.InfoboxImage(frame)
local image = frame.args["image"];

if isempty(image) then
    return "";
end
if image == " " then
    return image;
end
if frame.args["suppressplaceholder"] ~= "no" then
    if i.IsPlaceholder(image) == true then
        return "";
    end
end

if string.find(image, "^%[*https?:") then
	-- Սխալի կատեգորիա։
	return trackingCat("url_image_links")
end

if mw.ustring.sub(image,1,2) == "[[" then
    -- Փնտռել մանրապատկերային պատկերներ եւ գտնելու պարագային զանոնք աւելցնել հետագծման կատեգորիային
    local cat = "";
    if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then
        cat = trackingCat("thumbnail_images")
    end
    return image .. cat;
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,8) == mw.ustring.char(127).."'\"`UNIQ" then
    -- Սկիզբին strip marker մը գտնուած է, հետեւաբար ոչ մէկ մշակում կատարել
    return image;
else
    local result = "";
    local page = frame.args["page"];
    local upright = frame.args["upright"] or ""
    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 thumbtime = frame.args["thumbtime"] or "";
    local center = frame.args["center"];
    local class = frame.args["class"];
    
    -- Հեռացնել նախածանցը, եթէ գոյութիւն ունի
    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 not isempty(maxsize) then
        -- Եթէ sizedefault կամ upright չկայ, maxsize-ը սահմանել որպէս sizedefault
        if isempty(sizedefault) and isempty(upright) then
            sizedefault = maxsize
        end
        -- Ստուգել՝ չափը մեծ է maxsize-էն, թէ ոչ
        local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;
        if not isempty(size) then
            local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;
            if sizenumber > maxsizenumber and maxsizenumber > 0 then
                size = maxsize;
            end
        end
        -- Ստուգել՝ upright-ը մեծ է maxsize-էն, թէ ոչ (լռելեայն նախընտրուած չափին պարագային)
        if not isempty(upright) then
            local uprightnumber = tonumber(upright) or (upright == "yes" and 0.75) or 0
            if uprightnumber*defaultThumbnailSize > maxsizenumber and maxsizenumber > 0 then
                upright = tostring(maxsizenumber/defaultThumbnailSize)
            end
        end
    end
    -- Չափին աւելցնել px, եթէ միայն թիւ մըն է
    if (tonumber(size) or 0) > 0 then
        size = size .. "px";
    end
    -- sizedefault-ին աւելցնել px, եթէ միայն թիւ մըն է
    if (tonumber(sizedefault) or 0) > 0 then
        sizedefault = sizedefault .. "px";
    end
    
    result = "[[File:" .. image;
    if not isempty(page) then
        result = result .. "|page=" .. page;
    end
    if not isempty(size) then
        result = result .. "|" .. size;
    elseif not isempty(sizedefault) and isempty(upright) then
        result = result .. "|" .. sizedefault;
    else
        result = result .. "|frameless";
    end
    if center == "yes" then
        result = result .. "|center"
    end
    if not isempty(alt) then
        result = result .. "|alt=" .. alt;
    end
    if not isempty(link) 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 not isempty(class) then
        result = result .. "|class=" .. class;
    end
    -- Եթէ alt-ի արժէքը բանալի բառ մըն է, զայն չգործածել որպէս նկարագրութիւն
    if alt == "thumbnail" or alt == "thumb" or alt == "frameless" or alt == "left" or alt == "center" or alt == "right" or alt == "upright" or alt == "border" or mw.ustring.match(alt or "", '^[0-9]*px$', 1) ~= nil then
        alt = nil;
    end
    if not isempty(title) then
        -- title պարամեթրը templatestyles կը պարունակէ՞։ Եթէ այո, զայն դատարկ դարձնել։
        if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then
            title = nil;
        end
    end
    if not isempty(title) then
        result = result .. "|" .. title;
    end
    result = result .. "]]";
    
    return result;
end


end

return i;