manager: add minimal search of assets (#11491)

This commit is contained in:
Frédéric Péters 2017-12-25 18:05:50 +01:00
parent be2a10e460
commit a652a983b6
3 changed files with 36 additions and 1 deletions

View File

@ -12,7 +12,7 @@
{% block content %}
{% if not object_list %}
{% if not object_list and not query %}
<div class="big-msg-info">
{% blocktrans %}
This site doesn't have any asset yet. You can add some directly when editing
@ -22,6 +22,12 @@
{% else %}
<form>
<p><input name="q" type="search" value="{{query}}"> <button>{% trans 'Search' %}</button>
<span class="help_text">{% trans "(case insensitive search over filenames)" %}</span>
</p>
</form>
<div id="assets-browser">
<div id="assets-listing">
<table class="main">

View File

@ -414,9 +414,17 @@ class Assets(ListView):
def get_queryset(self):
files = [Asset(x) for x in ckeditor.views.get_image_files(self.request.user)]
q = self.request.GET.get('q')
if q:
files = [x for x in files if q.lower() in x.filename.lower()]
files.sort(key=lambda x: getattr(x, 'filename'))
return files
def get_context_data(self, **kwargs):
context = super(Assets, self).get_context_data(**kwargs)
context['query'] = self.request.GET.get('q') or ''
return context
assets = Assets.as_view()

View File

@ -585,6 +585,27 @@ def test_asset_management(app, admin_user):
resp = resp.form.submit().follow()
assert 'have any asset yet.' in resp.body
def test_asset_management_search(app, admin_user):
app = login(app)
filepath = os.path.join(settings.CKEDITOR_UPLOAD_PATH, 'test.png')
pix = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAACklEQVQI12NoAAAAggCB3UNq9AAAAABJRU5ErkJggg=='
default_storage.save(filepath, StringIO.StringIO(base64.decodestring(pix)))
assert os.path.exists(default_storage.path(filepath))
filepath = os.path.join(settings.CKEDITOR_UPLOAD_PATH, 'test.txt')
default_storage.save(filepath, StringIO.StringIO('hello world'))
filepath = os.path.join(settings.CKEDITOR_UPLOAD_PATH, 'foo.txt')
default_storage.save(filepath, StringIO.StringIO('foo bar baz'))
resp = app.get('/manage/assets/')
assert resp.body.count('<tr class="asset') == 3
resp.form['q'] = 'test'
resp = resp.form.submit()
assert resp.body.count('<tr class="asset') == 2
def test_menu_json(app, admin_user):
app.get('/manage/menu.json', status=302)