dark mode and websockets
[kismet-logviewer.git] / logviewer / static / js / kismet.ui.gadgets.js
1 (
2   typeof define === "function" ? function (m) { define("kismet-ui-gadgets-js", m); } :
3   typeof exports === "object" ? function (m) { module.exports = m(); } :
4   function(m){ this.kismet_ui_gadgets = m(); }
5 )(function () {
6
7 "use strict";
8
9 var exports = {};
10
11 // Flag we're still loading
12 exports.load_complete = 0;
13
14 var local_uri_prefix = ""; 
15 if (typeof(KISMET_URI_PREFIX) !== 'undefined')
16     local_uri_prefix = KISMET_URI_PREFIX;
17
18 // Load our css
19 $('<link>')
20     .appendTo('head')
21     .attr({
22         type: 'text/css', 
23         rel: 'stylesheet',
24         href: local_uri_prefix + 'css/kismet.ui.gadgets.css'
25     });
26
27 // Defined gadgets
28 var gadgets = new Array();
29
30 // User picked gadgets
31 var active_gadgets = new Array();
32
33 /* Options for gadgets:
34  * id           unique id of gadget
35  * priority     priority of gadget order
36  * fields       *array* of fields required by this gadget, merged into the request
37  * defaultenable optional bool, if the gadget is not disabled in the user preferences,
38  *              enable it by default
39  * drawfunc     function called for drawing, with arguments:
40  *              container - div for the widget
41  *              data - data for this row
42  */
43
44 exports.AddGadget = function(options) {
45     if (!('id' in options)) {
46         console.log("Missing ID in gadget");
47         return -1;
48     }
49
50     if (!('drawfunc' in options)) {
51         console.log("Missing drawfunc in gadget");
52         return -1;
53     }
54
55     if (!('priority' in options)) {
56         options.priority = 0;
57     }
58
59     if (!('defaultenable' in options)) {
60         options.defaultenable = false;
61     }
62
63     if (!('fields' in options)) {
64         options.fields = [];
65     }
66
67     gadgets.push(options);
68
69     exports.UpdateGadgets();
70 };
71
72 exports.UpdateGadgets = function() {
73     var newgadgets = new Array();
74
75     gadgets.sort(function(a, b) {
76         if (a.priority < b.priority)
77             return -1;
78         if (a.priority > b.priority)
79             return 1;
80
81         return 0;
82     });
83
84     // Load the saved gadgets
85     var saved_gadgets = kismet.getStorage('kismet.base.gadgets', []);
86
87     // Search through the saved gadgets and populate gadgets we know about
88     saved_gadgets.every(function(e) {
89         // Corrupt pref
90         if (!('id' in e))
91             return true;
92
93         // Find the gadget by saved id
94         var g = gadgets.find(function(gi) {
95             return (e.id === gi.id);
96         });
97
98         // Skip gadgets we don't know about anymore
99         if (g === undefined)
100             return true;
101
102         // Add to the list, cloning the object
103         newgadgets.push(g);
104     });
105
106     // Add any unknown gadgets to the list and mark their default visibility
107     unknowng = [];
108
109     gadgets.every(function(e) {
110         // Look for this ID in our active gadgets
111         var g = newgadgets.find(function(ng) {
112             return (e.id === ng.id);
113         });
114
115         if (g === undefined) {
116             unknowng.push(e);
117         }
118     });
119
120     // Concatenate
121     active_gadgets = newgadgets.concat(unknowng);
122
123     active_gadgets.sort(function(a, b) {
124         if (a.priority < b.priority)
125             return -1;
126         if (a.priority > b.priority)
127             return 1;
128
129         return 0;
130     });
131 }
132
133 var renderGadgets = function(d, t, r, m) {
134
135 }
136
137 /*
138 kismet_ui.AddDeviceColumn('column_gadget', {
139     sTitle: ' ',
140     field: 'kismet.device.base.name',
141     description: 'UI gadgets',
142     renderfunc: function(d, t, r, m) {
143         renderGadgets(d, t, r, m);
144     },
145     orderable: false,
146     searchable: false,
147     priority: -1000,
148 });
149 */
150         
151
152 // We're done loading
153 exports.load_complete = 1;
154
155 return exports;
156
157 });