misc: strip emojis from buttons (#76405)
gitea/wcs/pipeline/head This commit looks good Details

This commit is contained in:
Frédéric Péters 2023-04-07 08:07:16 +02:00
parent f07e55fe3e
commit c40f5a22ec
4 changed files with 34 additions and 3 deletions

1
debian/control vendored
View File

@ -22,6 +22,7 @@ Depends: graphviz,
python3-django-ckeditor,
python3-django-ratelimit,
python3-dnspython,
python3-emoji,
python3-hobo,
python3-lasso,
python3-lxml,

View File

@ -203,6 +203,7 @@ setup(
'requests',
'setproctitle',
'phonenumbers',
'emoji',
],
package_dir={'wcs': 'wcs'},
packages=find_packages(),

View File

@ -4,6 +4,7 @@ import shutil
import mechanize
import pytest
from pyquery import PyQuery
from quixote import cleanup, get_response
from quixote.http_request import parse_query
@ -1409,3 +1410,26 @@ def test_condition_widget_no_python():
assert widget.get_error() == "syntax error: Could not parse the remainder: '{{' from '{{'"
pub.site_options.set('options', 'disable-python-expressions', 'false')
def test_emoji_button():
# textual button
form = Form(use_tokens=False)
form.add_submit('submit', 'Submit')
assert PyQuery(str(form.render()))('button').attr.name == 'submit'
assert not PyQuery(str(form.render()))('button').attr['aria-label']
assert PyQuery(str(form.render()))('button').text() == 'Submit'
# emoji + text
form = Form(use_tokens=False)
form.add_submit('submit', '✅ Submit')
assert PyQuery(str(form.render()))('button').attr.name == 'submit'
assert PyQuery(str(form.render()))('button').attr['aria-label'] == 'Submit'
assert PyQuery(str(form.render()))('button').text() == '✅ Submit'
# single emoji (do not do this) (no empty aria-label)
form = Form(use_tokens=False)
form.add_submit('submit', '')
assert PyQuery(str(form.render()))('button').attr.name == 'submit'
assert not PyQuery(str(form.render()))('button').attr['aria-label']
assert PyQuery(str(form.render()))('button').text() == ''

View File

@ -37,6 +37,7 @@ from functools import partial
import dns
import dns.exception
import dns.resolver
import emoji
from bleach import Cleaner
from bleach.linkifier import LinkifyFilter
from PIL import Image
@ -208,10 +209,14 @@ class SubmitWidget(quixote.form.widget.SubmitWidget):
def render_content(self):
if self.name in ('cancel', 'previous', 'save-draft'):
self.attrs['formnovalidate'] = 'formnovalidate'
value = htmlescape(self.label) if self.label else None
label = self.label or ''
if label and 'aria-label' not in self.attrs:
cleaned_label = emoji.replace_emoji(label, replace='').strip()
if cleaned_label and cleaned_label != label:
self.attrs['aria-label'] = cleaned_label
return (
htmltag('button', name=self.name, value=value, **self.attrs)
+ str(self.label)
htmltag('button', name=self.name, value=htmlescape(label), **self.attrs)
+ str(label)
+ htmltext('</button>')
)