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-ckeditor,
python3-django-ratelimit, python3-django-ratelimit,
python3-dnspython, python3-dnspython,
python3-emoji,
python3-hobo, python3-hobo,
python3-lasso, python3-lasso,
python3-lxml, python3-lxml,

View File

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

View File

@ -4,6 +4,7 @@ import shutil
import mechanize import mechanize
import pytest import pytest
from pyquery import PyQuery
from quixote import cleanup, get_response from quixote import cleanup, get_response
from quixote.http_request import parse_query 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 '{{'" assert widget.get_error() == "syntax error: Could not parse the remainder: '{{' from '{{'"
pub.site_options.set('options', 'disable-python-expressions', 'false') 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
import dns.exception import dns.exception
import dns.resolver import dns.resolver
import emoji
from bleach import Cleaner from bleach import Cleaner
from bleach.linkifier import LinkifyFilter from bleach.linkifier import LinkifyFilter
from PIL import Image from PIL import Image
@ -208,10 +209,14 @@ class SubmitWidget(quixote.form.widget.SubmitWidget):
def render_content(self): def render_content(self):
if self.name in ('cancel', 'previous', 'save-draft'): if self.name in ('cancel', 'previous', 'save-draft'):
self.attrs['formnovalidate'] = 'formnovalidate' 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 ( return (
htmltag('button', name=self.name, value=value, **self.attrs) htmltag('button', name=self.name, value=htmlescape(label), **self.attrs)
+ str(self.label) + str(label)
+ htmltext('</button>') + htmltext('</button>')
) )