You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2013/12/16 18:46:27 UTC

[3/5] git commit: [#5749] ticket:486 UI for setting a default milestone

 [#5749] ticket:486 UI for setting a default milestone


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

Branch: refs/heads/master
Commit: ea651215eb5f97f156fdf6f26751788dcd301704
Parents: a113345
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Wed Dec 4 18:12:14 2013 +0400
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Mon Dec 16 17:28:01 2013 +0000

----------------------------------------------------------------------
 Allura/allura/lib/widgets/form_fields.py             |  7 +++++++
 .../forgetracker/templates/tracker/admin_fields.html | 12 ++++++++++++
 .../forgetracker/templates/tracker/milestones.html   | 10 ++++++++++
 .../forgetracker/tests/functional/test_root.py       | 15 +++++++++++++++
 ForgeTracker/forgetracker/tracker_main.py            |  6 ++++--
 .../forgetracker/widgets/admin_custom_fields.py      |  5 +++++
 ForgeTracker/forgetracker/widgets/ticket_form.py     |  1 +
 7 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea651215/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 7cd82e2..58e3cc9 100644
--- a/Allura/allura/lib/widgets/form_fields.py
+++ b/Allura/allura/lib/widgets/form_fields.py
@@ -217,6 +217,13 @@ class AttachmentAdd(ew_core.Widget):
 class SubmitButton(ew.SubmitButton):
     attrs={'class':'ui-state-default ui-button ui-button-text'}
 
+
+class Radio(ew.InputField):
+    defaults=dict(
+        ew.InputField.defaults,
+        field_type='radio')
+
+
 class AutoResizeTextarea(ew.TextArea):
     defaults=dict(
         ew.TextArea.defaults,

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea651215/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/admin_fields.html b/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
index 7d6c343..ead5778 100644
--- a/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
+++ b/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
@@ -58,3 +58,15 @@
     }
   </style>
 {% endblock %}
+
+{% block extra_js %}
+<script type="text/javascript">
+    $(document).ready(function () {
+        $("input[value='on'][type='radio']").attr("checked", true);
+        $(":radio").click(function(){
+            $(":radio").attr("checked", false);
+            $(this).attr("checked", true);
+        });
+    });
+</script>
+{% endblock %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea651215/ForgeTracker/forgetracker/templates/tracker/milestones.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/milestones.html b/ForgeTracker/forgetracker/templates/tracker/milestones.html
index 7e4a670..d28228d 100644
--- a/ForgeTracker/forgetracker/templates/tracker/milestones.html
+++ b/ForgeTracker/forgetracker/templates/tracker/milestones.html
@@ -30,6 +30,7 @@
   <table>
     <thead>
       <tr>
+        <th>Default</th>
         <th>Name</th>
         <th>Summary</th>
         <th>Status</th>
@@ -41,6 +42,7 @@
     <tbody>
       {% for m in milestones %}
       <tr class="{{loop.index0%2 and 'even' or ''}}">
+        <td><input type="radio" name="milestones-{{loop.index0}}.default" disabled="disabled" {%if m.default %} checked {%endif%}>
         <td class="view">
           <input type="hidden" name="milestones-{{loop.index0}}.old_name" value="{{m.name}}">
           <strong><a href="{{c.app.url}}milestone/{{h.urlquote(m.name)}}/">{{m.name}}</a></strong></td>
@@ -128,15 +130,21 @@
         $('td.edit', $row).show();
         $save_controls.show();
         $add_button.hide();
+        $(':radio').prop('disabled', false);
         $(this).css({opacity: 0.5});
         return false;
       });
+      $(':radio').click(function(){
+          $('input:radio').attr("checked", false);
+          $(this).attr("checked", true);
+      });
       $('a.cancel_edit').click(function(){
         $('td.view', $form).show();
         $('td.edit', $form).hide();
         $save_controls.hide();
         $add_button.show();
         $new_row.hide();
+        $(':radio').prop('disabled', true);
         $('input', $new_row).val('');
         $('a.edit_milestone').css({opacity: 1});
         return false;
@@ -154,3 +162,5 @@
   }
 </style>
 {% endblock %}
+
+

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea651215/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 d97fadb..26791bb 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -187,6 +187,21 @@ class TestMilestones(TrackerTestController):
         assert 'error' in self.webflash(r)
         assert app.globals.milestone_fields[0]['milestones'][1]['name'] == '2.0'
 
+    def test_default_milestone(self):
+        self.new_ticket(summary='bar', _milestone='1.0', status='closed')
+        d = {
+            'field_name':'_milestone',
+            'milestones-0.old_name':'2.0',
+            'milestones-0.new_name':'2.0',
+            'milestones-0.description':'',
+            'milestones-0.complete':'Open',
+            'milestones-0.default':'on',
+            'milestones-0.due_date':''
+        }
+        self.app.post('/bugs/update_milestones', d)
+        r = self.app.get('/bugs/new/')
+        assert '<option selected value="2.0">2.0</option>' in r
+
 
 def post_install_create_ticket_permission(app):
     """Set to authenticated permission to create tickets but not update"""

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea651215/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 71452f2..71f7d64 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -391,8 +391,8 @@ class ForgeTrackerApp(Application):
                     label='Milestone',
                     type='milestone',
                     milestones=[
-                        dict(name='1.0', complete=False, due_date=None),
-                        dict(name='2.0', complete=False, due_date=None)]) ])
+                        dict(name='1.0', complete=False, due_date=None, default=True),
+                        dict(name='2.0', complete=False, due_date=None, default=False)]) ])
         self.globals.update_bin_counts()
         # create default search bins
         TM.Bin(summary='Open Tickets', terms=self.globals.not_closed_query,
@@ -454,6 +454,7 @@ class ForgeTrackerApp(Application):
                         due_date=m.get('due_date'),
                         description=m.get('description'),
                         complete=m.get('complete'),
+                        default=m.get('default'),
                         total=d['hits'],
                         closed=d['closed']))
         return milestones
@@ -681,6 +682,7 @@ class RootController(BaseController, FeedController):
                                 m.description = new['description']
                                 m.due_date = new['due_date']
                                 m.complete = new['complete'] == 'Closed'
+                                m.default = new.get('default', False)
                                 if new['old_name'] != m.name:
                                     q = '%s:"%s"' % (fld.name, new['old_name'])
                                     # search_artifact() limits results to 10

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea651215/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/admin_custom_fields.py b/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
index 59b07b7..505bde8 100644
--- a/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
+++ b/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
@@ -36,6 +36,11 @@ class MilestonesAdmin(ffw.SortableTable):
         repetitions=0)
     fields = [
         ew.HiddenField(name='old_name'),
+
+        ffw.Radio(
+            name='default',
+            label='Default'),
+
         ew.Checkbox(name='complete', show_label=True, suppress_label=True),
         ew.TextField(name='name',
         attrs={'style':'width: 80px'}),

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ea651215/ForgeTracker/forgetracker/widgets/ticket_form.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_form.py b/ForgeTracker/forgetracker/widgets/ticket_form.py
index 5f0a6fb..2bdf61b 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_form.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_form.py
@@ -173,6 +173,7 @@ class TicketCustomField(object):
             options.append(ew.Option(
                 label=m.name,
                 py_value=m.name,
+                selected=getattr(m, 'default', False),
                 complete=bool(m.complete)))
 
         ssf = MilestoneField(