foist
[kismet-logviewer.git] / logviewer / static / js / jquery.kismet.battery.js
1 // Display the battery status
2 //
3 // dragorn@kismetwireless.net
4 // MIT/GPL License (pick one); the web ui code is licensed more
5 // freely than GPL to reflect the generally MIT-licensed nature
6 // of the web/jquery environment
7 //
8
9 (function ($) {
10     var local_uri_prefix = "";
11     if (typeof(KISMET_URI_PREFIX) !== 'undefined')
12         local_uri_prefix = KISMET_URI_PREFIX;
13
14     var base_options = { 
15         use_color: true,
16     };
17
18     var options = base_options;
19
20     var timerid = -1;
21
22     var element = null;
23
24     var timetext;
25     var baticon;
26     var batoverlay;
27
28     var batinfo_refresh = function(data) {
29         data = kismet.sanitizeObject(data);
30
31         baticon.removeClass("fa-refresh");
32         baticon.removeClass("fa-spin");
33         baticon.removeClass("fa-battery-0");
34         baticon.removeClass("fa-battery-1");
35         baticon.removeClass("fa-battery-2");
36         baticon.removeClass("fa-battery-3");
37         baticon.removeClass("fa-battery-4");
38         baticon.removeClass("fa-plug");
39
40         var p = data['kismet.system.battery.percentage'];
41         var c = data['kismet.system.battery.charging'];
42         var a = data['kismet.system.battery.ac'];
43
44         if (c === 'charging') {
45             timetext.text("Charging " + p + "% ");
46             timetext.show();
47
48             batoverlay.show();
49             batoverlay.addClass("battery-blink");
50
51             if (p < 25)
52                 baticon.addClass("fa-battery-0");
53             else if (p < 50)
54                 baticon.addClass("fa-battery-1");
55             else if (p < 75)
56                 baticon.addClass("fa-battery-2");
57             else if (p < 90)
58                 baticon.addClass("fa-battery-3");
59             else
60                 baticon.addClass("fa-battery-4");
61         } else if (c === 'discharging') {
62             batoverlay.hide();
63
64             if (p < 25)
65                 baticon.addClass("fa-battery-0");
66             else if (p < 50)
67                 baticon.addClass("fa-battery-1");
68             else if (p < 75)
69                 baticon.addClass("fa-battery-2");
70             else if (p < 90)
71                 baticon.addClass("fa-battery-3");
72             else
73                 baticon.addClass("fa-battery-4");
74
75             var s = data['kismet.system.battery.remaining'];
76
77             if (s > 0) {
78                 var h = Math.floor(s / 3600);
79                 s -= 3600 * h;
80                 var m = Math.floor(s / 60);
81                 s -= 60 * m;
82
83                 if (m < 10)
84                     m = '0' + m
85
86                 timetext.text(p + "% " + h + "h " + m + "m");
87             } else {
88                 timetext.text(p + "%");
89             }
90
91             timetext.show();
92         } else if (a == 1 && p == 0) {
93             timetext.hide();
94             baticon.addClass("fa-plug");
95             batoverlay.hide();
96         } else if (c === 'charged') {
97             batoverlay.show();
98             batoverlay.removeClass("battery-blink")
99             baticon.addClass("fa-battery-4");
100             timetext.text("Charged");
101             timetext.show();
102         } else {
103             timetext.text("Unknown");
104             timetext.show();
105             baticon.addClass("fa-battery-0");
106             batoverlay.hide();
107         }
108
109     };
110
111     $.fn.battery = function(data, inopt) {
112         element = $(this);
113
114         options = $.extend(base_options, inopt);
115
116         // Build the text and hide it
117         timetext = $('span.battime', this);
118         if (timetext.length == 0) {
119             timetext = $('<span>', {
120                 class: "battime"
121             }).text("00:00:00");
122
123             element.append(timetext);
124             timetext.hide();
125         }
126
127         // Build the icon, set as a spinner first
128         var batholder = $('span.batholder-stack', this);
129
130         if (batholder.length == 0) {
131             batholder = $('<span>', {
132                 class: "fa-stack batholder-stack"
133             });
134
135             baticon = $('<i>', {
136                 class: "batpower fa fa-stack-1x fa-refresh fa-spin",
137             });
138
139             batholder.append(baticon);
140
141             batoverlay = $('<i>', {
142                 class: "batpoweroverlay fa fa-stack-1x fa-bolt fa-inverse"
143             });
144             batholder.append(batoverlay);
145             batoverlay.hide();
146
147             element.append(batholder);
148         }
149
150         $.get(local_uri_prefix + "system/status.json")
151         .done(function(data) {
152             batinfo_refresh(data);
153         });
154
155         kismet_ui_base.SubscribeEventbus("BATTERY", [], function(data) {
156             batinfo_refresh(data);
157         });
158     };
159
160 }(jQuery));