توضیحات این پودمان می‌تواند در ماجۊل:زيبيل/أدوات/توضیحات قرار گیرد.

-- Credits:
-- Original from fr:Module:Infobox/Fonctions
-- forked by وهراني @arwiki (ar:وحدة:بطاقة/أدوات)
-- Version: 20230705

-- أدوات مشتركة لبناء قوالب infobox
local localdata = require("ماجۊل:زيبيل/دیتا")
local item = localdata.item


local generic = {}
generic.description = {}

local xmath = require("ماجۊل:Math")

function FormatNumVal(value)
    value = tonumber(value)
    if value == 0 then
        return value
    end

    if (math.abs(value) > 1E15) then
        return xmath.round({precision = 3, value = value / 1E15}) .. " بیلیارد"
    elseif (math.abs(value) > 1E12) then
        return xmath.round({precision = 3, value = value / 1E12}) .. " تریلیون"
    elseif (math.abs(value) > 1E9) then
        return xmath.round({precision = 3, value = value / 1E9}) .. " بليون"
    elseif (math.abs(value) > 1E6) then
        return xmath.round({precision = 3, value = value / 1E6}) .. " میليون"
    end

    return xmath.round({precision = 3, value = value})
end

local function getValue(val, params)
    if type(val) == "string" then
        return localdata[val]
    elseif type(val) == "function" then
        return val(localdata, localdata.item, params)
    elseif type(val) == "table" then
        for i, j in pairs(val) do -- في حال وجود قيم لأكثر من وسيط : أخذ بعين الاعتبار أول قيمة
            if localdata[j] then
                return localdata[j]
            end
        end
    end
end

generic.FormatNumVal = FormatNumVal

generic.description["title"] = "عنوان پارامتر ره دینگنین و وه ره صفحه نوم جه پر هاکنین.";
function generic.title(args)
    return {
        type = "title",
        suggested = true,
        value = {"اسم","نوم","title","name"},
        wikidata = function()
            return (args and localdata[args.titleparam]) or
                (type(localdata.item) == "table" and type(localdata.item.id) == "string" and
                    mw.wikibase.label(localdata.item.id) and
                    mw.language.getContentLanguage():ucfirst(mw.wikibase.label(localdata.item.id))) or
                mw.title.getCurrentTitle().text
        end,
        subtitle = function()
            return args and localdata[args.subtitleparam]
        end,
        wikidatasubtitle = args and args.subtitlequery,
        icon = args and args.icon,
        style = args and args.style,
        metadata = {
			description = "وانيويس ٚ عۊنوان یا نام", 
			option = "", 
			type = "", 
        }
    }
end

generic.description["mainimage"] = " اتا پارامتر عکس وسه دینگنین و اتا پرونده نوم ره ونه دله بی‌یلین";
function generic.mainimage(params)
    if type(params) ~= "table" then
        params = {}
    end

    return {
        type = "images",
        suggested = true,
        wikidata = params.wikidata or {property = "P18"},
        imageparameters = params.imageparameters or {"عکس", "پرونده", "Image", "image"},
        defaultimages = params.defaultimage,
        defaultimagelink = "ویکی‌پدیا:عکس",
        sizeparameter = params.sizeparameter or {"عکس قایده", "عکس_قایده", "عکس اندازه"},
        uprightparameter = params.uprightparameter or "upright",
        defaultupright = params.upright,
        defaultsize = params.size,
        maintenancecat = params.cat or "وانيويساني گه تاتايي نأرده",
        captionparameter = params.captionparameter or
            {
                "توضیحات",
                "عکس توضیح",
                "عکس توضیحات",
                "توضیحات تصویر",
                "عکس جیرنویس",
                "جیرنویس",
                "caption",
                "image_caption",
                "Caption"
            },
        altparameter = params.altparameter or "عکس جانشین" or "image_alt",
        defaultalt = params.alt,
        defaultimagealt = params.defaultimagealt,
        numval = 1,
        metadata = {
			description = " فقط پرونده نوم ره بی‌یلین و ونه پشت پرونده: یا File: ننویسین",
			example = "abc.jpg",
			option = "suggested", 
			type = "wiki-file-name", 
        }
    }
end

generic.description["logo"] = "لوگو پارامتر ره دینگنین و وه ره لوگو عکس جه پر هاکنین.";
function generic.logo(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        wikidata = params.wikidata or {property = "P154"},
        imageparameters = params.imageparameters or {"نماد", "لوگو", "logo"},
        --	defaultimage = {},
        --	maintenancecat =
        captionparameter = params.captionparameter or {"لوگو جیرنویس", "لوگو توضیحات"},
        defaultupright = params.upright or upright or "0.6",
        uprightparameter = params.uprightparameter or "upright logo",
        sizeparameter = params.sizeparameter or {"لوگو اندازه", "لوگو قایده"},
        numval = 1,
        metadata = {
			description = "لوگوی عکس نوم ره بدون پیشوند بی‌یلین و پرونده: ره ننویسین",
			example = "abc_logo.jpg",
			option = "suggested", 
			type = "wiki-file-name", 
        }
    }
