automatic reload on lists; new django decorator for ajax request
Change-Id: I3eb41de76217191268acb6053ad0c04aec0e8388
Signed-off-by: lombardofr <lombardo@everyup.it>
diff --git a/projecthandler/middleware.py b/projecthandler/middleware.py
index 4880ebe..89ae94d 100644
--- a/projecthandler/middleware.py
+++ b/projecthandler/middleware.py
@@ -1,6 +1,4 @@
class OsmProjectMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
- print "OsmProjectMiddleware", view_func, view_args, view_kwargs
-
return None
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/osm_project_descriptors.html b/projecthandler/template/project/osm/osm_project_descriptors.html
index f877ea8..182c8cc 100644
--- a/projecthandler/template/project/osm/osm_project_descriptors.html
+++ b/projecthandler/template/project/osm/osm_project_descriptors.html
@@ -48,11 +48,104 @@
<script>
var csrf_token = '{{csrf_token}}';
var descr_list_url = '{% url "projects:list_descriptors" descriptor_type=descriptor_type%}';
- var new_desc_url ="{% url 'projects:new_descriptor' descriptor_type=descriptor_type %}"
+ var vim_list_url = '{% url "vims:list" %}';
+ var new_desc_url ="{% url 'projects:new_descriptor' descriptor_type=descriptor_type %}";
+ var descriptor_type = '{{ descriptor_type }}';
+ var project_id = '{{ project_id }}';
$(document).ready( function () {
- $('#descriptors_table').DataTable();
- } );
+ var table = $('#descriptors_table').DataTable({
+ responsive: true,
+ "ajax": {
+ "url": "/projects/descriptors/" +descriptor_type+"/list",
+ "dataSrc": function (json) {
+ return json['descriptors'];
+ },
+ statusCode: {
+ 401: function () {
+ console.log("no auth");
+ moveToLogin(window.location.pathname);
+ }
+ },
+ "error": function (hxr, error, thrown) {
+ console.log(hxr)
+ console.log(thrown)
+ console.log(error);
+ }
+ },
+ "columns": [
+ {
+ "render": function (data, type, row) {
+ return row['short-name'];
+ },
+ "targets": 0
+ },
+ {
+ "render": function (data, type, row) {
+ return row['_id'];
+ },
+ "targets": 1
+ },
+ {
+ "render": function (data, type, row) {
+ return row['description'] || '';
+ },
+ "targets": 2
+ },
+ {
+ "render": function (data, type, row) {
+ return row['vendor'] || '';
+ },
+ "targets": 3
+ },
+ {
+ "render": function (data, type, row) {
+ return row['version'] || '';
+ },
+ "targets": 4
+ },
+ {
+ "render": function (data, type, row) {
+ var result = '<div class="btn-group">\n' ;
+ if(descriptor_type == "nsd")
+ result += ' <button type="button" class="btn btn-default" data-container="body"\n' +
+ 'data-toggle="tooltip" data-placement="top" title="Instantiate NS"\n' +
+ 'onclick="javascript:openModalCreateNS({ \'project_id\':\'' + project_id +'\', \'descriptor_type\': \''+ descriptor_type +'\', \'descriptor_name\':\''+row["name"]+'\', \'descriptor_id\':\''+row["_id"]+'\',\'vim_list_url\': \''+vim_list_url+'\', \'nsd_list_url\': \''+descr_list_url+'\' })">\n' +
+ '<i class="fa fa-paper-plane"></i></button>\n';
+ result += '<button type="button" class="btn btn-default" data-container="body"\n' +
+ ' data-toggle="tooltip" data-placement="top" title="Edit"\n' +
+ ' onclick="javascript:openDescriptorView(\''+descriptor_type+'\', \''+row["_id"]+'\')">\n' +
+ ' <i class="fa fa-edit"></i></button>\n' +
+ '<button type="button" class="btn btn-default" data-container="body"\n' +
+ ' data-toggle="tooltip" data-placement="top" title="Show content"\n' +
+ ' onclick="javascript:openPackageContentList(\''+ descriptor_type +'\', \''+row["_id"]+'\')">\n' +
+ ' <i class="fa fa-folder-open"></i></button>\n' +
+ '<button type="button" class="btn btn-default" data-container="body"\n' +
+ ' data-toggle="tooltip" data-placement="top" title="Show Graph"\n' +
+ ' onclick="location.href=\'/projects/graph?type='+descriptor_type+'&id='+row["_id"] +'\'"\n' +
+ ' disabled><i class="fa fa-sitemap fa-fw"></i></button>\n' +
+ '<button type="button" class="btn btn-default" data-container="body"\n' +
+ ' data-toggle="tooltip" data-placement="top" title="Download package"\n' +
+ ' onclick="location.href=\'/projects/descriptors/'+descriptor_type+'/'+ row["_id"] +'/action/download_pkg\'">\n' +
+ ' <i class="fa fa-download fa-fw"></i></button>\n' +
+ '<button type="button" class="btn btn-default" data-container="body"\n' +
+ ' data-toggle="tooltip" data-placement="top" title="Delete"\n' +
+ ' onclick="javascript:deletePackage( \'' + descriptor_type + '\', \''+row["_id"] + '\')">\n' +
+ ' <i class="far fa-trash-alt"></i></button>\n' +
+ '</div>';
+
+ return result
+ },
+ "targets": 5
+ }]
+
+
+ });
+
+ setInterval(function () {
+ table.ajax.reload();
+ }, 10000);
+ });
</script>
<script src="/static/bower_components/select2/dist/js/select2.js"></script>
<script src="/static/src/instancehandler/instance_create.js"></script>
diff --git a/projecthandler/template/project/projectlist.html b/projecthandler/template/project/projectlist.html
index 213c5b0..a90fec8 100644
--- a/projecthandler/template/project/projectlist.html
+++ b/projecthandler/template/project/projectlist.html
@@ -52,34 +52,7 @@
</tr>
</thead>
<tbody>
- {% for p in projects %}
- <tr>
- <td>
- <a href="/projects/switch/{{ p.name }}" >{{ p.name }}</a>
- </td>
-
- <td>{{ p|get_sub:"_admin,modified"|get_date}}</td>
- <td>{{ p|get_sub:"_admin,created"|get_date}}</td>
-
- <td>
- <div class="btn-group">
- <button type="button" class="btn btn-default dropdown-toggle"
- data-toggle="dropdown" aria-expanded="false">Actions
- <span class="fa fa-caret-down"></span></button>
- <ul class="dropdown-menu">
- <li><a href="#"
- onclick="javascript:editProject('{% url 'projects:edit_project' project_id=p.name %}')">
- <i class="fa fa-edit"></i> Rename</a></li>
- <li>
- <a href="#" onclick="javascript:deleteProject('{% url 'projects:delete_project' project_id=p.name%}')" style="color:red">
- <i class="fa fa-trash" ></i> Delete</a>
- </li>
- </ul>
- </div>
- </td>
- </tr>
- {% endfor %}
</tbody>
</table>
</div>
@@ -97,21 +70,86 @@
<script src="/static/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
<script>
- $(document).ready( function () {
- $('#projects_table').DataTable();
- } );
+ $(document).ready( function () {
+ var table = $('#projects_table').DataTable({
+ responsive: true,
+ "ajax": {
+ "url": "/projects/list",
+ "dataSrc": function (json) {
+ return json['projects'];
+ },
+ statusCode: {
+ 401: function () {
+ console.log("no auth");
+ moveToLogin(window.location.pathname);
+ }
+ },
+ "error": function (hxr, error, thrown) {
+ console.log(hxr)
+ console.log(thrown)
+ console.log(error);
+ }
+
+ },
+ "columns": [
+ {
+ "render": function (data, type, row) {
+ return '<a href="/projects/switch/'+row['name']+'" >'+row['name']+'</a>'
+ },
+ "targets": 0
+ },
+ {
+ "render": function (data, type, row) {
+ return moment.unix(row["_admin"]['modified']).format('YYYY-MM-DD hh:mm:ss a');
+ },
+ "targets": 1
+ },
+ {
+ "render": function (data, type, row) {
+ return moment.unix(row["_admin"]['created']).format('YYYY-MM-DD hh:mm:ss a');
+ },
+ "targets": 2
+ },
+ {
+ "render": function (data, type, row) {
+ return '<div class="btn-group">\n' +
+ ' <button type="button" class="btn btn-default dropdown-toggle"\n' +
+ ' data-toggle="dropdown" aria-expanded="false">Actions\n' +
+ ' <span class="fa fa-caret-down"></span></button>\n' +
+ ' <ul class="dropdown-menu">\n' +
+ ' <li><a href="#"\n' +
+ ' onclick="javascript:editProject(\''+ row['name']+'\')">\n' +
+ ' <i class="fa fa-edit"></i> Rename</a></li>\n' +
+ ' <li>\n' +
+ ' <a href="#" onclick="javascript:deleteProject(\''+ row['name']+'\')" style="color:red">\n' +
+ ' <i class="fa fa-trash" ></i> Delete</a>\n' +
+ ' </li>\n' +
+ ' </ul>\n' +
+ ' </div>';
+ },
+ "targets": 3
+ }
+ ]
+ });
+
+ setInterval(function () {
+ table.ajax.reload();
+ }, 10000);
+ });
</script>
<script>
function showModalNewProject(){
$('#modal_new_project').modal('show');
}
- function editProject(url){
+ function editProject(project_id){
+ var url = "/projects/" + project_id+"/edit";
$("#formEditProject").attr("action", url);
$('#modal_edit_project').modal('show');
}
- function deleteProject(url) {
+ function deleteProject(project_id) {
+ var url = "/projects/" + project_id+"/delete";
bootbox.confirm("Are you sure want to delete?", function (result) {
if (result) {
$.ajax({
diff --git a/projecthandler/views.py b/projecthandler/views.py
index 0f4248a..06b4770 100644
--- a/projecthandler/views.py
+++ b/projecthandler/views.py
@@ -18,7 +18,7 @@
import logging
import yaml
-from django.contrib.auth.decorators import login_required
+from sf_t3d.decorators import login_required
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, redirect
@@ -64,7 +64,6 @@
},'projectlist.html')
-
def open_composer(request):
user = osmutils.get_user(request)
project_id = user.project_id