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.')