end

generic.description["blason"] = "";
function generic.blason(params)
    if not params then
        params = {}
    end

    return {
        type = "images", 
        wikidata = params.wikidata or {property = {"P94", "P158"}},
        imageparameters = params.imageparameters 
             or {"نشونه", "آرم", "نشون", "coat_of_arms", "seal"},
        --	defaultimage = {},
        --	maintenancecat =
        captionparameter = params.captionparameter or
            {"نشون توضیح", "نشون جیرنویس", "آرم جیرنویس", "coat_of_arms_caption", "seal_caption"},
        defaultupright = params.upright or upright or "0.8",
        uprightparameter = params.uprightparameter or {"upright coa", "upright seal"},
        sizeparameter = params.sizeparameter or {"coa_size", "seal_size"},
        numval = 1,
        metadata = {
			description = "صورة لشعار النبالة (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc_coat.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

generic.description["flag"] = "";
function generic.flag(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        suggested = true,
        wikidata = params.wikidata or {property = "P41"},
        imageparameters = params.imageparameters or {"پرچم", "flag"},
        --	defaultimage = {},
        --	maintenancecat =
        captionparameter = params.captionparameter or "پرچم جیرنویس",
        defaultupright = params.upright or upright or "0.6",
        uprightparameter = params.uprightparameter or "upright drapeau",
        sizeparameter = params.sizeparameter or {"پرچم قایده", "flag_size"},
        numval = 1,
        metadata = {
			description = "صورة للعلم (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc_flag.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

generic.description["sign"] = "";
function generic.sign(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        wikidata = params.wikidata or {property = "P14"},
        imageparameters = params.imageparameters or {"تابلو"},
        --	defaultimage = {},
        --	maintenancecat =
        captionparameter = params.captionparameter or "تابلو جیرنویس",
        defaultupright = params.upright or upright or "0.4",
        uprightparameter = params.uprightparameter or "upright signalisation",
        sizeparameter = params.sizeparameter or "تابلو قایده",
        numval = 1,
        metadata = {
			description = "صورة اللافتة (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

generic.description["icon"] = "";
function generic.icon(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        wikidata = params.wikidata or {property = "P2910"},
        imageparameters = params.imageparameters or {"آیکون", "icon"},
        --	defaultimage = {},
        --	maintenancecat =
        captionparameter = params.captionparameter or {"آیکون جیرنویس"},
        defaultupright = params.upright or upright or "0.4",
        uprightparameter = params.uprightparameter or "upright icon",
        sizeparameter = params.sizeparameter or "icon_size",
        numval = 1,
        metadata = {
			description = "صورة الأيقونة (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc_icon.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

generic.description["scheme"] = "";
function generic.scheme(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        wikidata = params.wikidata or {property = "P5555"},
        imageparameters = params.imageparameters or {"طرح", "scheme"},
        captionparameter = params.captionparameter or "طرح جیرنویس",
        defaultupright = params.upright or upright,
        uprightparameter = params.uprightparameter or "upright scheme",
        sizeparameter = params.sizeparameter or "طرح قایده",
        numval = 1,
        metadata = {
			description = "صورة المخطط (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc_scheme.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

generic.description["planview"] = "";
function generic.planview(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        wikidata = params.wikidata or {property = "P3311"},
        imageparameters = params.imageparameters or {"پلن", "planview"},
        captionparameter = params.captionparameter or "پلن جیرنویس",
        defaultupright = params.upright,
        uprightparameter = params.uprightparameter or "upright planview",
        sizeparameter = params.sizeparameter or "پلن قایده",
        numval = 1,
        metadata = {
			description = "صورة المسقط (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc_planview.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

generic.description["bathymetricmap"] = "";
function generic.bathymetricmap(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        wikidata = params.wikidata or {property = "P207"},
        imageparameters = params.imageparameters or {"خريطة قياس الأعماق"},
        --	defaultimage = {},
        --	maintenancecat =
        captionparameter = params.captionparameter or "تعليق خريطة قياس الأعماق",
        defaultupright = params.upright or upright or "1",
        uprightparameter = params.uprightparameter or "upright carte bathymétrique",
        sizeparameter = params.sizeparameter or "حجم خريطة قياس الأعماق",
        numval = 1,
        metadata = {
			description = "صورة خريطة قياس الأعماق (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

-- روابط خارجية
generic.description["website"] = "";
function generic.website(params)
    if not params then
        params = {}
    end
    return {
        type = "mixed",
        suggested = true,
        label = params.label or "وبجيگا",
        plurallabel = params.plurallabel or "وبجيگا",
        value = params.value or {"وبسایت", "سایت", "وبجيگا", "url", "website"},
        valueStyle = {["text-align"] = "left", ["direction"] = "ltr", ["font-size"] = "0.9em"},
        wikidata = {
            wikimod = "Wikidata.Ca",
            property = params.property or "P856",
            qualifier = "P407",
            whitelist1 = "Q13356", -- گيلکي زوان ٚ سایت وسه
            qualifier2 = "P518", blacklist2 = "Q19778981", -- for  Tor onion service
            formatting = "table",
            conjunction = "<br />",
            rowformat = "$0$R0 $1",
            rowsubformat1 = '<small><span class="languageicon" style="font-size:0.75em; font-weight:bold; color:#555;">($1)</span></small>',
            colformat0 = "weblink",
            colformat1 = "label"
        },
        wikidata2 = {
            wikimod = "Wikidata.Ca",
            property = params.property or "P856",
            listrank = "bestrank",
            qualifier = "P407", -- for other languages website
            qualifier2 = "P518", blacklist2 = "Q19778981", -- for  Tor onion service
            formatting = "table",
            conjunction = "<br />",
            rowformat = "$0$R0 $1",
            rowsubformat1 = '<small><span class="languageicon" style="font-size:0.75em; font-weight:bold; color:#555;">($1)</span></small>',
            colformat0 = "weblink",
            colformat1 = "label"
        },
        metadata = {
			description = "فقط الموقع الرسمي على الويب (المواقع غير الرسمية تذكر في فقرة «وصلات خارجية»).",
			option = "suggested", 
			type = "url",
        }
    }
end

-- أصوات
generic.description["selectSound"] = "";
function generic.selectSound(params)
    if not params then
        params = {}
    end

    params.type = "images"

    params.style = params.style or {["padding-top"] = "25px"}
    params.defaultcaption = "صدا"
    params.caption = params.captionparameter or "صدای جیرنویس"
    params.value = params.valueparameter or {"صدا", "صوت", "sound"}
    params.defaultsize = "280"
    params.numval = params.numval or 1

    params.wikidata = {
        wikimod = "Wikidata.Ca",
        property = params.property or "P51",
        qualifier = "P407",
        whitelist1 = "Q13955", -- for arabic
        formatting = "table",
        conjunction = "<br />",
        rowformat = "$0"
    }
    params.wikidata2 = {
        wikimod = "Wikidata.Ca",
        property = params.property or "P51",
        listrank = "bestrank",
        qualifier = "P407", -- for other languages
        formatting = "table",
        conjunction = "<br />",
        rowformat = "$0"
    }
    params.metadata = {
        description = "ملف صوتي (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
		example = "abc.ogg",
        option = "", 
        type = "wiki-file-name",
    }

    return params
end

generic.description["pronunciation"] = "";
function generic.pronunciation(params)
    if not params then
        params = {}
    end

    params.property = "P443"

    params.defaultcaption = "التهجئة"
    params.captionparameter = params.captionparameter or "تعليق التهجئة"
    params.value = params.valueparameter or {"تهجئة", "pronunciation"}
    params.numval = 1

    return p.selectSound(params)
end

generic.description["dimensions"] = "";
function generic.dimensions(default)
    local function getDimensions(args)
        local Dimensionsfunction = require("Module:Dimensions").main

        local noerr, data, nb
        noerr, data = pcall(Dimensionsfunction, args)
        if noerr then
            return data
        else
            addMaintenanceCat("مقالات بها أخطاء مصدرها وحدة بطاقة")
            mw.log("WD Query Error : " .. mw.dumpObject(data))
            return '<span class="error">' .. (data) .. "</span>"
        end
    end

    return {
        type = "mixed",
        label = "أبعاد",
        value = function()
            return localdata["أبعاد"] or localdata["أبعاد"] or localdata.dimensions or localdata.dim or
                (type(localdata.item) == "table" and type(localdata.item.id) == "string" and
                    getDimensions(
                        {
                            item = localdata.item.id,
                            diameter = localdata.diameter or localdata["قطر"],
                            height = localdata.height or localdata["ارتفاع"],
                            draft = localdata.draft or localdata["عمق از سطح دریا"],
                            clearance = localdata.clearance or localdata["بنه مسافت"],
                            width = localdata.width or localdata.beam or localdata["عرض"],
                            length = localdata.length or localdata["horizontal depth"] or localdata["طول"] or
                                localdata["افقی جولی"],
                            span = localdata.span or localdata["ستون تا ستون"],
                            thickness = localdata.thickness or localdata["کلفتی"]
                        }
                    ))
        end,
        metadata = {
			description = "ابعاد معیارون نوم",
			option = "", 
			type = "",
        }
    }
end

generic.description["awards"] = "";
function generic.awards(params)
    return {
        type = "row",
        label = "جایزه‌ئن",
        value = {"جایزه‌ئن", "awards"},
        wikidata = {
            wikimod = "Wikidata.Ca",
            property = "P166",
            tablesort = "1",
            sorting = "-1",
            separator = "<br />",
            qualifier = "P585",
            qualifier2 = "P1686",
            qualifier3 = "P1027",
            qualifier4 = "P166/P2425",
            qualifier5 = "P1346",
            formatting = "table",
            rowformat = "* $4&nbsp;$0$R0 $1$2$3$5",
            rowsubformat1 = "<small>($1)</small>",
            rowsubformat2 = "<small><br />, برای ''«$2»''</small>",
            rowsubformat3 = "<small><br />&nbsp;هدا بئی $3</small>",
            rowsubformat4 = "[[file:$4|30px|link=]]",
            rowsubformat5 = "<small><br />اهدا بئی به $5</small>"
        },
        metadata = {
			description = "جوایزی که بنا بیته.",
			option = "", 
			type = "string",
        }
    }
end

generic.description["motto"] = "";
function generic.motto(param)
    return {
        type = "row",
        label = "شعار",
        value = {"شعار", "motto", "motto_text"},
        defaultvalue = getValue {param},
        wikidata = {
            wikimod = "Wikidata.Ca",
            property = "P1451",
            conjunction = "<br />",
            formatting = "$text {{Language icon|NoCat=y|$language}}"
        },
        metadata = {
			description = "متنی شعار",
			option = "", 
			type = "string",
        }
    }
end

-- أدوات تحديد الموقع الجغرافي

generic.description["country"] = "";
function generic.country(default)
    local building = require "ماجۊل:زيبيل/أدوات/بنا"
    return building.country(default)
end

generic.description["geoloc"] = "";
function generic.geoloc(params)
    if not params then
        params = {}
    end

    if (localdata["سایت نقشه"] == "-") then
        return nil
    end

    local id = (localdata.item and localdata.item.id)
    local geotype = "Point"
    if id and (#(mw.wikibase.getBestStatements(id, "P3896")) ~= 0) then
        geotype = "geoshape"
    end
    --mw.logObject(mw.wikibase.getBestStatements(id, 'P3896')) --P402

    return {
        type = "map",
        latitude = {"دایره عرض", "دائرة العرض", "latitude"},
        longitude = {"خط طول", "خط طول", "longitude"},
        pointtype = params.pointtype,
        maptype = params.type,
        globe = localdata.globe or localdata["اساره"] or params.globe,
        marker = params.marker,
        markercolor = params.markercolor,
        shapecolor = params.shapecolor,
        markersize = params.markersize,
        markersymbol = params.markersymbol,
        default_zoom = localdata["zoom"] or localdata["زوم"] or params.default_zoom,
        ids = params.ids or params.id,
        geotype = geotype,
        --debug = 1,
        metadata = {
			description = "",
			option = "", 
			type = "",
        }
    }
end

generic.description["coordinates"] = "";
function generic.coordinates(params)
    if not params then
        params = {}
    end

    return {
        type = "mixed",
        label = "مۊختصات",
        value = {"مۊختصات", "جۊغرافي مۊختصات", "coordinates"},
        wikidata = {
            wikimod = "Wikidata.Ca",
            listrank = "bestrank",
            property = "P625",
            formatting = "{{coord|$lat|$lon|globe:$globe|format=dms}}"
        },
        metadata = {
			description = "جۊغرافي مۊختصات",
			option = "", 
			type = "string",
        }
    }
end

generic.description["locationmap"] = "";
function generic.locationmap(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        imageparameters = params.imageparameters or {"نقشه عکس"},
        sizeparameter = params.sizeparameter or "نقشه عکس قایده",
        captionparameter = params.captionparameter or {"نقشه عکس جیرنویس"},
        defaultupright = params.upright or "1",
        property = "P242",
        numval = 1,
        metadata = {
			description = "صورة خريطة جغرافية (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc_map.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

generic.description["detailedmap"] = "";
function generic.detailedmap(params)
    if not params then
        params = {}
    end

    return {
        type = "images",
        imageparameters = params.imageparameters or {"دقیق نقشه عکس"},
        sizeparameter = params.sizeparameter or "دقیق نقشه عکس قایده",
        captionparameter = params.captionparameter or {"دقیق نقشه عکس جیرنویس"},
        defaultupright = params.upright or "1",
        defaultsize = params.defaultsize,
        property = "P1621",
        numval = 1,
        metadata = {
			description = "صورة خريطة جغرافية مفصلة (ضع اسم الملف فقط دون السابقة «ملف:» أو «File:»)",
			example = "abc_map.jpg",
			option = "", 
			type = "wiki-file-name",
        }
    }
end

return generic