Модуль:Emoji
Этот модуль оценён как готовый к использованию. Предполагается, что все баги устранены и он готов для широкого использования. Его можно указывать на справочных страницах и рекомендовать к использованию новым участникам. Для его изменения и тестирования, пожалуйста, используйте песочницу. |
Этот модуль может использоваться для отображения различных эмодзи в обсуждениях статей. Список предоставленных эмодзи находится на странице с данными. Не все эмодзи одинаково поддерживаются всеми наборами.
Используйте шаблон {{-:}} для вставки эмодзи на страницы, здесь продемонстрирована функциональность самого модуля.
ПараметрыПравить
Механизм вызова: {{#invoke:Emoji|render}}
. При вызове можно использовать следующие параметры (добавляются к {{#invoke}}
; вариант по умолчанию выделен курсивом):
- name — название эмодзи либо сам эмодзи (slightly_smiling_face);
- size — размер эмодзи (16 пкс);
- theme — тема отображения эмодзи (на выбор — Firefox OS Emoji (
firefox
), EmojiOne (one
), Noto Color Emoji (noto
) или Twitter Emoji (twitter
) или тема без изображения).
ИспользованиеПравить
Примеры использования:
- С названием эмодзи:
{{#invoke:Emoji|render|name=sunglasses}}
- С эмодзи вместо его названия:
{{#invoke:Emoji|render|name=👍}}
- С изменением размера:
{{#invoke:Emoji|render|name=rage|size=24}}
- С изменением темы:
{{#invoke:Emoji|render|name=cry|size=32|theme=twitter}}
- Без изображения:
😂{{#invoke:Emoji|render|name=joy|size=48|theme=none}}
ОшибкиПравить
Если набор эмодзи не имеет соответствующего файла для выбранного эмодзи, отображается вариант «без изображения» с подсказкой про отсутствие эмодзи в наборе:
- 🇳🇴 —
{{#invoke:Emoji|render|name=flag-no|theme=noto}}
; - 😡👍 —
{{#invoke:Emoji|render|name=😡👍}}
.
-- Модуль для показа эмодзи в различных конфигурациях
-- Данные эмодзи-кодов 8-)
local emoji = mw.loadData('Module:Emoji/data');
local p = {};
-- Проверка пустоты параметра :-O
local function isEmpty(s)
return s == nil or s == ''
end
-- Вывод названия файла для показа эмодзи :-3
local function fileName(code, theme)
-- Стиль Noto требует другого форматирования двойных эмодзи >:-(
if theme == 'noto' then
code = code:gsub('%-',' ')
end
-- Темы и их сокращения <3
local themes = {
['firefox'] = 'Fxemoji u' .. string.upper(code),
['noto'] = 'Noto Emoji Pie' .. string.lower(code),
['one'] = 'Emojione ' .. string.upper(code),
['twitter'] = 'Twemoji12 ' .. string.lower(code),
}
themes['fx'] = themes['firefox'];
themes['tw'] = themes['twitter'];
return themes[theme]
end
-- Вывод HTML-кода соответствующих эмодзи D-:
local function toHTML(code)
local r = ''
if string.match(code,'-') then
local spl = mw.text.split(code,'-',true)
r = '&#x' .. spl[1] .. ';' .. '&#x' .. spl[2] .. ';'
else
r = '&#x' .. code .. ';'
end
return r
end
-- Получение ключей по значениям {-:
local function getKey(t, value)
for k, v in pairs(t) do
if v == value then return k end
end
return nil
end
-- Получение HTML-мнемоники из эмодзи :=|
local function getCode(str)
local r = '';
for i = 1, mw.ustring.len(str) do
r = r .. string.format('%04x', mw.ustring.codepoint(str, i, (i+1))) .. '-';
end
return r:sub(1,-2)
end
-- Вывод названия файла ;-1
function p.fileName(frame)
local f = frame.args
local name = f.name
local theme = f.theme
local code = emoji[name]
if isEmpty(code) then
if getKey(emoji,name) ~= nil then
code = name
else
code = getCode(name)
end
end
return fileName(code, theme)
end
-- Вывод шаблона с эмодзи ;-)
function p.render(frame)
local f = frame.args
local name = f.name
local size = f.size
local theme = f.theme
-- Выбор стандартного эмодзи :-)
if isEmpty(name) then
name = 'slightly_smiling_face'
end
-- Выбор стандартного размера c-:
if isEmpty(size) then
size = '16'
end
-- Выбор темы по умолчанию :->
if isEmpty(theme) then
theme = 'one'
end
local code = emoji[name]
if isEmpty(code) then
if getKey(emoji,name) ~= nil then
code = name
else
code = getCode(name)
end
end
local span = mw.html.create():tag('span')
span:addClass('emoji')
span:cssText('font-size:' .. size .. 'px; font-family:"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol",sans-serif; line-height:' .. size .. 'px;')
-- Названия тем :-D
local themes = {
['firefox'] = 'Firefox Emoji',
['noto'] = 'Noto Color Emoji',
['one'] = 'EmojiOne',
['twitter'] = 'Twitter Emoji',
}
themes['fx'] = themes['firefox'];
themes['tw'] = themes['twitter'];
-- Вывод символа или символов или файла в зависимости от темы :-*
if theme == 'none' then
span:attr('title',name)
span:wikitext(toHTML(code))
else
local file = fileName(code, theme)
if not isEmpty(file) then
file = string.format('Файл:%s.svg', file)
end
if not isEmpty(file) and mw.title.new(file).fileExists then
span:wikitext(string.format('[[%s|%spx|%s|alt=%s]]', file, size, name, toHTML(code)))
else
span:attr('title',string.format('Эмодзи %s нет в наборе %s',name,themes[theme]))
span:wikitext(toHTML(code))
end
end
return tostring(span:done())
end
return p