You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by he...@apache.org on 2015/07/02 17:09:22 UTC

[07/23] allura git commit: [#7884] ticket:805 Improve SortableRepeatedField widget and features UI

[#7884] ticket:805 Improve SortableRepeatedField widget and features UI

- change styles to fit with the rest of the page
- cursor: move for the "move" icon
- hide "add" button and help messages
- add new field, when user focuses last one


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/651047d9
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/651047d9
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/651047d9

Branch: refs/heads/hs/7894
Commit: 651047d9ea42e195d4d6c9c0c2f052846628eb48
Parents: eabccab
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Jun 17 15:40:48 2015 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Mon Jun 29 18:04:52 2015 +0000

----------------------------------------------------------------------
 .../ext/admin/templates/admin_widgets/features_field.html |  2 +-
 .../ext/admin/templates/admin_widgets/metadata_admin.html |  7 ++++---
 Allura/allura/ext/admin/widgets.py                        | 10 +++-------
 Allura/allura/lib/widgets/form_fields.py                  |  5 +++++
 .../lib/widgets/resources/js/sortable_repeated_field.js   | 10 ++++++++++
 .../allura/templates/widgets/sortable_repeated_field.html | 10 +++++++---
 6 files changed, 30 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/651047d9/Allura/allura/ext/admin/templates/admin_widgets/features_field.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/templates/admin_widgets/features_field.html b/Allura/allura/ext/admin/templates/admin_widgets/features_field.html
index 5d70528..413158a 100644
--- a/Allura/allura/ext/admin/templates/admin_widgets/features_field.html
+++ b/Allura/allura/ext/admin/templates/admin_widgets/features_field.html
@@ -21,7 +21,7 @@
   {% set f = widget.fields[0] %}
   {% set ctx = widget.context_for(f) %}
   <div data-name="{{f.name}}">
-    <span class="ui-icon ui-icon-arrowthick-2-n-s" style="display:inline-block;"></span>
+    <span class="ui-icon ui-icon-arrowthick-2-n-s" style="display:inline-block;cursor:move;"></span>
     {{f.display(**ctx)}}
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/allura/blob/651047d9/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 bebef0c..b313dfc 100644
--- a/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
+++ b/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
@@ -49,10 +49,11 @@
 
     <div style="clear:both">&nbsp;</div>
 
-    <fieldset class="preferences" id="features">
-      <legend>{{ widget.display_label(widget.fields.features) }}</legend>
+    <div id="features">
+      {{ widget.display_label(widget.fields.features) }}
       {{ widget.display_field(widget.fields.features) }}
-    </fieldset>
+    </div>
+    <br>
 
     {% if tg.config.get('support_tool_choices') %}
     Preferred Support Page (for users of your project):<br>

http://git-wip-us.apache.org/repos/asf/allura/blob/651047d9/Allura/allura/ext/admin/widgets.py
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/widgets.py b/Allura/allura/ext/admin/widgets.py
index 9e6e39d..0d5cae9 100644
--- a/Allura/allura/ext/admin/widgets.py
+++ b/Allura/allura/ext/admin/widgets.py
@@ -193,14 +193,10 @@ class MetadataAdmin(ff.AdminForm):
         # is not just ew.TextField
         features = ffw.SortableRepeatedField(
             label='Features',
-            empty_msg='No features yet',
-            nonempty_msg='Drag and drop features to reorder. '
-                         'Leave empty to delete a feature.',
+            show_msg=False,
+            show_button=False,
             append_to='bottom',
-            button=ew.InputField(
-                css_class='add',
-                field_type='button',
-                value='Add feature'),
+            extra_field_on_focus_name='feature',
             field=FeaturesField())
         icon = ew.FileField(label='Icon')
         external_homepage = ew.InputField(field_type="text", label='Homepage',

http://git-wip-us.apache.org/repos/asf/allura/blob/651047d9/Allura/allura/lib/widgets/form_fields.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/form_fields.py b/Allura/allura/lib/widgets/form_fields.py
index be3fd1a..77665f9 100644
--- a/Allura/allura/lib/widgets/form_fields.py
+++ b/Allura/allura/lib/widgets/form_fields.py
@@ -413,6 +413,7 @@ class SortableRepeatedMixin(JQueryMixin):
         'stub_cls',
         'msg_cls',
         'append_to',
+        'extra_field_on_focus_name',
     ]
     defaults = dict(
         container_cls='sortable-repeated-field',
@@ -423,7 +424,11 @@ class SortableRepeatedMixin(JQueryMixin):
         append_to='top',
         empty_msg='No fields have been defined',
         nonempty_msg='Drag and drop the fields to reorder',
+        show_msg=True,
+        show_button=True,
+        extra_field_on_focus_name=None,
         repetitions=0)
+
     button = ew.InputField(
         css_class='add', field_type='button', value='New Field')
 

http://git-wip-us.apache.org/repos/asf/allura/blob/651047d9/Allura/allura/lib/widgets/resources/js/sortable_repeated_field.js
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/resources/js/sortable_repeated_field.js b/Allura/allura/lib/widgets/resources/js/sortable_repeated_field.js
index ca78493..5371299 100644
--- a/Allura/allura/lib/widgets/resources/js/sortable_repeated_field.js
+++ b/Allura/allura/lib/widgets/resources/js/sortable_repeated_field.js
@@ -26,6 +26,7 @@
         stub_cls:'sortable-field-stub',
         msg_cls:'sortable-field-message',
         append_to:'top',  // append new field to top by default. Also supports 'bottom'
+        extra_field_on_focus_name:null,
     };
 
     $.fn.SortableRepeatedField = function(options) {
@@ -85,6 +86,11 @@
                 self.data.$delete_buttons.one('click', _deleteField);
                 self.data.$flist.sortable({stop:_renumberFields});
                 self.data.$stub.hide();
+                if (self.opts.extra_field_on_focus_name) {
+                  self.data.$flist.find('.' + self.opts.field_cls)
+                      .find('input[name$=' + self.opts.extra_field_on_focus_name + ']')
+                      .off('focus').last().on('focus', _addExtraField);
+                }
                 _manageMessages();
             },
             fld_name: function() {
@@ -159,5 +165,9 @@
                     });
             });
         }
