From 2b3f37aa620bcbeca78d318a68511547d6ff4f13 Mon Sep 17 00:00:00 2001 From: Mattijs Vanhaverbeke Date: Fri, 4 Mar 2022 16:33:05 +0100 Subject: [PATCH] added coor saving --- README.md | 2 +- netbox_topology_views/__init__.py | 2 +- netbox_topology_views/forms.py | 11 +++- .../static/netbox_topology_views/js/app.js | 2 +- netbox_topology_views/static_dev/js/home.js | 54 ++++++++++++++++++- package-lock.json | 2 +- package.json | 2 +- setup.py | 2 +- 8 files changed, 68 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7bcffc7..39318f1 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Support to filter on name, site, tag and device role. ## Preview -![preview image](doc/img/preview.png?raw=true "preview") +![preview image](doc/img/preview_3.1.jpeg?raw=true "preview") ## Install diff --git a/netbox_topology_views/__init__.py b/netbox_topology_views/__init__.py index cbe3693..f155796 100644 --- a/netbox_topology_views/__init__.py +++ b/netbox_topology_views/__init__.py @@ -4,7 +4,7 @@ class TopologyViewsConfig(PluginConfig): name = 'netbox_topology_views' verbose_name = 'Topology views' description = 'An plugin to render topology maps' - version = '1.0.0-alpha.6' + version = '1.0.0-alpha.7' author = 'Mattijs Vanhaverbeke' author_email = 'author@example.com' base_url = 'netbox_topology_views' diff --git a/netbox_topology_views/forms.py b/netbox_topology_views/forms.py index 988d430..cdf1025 100644 --- a/netbox_topology_views/forms.py +++ b/netbox_topology_views/forms.py @@ -4,14 +4,15 @@ from django.utils.translation import gettext as _ from extras.models import Tag from dcim.models import Device, Site, Region, DeviceRole, Location - +from django.conf import settings from utilities.forms import (TagFilterField, DynamicModelMultipleChoiceField, FilterForm) +allow_coordinates_saving = settings.PLUGINS_CONFIG["netbox_topology_views"]["allow_coordinates_saving"] class DeviceFilterForm(FilterForm): model = Device field_groups = [ - ['q', 'hide_unconnected'], + ['q', 'hide_unconnected', 'save_coords'], ['region_id', 'site_id', 'location_id'], ['device_role_id'], ['tag'], @@ -50,4 +51,10 @@ class DeviceFilterForm(FilterForm): required=False, initial=False) + save_coords = forms.BooleanField( + label=_("Save Coordinates"), + required=False, + disabled=(not allow_coordinates_saving), + initial=False) + tag = TagFilterField(model) diff --git a/netbox_topology_views/static/netbox_topology_views/js/app.js b/netbox_topology_views/static/netbox_topology_views/js/app.js index 062d479..7da7a97 100644 --- a/netbox_topology_views/static/netbox_topology_views/js/app.js +++ b/netbox_topology_views/static/netbox_topology_views/js/app.js @@ -1 +1 @@ -var graph=null,container=null;function iniPlotboxFull(){document.addEventListener("DOMContentLoaded",function(){container=document.getElementById("fullvisgraph"),startRender()},!1)}function startRender(){var e=location.search;$.ajax({type:"GET",url:"../../api/plugins/topology-views/search/search/"+e,contentType:"application/json; charset=utf-8",success:function(e,n,t){graph=null,nodes=new vis.DataSet,edges=new vis.DataSet,graph=new vis.Network(container,{nodes:nodes,edges:edges},options),$.each(e.nodes,function(e,n){nodes.add(n)}),$.each(e.edges,function(e,n){edges.add(n)}),graph.fit(),canvas=document.getElementById("fullvisgraph").getElementsByTagName("canvas")[0]}})}graph=null,container=null;var downloadButton=null,MIME_TYPE="image/png",canvas=null,csrftoken=null,nodes=new vis.DataSet,edges=new vis.DataSet,options={interaction:{hover:!0,hoverConnectedEdges:!0,multiselect:!1},nodes:{shape:"image",brokenImage:"../../static/netbox_topology_views/img/role-unknown.png",size:35,font:{multi:"md",face:"helvetica"}},edges:{length:100,width:2,font:{face:"helvetica"}},physics:{solver:"forceAtlas2Based"}},selected_regions=[],selected_sites=[];function htmlTitle(e){return(container=document.createElement("div")).innerHTML=e,container}function addEdge(e){e.title=htmlTitle(e.title),edges.add(e)}function addNode(e){e.title=htmlTitle(e.title),nodes.add(e)}function iniPlotboxIndex(){document.addEventListener("DOMContentLoaded",function(){container=document.getElementById("visgraph"),handleLoadData(),downloadButton=document.getElementById("btnDownloadImage"),btnFullView=document.getElementById("btnFullView")},!1)}function handleLoadData(){graph=null,nodes=new vis.DataSet,edges=new vis.DataSet,graph=new vis.Network(container,{nodes:nodes,edges:edges},options),topology_data.edges.forEach(addEdge),topology_data.nodes.forEach(addNode),graph.fit(),canvas=document.getElementById("visgraph").getElementsByTagName("canvas")[0],graph.on("afterDrawing",function(){var e=canvas.toDataURL(MIME_TYPE);downloadButton.href=e,downloadButton.download="topology"})} \ No newline at end of file +var graph=null,container=null,downloadButton=null,MIME_TYPE="image/png",canvas=null,csrftoken=null,nodes=new vis.DataSet,edges=new vis.DataSet,options={interaction:{hover:!0,hoverConnectedEdges:!0,multiselect:!1},nodes:{shape:"image",brokenImage:"../../static/netbox_topology_views/img/role-unknown.png",size:35,font:{multi:"md",face:"helvetica"}},edges:{length:100,width:2,font:{face:"helvetica"}},physics:{solver:"forceAtlas2Based"}},selected_regions=[],selected_sites=[],coord_save_checkbox=null;function getCookie(e){var t=null;if(document.cookie&&""!==document.cookie)for(var n=document.cookie.split(";"),o=0;o