You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/03/27 20:56:37 UTC

[1/3] git commit: [#5951] Fixed javascript error when adding milestones on field management page

Updated Branches:
  refs/heads/cj/5951 [created] 219b51f70


[#5951] Fixed javascript error when adding milestones on field management page

Signed-off-by: Cory Johns <cj...@slashdotmedia.com>


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

Branch: refs/heads/cj/5951
Commit: 28311098ad0e7c9d93b040a2443f90c9d886a3d9
Parents: aced859
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Wed Mar 27 17:24:16 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Mar 27 17:40:14 2013 +0000

----------------------------------------------------------------------
 .../resources/js/sortable_repeated_field.js        |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/28311098/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 251274c..7b46bef 100644
--- a/Allura/allura/lib/widgets/resources/js/sortable_repeated_field.js
+++ b/Allura/allura/lib/widgets/resources/js/sortable_repeated_field.js
@@ -79,7 +79,7 @@
                 .removeClass(self.opts.stub_cls)
                 .addClass(self.opts.field_cls)
                 .show()
-                .find(':input[name^='+tpl_name+']').each(function() {
+                .find(':input[name^="'+tpl_name+'"]').each(function() {
                     var $this = $(this);
                     var name = $this.attr('name');
                     if(name){
@@ -120,7 +120,7 @@
             var prefix = self.fld_name() + '-';
             var regex = new RegExp(prefix + /\d+/.source)
             self.data.$flist.children().each(function(index) {
-                $(this).find(':input[name^='+prefix+']').each(function() {
+                $(this).find(':input[name^="'+prefix+'"]').each(function() {
                     var $this=$(this);
                     var name=$this.attr('name');
                     var newname = name.replace(regex, prefix + index);


[3/3] git commit: [#5951] Display closed milestones in an optgroup

Posted by jo...@apache.org.
[#5951] Display closed milestones in an optgroup

Signed-off-by: Cory Johns <cj...@slashdotmedia.com>


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

Branch: refs/heads/cj/5951
Commit: 219b51f700819453a0fb9937c3b3aa5026e50800
Parents: 2c2ea6c
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Wed Mar 27 19:56:22 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Mar 27 19:56:22 2013 +0000

----------------------------------------------------------------------
 .../forgetracker/tests/functional/test_root.py     |   19 ++++++--
 ForgeTracker/forgetracker/widgets/ticket_form.py   |   36 ++++++++++++---
 2 files changed, 44 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/219b51f7/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index b7f4ae2..d638cf8 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -116,16 +116,25 @@ class TestMilestones(TrackerTestController):
         }
         self.app.post('/bugs/update_milestones', d)
         r = self.app.get('/bugs/1/')
+        closed = r.html.find('optgroup', label='Closed')
+        assert closed
+        closed = str(closed)
         assert '<option selected value="1.0">1.0</option>' in r
+        assert '<option selected value="1.0">1.0</option>' not in closed
         assert '<option value="2.0">2.0</option>' in r
-        assert '<option value="3.0">3.0</option>' not in r
-        assert '<option value="4.0">4.0</option>' not in r
+        assert '<option value="2.0">2.0</option>' not in closed
+        assert '<option value="3.0">3.0</option>' in closed
+        assert '<option value="4.0">4.0</option>' in closed
         r = self.app.get('/bugs/new/')
+        closed = r.html.find('optgroup', label='Closed')
+        assert closed
+        closed = str(closed)
         assert '<option selected value="1.0">1.0</option>' not in r
-        assert '<option value="1.0">1.0</option>' not in r
+        assert '<option value="1.0">1.0</option>' in closed
         assert '<option value="2.0">2.0</option>' in r
-        assert '<option value="3.0">3.0</option>' not in r
-        assert '<option value="4.0">4.0</option>' not in r
+        assert '<option value="2.0">2.0</option>' not in closed
+        assert '<option value="3.0">3.0</option>' in closed
+        assert '<option value="4.0">4.0</option>' in closed
 
 
 def post_install_create_ticket_permission(app):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/219b51f7/ForgeTracker/forgetracker/widgets/ticket_form.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_form.py b/ForgeTracker/forgetracker/widgets/ticket_form.py
index aaba037..4394fbb 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_form.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_form.py
@@ -179,9 +179,33 @@ class TicketCustomField(object):
         return factory(field)
 
 class MilestoneField(ew.SingleSelectField):
-    def display(self, *args, **kwargs):
-        milestone_value = kwargs['value']
-        for milestone in reversed(self.options):  # reverse so del hits the correct indexes
-            if milestone.complete and (milestone.py_value != milestone_value):
-                del self.options[self.options.index(milestone)]
-        return super(MilestoneField, self).display(*args, **kwargs)
+    template=ew.Snippet('''<select {{widget.j2_attrs({
+               'id':id,
+               'name':rendered_name,
+               'multiple':multiple,
+               'class':css_class},
+               attrs)}}>
+            {% for o in open_milestones %}
+            <option{% if o.selected%} selected{% endif %} value="{{o.html_value}}">{{o.label|e}}</option>
+            {% endfor %}
+            {% if closed_milestones %}
+            <optgroup label="Closed">
+                {% for o in closed_milestones %}
+                <option{% if o.selected%} selected{% endif %} value="{{o.html_value}}">{{o.label|e}}</option>
+                {% endfor %}
+            </optgroup>
+            {% endif %}
+        </select>''', 'jinja2')
+
+    def prepare_context(self, context):
+        context = super(MilestoneField, self).prepare_context(context)
+
+        # group open / closed milestones
+        context['open_milestones'] = [opt for opt in self.options if not opt.complete]
+        context['closed_milestones'] = [opt for opt in self.options if opt.complete]
+
+        # filter closed milestones entirely
+        #value = context['value']
+        #context['options'] = [opt for opt in self.options if not opt.complete or value == opt.py_value]
+
+        return context


[2/3] git commit: [#5951] Fixed AttributeError when _milestone field not of type milestone, and made behavior of all milestone-type field consistent

Posted by jo...@apache.org.
[#5951] Fixed AttributeError when _milestone field not of type milestone, and made behavior of all milestone-type field consistent

Signed-off-by: Cory Johns <cj...@slashdotmedia.com>


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

Branch: refs/heads/cj/5951
Commit: 2c2ea6c54878f0cbda553cc47649ff052aede5f7
Parents: 2831109
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Wed Mar 27 18:41:35 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Mar 27 18:41:35 2013 +0000

----------------------------------------------------------------------
 .../forgetracker/templates/tracker/ticket.html     |    2 +
 ForgeTracker/forgetracker/widgets/ticket_form.py   |   18 ++++++++------
 2 files changed, 12 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2c2ea6c5/ForgeTracker/forgetracker/templates/tracker/ticket.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/ticket.html b/ForgeTracker/forgetracker/templates/tracker/ticket.html
index 1d229fe..333b371 100644
--- a/ForgeTracker/forgetracker/templates/tracker/ticket.html
+++ b/ForgeTracker/forgetracker/templates/tracker/ticket.html
@@ -88,6 +88,8 @@
                 {% else %}
                   nobody
                 {% endif %}
+              {% elif field.type == 'milestone' %}
+                <a href="{{c.app.url}}{{field.name[1:]}}/{{ticket.custom_fields[field.name]}}">{{ticket.custom_fields[field.name]}}</a>
               {% else %}
                 {{ticket.custom_fields[field.name]}}
               {% endif %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2c2ea6c5/ForgeTracker/forgetracker/widgets/ticket_form.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_form.py b/ForgeTracker/forgetracker/widgets/ticket_form.py
index 465dce5..aaba037 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_form.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_form.py
@@ -37,13 +37,7 @@ class GenericTicketForm(ew.SimpleForm):
     def display_field_by_name(self, idx, ignore_errors=False):
         field = self.fields[idx]
         ctx = self.context_for(field)
-        if idx == '_milestone':
-            milestone_value = ctx.value
-            for milestone in reversed(field.options):  # reverse so del hits the correct indexes
-                if milestone.complete and (milestone.py_value != milestone_value):
-                    del field.options[field.options.index(milestone)]
-            ctx = self.context_for(field)
-        elif idx == 'assigned_to':
+        if idx == 'assigned_to':
             self._add_current_value_to_user_field(field, ctx.get('value'))
         elif idx == 'custom_fields':
             for cf in c.app.globals.custom_fields:
@@ -154,7 +148,7 @@ class TicketCustomField(object):
                 py_value=m.name,
                 complete=bool(m.complete)))
 
-        ssf = ew.SingleSelectField(
+        ssf = MilestoneField(
             label=field.label, name=str(field.name),
             options=options)
         return ssf
@@ -183,3 +177,11 @@ class TicketCustomField(object):
     def make(cls, field):
         factory = cls.SELECTOR.get(field.get('type'), cls._default)
         return factory(field)
+
+class MilestoneField(ew.SingleSelectField):
+    def display(self, *args, **kwargs):
+        milestone_value = kwargs['value']
+        for milestone in reversed(self.options):  # reverse so del hits the correct indexes
+            if milestone.complete and (milestone.py_value != milestone_value):
+                del self.options[self.options.index(milestone)]
+        return super(MilestoneField, self).display(*args, **kwargs)