Открыть боковую панель
nt_test132
nt_project_7gohtg18g8li
Коммиты
ae95118a
Коммит
ae95118a
создал
Окт 11, 2016
по автору
Johan H
Зафиксировано автором
henrik
Окт 13, 2016
Просмотр файлов
Convert UTF-8 Emoji to Gitlab emoji
владелец
969286fc
Изменения
4
Скрыть пробелы
Построчно
Рядом
CHANGELOG
Просмотр файла @
ae95118a
...
...
@@ -34,6 +34,7 @@ v 8.13.0 (unreleased)
- Simplify Mentionable concern instance methods
- Fix permission for setting an issue's due date
- API: Multi-file commit !6096 (mahcsig)
- Unicode emoji are now converted to images
- Revert "Label list shows all issues (opened or closed) with that label"
- Expose expires_at field when sharing project on API
- Fix VueJS template tags being rendered in code comments
...
...
lib/banzai/filter/emoji_filter.rb
Просмотр файла @
ae95118a
...
...
@@ -14,15 +14,16 @@ def call
search_text_nodes
(
doc
).
each
do
|
node
|
content
=
node
.
to_html
next
if
has_ancestor?
(
node
,
IGNORED_ANCESTOR_TAGS
)
if
content
.
include?
(
':'
)
||
node
.
text
.
match
(
emoji_unicode_pattern
)
html
=
emoji_name_image_filter
(
content
)
html
=
emoji_unicode_image_filter
(
html
)
next
if
html
==
content
node
.
replace
(
html
)
end
end
next
unless
content
.
include?
(
':'
)
||
node
.
text
.
match
(
emoji_unicode_pattern
)
html
=
emoji_name_image_filter
(
content
)
html
=
emoji_unicode_image_filter
(
html
)
next
if
html
==
content
node
.
replace
(
html
)
end
doc
end
...
...
@@ -34,31 +35,35 @@ def call
def
emoji_name_image_filter
(
text
)
text
.
gsub
(
emoji_pattern
)
do
|
match
|
name
=
$1
"<img class='emoji' title=':
#{
name
}
:' alt=':
#{
name
}
:' src='
#{
emoji_url
(
name
)
}
' height='20' width='20' align='absmiddle' />"
emoji_image_tag
(
name
,
emoji_url
(
name
))
end
end
# Replace unicode emojis with corresponding images if they exist.
# Replace unicode emoji with corresponding images if they exist.
#
# text - String text to replace unicode emoji
s
in.
# text - String text to replace unicode emoji in.
#
# Returns a String with unicode emojis replaced with images.
# Returns a String with unicode emoji replaced with images.
def
emoji_unicode_image_filter
(
text
)
text
.
gsub
(
emoji_unicode_pattern
)
do
|
moji
|
"<img class='emoji' title=':
#{
Gitlab
::
Emoji
.
emojis_by_moji
[
moji
][
'name'
]
}
:' alt=':
#{
Gitlab
::
Emoji
.
emojis_by_moji
[
moji
][
'name'
]
}
:' src='
#{
emoji_unicode_url
(
moji
)
}
' height='20' width='20' align='absmiddle' />"
emoji_image_tag
(
Gitlab
::
Emoji
.
emojis_by_moji
[
moji
][
'name'
]
,
emoji_unicode_url
(
moji
)
)
end
end
def
emoji_image_tag
(
emoji_name
,
emoji_url
)
"<img class='emoji' title=':
#{
emoji_name
}
:' alt=':
#{
emoji_name
}
:' src='
#{
emoji_url
}
' height='20' width='20' align='absmiddle' />"
end
# Build a regexp that matches all valid :emoji: names.
def
self
.
emoji_pattern
@emoji_pattern
||=
/:(
#{
Gitlab
::
Emoji
.
emojis_names
.
map
{
|
name
|
Regexp
.
escape
(
name
)
}
.join('|')}):/
end
# Build a regexp that matches all valid unicode emojis names.
def
self
.
emoji_unicode_pattern
@emoji_unicode_pattern
||=
/(
#{
Gitlab
::
Emoji
.
emojis_unicodes
.
map
{
|
moji
|
Regexp
.
escape
(
moji
)
}
.join('|')})/
end
private
def
emoji_url
(
name
)
...
...
@@ -80,13 +85,10 @@ def emoji_unicode_url(moji)
emoji_unicode_path
=
emoji_unicode_filename
(
moji
)
if
context
[
:asset_host
]
# Asset host is specified.
url_to_image
(
emoji_unicode_path
)
elsif
context
[
:asset_root
]
# Gitlab url is specified
File
.
join
(
context
[
:asset_root
],
url_to_image
(
emoji_unicode_path
))
else
# All other cases
url_to_image
(
emoji_unicode_path
)
end
end
...
...
@@ -102,6 +104,7 @@ def emoji_pattern
def
emoji_filename
(
name
)
"
#{
Gitlab
::
Emoji
.
emoji_filename
(
name
)
}
.png"
end
def
emoji_unicode_pattern
self
.
class
.
emoji_unicode_pattern
end
...
...
lib/gitlab/emoji.rb
Просмотр файла @
ae95118a
...
...
@@ -9,16 +9,19 @@ def emojis
def
emojis_by_moji
Gemojione
.
index
.
instance_variable_get
(
:@emoji_by_moji
)
end
def
emojis_unicodes
emojis_by_moji
.
keys
.
sort
emojis_by_moji
.
keys
end
def
emojis_names
emojis
.
keys
.
sort
emojis
.
keys
end
def
emoji_filename
(
name
)
emojis
[
name
][
"unicode"
]
end
def
emoji_unicode_filename
(
moji
)
emojis_by_moji
[
moji
][
"unicode"
]
end
...
...
spec/lib/banzai/filter/emoji_filter_spec.rb
Просмотр файла @
ae95118a
...
...
@@ -16,10 +16,12 @@
doc
=
filter
(
'<p>:heart:</p>'
)
expect
(
doc
.
css
(
'img'
).
first
.
attr
(
'src'
)).
to
eq
'https://foo.com/assets/2764.png'
end
it
'replaces supported unicode emoji'
do
doc
=
filter
(
'<p>❤️</p>'
)
expect
(
doc
.
css
(
'img'
).
first
.
attr
(
'src'
)).
to
eq
'https://foo.com/assets/2764.png'
end
it
'ignores unsupported emoji'
do
exp
=
act
=
'<p>:foo:</p>'
doc
=
filter
(
act
)
...
...
@@ -162,4 +164,18 @@
doc
=
filter
(
':frowning:'
,
asset_host:
'https://this-is-ignored-i-guess?'
)
expect
(
doc
.
css
(
'img'
).
first
.
attr
(
'src'
)).
to
start_with
(
'https://cdn.example.com'
)
end
it
'uses a custom asset_root context'
do
root
=
Gitlab
.
config
.
gitlab
.
url
+
'gitlab/root'
doc
=
filter
(
"'🎱'"
,
asset_root:
root
)
expect
(
doc
.
css
(
'img'
).
first
.
attr
(
'src'
)).
to
start_with
(
root
)
end
it
'uses a custom asset_host context'
do
ActionController
::
Base
.
asset_host
=
'https://cdn.example.com'
doc
=
filter
(
"'🎱'"
,
asset_host:
'https://this-is-ignored-i-guess?'
)
expect
(
doc
.
css
(
'img'
).
first
.
attr
(
'src'
)).
to
start_with
(
'https://cdn.example.com'
)
end
end
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать