foist
[kismet-logviewer.git] / logviewer / static / js / kismet.ui.sidebar.js
1 (
2   typeof define === "function" ? function (m) { define("kismet-ui-sidebar-js", m); } :
3   typeof exports === "object" ? function (m) { module.exports = m(); } :
4   function(m){ this.kismet_ui_sidebar = 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.sidebar.css'
25     });
26
27 /* Sidebar items are stored as a list of objects defining callbacks which
28  * allow us to create the entries and map clicks */
29
30 var SidebarItems = new Array();
31
32 /* Add a sidebar item
33  *
34  * Options is a dictionary which must include:
35  *
36  * id: id for created div
37  * listTitle: Title shown in list, which can include HTML for improved icons
38  * clickCallback: function in for handling a click event
39  *
40  * priority: order priority in list (optional)
41  */
42 exports.AddSidebarItem = function(options) {
43     if (!('id' in options) ||
44         !('listTitle' in options) ||
45         !('clickCallback' in options)) {
46         return;
47     }
48
49     if (!('priority' in options)) {
50         options['priority'] = 0;
51     }
52
53     SidebarItems.push(options);
54 };
55
56 function createListCallback(c) {
57     return function() {
58         // Hack closing the sidemenu
59         $('.pm_overlay').click();
60         c.clickCallback();
61     };
62 }
63
64 function populateList(list) {
65     SidebarItems.sort(function(a, b) {
66         if (a.priority < b.priority)
67             return -1;
68         if (a.priority > b.priority)
69             return 1;
70
71         return 0;
72     });
73
74     for (var i in SidebarItems) {
75         var c = SidebarItems[i];
76         list.append(
77             $('<div>', {
78                 id: c.id,
79                 class: 'k-sb-list-item'
80             })
81             .html(c.listTitle)
82             .on('click', createListCallback(c))
83         );
84     }
85 }
86
87 // Populate the sidebar content in the supplied div
88 exports.MakeSidebar = function(div) {
89     populateList(div);
90 };
91
92 // We're done loading
93 exports.load_complete = 1;
94
95 return exports;
96
97 });