Validate Requests: spinner while validating
authorLoic Baron <loic.baron@lip6.fr>
Thu, 23 Apr 2015 16:58:06 +0000 (18:58 +0200)
committerLoic Baron <loic.baron@lip6.fr>
Thu, 23 Apr 2015 16:58:06 +0000 (18:58 +0200)
portal/static/js/requests.js [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_institution.html
portal/templates/management-tab-requests.html

diff --git a/portal/static/js/requests.js b/portal/static/js/requests.js
new file mode 100644 (file)
index 0000000..09535a7
--- /dev/null
@@ -0,0 +1,105 @@
+function unspin_all_status(){
+    $('.portal__validate__checkbox').each(function (index) {
+        if(this.checked){
+            t_id = this.id.split('__');
+            status_id = t_id[t_id.length-2]+'__'+t_id[t_id.length-1]+'-status-loading';
+            $('#'+status_id).css('display','none');    
+        }
+    });
+}
+function spin_all_status(){
+    $('.portal__validate__checkbox').each(function (index) {
+        if(this.checked){
+            t_id = this.id.split('__');
+            status_id = t_id[t_id.length-2]+'__'+t_id[t_id.length-1]+'-status-loading';
+            $('#'+status_id).css('display','inline');
+        }
+    });
+}
+       $(document).ready(function() {
+               $("li#nav-request").addClass("active");
+               $('table.requests').dataTable({
+                   "sDom": "frtiS",
+            "bScrollCollapse": true,
+            "bStateSave": true,
+            "bPaginate": false,
+            "bLengthChange": false,
+            "bFilter": false,
+            "bSort": true,
+            "bInfo": false,
+            "bAutoWidth": true,
+            "bAutoHeight": false,
+               });
+       });
+       function on_click_event() {
+               var ids = []; 
+               $('.portal__validate__checkbox').each(function(i, el) {
+                       if ($(el).prop('checked')) {
+                               // portal__validate__checkbox__slice__2
+                               var id_array = $(el).attr('id').split('__');
+                               // push(slice__2)
+                               ids.push(id_array[3] + '__' + id_array[4]);
+                       }
+               });
+               if (ids.length > 0) {
+            spin_all_status();
+                       var id_str = ids.join('/');
+
+                       // XXX spinner
+                       $.getJSON('/portal/validate_action/' + id_str, function(status) {
+                               $.each(status, function(request_type__id, request_status) {
+                                       // request_status: NAME -> dict (status, description)
+                                       var status_str = '';
+                                       $.each(request_status, function(name, result) {
+                                               if (status_str != '')
+                                                       status_str += ' -- ';
+
+                                               if (result.status) {
+                                                       status_str += '<font color="green">OK</font>';
+                                                       $('#portal__validate__checkbox__' + request_type__id).hide();
+                                               } else {
+                                                       status_str += '<font color="red">ERROR: ' + result.description + '</font>';
+                                               }
+                                       });
+                                       $('#portal__status__' + request_type__id).html(status_str);
+                               });
+                unspin_all_status();
+                       });
+               }
+       }
+       function on_click_reject() {
+               var ids = []; 
+               $('.portal__validate__checkbox').each(function(i, el) {
+                       if ($(el).prop('checked')) {
+                               // portal__validate__checkbox__slice__2
+                               var id_array = $(el).attr('id').split('__');
+                               // push(slice__2)
+                               ids.push(id_array[3] + '__' + id_array[4]);
+                       }
+               });
+               if (ids.length > 0) {
+            spin_all_status();
+                       var id_str = ids.join('/');
+
+                       // XXX spinner
+                       $.getJSON('/portal/reject_action/' + id_str, function(status) {
+                               $.each(status, function(request_type__id, request_status) {
+                                       // request_status: NAME -> dict (status, description)
+                                       var status_str = '';
+                                       $.each(request_status, function(name, result) {
+                                               if (status_str != '')
+                                                       status_str += ' -- ';
+
+                                               if (result.status) {
+                                                       status_str += '<font color="green">Rejected</font>';
+                                                       $('#portal__validate__checkbox__' + request_type__id).hide();
+                                               } else {
+                                                       status_str += '<font color="red">ERROR: ' + result.description + '</font>';
+                                               }
+                                       });
+                                       $('#portal__status__' + request_type__id).html(status_str);
+                               });
+                unspin_all_status();
+                       });
+               }
+       }
index f9a272e..facc118 100644 (file)
@@ -2,6 +2,7 @@
 
 {% block head %} 
 <script type="text/javascript" src="{{STATIC_URL}}/js/institution.js"></script>
+<script type="text/javascript" src="{{STATIC_URL}}js/requests.js"></script>
 {% endblock head %}
 
 {% block content %}
index 0b9b8f8..eea4846 100644 (file)
@@ -1,100 +1,3 @@
-
-<script type="text/javascript">
-       $(document).ready(function() {
-               $("li#nav-request").addClass("active");
-               $('table.requests').dataTable({
-                   "sDom": "frtiS",
-            "bScrollCollapse": true,
-            "bStateSave": true,
-            "bPaginate": false,
-            "bLengthChange": false,
-            "bFilter": false,
-            "bSort": true,
-            "bInfo": false,
-            "bAutoWidth": true,
-            "bAutoHeight": false,
-               });
-       });
-       function on_click_event() {
-               var ids = []; 
-               $('.portal__validate__checkbox').each(function(i, el) {
-                       if ($(el).prop('checked')) {
-                               // portal__validate__checkbox__slice__2
-                               var id_array = $(el).attr('id').split('__');
-                               // push(slice__2)
-                               ids.push(id_array[3] + '__' + id_array[4]);
-                       }
-               });
-               if (ids.length > 0) {
-                       var id_str = ids.join('/');
-
-                       // XXX spinner
-
-                       $.getJSON('/portal/validate_action/' + id_str,
-                               function(status) {
-                                       $.each(status, function(request_type__id, request_status) {
-                                               // request_status: NAME -> dict (status, description)
-                                               var status_str = '';
-                                               $.each(request_status, function(name, result) {
-                                                       if (status_str != '')
-                                                               status_str += ' -- ';
-
-                                                       if (result.status) {
-                                                               status_str += '<font color="green">OK</font>';
-                                                               $('#portal__validate__checkbox__' + request_type__id).hide();
-                                                       } else {
-                                                               status_str += '<font color="red">ERROR: ' + result.description + '</font>';
-                                                       }
-                                               });
-                                               $('#portal__status__' + request_type__id).html(status_str);
-
-
-                                       });
-                               }
-                       );
-               }
-       }
-       function on_click_reject() {
-               var ids = []; 
-               $('.portal__validate__checkbox').each(function(i, el) {
-                       if ($(el).prop('checked')) {
-                               // portal__validate__checkbox__slice__2
-                               var id_array = $(el).attr('id').split('__');
-                               // push(slice__2)
-                               ids.push(id_array[3] + '__' + id_array[4]);
-                       }
-               });
-               if (ids.length > 0) {
-                       var id_str = ids.join('/');
-
-                       // XXX spinner
-
-                       $.getJSON('/portal/reject_action/' + id_str,
-                               function(status) {
-                                       $.each(status, function(request_type__id, request_status) {
-                                               // request_status: NAME -> dict (status, description)
-                                               var status_str = '';
-                                               $.each(request_status, function(name, result) {
-                                                       if (status_str != '')
-                                                               status_str += ' -- ';
-
-                                                       if (result.status) {
-                                                               status_str += '<font color="green">Rejected</font>';
-                                                               $('#portal__validate__checkbox__' + request_type__id).hide();
-                                                       } else {
-                                                               status_str += '<font color="red">ERROR: ' + result.description + '</font>';
-                                                       }
-                                               });
-                                               $('#portal__status__' + request_type__id).html(status_str);
-
-
-                                       });
-                               }
-                       );
-               }
-       }
-</script>
-
 <div class="container-fluid">
 <div class="col-md-12">
        <h2>From your authorities</h2>
                </td>
                <td>{{ request.timestamp }}</td>
                
-               <td><span id='portal__status__{{request.type}}__{{request.id}}'></span></td>
+               <td>
+            <span id='portal__status__{{request.type}}__{{request.id}}'></span>
+            <div id='{{request.type}}__{{request.id}}-status-loading' style="display:none;"><img src="{{ STATIC_URL }}img/loading.gif"></div>
+            </td>
     
         <!--<div class='portal_validate_request {{request.type}} {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}'> -->
          </tr>
        </div>
 {% endif %}
 </div>
-
-{% if sub_authorities %}
-<br />
-<div class="col-md-12">
-       <h2>From your sub-authorities</h2>
-</div>
-
-       {% for authority, requests in sub_authorities.items %}
-       <div class="col-md-12">
-       <h3>{{authority}}</h3>
-           <table class="table">
-             <th>
-               <td>Type</td>
-               <td>Id</td>
-               <td>Details</td>
-               <td>Timestamp</td>
-               <td>Status</td>
-             </th>
-           {% for request in requests %}
-                 <tr>
-                       <td>
-                       {% if request.allowed == 'allowed' %}
-                       <input class='portal__validate__checkbox' id='portal__validate__checkbox__{{request.type}}__{{request.id}}' type='checkbox'/>
-                       {% else %}
-                               {% if request.allowed == 'expired' %}
-                                       expired
-                               {% else %} {# denied #}
-                                       denied
-                               {% endif %}
-                       {% endif %}
-                       </td>
-                       <td>{{ request.type }}</td>
-                       <td>{{ request.id }}</td>
-                       <td>
-               {% if request.type == 'user' %}
-               Login: {{request.login}} -- First name: {{request.first_name}} -- Last name: {{request.last_name}} -- Email: {{request.email}}
-               {% else %}
-                   {% if request.type == 'slice' %}
-               Slice name: {{request.slice_name}} -- Number of nodes: {{request.number_of_nodes}} -- Type of nodes: {{request.type_of_nodes}} -- Purpose: {{request.purpose}}
-                  {% elif request.type == 'project' %}
-            <b>{{request.project_name}}</b>  -- {{ request.user_hrn }} -- Purpose: {{request.purpose}}
-                  {% elif request.type == 'join' %}
-            <b>{{request.user_hrn}}</b> --  to join {{ request.authority_hrn }}
-                   {% else %} {# authority #}
-               Authority name: {{request.site_name}} -- authority_hrn: {{request.site_authority}} -- City: {{request.address_city}} -- Country: {{request.address_country}}
-                   {% endif %}
-               {% endif %}
-                       </td>
-                       <td>{{ request.timestamp }}</td>
-                       
-                       <td><span id='portal__status__{{request.type}}__{{request.id}}'></span></td>
-       
-           <!--<div class='portal_validate_request {{request.type}} {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}'> -->
-                 </tr>
-           {% endfor %}
-           </table>
-       </div>
-       {% endfor %}
-{% endif %}
-{% if delegation_authorities %}
-<br />
-<div class="col-md-12">
-       <h2>From your authorities with delegation</h2>
-</div>
-
-       {% for authority, requests in delegation_authorities.items %}
-       <div class="col-md-12">
-               <h3>{{authority}}</h3>
-                   <table class="table">
-                     <th>
-                       <td>Type</td>
-                       <td>Id</td>
-                       <td>Details</td>
-                       <td>Timestamp</td>
-                       <td>Status</td>
-                     </th>
-                   {% for request in requests %}
-                         <tr>
-                               <td>
-                               {% if request.allowed == 'allowed' %}
-                               <input class='portal__validate__checkbox' id='portal__validate__checkbox__{{request.type}}__{{request.id}}' type='checkbox'/>
-                               {% else %}
-                                       {% if request.allowed == 'expired' %}
-                                               expired
-                                       {% else %} {# denied #}
-                                               denied
-                                       {% endif %}
-                               {% endif %}
-                               </td>
-                               <td>{{ request.type }}</td>
-                               <td>{{ request.id }}</td>
-                               <td>
-                       {% if request.type == 'user' %}
-                       Login: {{request.login}} -- First name: {{request.first_name}} -- Last name: {{request.last_name}} -- Email: {{request.email}}
-                       {% else %}
-                           {% if request.type == 'slice' %}
-                       Slice name: {{request.slice_name}} -- Number of nodes: {{request.number_of_nodes}} -- Type of nodes: {{request.type_of_nodes}} -- Purpose: {{request.purpose}}
-                           {% elif request.type == 'project' %}
-                    <b>{{request.project_name}}</b>  -- {{ request.user_hrn }} -- Purpose: {{request.purpose}}
-                           {% else %} {# authority #}
-                       Authority name: {{request.site_name}} -- authority_hrn: {{request.site_authority}} -- City: {{request.address_city}} -- Country: {{request.address_country}}
-                           {% endif %}
-                      {% endif %}
-                               </td>
-                               <td>{{ request.timestamp }}</td>
-                               
-                               <td><span id='portal__status__{{request.type}}__{{request.id}}'></span></td>
-               
-                   <!--<div class='portal_validate_request {{request.type}} {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}'> -->
-                         </tr>
-                   {% endfor %}
-                   </table>
-               </div>
-               {% endfor %}
-{% endif %}
 <br />
 <div class="col-md-12">
        <button class="btn btn-onelab" type="button" id="portal__validate" onclick="on_click_event();"><span class="glyphicon glyphicon-ok"></span> Validate</button>