foist
[kismet-logviewer.git] / logviewer / static / js / kismet.ui.iconbar.js
1 (
2   typeof define === "function" ? function (m) { define("kismet-ui-iconbar-js", m); } :
3   typeof exports === "object" ? function (m) { module.exports = m(); } :
4   function(m){ this.kismet_ui_iconbar = m(); }
5 )(function () {
6
7 "use strict";
8
9 var exports = {};
10
11 var local_uri_prefix = ""; 
12 if (typeof(KISMET_URI_PREFIX) !== 'undefined')
13     local_uri_prefix = KISMET_URI_PREFIX;
14
15 // Flag we're still loading
16 exports.load_complete = 0;
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.iconbar.css'
25     });
26
27 /* Iconbar items are stored as a list of objects with callbacks for when they
28  * are created */
29
30 var IconbarItems = new Array();
31
32 /* Add an iconbar item
33  *
34  * 'options' is a dictionary which must include:
35  *
36  * id: id for created object/div
37  * createCallback(div): function for populating the div
38  *
39  * and may include:
40  *
41  * priority: order priority in list
42  *
43  */
44
45 exports.AddIconbarItem = function(options) {
46     if (!('id' in options) ||
47         !('createCallback' in options)) {
48         return;
49     }
50
51     if (!('priority' in options)) {
52         options['priority'] = 0;
53     }
54
55     options['visible'] = true;
56
57     IconbarItems.push(options);
58 }
59
60 exports.makeIconbar = function(container) {
61     var saved_state = kismet.getStorage('kismet.base.iconbar', {});
62
63     // Update any item status based on saved config
64     for (var ii in IconbarItems) {
65         var ibi = IconbarItems[ii];
66
67         if (ibi.id in saved_state) {
68             ibi.priority = saved_state[ibi.id].priority;
69             ibi.visibile = saved_state[ibi.id].visible;
70         } else {
71             ibi.visible = true;
72         }
73     }
74
75     // Sort by priority
76     IconbarItems.sort(function(a, b) {
77         if (a.priority < b.priority)
78             return -1;
79         if (a.priority > b.priority)
80             return 1;
81         return 0;
82     });
83
84     // Wipe out the existing div
85     container.empty();
86
87     for (var ii in IconbarItems) {
88         var ibi = IconbarItems[ii];
89
90         if (!ibi.visible)
91             continue;
92
93         var div = 
94             $('<div>', {
95                 id: ibi.id,
96                 class: 'k-ib-item',
97             });
98
99         container.append(div);
100         ibi.createCallback(div);
101     }
102 }
103
104
105 // We're done loading
106 exports.load_complete = 1;
107
108 return exports;
109
110 });