better tolerate missing enacted/updated fields
[plstackapi.git] / planetstack / core / xoslib / templates / xosAdmin.html
index 9a0e0f5..4862cea 100644 (file)
     </tr>
 </script>
 
+<script type="text/template" id="xos-backend-status-icon-template">
+    <% if (! ("enacted" in arguments) ) { %>
+        <!-- enacted is undefined; this must be a new object -->
+    <% } else if ((enacted) && (enacted >= updated)) { %>
+        <span style="min-width:16px;"><img src="/static/admin/img/icon_success.gif"></span>
+    <% } else { %>
+        <% if ((backend_status == "Provisioning in progress") || (!backend_status)) { %>
+            <span style="min-width:16px;" title="<%= _.escape(backend_status) %>"><img src="/static/admin/img/icon_clock.gif"></span>
+        <% } else { %>
+            <span style="min-width:16px;" title="<%= _.escape(backend_status) %>"><img src="/static/admin/img/icon_error.gif"></span>
+        <% } %>
+    <% } %>
+</script>
+
+<script type="text/template" id="xos-backend-status-text-template">
+    <%= xosBackendStatusIconTemplate.apply(this,arguments) %>
+    <% if (model.enacted === undefined) { %>
+        <!-- enacted is undefined; this must be a new object -->
+    <% } else if ((enacted) && (enacted >= updated)) { %>
+        Successfully enacted
+    <% } else { %>
+        <%= _.escape(backend_status) %>
+    <% } %>
+</script>
+
 <script type="text/template" id="xos-list-header-template">
     <button class="btn js-submit btn-xos-list btn-xos-add">Add</button>
     <button class="btn js-submit btn-xos-list btn-xos-refresh">Refresh</button>
   <h3 class="xos-detail-title">Add Object: <%= modelName %></h3>
   <form>
   <table>\r
+  <% args = arguments; %>\r
   <% _.each(addFields, function(fieldName) { %>\r
      <tr><td><%= fieldNameToHumanReadable(fieldName) %>:</td>\r
         <% readOnly = $.inArray(fieldName, model.readOnlyFields)>=0 ? " readonly" : "";  %>\r
             <td><%= idToSelect(fieldName, model.attributes[fieldName], foreignFields[fieldName], "humanReadableName", readOnly) %></td>\r
         <% } else if (inputType[fieldName] == "checkbox") { %>\r
             <td><input type="checkbox" name="<%= fieldName %>" <% if (model.attributes[fieldName]) print("checked"); %><%= readOnly %>></td>\r
+        <% } else if (fieldName=="backend_status") { %>\r
+            <td><%= xosBackendStatusTextTemplate.apply(this, args) %></td>\r
         <% } else { %>\r
             <td><input type="text" name="<%= fieldName %>" value="<%= model.attributes[fieldName] %>"<%= readOnly %>></td>\r
         <% } %>\r
   <h3 class="xos-detail-title">Edit Object: <%= modelName %></h3>
   <form>
   <table>\r
-  <% console.log(model); _.each(detailFields, function(fieldName) { %>\r
+  <% args = arguments; %>\r
+  <% _.each(detailFields, function(fieldName) { %>\r
      <tr><td><%= fieldNameToHumanReadable(fieldName) %>:</td>\r
         <% readOnly = $.inArray(fieldName, model.readOnlyFields)>=0 ? " readonly" : "";  console.log(fieldName + " " + readOnly); console.log(model.readOnlyFields); %>\r
         <% if (fieldName in foreignFields) { %>\r
             <td><%= idToSelect(fieldName, model.attributes[fieldName], foreignFields[fieldName], "humanReadableName", readOnly) %></td>\r
         <% } else if (inputType[fieldName] == "checkbox") { %>\r
             <td><input type="checkbox" name="<%= fieldName %>" <% if (model.attributes[fieldName]) print("checked"); %><%= readOnly %>></td>\r
+        <% } else if (inputType[fieldName] == "picker") { %>\r
+            <% lookupFunc = makeIdToName(model.m2mFields[fieldName], "humanReadableName"); %>\r
+            <td><%= xosPickerTemplate({pickedItems: model.attributes[fieldName], unpickedItems: model.getChoices(fieldName,true), id: "picker_" + fieldName, fieldName: fieldName, detailView: detailView, lookupFunc: lookupFunc}) %></td>\r
+        <% } else if (fieldName=="backend_status") { %>\r
+            <td><%= xosBackendStatusTextTemplate.apply(this, args) %></td>\r
         <% } else { %>\r
             <td><input type="text" name="<%= fieldName %>" value="<%= model.attributes[fieldName] %>"<%= readOnly %>></td>\r
         <% } %>\r
   </div>
 </script>
 
+
+<script type="text/template" id="xos-picker-template">
+    <!-- arguments: unpickedItems, pickedItems -->
+    <div id="<%= id %>">
+    <div class="picker_row">
+    <div class="picker_column">\r
+    <div>Available</div>\r
+    <select name="pickerfrom" class="select-picker-from" multiple size="5">\r
+        <% _.each(unpickedItems, function(item) { %>\r
+           <option value="<%= item %>"><%= lookupFunc? lookupFunc(item) : item %></option>
+        <% });%>\r
+    </select>\r
+    </div>\r
+    <div class="picker_column">\r
+    <br>\r
+    <div class="btn btn-success btn-picker-add">Add &raquo;</div><br><br>\r
+    <div class="btn btn-success btn-picker-remove">&laquo; Remove</div>\r
+    </div>\r
+    <div class="picker_column">\r
+    <div>Selected</div>\r
+    <select name=<%= fieldName %> class="select-picker-to syphonall" multiple size="5">\r
+        <% _.each(pickedItems, function(item) { %>\r
+           <option value="<%= item %>"><%= lookupFunc ? lookupFunc(item) : item %></option>
+        <% }); %>\r
+    </select>\r
+    </div>\r
+    <div class="picker_column">\r
+    <br>\r
+    <div class="btn btn-success btn-picker-up">Up</div><br><br>\r
+    <div class="btn btn-success btn-picker-down">Down</div>\r
+    </div>\r
+    </div>
+    </div>
+    <% detailView.viewInitializers.push( function() { init_picker("#" + id); } ); %>
+</script>
+
 <script>
 xosInlineDetailButtonsTemplate = _.template($("#xos-inline-detail-buttons-template").html());
 xosListHeaderTemplate = _.template($("#xos-list-header-template").html());
 xosListFooterTemplate = _.template($("#xos-list-footer-template").html());
 xosDeleteButtonTemplate = _.template($("#xos-delete-button-template").html());
 xosDetailLinkTemplate = _.template($("#xos-detail-link-template").html());
+xosBackendStatusIconTemplate = _.template($("#xos-backend-status-icon-template").html());
+xosBackendStatusTextTemplate = _.template($("#xos-backend-status-text-template").html());
+xosPickerTemplate = _.template($("#xos-picker-template").html());
 </script>