وحدة:مواقع التواصل الاجتماعي

يمكن إنشاء صفحة توثيق الوحدة في وحدة:مواقع التواصل الاجتماعي/شرح

local p = {}

local getArgs = require('Module:Arguments').getArgs
local sideBox = require('Module:Side box')._main
local wikibase = mw.wikibase

-- دالة لجلب الرابط من القيم المحلية أو ويكي بيانات
local function getSocialMediaLink(entity, property, baseUrl, siteName, icon, userValue, pageTitle)
    -- استخدام القيم المحلية إذا تم توفيرها
    if userValue and userValue ~= "" then
        return string.format('[[ملف:%s|15بك]] [%s%s %s على %s]', icon, baseUrl, userValue, pageTitle, siteName)
    end

    -- إذا لم تكن هناك قيمة محلية، جلب القيمة من ويكي بيانات
    if entity and entity.claims and entity.claims[property] then
        local claims = entity.claims[property]
        for _, claim in pairs(claims) do
            if claim.mainsnak and claim.mainsnak.datavalue then
                local id = claim.mainsnak.datavalue.value
                return string.format('[[ملف:%s|15بك]] [%s%s %s على %s]', icon, baseUrl, id, pageTitle, siteName)
            end
        end
    end
    return nil
end

-- الدالة الرئيسية لإنشاء صندوق الروابط الاجتماعية
function p.main(frame)
    local args = getArgs(frame)
    local entity = wikibase.getEntityObject()
    
    -- إذا لم يتم العثور على كيان ويكي بيانات، إرجاع رسالة خطأ
    if not entity then
        entity = nil  -- في حالة عدم وجود كيان، نتأكد من أن الوحدة لا تتعطل
    end

    local links = {}

    -- استخدام الوسيط "عنوان" أو اسم الصفحة الافتراضي
    local pageTitle = args["عنوان"] or args["العنوان"] or mw.title.getCurrentTitle().text

    -- قائمة المواقع الاجتماعية مع الخصائص الخاصة بها في ويكي بيانات والأيقونات الخاصة بها
    local socialMediaProperties = {
        {property = 'P2013', baseUrl = 'https://www.facebook.com/', siteName = 'فيسبوك', icon = '2023 Facebook icon.svg', userValue = args["فيس بوك"] or args["فيسبوك"]},
        {property = 'P2002', baseUrl = 'https://twitter.com/', siteName = 'إكس (تويتر)', icon = 'X logo 2023.svg', userValue = args["إكس"] or args["تويتر"]},
        {property = 'P2397', baseUrl = 'https://www.youtube.com/channel/', siteName = 'يوتيوب', icon = 'YouTube full-color icon (2017).svg', userValue = args["يوتيوب"]},
        {property = 'P2003', baseUrl = 'https://www.instagram.com/', siteName = 'إنستغرام', icon = 'Instagram logo 2022.svg', userValue = args["إنستغرام"] or args["انستقرام"]},
        {property = 'P11892', baseUrl = 'https://www.threads.net/@', siteName = 'ثريدز', icon = 'Threads (app).svg', userValue = args["ثريدز"]},
        {property = 'P3267', baseUrl = 'https://www.flickr.com/people/', siteName = 'فليكر', icon = 'Flickr logo - SuperTinyIcons.svg', userValue = args["فليكر"]},
        {property = 'P6634', baseUrl = 'https://www.linkedin.com/in/', siteName = 'لينكد إن', icon = 'LinkedIn icon.svg', userValue = args["لينكد إن"] or args["لينكد ان"]},
        {property = 'P3040', baseUrl = 'https://soundcloud.com/', siteName = 'ساوند كلاود', icon = 'Antu soundcloud.svg', userValue = args["ساوند كلاود"] or args["ساوندكلاود"]},
        {property = 'P3265', baseUrl = 'https://myspace.com/', siteName = 'ماي سبيس', icon = 'Myspace.svg', userValue = args["ماي سبيس"] or args["مي سبيس"]},
        {property = 'P3836', baseUrl = 'https://www.pinterest.com/', siteName = 'بنترست', icon = 'Pinterest.svg', userValue = args["بنترست"]},
        {property = 'P3185', baseUrl = 'https://vk.com/', siteName = 'فكونتاكتي', icon = 'VK Compact Logo (2021-present).svg', userValue = args["فكونتاكتي"]},
        {property = 'P3789', baseUrl = 'https://t.me/', siteName = 'تيليغرام', icon = 'Telegram 2019 Logo.svg', userValue = args["تيليغرام"] or args["تيليجرام"] or args["تلغرام"] or args["تلجرام"]},
        {property = 'P3943', baseUrl = 'https://$1.tumblr.com/', siteName = 'تمبلر', icon = 'Cib-tumblr (CoreUI Icons v1.0.0).svg', userValue = args["تمبلر"]},
        {property = 'P1902', baseUrl = 'https://open.spotify.com/artist/', siteName = 'سبوتيفاي', icon = 'Spotify logo without text.svg', userValue = args["سبوتيفاي"]},
        {property = 'P2373', baseUrl = 'https://genius.com/artists/', siteName = 'جينيس', icon = 'Genius-Wordmark.svg', userValue = args["جينيس"] or args["جينياس"]},
        {property = 'P2984', baseUrl = 'https://www.snapchat.com/add/', siteName = 'سناب شات', icon = 'Yellow App icon.svg', userValue = args["سناب شات"] or args["سناب تشات"]},
        {property = 'P7085', baseUrl = 'https://www.tiktok.com/@', siteName = 'تيك توك', icon = 'Ionicons logo-tiktok.svg', userValue = args["تيك توك"] or args["تيكتوك"]},
        {property = 'P10885', baseUrl = 'https://play.anghami.com/artist/', siteName = 'أنغامي', icon = 'Anghami logo Arabic.png', userValue = args["أنغامي"]},
        {property = 'P5917', baseUrl = 'https://www.shazam.com/artist/-/', siteName = 'شازام', icon = 'Shazam icon.svg', userValue = args["شازام"] or args["شازم"]},
        {property = 'P4033', baseUrl = 'https://wikidata-externalid-url.toolforge.org/?p=4033&id=', siteName = 'ماستدون', icon = 'Mastodon logotype (simple) new hue.svg', userValue = args["ماستدون"] or args["ماستودون"]},
        {property = 'P2722', baseUrl = 'https://www.deezer.com/artist/', siteName = 'فنان ديزر', icon = 'Deezer logo, 2023.svg', userValue = args["فنان ديزر"]},
        {property = 'P2963', baseUrl = 'https://www.goodreads.com/author/show/', siteName = 'جود ريدز', icon = 'Goodreads logo - SuperTinyIcons.svg', userValue = args["جود ريدز"]},
        {property = 'P2850', baseUrl = 'https://music.apple.com/us/artist/', siteName = 'فنان آي تيونز', icon = 'Apple Music icon.svg', userValue = args["فنان آي تيونز"]},
    }

    -- بناء الروابط لكل موقع اجتماعي مع الأيقونة
    for _, social in ipairs(socialMediaProperties) do
        local link = getSocialMediaLink(entity, social.property, social.baseUrl, social.siteName, social.icon, social.userValue, pageTitle)
        if link then
            table.insert(links, link)
        end
    end

    -- إنشاء العنوان باستخدام "عنوان" أو اسم الصفحة
    local heading = string.format("'''%s''' على [[وسائل تواصل اجتماعي|مواقع التواصل الاجتماعي]]:", pageTitle)

    -- إذا كانت هناك روابط، عرضها داخل صندوق
    if #links > 0 then
        -- استخدام <hr> لإضافة فاصل بين العنوان والروابط
        local content = heading .. "<hr>" .. table.concat(links, '<br>')
        return sideBox({
            role = 'navigation',
            class = 'social-links-box social-links plainlinks',
            text = content
        })
    else
        return "لم يتم العثور على روابط لمواقع التواصل الاجتماعي."
    end
end

return p