Модуль:Emoji
|
Этот модуль оценён как готовый к использованию. Предполагается, что все баги устранены и он готов для широкого использования. Его можно указывать на справочных страницах и рекомендовать к использованию новым участникам. Для его изменения и тестирования, пожалуйста, используйте песочницу. |
Этот модуль может использоваться для отображения различных эмодзи в обсуждениях статей. Список предоставленных эмодзи находится на странице с данными. Не все эмодзи одинаково поддерживаются всеми наборами.
Используйте шаблон {{-:}} для вставки эмодзи на страницы, здесь продемонстрирована функциональность самого модуля.
Параметры
Механизм вызова: {{#invoke:Emoji|render}}. При вызове можно использовать следующие параметры (добавляются к {{#invoke}}; вариант по умолчанию выделен курсивом):
- name — название эмодзи либо сам эмодзи (slightly_smiling_face);
- size — размер эмодзи (16 пкс);
- theme — тема отображения эмодзи (на выбор — Firefox OS Emoji, EmojiOne, Noto Color Emoji или Twitter Emoji или тема без изображения).
Вид эмодзи по умолчанию: 🙂
Использование
Примеры использования:
- С названием эмодзи:
😎
{{#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'] = 'Emoji u' .. string.lower(code), ['one'] = 'Emojione ' .. string.upper(code), ['twitter'] = 'Twemoji ' .. 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