Procházet zdrojové kódy

Closes #3090: Filter field for interface

Saria Hajjar před 6 roky
rodič
revize
e1d1f522ff

+ 6 - 0
docs/release-notes/version-2.6.md

@@ -1,3 +1,9 @@
+# v2.6.12 (FUTURE)
+
+## Enhancements
+
+* [#3090](https://github.com/netbox-community/netbox/issues/3090) - Add filter field for device interfaces
+
 # v2.6.11 (2020-01-03)
 # v2.6.11 (2020-01-03)
 
 
 ## Bug Fixes
 ## Bug Fixes

+ 19 - 0
netbox/templates/dcim/device.html

@@ -556,6 +556,9 @@
                                 <span class="glyphicon glyphicon-check" aria-hidden="true"></span> Show IPs
                                 <span class="glyphicon glyphicon-check" aria-hidden="true"></span> Show IPs
                             </button>
                             </button>
                         </div>
                         </div>
+                        <div class="col-md-2 pull-right noprint">
+                            <input class="form-control interface-filter" type="text" placeholder="Filter (RegExp)" style="height: 24px" />
+                        </div>
                     </div>
                     </div>
                     <table id="interfaces_table" class="table table-hover table-headings panel-body component-list">
                     <table id="interfaces_table" class="table table-hover table-headings panel-body component-list">
                         <thead>
                         <thead>
@@ -912,6 +915,22 @@ $('button.toggle-ips').click(function() {
     $(this).children('span').toggleClass('glyphicon-check glyphicon-unchecked');
     $(this).children('span').toggleClass('glyphicon-check glyphicon-unchecked');
     return false;
     return false;
 });
 });
+$('input.interface-filter').on('input', function() {
+    var filter = new RegExp(this.value);
+
+    for (interface of $(this).closest('form').find('tbody > tr')) {
+        // Slice off 'interface_' at the start of the ID
+        if (filter && filter.test(interface.id.slice(10))) {
+            // Match the toggle in case the filter now matches the interface
+            $(interface).find('input:checkbox[name=pk]').prop('checked', $('input.toggle').prop('checked'));
+            $(interface).show();
+        } else {
+            // Uncheck to prevent actions from including it when it doesn't match
+            $(interface).find('input:checkbox[name=pk]').prop('checked', false);
+            $(interface).hide();
+        }
+    }
+});
 </script>
 </script>
 <script src="{% static 'js/graphs.js' %}?v{{ settings.VERSION }}"></script>
 <script src="{% static 'js/graphs.js' %}?v{{ settings.VERSION }}"></script>
 <script src="{% static 'js/secrets.js' %}?v{{ settings.VERSION }}"></script>
 <script src="{% static 'js/secrets.js' %}?v{{ settings.VERSION }}"></script>

+ 19 - 0
netbox/templates/virtualization/virtualmachine.html

@@ -253,6 +253,9 @@
                         <span class="glyphicon glyphicon-check" aria-hidden="true"></span> Show IPs
                         <span class="glyphicon glyphicon-check" aria-hidden="true"></span> Show IPs
                     </button>
                     </button>
                 </div>
                 </div>
+                <div class="col-md-2 pull-right noprint">
+                    <input class="form-control interface-filter" type="text" placeholder="Filter (RegExp)" style="height: 24px" />
+                </div>
             </div>
             </div>
             <table id="interfaces_table" class="table table-hover table-headings panel-body component-list">
             <table id="interfaces_table" class="table table-hover table-headings panel-body component-list">
                 <thead>
                 <thead>
@@ -325,5 +328,21 @@ $('button.toggle-ips').click(function() {
     $(this).children('span').toggleClass('glyphicon-check glyphicon-unchecked');
     $(this).children('span').toggleClass('glyphicon-check glyphicon-unchecked');
     return false;
     return false;
 });
 });
+$('input.interface-filter').on('input', function() {
+    var filter = new RegExp(this.value);
+
+    for (interface of $(this).closest('form').find('tbody > tr')) {
+        // Slice off 'interface_' at the start of the ID
+        if (filter && filter.test(interface.id.slice(10))) {
+            // Match the toggle in case the filter now matches the interface
+            $(interface).find('input:checkbox[name=pk]').prop('checked', $('input.toggle').prop('checked'));
+            $(interface).show();
+        } else {
+            // Uncheck to prevent actions from including it when it doesn't match
+            $(interface).find('input:checkbox[name=pk]').prop('checked', false);
+            $(interface).hide();
+        }
+    }
+});
 </script>
 </script>
 {% endblock %}
 {% endblock %}