Действия

Модуль

Countries-popups

Материал из ВикиВоины

Для документации этого модуля может быть создана страница Модуль:Countries-popups/doc

local p = {}
local cacheModule = require('Module:Countries/Cache')

function p.generateAllCodes(frame)
    local result = ''
    local args = frame:getParent().args
    -- Список всех стран и соответствующих параметров
    local countries = {
 {name = 'Австралия', id = 'AU'},
 {name = 'Австрия', id = 'AT'},
 {name = 'Азербайджан', id = 'AZ'},
 {name = 'Албания', id = 'AL'},
 {name = 'Алжир', id = 'DZ'},
 {name = 'Американские Вирджинские острова', id = 'VI'},
 {name = 'Американское Самоа', id = 'AS'},
 {name = 'Ангилья', id = 'AI'},
 {name = 'Ангола', id = 'AO'},
 {name = 'Андорра', id = 'AD'},
 {name = 'Антигуа и Барбуда', id = 'AG'},
 {name = 'Аргентина', id = 'AR'},
 {name = 'Армения', id = 'AM'},
 {name = 'Аруба', id = 'AW'},
 {name = 'Афганистан', id = 'AF'},
 {name = 'Багамы', id = 'BS'},
 {name = 'Бангладеш', id = 'BD'},
 {name = 'Барбадос', id = 'BB'},
 {name = 'Бахрейн', id = 'BH'},
 {name = 'Беларусь', id = 'BY'},
 {name = 'Белиз', id = 'BZ'},
 {name = 'Бельгия', id = 'BE'},
 {name = 'Бенин', id = 'BJ'},
 {name = 'Бермуды', id = 'BM'},
 {name = 'Болгария', id = 'BG'},
 {name = 'Боливия', id = 'BO'},
 {name = 'Босния и Герцеговина', id = 'BA'},
 {name = 'Ботсвана', id = 'BW'},
 {name = 'Бразилия', id = 'BR'},
 {name = 'Британские Вирджинские острова', id = 'VG'},
 {name = 'Бруней', id = 'BN'},
 {name = 'Буркина-Фасо', id = 'BF'},
 {name = 'Бурунди', id = 'BI'},
 {name = 'Бутан', id = 'BT'},
 {name = 'Вануату', id = 'VU'},
 {name = 'Ватикан', id = 'VA'},
 {name = 'Великобритания', id = 'GB'},
 {name = 'Венгрия', id = 'HU'},
 {name = 'Венесуэла', id = 'VE'},
 {name = 'Восточный Тимор', id = 'TL'},
 {name = 'Вьетнам', id = 'VN'},
 {name = 'Габон', id = 'GA'},
 {name = 'Гавайи', id = 'HI'},
 {name = 'Гаити', id = 'HT'},
 {name = 'Гайана', id = 'GY'},
 {name = 'Гамбия', id = 'GM'},
 {name = 'Гана', id = 'GH'},
 {name = 'Гваделупа', id = 'GP'},
 {name = 'Гватемала', id = 'GT'},
 {name = 'Гвинея', id = 'GN'},
 {name = 'Гвинея-Бисау', id = 'GW'},
 {name = 'Германия', id = 'DE'},
 {name = 'Гондурас', id = 'HN'},
 {name = 'Гонконг', id = 'HK'},
 {name = 'Гренада', id = 'GD'},
 {name = 'Гренландия', id = 'GL'},
 {name = 'Греция', id = 'GR'},
 {name = 'Грузия', id = 'GE'},
 {name = 'Гуам', id = 'GU'},
 {name = 'Дания', id = 'DK'},
 {name = 'Джибути', id = 'DJ'},
 {name = 'Доминика', id = 'DM'},
 {name = 'Доминикана', id = 'DO'},
 {name = 'ДР Конго', id = 'CD'},
 {name = 'Египет', id = 'EG'},
 {name = 'Замбия', id = 'ZM'},
 {name = 'Западная Сахара', id = 'EH'},
 {name = 'Зимбабве', id = 'ZW'},
 {name = 'Израиль', id = 'IL'},
 {name = 'Индия', id = 'IN'},
 {name = 'Индонезия', id = 'ID'},
 {name = 'Иордания', id = 'JO'},
 {name = 'Ирак', id = 'IQ'},
 {name = 'Иран', id = 'IR'},
 {name = 'Ирландия', id = 'IE'},
 {name = 'Исландия', id = 'IS'},
 {name = 'Испания', id = 'ES'},
 {name = 'Италия', id = 'IT'},
 {name = 'Йемен', id = 'YE'},
 {name = 'Кабо-Верде', id = 'CV'},
 {name = 'Казахстан', id = 'KZ'},
 {name = 'Кайманы', id = 'KY'},
 {name = 'Камбоджа', id = 'KH'},
 {name = 'Камерун', id = 'CM'},
 {name = 'Канада', id = 'CA'},
 {name = 'Канарские острова', id = 'IC'},
 {name = 'Катар', id = 'QA'},
 {name = 'Кения', id = 'KE'},
 {name = 'Кипр', id = 'CY'},
 {name = 'Кирибати', id = 'KI'},
 {name = 'Китай', id = 'CN'},
 {name = 'Колумбия', id = 'CO'},
 {name = 'Коморы', id = 'KM'},
 {name = 'Конго', id = 'CG'},
 {name = 'Коста-Рика', id = 'CR'},
 {name = 'Кот-д’Ивуар', id = 'CI'},
 {name = 'Куба', id = 'CU'},
 {name = 'Кувейт', id = 'KW'},
 {name = 'Кыргызстан', id = 'KG'},
 {name = 'Кюрасао', id = 'CW'},
 {name = 'Лаос', id = 'LA'},
 {name = 'Латвия', id = 'LV'},
 {name = 'Лесото', id = 'LS'},
 {name = 'Либерия', id = 'LR'},
 {name = 'Ливан', id = 'LB'},
 {name = 'Ливия', id = 'LY'},
 {name = 'Литва', id = 'LT'},
 {name = 'Лихтенштейн', id = 'LI'},
 {name = 'Люксембург', id = 'LU'},
 {name = 'Маврикий', id = 'MU'},
 {name = 'Мавритания', id = 'MR'},
 {name = 'Мадагаскар', id = 'MG'},
 {name = 'Майотта', id = 'YT'},
 {name = 'Малави', id = 'MW'},
 {name = 'Малайзия', id = 'MY'},
 {name = 'Мали', id = 'ML'},
 {name = 'Мальдивы', id = 'MV'},
 {name = 'Мальта', id = 'MT'},
 {name = 'Марокко', id = 'MA'},
 {name = 'Мартиника', id = 'MQ'},
 {name = 'Маршалловы Острова', id = 'MH'},
 {name = 'Мексика', id = 'MX'},
 {name = 'Микронезия', id = 'FM'},
 {name = 'Мозамбик', id = 'MZ'},
 {name = 'Молдова', id = 'MD'},
 {name = 'Монако', id = 'MC'},
 {name = 'Монголия', id = 'MN'},
 {name = 'Монтсеррат', id = 'MS'},
 {name = 'Мьянма', id = 'MM'},
 {name = 'Намибия', id = 'NA'},
 {name = 'Науру', id = 'NR'},
 {name = 'Непал', id = 'NP'},
 {name = 'Нигер', id = 'NE'},
 {name = 'Нигерия', id = 'NG'},
 {name = 'Нидерланды', id = 'NL'},
 {name = 'Никарагуа', id = 'NI'},
 {name = 'Ниуэ', id = 'NU'},
 {name = 'Новая Зеландия', id = 'NZ'},
 {name = 'Новая Каледония', id = 'NC'},
 {name = 'Норвегия', id = 'NO'},
 {name = 'ОАЭ', id = 'AE'},
 {name = 'Оман', id = 'OM'},
 {name = 'Острова Кука', id = 'CK'},
 {name = 'Пакистан', id = 'PK'},
 {name = 'Палау', id = 'PW'},
 {name = 'Палестина', id = 'PS'},
 {name = 'Панама', id = 'PA'},
 {name = 'Папуа-Новая Гвинея', id = 'PG'},
 {name = 'Парагвай', id = 'PY'},
 {name = 'Перу', id = 'PE'},
 {name = 'Питкэрн', id = 'PN'},
 {name = 'Польша', id = 'PL'},
 {name = 'Португалия', id = 'PT'},
 {name = 'Пуэрто-Рико', id = 'PR'},
 {name = 'Реюньон', id = 'RE'},
 {name = 'Россия', id = 'RU'},
 {name = 'Руанда', id = 'RW'},
 {name = 'Румыния', id = 'RO'},
 {name = 'Сальвадор', id = 'SV'},
 {name = 'Самоа', id = 'WS'},
 {name = 'Сан-Марино', id = 'SM'},
 {name = 'Сан-Томе и Принсипи', id = 'ST'},
 {name = 'Саудовская Аравия', id = 'SA'},
 {name = 'Северная Корея', id = 'KP'},
 {name = 'Северная Македония', id = 'MK'},
 {name = 'Северные Марианские Острова', id = 'MP'},
 {name = 'Сейшелы', id = 'SC'},
 {name = 'Сенегал', id = 'SN'},
 {name = 'Сент-Винсент и Гренадины', id = 'VC'},
 {name = 'Сент-Китс и Невис', id = 'KN'},
 {name = 'Сент-Люсия', id = 'LC'},
 {name = 'Сербия', id = 'RS'},
 {name = 'Сингапур', id = 'SG'},
 {name = 'Синт-Мартен', id = 'SX'},
 {name = 'Сирия', id = 'SY'},
 {name = 'Словакия', id = 'SK'},
 {name = 'Словения', id = 'SI'},
 {name = 'Соломоновы Острова', id = 'SB'},
 {name = 'Сомали', id = 'SO'},
 {name = 'Судан', id = 'SD'},
 {name = 'Суринам', id = 'SR'},
 {name = 'США', id = 'US'},
 {name = 'Сьерра-Леоне', id = 'SL'},
 {name = 'Таджикистан', id = 'TJ'},
 {name = 'Таиланд', id = 'TH'},
 {name = 'Тайвань', id = 'TW'},
 {name = 'Танзания', id = 'TZ'},
 {name = 'Теркс и Кайкос', id = 'TC'},
 {name = 'Того', id = 'TG'},
 {name = 'Токелау', id = 'TK'},
 {name = 'Тонга', id = 'TO'},
 {name = 'Тринидад и Тобаго', id = 'TT'},
 {name = 'Тувалу', id = 'TV'},
 {name = 'Тунис', id = 'TN'},
 {name = 'Туркменистан', id = 'TM'},
 {name = 'Турция', id = 'TR'},
 {name = 'Уганда', id = 'UG'},
 {name = 'Узбекистан', id = 'UZ'},
 {name = 'Украина', id = 'UA'},
 {name = 'Уоллис и Футуна', id = 'WF'},
 {name = 'Уругвай', id = 'UY'},
 {name = 'Уэйк', id = 'UM'},
 {name = 'Фареры', id = 'FO'},
 {name = 'Фиджи', id = 'FJ'},
 {name = 'Филиппины', id = 'PH'},
 {name = 'Финляндия', id = 'FI'},
 {name = 'Фолкленды', id = 'FK'},
 {name = 'Франция', id = 'FR'},
 {name = 'Французская Гвиана', id = 'GF'},
 {name = 'Французская Полинезия', id = 'PF'},
 {name = 'Хорватия', id = 'HR'},
 {name = 'ЦАР', id = 'CF'},
 {name = 'Чад', id = 'TD'},
 {name = 'Черногория', id = 'ME'},
 {name = 'Чехия', id = 'CZ'},
 {name = 'Чили', id = 'CL'},
 {name = 'Швейцария', id = 'CH'},
 {name = 'Швеция', id = 'SE'},
 {name = 'Шри-Ланка', id = 'LK'},
 {name = 'Эквадор', id = 'EC'},
 {name = 'Экваториальная Гвинея', id = 'GQ'},
 {name = 'Эритрея', id = 'ER'},
 {name = 'Эсватини', id = 'SZ'},
 {name = 'Эстония', id = 'EE'},
 {name = 'Эфиопия', id = 'ET'},
 {name = 'ЮАР', id = 'ZA'},
 {name = 'Южная Корея', id = 'KR'},
 {name = 'Южный Судан', id = 'SS'},
 {name = 'Ямайка', id = 'JM'},
 {name = 'Япония', id = 'JP'},
    }
 -- Перебираем все страны и генерируем код для каждой
    for i, country in ipairs(countries) do
        local countryImage = args[country.name .. '-изображение'] or ''
        local countryTitle = args[country.name .. '-заголовок'] or ''
        local countryText = args[country.name .. '-текст'] or ''

        if countryImage ~= '' then
            local countryCode = p.generateCountryCode(frame, country.name, country.id, countryImage, countryTitle, countryText)
            result = result .. countryCode
        end
    end

    return result
end

function p.generateCountryCode(frame, country, id, image, title, text)
    local idAttr = mw.uri.encode(id)
    local cdPopupCode = mw.html.create()
        :tag('div')
            :addClass('cd-popup')
            :attr('id', idAttr)
            :tag('div')
                :addClass('cd-popup-container')
                :tag('div')
                    :addClass('popup-content')
                    :wikitext(frame:expandTemplate{title = country})
                :done()
                :tag('div')
                    :addClass('cd-popup-image')
                    :wikitext(image)
                :done()
                :tag('div')
                    :addClass('title')
                    :wikitext(title)
                :done()
                :tag('div')
                    :addClass('height-popup-limit')
                    :wikitext('\n' .. text)
                :done()
            :done()

    local result = mw.html.create()
        :node(cdPopupCode)

    return tostring(result)
end

function p.saveToCache(frame)
    local key = frame:preprocess('{{PAGENAME}}')
    local data = p.generateAllCodes(frame)
    cacheModule.saveData(key, data)
    return ''
end

return p