You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by ke...@apache.org on 2018/01/15 17:32:58 UTC
allura git commit: SF-2222 Improve messaging around project icon
uploads
Repository: allura
Updated Branches:
refs/heads/kt/improve_icon_msg [created] 98f7f688e
SF-2222 Improve messaging around project icon uploads
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/98f7f688
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/98f7f688
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/98f7f688
Branch: refs/heads/kt/improve_icon_msg
Commit: 98f7f688ef4ee0fd6034c2725475a9a7deabaf2e
Parents: bd617e3
Author: Kenton Taylor <kt...@slashdotmedia.com>
Authored: Mon Jan 15 17:32:41 2018 +0000
Committer: Kenton Taylor <kt...@slashdotmedia.com>
Committed: Mon Jan 15 17:32:41 2018 +0000
----------------------------------------------------------------------
.../templates/admin_widgets/metadata_admin.html | 4 ++--
.../ext/admin/templates/project_overview.html | 5 +++-
Allura/allura/ext/admin/widgets.py | 3 ++-
Allura/allura/lib/validators.py | 14 ++++++++++++
Allura/allura/tests/test_validators.py | 24 +++++++++++++++++++-
5 files changed, 45 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/98f7f688/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html b/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
index a26eb9e..fa9da6f 100644
--- a/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
+++ b/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
@@ -94,7 +94,7 @@
</div>
<div class="grid-10">
- <label>Icon:</label>
+ <label>Project Logo:</label>
<br>
<div id="project-icon" class="viewing">
{% if value.icon %}
@@ -114,7 +114,7 @@
<div id="project-icon-upload" class="hidden">
{{widget.display_field(widget.fields.icon)}}
<input type="submit" value="Save" name="save" style="float: none" />
- <br><small>(best if square & hi-res)</small>
+ <br><small>(best if square & hi-res. JPG, GIF, or PNG files expected.)</small>
</div>
</div>
{%if c.project.neighborhood.name != 'Users'%}
http://git-wip-us.apache.org/repos/asf/allura/blob/98f7f688/Allura/allura/ext/admin/templates/project_overview.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/templates/project_overview.html b/Allura/allura/ext/admin/templates/project_overview.html
index 90eca92..649eb12 100644
--- a/Allura/allura/ext/admin/templates/project_overview.html
+++ b/Allura/allura/ext/admin/templates/project_overview.html
@@ -39,7 +39,7 @@
/*global confirm: true*/
$(document).ready(function () {
$.maxlength.setDefaults({feedbackText : '{r} characters left'})
-
+
var $metadata_form = $('#metadata_form');
var $removal_original = $('input[name=removal]:checked');
var $removal_delete_cb = $('#removal_delete_cb');
@@ -79,6 +79,9 @@
var $parent = $this.closest('#project-icon');
$('#project-icon-upload').removeClass('hidden');
});
+ if($('#project-icon-upload .error').length) {
+ $('#project-icon-upload').removeClass('hidden');
+ }
$('#project-status a').click(function(e) {
e.preventDefault();
$('#project-status-edit').removeClass('hidden');
http://git-wip-us.apache.org/repos/asf/allura/blob/98f7f688/Allura/allura/ext/admin/widgets.py
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/widgets.py b/Allura/allura/ext/admin/widgets.py
index 7c7e05c..dd10429 100644
--- a/Allura/allura/ext/admin/widgets.py
+++ b/Allura/allura/ext/admin/widgets.py
@@ -214,7 +214,8 @@ class MetadataAdmin(ff.AdminForm):
append_to='bottom',
extra_field_on_focus_name='feature',
field=FeaturesField())
- icon = ew.FileField(label='Icon', attrs={'accept': 'image/*'})
+ icon = ew.FileField(label='Icon', attrs={'accept': 'image/*'},
+ validator=V.IconValidator())
external_homepage = ew.InputField(field_type="text", label='Homepage',
validator=fev.URL(add_http=True))
video_url = ew.InputField(field_type="text", label="Video (YouTube)",
http://git-wip-us.apache.org/repos/asf/allura/blob/98f7f688/Allura/allura/lib/validators.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/validators.py b/Allura/allura/lib/validators.py
index 39985c7..c57a2d9 100644
--- a/Allura/allura/lib/validators.py
+++ b/Allura/allura/lib/validators.py
@@ -427,3 +427,17 @@ def convertTime(timestring):
except:
pass
return None
+
+
+class IconValidator(fev.FancyValidator):
+ regex = 'jpg|jpeg|gif|png$'
+ def _to_python(self, value, state):
+ p = re.compile(self.regex, flags=re.I)
+ result = p.search(value.filename)
+
+ if not result:
+ raise fe.Invalid(
+ 'Project icons must be PNG, GIF, or JPG format.',
+ value, state)
+
+ return value
http://git-wip-us.apache.org/repos/asf/allura/blob/98f7f688/Allura/allura/tests/test_validators.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_validators.py b/Allura/allura/tests/test_validators.py
index f50b8f7..a02eedb 100644
--- a/Allura/allura/tests/test_validators.py
+++ b/Allura/allura/tests/test_validators.py
@@ -17,7 +17,7 @@
import unittest
import formencode as fe
-from mock import Mock, patch
+from mock import Mock, patch, MagicMock
from allura import model as M
from allura.lib import validators as v
@@ -285,3 +285,25 @@ class TestNonHttpUrlValidator(unittest.TestCase):
with self.assertRaises(fe.Invalid) as cm:
self.val.to_python('url')
self.assertEqual(str(cm.exception), 'You must start your URL with a scheme')
+
+
+class TestIconValidator(unittest.TestCase):
+ val = v.IconValidator
+
+ def _mock(self, val):
+ # Mock has an attr `mixed`, which inadvertantly gets called by formencode to_python method :/
+ def f(filename): pass
+
+ m = Mock(spec=f)
+ m.filename = val
+ return m
+
+ def test_valid(self):
+ input = self._mock('foo.png')
+ self.assertEqual(input, self.val.to_python(input))
+
+ def test_invalid(self):
+ input = self._mock('foo.svg')
+ with self.assertRaises(fe.Invalid) as cm:
+ self.val.to_python(input)
+ self.assertEqual(str(cm.exception), 'Project icons must be PNG, GIF, or JPG format.')