+        function _addExtraField() {
+          $(this).off('focus');
+          _addField();
+        }
     };
 }(jQuery));

http://git-wip-us.apache.org/repos/asf/allura/blob/651047d9/Allura/allura/templates/widgets/sortable_repeated_field.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/sortable_repeated_field.html b/Allura/allura/templates/widgets/sortable_repeated_field.html
index dc41694..538d14f 100644
--- a/Allura/allura/templates/widgets/sortable_repeated_field.html
+++ b/Allura/allura/templates/widgets/sortable_repeated_field.html
@@ -20,18 +20,22 @@
      xmlns:py="http://genshi.edgewall.org/"
      class="$container_cls"
      py:attrs="{'data-name':name}">
-  <div><p
+   <div><py:if test="show_msg"><p
           class="$msg_cls"
           data-empty-message="$empty_msg"
           data-nonempty-message="$nonempty_msg"
-          /></div>
-  ${widget.button.display()}
+          /></py:if></div>
+  <py:if test="show_button">${widget.button.display()}</py:if>
   <br style="clear:both"/>
   <div class="$flist_cls">
     <py:for each="i in xrange(repetitions)"
             py:with="ctx=widget.context_for(i)">
       ${widget.field.display(css_class=field_cls, **ctx)}
     </py:for>
+    <py:if test="extra_field_on_focus_name"
+           py:with="ctx=widget.context_for(repetitions)">
+      ${widget.field.display(css_class=field_cls, **ctx)}
+    </py:if>
     ${widget.field.display(name=name+'#', css_class=stub_cls)}
   </div>
 </div>