[Kimchi-devel] [PATCH] [Wok 3/3] Added IP Address sorting plugin for Datatables.net

sguimaraes943 at gmail.com sguimaraes943 at gmail.com
Wed Aug 24 22:03:59 UTC 2016


From: Samuel Guimarães <sguimaraes943 at gmail.com>

Signed-off-by: Samuel Guimarães <sguimaraes943 at gmail.com>
---
 configure.ac                                       |   2 +
 ui/libs/datatables/js/Makefile.am                  |   2 +
 ui/libs/datatables/js/plugins/Makefile.am          |  19 ++++
 ui/libs/datatables/js/plugins/ip-address/LICENSE   |  20 ++++
 .../datatables/js/plugins/ip-address/Makefile.am   |  21 +++++
 .../datatables/js/plugins/ip-address/ip-address.js | 103 +++++++++++++++++++++
 ui/pages/wok-ui.html.tmpl                          |   1 +
 7 files changed, 168 insertions(+)
 create mode 100644 ui/libs/datatables/js/plugins/Makefile.am
 create mode 100644 ui/libs/datatables/js/plugins/ip-address/LICENSE
 create mode 100644 ui/libs/datatables/js/plugins/ip-address/Makefile.am
 create mode 100644 ui/libs/datatables/js/plugins/ip-address/ip-address.js

diff --git a/configure.ac b/configure.ac
index c7a2787..ff41c84 100644
--- a/configure.ac
+++ b/configure.ac
@@ -145,6 +145,8 @@ AC_CONFIG_FILES([
     ui/libs/moment/Makefile
     ui/libs/datatables/Makefile
     ui/libs/datatables/js/Makefile
+    ui/libs/datatables/js/plugins/Makefile
+    ui/libs/datatables/js/plugins/ip-address/Makefile
     ui/libs/datatables/css/Makefile
     ui/libs/typeahead/Makefile
     ui/pages/Makefile
diff --git a/ui/libs/datatables/js/Makefile.am b/ui/libs/datatables/js/Makefile.am
index d50991c..2222ab0 100644
--- a/ui/libs/datatables/js/Makefile.am
+++ b/ui/libs/datatables/js/Makefile.am
@@ -16,6 +16,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+SUBDIRS = plugins
+
 datatablesjsdir = $(datadir)/wok/ui/libs/datatables/js
 
 dist_datatablesjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/datatables/js/plugins/Makefile.am b/ui/libs/datatables/js/plugins/Makefile.am
new file mode 100644
index 0000000..05cb35f
--- /dev/null
+++ b/ui/libs/datatables/js/plugins/Makefile.am
@@ -0,0 +1,19 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = ip-address
diff --git a/ui/libs/datatables/js/plugins/ip-address/LICENSE b/ui/libs/datatables/js/plugins/ip-address/LICENSE
new file mode 100644
index 0000000..9ade2f1
--- /dev/null
+++ b/ui/libs/datatables/js/plugins/ip-address/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2010-2015 SpryMedia Limited
+http://datatables.net
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/ui/libs/datatables/js/plugins/ip-address/Makefile.am b/ui/libs/datatables/js/plugins/ip-address/Makefile.am
new file mode 100644
index 0000000..f823bae
--- /dev/null
+++ b/ui/libs/datatables/js/plugins/ip-address/Makefile.am
@@ -0,0 +1,21 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+datatablesipaddressjsdir = $(datadir)/wok/ui/libs/datatables/js/plugins/ip-address/ip-address.js
+
+dist_datatablesipaddressjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/datatables/js/plugins/ip-address/ip-address.js b/ui/libs/datatables/js/plugins/ip-address/ip-address.js
new file mode 100644
index 0000000..28ff323
--- /dev/null
+++ b/ui/libs/datatables/js/plugins/ip-address/ip-address.js
@@ -0,0 +1,103 @@
+/**
+ * Sorts a column containing IP addresses (IPv4 and IPv6) in typical dot
+ * notation / colon. This can be most useful when using DataTables for a
+ * networking application, and reporting information containing IP address.
+ *
+ *  @name IP addresses 
+ *  @summary Sort IP addresses numerically
+ *  @author Dominique Fournier
+ *  @author Brad Wasson
+ *
+ *  @example
+ *    $('#example').dataTable( {
+ *       columnDefs: [
+ *         { type: 'ip-address', targets: 0 }
+ *       ]
+ *    } );
+ */
+
+jQuery.extend( jQuery.fn.dataTableExt.oSort, {
+	"ip-address-pre": function ( a ) {
+		var i, item;
+		var m = a.split("."),
+			n = a.split(":"),
+			x = "",
+			xa = "";
+
+		if (m.length == 4) {
+			// IPV4
+			for(i = 0; i < m.length; i++) {
+				item = m[i];
+
+				if(item.length == 1) {
+					x += "00" + item;
+				}
+				else if(item.length == 2) {
+					x += "0" + item;
+				}
+				else {
+					x += item;
+				}
+			}
+		}
+		else if (n.length > 0) {
+			// IPV6
+			var count = 0;
+			for(i = 0; i < n.length; i++) {
+				item = n[i];
+
+				if (i > 0) {
+					xa += ":";
+				}
+
+				if(item.length === 0) {
+					count += 0;
+				}
+				else if(item.length == 1) {
+					xa += "000" + item;
+					count += 4;
+				}
+				else if(item.length == 2) {
+					xa += "00" + item;
+					count += 4;
+				}
+				else if(item.length == 3) {
+					xa += "0" + item;
+					count += 4;
+				}
+				else {
+					xa += item;
+					count += 4;
+				}
+			}
+
+			// Padding the ::
+			n = xa.split(":");
+			var paddDone = 0;
+
+			for (i = 0; i < n.length; i++) {
+				item = n[i];
+
+				if (item.length === 0 && paddDone === 0) {
+					for (var padding = 0 ; padding < (32-count) ; padding++) {
+						x += "0";
+						paddDone = 1;
+					}
+				}
+				else {
+					x += item;
+				}
+			}
+		}
+
+		return x;
+	},
+
+	"ip-address-asc": function ( a, b ) {
+		return ((a < b) ? -1 : ((a > b) ? 1 : 0));
+	},
+
+	"ip-address-desc": function ( a, b ) {
+		return ((a < b) ? 1 : ((a > b) ? -1 : 0));
+	}
+});
\ No newline at end of file
diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl
index e238a34..e49b602 100644
--- a/ui/pages/wok-ui.html.tmpl
+++ b/ui/pages/wok-ui.html.tmpl
@@ -87,6 +87,7 @@
     <script src="$href('libs/lodash/lodash.js')"></script>
     <script src="$href('libs/moment/moment-with-locales.min.js')"></script>
     <script src="$href('libs/datatables/js/datatables.min.js')"></script>
+    <script src="$href('libs/datatables/js/plugins/ip-address/ip-address.js')"></script>
     <script src="$href('base64/jquery.base64.js')"></script>
     <script src="$href('js/wok.min.js')"></script>
     <!-- This is used for detecting if the UI needs to be built -->
-- 
2.5.5




More information about the Kimchi-devel mailing list