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