Browse Source

HUE-1587 [jobsub] Edit design by its id and not index

Abraham Elmahrek 12 years ago
parent
commit
09f743b

+ 10 - 10
apps/jobsub/src/jobsub/templates/designs.mako

@@ -180,11 +180,11 @@ ${ commonheader(None, "jobsub", user) | n,unicode }
     <td data-row-selector-exclude="true" data-bind="click: function(data, event) {$root.toggleSelect.call($root, $index());}" class="center" style="cursor: default">
       <div class="hueCheckbox savedCheck" data-row-selector-exclude="true" data-bind="css: {'hueCheckbox': name != '..', 'icon-ok': $parent.selected()}"></div>
     </td>
-    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + $index() }, text: name"></td>
-    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + $index() }, text: description"></td>
-    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + $index() }, text: owner"></td>
-    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + $index() }, text: node_type"></td>
-    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + $index() }">
+    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + id() }, text: name"></td>
+    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + id() }, text: description"></td>
+    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + id() }, text: owner"></td>
+    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + id() }, text: node_type"></td>
+    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + id() }">
       <!-- ko if: is_shared -->
         <span class="label label-info">shared</span>
       <!-- /ko -->
@@ -192,7 +192,7 @@ ${ commonheader(None, "jobsub", user) | n,unicode }
         <span class="label label-info">personal</span>
       <!-- /ko -->
     </td>
-    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + $index() }, text: new Date(last_modified() * 1000).format('%B %d, %Y %I:%M %p'), attr: { 'data-sort-value': last_modified() }"></td>
+    <td data-bind="click: function(data, event) { window.location = '#edit-design/' + id() }, text: new Date(last_modified() * 1000).format('%B %d, %Y %I:%M %p'), attr: { 'data-sort-value': last_modified() }"></td>
     <td data-bind="text: is_trashed"></td>
   </tr>
 </script>
@@ -834,14 +834,14 @@ var setupRoutes = (function() {
           templates.getActionTemplate(node_type, context);
           designs.newDesign(node_type);
         },
-        'edit-design/:index': function(index) {
+        'edit-design/:design_id': function(design_id) {
           /**
            * Update context with correct title.
            * Design is selected through 'list-designs'.
            */
           designs.closeDesign();
 
-          var designObject = designs.designs()[index];
+          var designObject = designs.getDesignObjectById(design_id);
           if (!designObject) {
             routie('list-designs');
             return;
@@ -867,7 +867,7 @@ var setupRoutes = (function() {
           var context = $.extend(true, {}, global_action_context, contexts[node_type]);
           templates.getActionTemplate(node_type, context);
           designs.deselectAll();
-          designs.select(index);
+          designObject.selected(true);
           designs.editDesign();
         },
         'trashed-designs': function() {
@@ -905,7 +905,7 @@ $(document).ready(function(e) {
     );
   });
   $('body').on('click', '#edit-design', function() {
-    routie('edit-design/' + designs.selectedIndex());
+    routie('edit-design/' + designs.selectedDesign().id());
   });
   $('body').on('click', '#trash-designs', function() {
     $('#trashWf').modal('show');

+ 8 - 1
apps/jobsub/static/js/jobsub.ko.js

@@ -403,7 +403,7 @@ var Designs = (function($, ko, NodeModelChooser) {
       var self = this;
       self.designs()[index].selected(!self.designs()[index].selected());
     },
-    select: function(index) {
+    selectByIndex: function(index) {
       var self = this;
       self.designs()[index].selected(true);
     },
@@ -427,6 +427,13 @@ var Designs = (function($, ko, NodeModelChooser) {
         value.selected(false);
       });
     },
+    getDesignObjectById: function(id) {
+      var self = this;
+      var designObjects = ko.utils.arrayFilter(self.designs(), function(value) {
+        return value.design().id() == id;
+      });
+      return (designObjects.length > 0) ? designObjects[0] : null;
+    },
 
     //// Design delegation
     newDesign: function(node_type) {

+ 1 - 1
apps/jobsub/static/templates/designs.html

@@ -15,7 +15,7 @@
       <td data-row-selector-exclude="true">
         <div class="hueCheckbox savedCheck" data-row-selector-exclude="true"></div>
       </td>
-      <td><a href="javascript:void(0);" data-row-selector="true" data-bind="text: name, click: function(data, event) {$root.select.call($root, $index()); $root.showDesign.call($root, data, event);}"></a></td>
+      <td><a href="javascript:void(0);" data-row-selector="true" data-bind="text: name, click: function(data, event) {$root.selectByIndex.call($root, $index()); $root.showDesign.call($root, data, event);}"></a></td>
       <td data-bind="text: description"></td>
       <td data-bind="text: owner"></td>
       <td data-bind="text: type"></td>