5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 <script src="js/msgpack.js"></script>
10 <script src="js/jquery-3.1.0.min.js"></script>
11 <script src="js/jquery-ui.min.js"></script>
12 <script src="js/jquery.ui.touch-punch.min.js"></script>
13 <script src="js/jquery.ajax.binary.js"></script>
14 <script src="js/jquery.jspanel-compiled.min.js"></script>
15 <script src="js/simple-expand.min.js"></script>
16 <script src="js/jqueryui-editable.min.js"></script>
18 <script src="js/jquery.dataTables.min.js"></script>
19 <script src="js/dataTables.scroller.min.js"></script>
20 <script src="js/dataTables.scrollResize.js"></script>
21 <!-- <script src="js/dataTables.pageResize.min.js"></script> -->
22 <script src="js/dataTables.colReorder.min.js"></script>
23 <script src="js/dataTables.responsive.min.js"></script>
25 <script src="js/jquery.sparkline.min.js"></script>
27 <script src="js/raphael.min.js"></script>
28 <script src="js/morris.min.js"></script>
30 <script src="js/jquery.layout-latest.js"></script>
32 <script src="js/pushmenu.js"></script>
34 <script src="js/Chart.bundle.min.js"></script>
36 <script src="js/js.storage.min.js"></script>
38 <script src="js/tooltipster.bundle.min.js"></script>
40 <script src="js/clipboard.min.js"></script>
42 <script src="js/kismet.utils.js"></script>
44 <!-- Core UI elements that get loaded first -->
45 <script src="js/kismet.ui.sidebar.js"></script>
46 <script src="js/kismet.ui.tabpane.js"></script>
47 <script src="js/kismet.ui.settings.js"></script>
49 <script src="js/kismet.ui.js"></script>
51 <script src="js/kismet.ui.base.js"></script>
52 <script src="js/kismet.ui.gadgets.js"></script>
54 <script src="js/jquery.kismet.devicedata.js"></script>
55 <script src="js/jquery.kismet.messagebus.js"></script>
56 <script src="js/jquery.kismet.channeldisplay.js"></script>
57 <script src="js/kismet.ui.alerts.js"></script>
59 <script src="js/kismet.ui.iconbar.js"></script>
60 <script src="js/jquery.kismet.battery.js"></script>
61 <script src="js/jquery.kismet.alert.js"></script>
62 <script src="js/jquery.kismet.gps.js"></script>
63 <script src="js/jquery.kismet.packetrate.js"></script>
65 <link rel="stylesheet" type="text/css" href="css/font-awesome.min.css">
67 <link rel="stylesheet" type="text/css" href="css/jquery-ui.min.css" />
68 <link rel="stylesheet" type="text/css" href="css/jquery.jspanel.min.css" />
69 <link rel="stylesheet" type="text/css" href="css/jquery.dataTables.min.css" />
70 <link rel="stylesheet" type="text/css" href="css/responsive.dataTables.min.css" />
71 <link rel="stylesheet" type="text/css" href="css/colReorder.dataTables.min.css" />
72 <link rel="stylesheet" type="text/css" href="css/morris.css" />
74 <link rel="stylesheet" type="text/css" href="css/layout-default-1.4.0.css" />
76 <link rel="stylesheet" type="text/css" href="css/pushmenu.css" />
78 <link rel="stylesheet" type="text/css" href="css/tooltipster.bundle.min.css" />
80 <link rel="stylesheet" type="text/css" href="css/jqueryui-editable.css" />
82 <link rel="stylesheet" type="text/css" href="css/jquery.kismet.messagebus.css" />
83 <link rel="stylesheet" type="text/css" href="css/jquery.kismet.channeldisplay.css" />
84 <link rel="stylesheet" type="text/css" href="css/jquery.kismet.alert.css" />
85 <link rel="stylesheet" type="text/css" href="css/jquery.kismet.battery.css" />
86 <link rel="stylesheet" type="text/css" href="css/jquery.kismet.auth.css" />
87 <link rel="stylesheet" type="text/css" href="css/jquery.kismet.gps.css" />
89 <link rel="stylesheet" type="text/css" href="css/reset.css" />
90 <link rel="stylesheet" type="text/css" href="css/text.css" />
91 <link rel="stylesheet" type="text/css" href="css/layout.css" />
93 <link rel="stylesheet" type="text/css" href="css/kismet.css" />
95 <style type="text/css">
96 /* Fix the hover-highlight of the device table */
98 background-color: #dddddd !important;
101 /* Accordion scroll */
109 <script src="dynamic.js"></script>
112 var KISMET_PROXY_PREFIX = "";
114 const queryString = window.location.search;
115 const urlParams = new URLSearchParams(queryString);
117 window['censor_macs'] = urlParams.get('censor_macs')
118 window['censor_location'] = urlParams.get('censor_location')
120 if (urlParams.get('censor')) {
121 window['censor_macs'] = 1
122 window['censor_location'] = 1
127 // Visibility detection from https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
128 // Set the name of the hidden property and the change event for visibility
129 var hidden, visibilityChange;
130 if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support
132 visibilityChange = "visibilitychange";
133 } else if (typeof document.msHidden !== "undefined") {
135 visibilityChange = "msvisibilitychange";
136 } else if (typeof document.webkitHidden !== "undefined") {
137 hidden = "webkitHidden";
138 visibilityChange = "webkitvisibilitychange";
141 function handleVisibilityChange() {
142 if (document[hidden]) {
143 kismet_ui.window_visible = false;
144 orig_title = document.title;
145 document.title = orig_title + " (Paused)"
147 kismet_ui.window_visible = true;
148 document.title = orig_title;
152 // Warn if the browser doesn't support addEventListener or the Page Visibility API
153 if (typeof document.addEventListener === "undefined" || hidden === undefined) {
156 // Handle page visibility change
157 document.addEventListener(visibilityChange, handleVisibilityChange, false);
160 function load_main_ui() {
161 load_dynamics().then((res) => {
162 // Don't let DT make alerts
163 $.fn.dataTableExt.sErrMode = "console";
165 $('#pm_menu').pushmenu({ button : "#pm_open" });
167 // Compute 30% height of window
168 var southsize = $(window).height() * 0.30;
170 // Load the framework
171 var layout = $('#panelcontainer').layout({
172 resizeWithWindowDelay: 250,
177 togglerLength_open: 0,
178 togglerLength_closed: -1,
183 onresize: function() {
184 $('#centerpane-tabs').tabs("refresh");
188 // Default to computed percentage of total window
190 onresize: function() {
191 $('#southpane-tabs').tabs("refresh");
197 // Derive the proxy prefix, if any, from the headers. We can't get this from our
198 // own current request, we have to do a HEAD req and nest everything inside that.
204 const pfx = jqxhr.getResponseHeader('X-Proxy-Dir');
207 KISMET_PROXY_PREFIX = pfx;
210 kismet_ui_base.OpenEventbusWs();
212 kismet_ui_iconbar.AddIconbarItem({
215 createCallback: function(div) {
220 kismet_ui_iconbar.AddIconbarItem({
223 createCallback: function(div) {
228 kismet_ui_iconbar.AddIconbarItem({
231 createCallback: function(div) {
236 kismet_ui_iconbar.AddIconbarItem({
239 createCallback: function(div) {
244 kismet_ui_iconbar.makeIconbar($('#iconbar'));
246 kismet_ui.HealthCheck();
249 kismet_ui_tabpane.MakeTabPane($('#southpane-tabs'), 'south');
250 kismet_ui_tabpane.MakeTabPane($('#centerpane-tabs'), 'center');
252 // Finalize the sidebar
253 kismet_ui_sidebar.MakeSidebar($('.k-sb-main'));
255 // Try to scrape the server name
256 kismet_ui_base.FetchServerName(function(name) {
257 if (name.length > 0) {
258 $('#topbar_title').html("Kismet - " + name);
259 top.document.title = "Kismet - " + name;
264 }); // always head fetch
269 // jquery onload complete
271 // Set a global timeout
275 withCredentials: true
280 kismet_ui_base.FirstLoginCheck(function() {
290 box-sizing: border-box;
291 height: calc(100% - 30px);
292 padding: 0.5em 0.5em 1.5em 0.5em;
293 border-radius: 0.5em;
294 background-color: #f9f9f9;
301 <div id="mainholder">
302 <div id="pm_menu" class="pm_hide pm_initial kismet_sidebar">
303 <div class="k-sb-header">
307 <div class="k-sb-main">
311 <div id="panelcontainer">
313 <div class="ui-layout-north">
315 <i id="pm_open" class="fa fa-bars k-sb-hamburger"></i>
316 <div id="topbar_title">Kismet</div>
317 <div class="topright_holder" id="iconbar"></div>
322 <div class="ui-layout-east">East</div>
324 <div class="ui-layout-west">West</div>
327 <div class="ui-layout-center" id="main_center">
328 <div id="centerpane-tabs" class="tabs-min"></div>
330 <div id="resize_wrapper">
331 <table id="devices" class="stripe hover nowrap" cell-spacing="0" width="100%"></table>
334 <!-- Must be named foo_status
335 <div id="devices_status" style="padding-bottom: 10px;"></div>
339 <div class="ui-layout-south">
340 <div id="southpane-tabs" class="tabs-min"></div>
346 <p>Powered by many OSS components, see the <a href="credit.html" target="_new">credits page</a>