// 'use strict'; if (!getCookie('role') && !getCookie('id') && window.location.pathname != '/login.html'){ window.location.href = '/login.html'; } if(!Array.prototype.indexOf) { Array.prototype.indexOf = function(what, i) { i = i || 0; var L = this.length; while (i < L) { if(this[i] === what) return i; ++i; } return -1; }; } function setMainActive(loc){ var set = ''; if (typeof(loc) == 'object') { for (var i = 0; i < loc.length; i++){ if (window.location.pathname == loc[i]){ set = 'active'; } } return set; } else { if (window.location.pathname == loc){ return 'active'; } else { return ''; } } } function createMainNavigation() { var nav = [ {name: 'Параметры', link: 'index.html', child:['/index.html', '/'], access: 2}, {name: 'Настройки', link: 'settings.html', child: '/settings.html', access: 1}, {name: 'Уведомления', link: 'snmp.html', child: '/snmp.html', access: 1}, {name: 'Информация', link: 'info.html', child: '/info.html', access: 2}, {name: 'Журнал', link: 'history.html', child: ['/history.html', '/ups_history.html'], access: 2} ]; for (var i = 0; i < nav.length; i++) { var el = document.createElement('a'); el.innerHTML = nav[i].name; el.href = nav[i].link; el.className = setMainActive(nav[i].child); var ls = document.createElement('li'); ls.appendChild(el); if (+getCookie('role') > nav[i].access){ ls.style.display = 'none'; } $('nav').appendChild(ls); } } function createSubNavigation(){ var subnav = document.createElement('div'); subnav.className = 'subnav'; var ul = document.createElement('ul'); ul.className = 'nav navbar-nav'; subnav.appendChild(ul); var li = [document.createElement('li'), document.createElement('li')]; li[0].innerHTML = 'События Контроллера'; li[1].innerHTML = 'Состояние ИБП'; if(window.location.pathname == '/history.html') { li[0].className = 'active'; } else if (window.location.pathname == '/ups_history.html') { li[1].className = 'active'; } ul.appendChild(li[0]); ul.appendChild(li[1]); $('subnavf').appendChild(subnav); } function $(id) {return document.getElementById(id);} var timeout; function clockinit(timeS) { clearInterval(timeout); customClock(timeS); timeout = setInterval(customClock, 1000); } var customClock = (function() { var timeDiff; function addZ(n) { return (n < 10? '0' : '') + n; } function formatTime(d) { //Format 'dd.mm.yyyy hh:mm:ss' return addZ(d.getDate()) + '.' + addZ(d.getMonth() + 1) + '.' + d.getFullYear() + ' ' + addZ(d.getHours()) + ':' + addZ(d.getMinutes()) + ':' + addZ(d.getSeconds()); } return function (s) { var now = new Date(); var then; // Get the time difference if first run if (s) { document.getElementById('clockbox').style.opacity = '1'; then = new Date(now); //Set time in mileseconds and reset OS timezone then.setTime( parseInt(s) * 1000 + (then.getTimezoneOffset()*60000)); timeDiff = now - then; } now = new Date(now - timeDiff); if(document.getElementById('clockbox') ){ document.getElementById('clockbox').innerHTML = formatTime(now); } }; }()); window.onload = function(){ if (window.location.pathname !== '/login.html' && getCookie('auth') !== '0'){ var navId = document.getElementById('nav'); var li = document.createElement('li'); var logout = document.createElement('a'); logout.href = 'javascript:void(0);'; logout.innerHTML = 'Выход (' + getCookie('uname') + ')'; logout.onclick = logOut; li.id = 'logout'; li.className = 'logout'; li.appendChild(logout); navId.appendChild(li); } }; function logOut() { loadXMLDoc('logout.cgi'+'?'+Math.random(), 'GET', function(){ deleteCookie('role'); deleteCookie('id'); window.location.href = '/login.html'; }); return false; } function loadXMLDoc(url, method, callback, body) { var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new window.ActiveXObject('Microsoft.XMLHTTP'); } xmlhttp.open(method, url, true); xmlhttp.setRequestHeader('Content-Type', 'application/json'); var status; xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { status = xmlhttp.status; if (status == 200) { pwdIsCorrect = xmlhttp.responseText; if (typeof callback == 'function') { callback.apply(xmlhttp); } } else if (status == 401) { alert('Request failed with status code 401'); window.location.reload(); } else { console.log('Error'); } } }; xmlhttp.send(body); } function addSort(page){ var sortButton = document.getElementsByClassName('sortable'); for (var i = 0; i < sortButton.length; i++) { sortButton[i].addEventListener('click', function(){ var name = this.getAttribute('sort'); var direction = this.getAttribute('direction'); switch(page){ case 'alarms': var target = location.hash.split('#')[1]; getAlarms(target, name, direction); break; case 'dryinputs': getDryInputs(name, direction); break; case 'relais': getRelais(name, direction); break; } if(direction == 1){ this.setAttribute('direction', '-1'); } else { this.setAttribute('direction', '1'); } }); } } function getCookie(name){ var strCookie, arrCookie; strCookie = document.cookie, arrCookie = strCookie.split('; '); for (var i = 0; i < arrCookie.length; i++){ var arr = arrCookie[i].split('='); if (arr[0] == name) return unescape(arr[1]); } return ''; } function setCookie(name,value,expirehours){ var cookieString = name + '=' + escape(value); if (expirehours > 0) { var date = new Date(); date.setTime(date.getTime() + expirehours * 3600 * 1000); cookieString = cookieString + '; expires=' + date.toGMTString(); } document.cookie = cookieString; } function deleteCookie(name) { document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; } function getJSON(url, successHandler, errorHandler) { var xhr; xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new window.ActiveXObject('Microsoft.XMLHTTP'); var fURL = url.split('.').pop() == 'cgi' ? url+'?' : url+'&'; xhr.open('GET', fURL+'_=' + new Date().getTime(), true); xhr.onreadystatechange = function () { var status, data; if (xhr.readyState == 4) { status = xhr.status; if (status == 200) { data = JSON.parse(xhr.responseText); successHandler(data); } else { errorHandler(status); } } }; xhr.send(); } function checkNotify() { ( getCookie('netsettings_changed') == 'true' ) ? apply_settings.init() : apply_settings.close(); ( getCookie('device-error') == '1' ) ? device_error.init() : device_error.close(); } function getParam(e,x) { switch (x) { case 0: return (e.snmp === 'true'); case 1: return (e.sms === 'true'); case 2: return (e.email === 'true'); } } var snmpArray = []; function snmpPush(e){ var index = snmpArray.indexOf(e); if (index !== -1) { snmpArray.splice(index, 1); } else { snmpArray.push(e); } if (snmpArray.length > 0){ $('sa').style.height = 'auto'; $('sa').style.opacity = 1; $('sa_length').textContent = snmpArray.length; } else { $('sa').style.height = 0; $('sa').style.opacity = 0; } checkAllStates(); } function rowsToSubmit(array){ var rows = []; for (var i = 0; i < array.length; i++) { var parent = $(array[i]).parentNode.parentNode; array[i]; var index = rows.indexOf(parent.id); if (index !== -1) { rows[index] = parent.id; } else { rows.push(parent.id); } } return rows; } function createSNMP(id){ getJSON('snmp.cgi', function(data) { $(id).innerHTML = ''; for (var i = 0; i < data.params.length; i++) { var param = data.params[i]; var param_row = document.createElement('tr'); param_row.id = param.name; var param_name = document.createElement('td'); param_name.textContent = param.label; param_row.appendChild(param_name); for (var x = 0; x < 1; x++) { var cb_td = document.createElement('td'); var cb_input = document.createElement('input'); cb_input.type = 'checkbox'; cb_input.checked = getParam(param,x); cb_input.id = 'cb'+x+param.name; cb_input.className = 'checkbox'; cb_input.setAttribute('onchange', 'snmpPush(this.id)'); cb_td.appendChild(cb_input); param_row.appendChild(cb_td); } var param_snmp = document.createElement('td'); $(id).appendChild(param_row); } utcParam = data.utc; // clockinit(data.utm); checkAllStates(); setCookie('netsettings_changed', data.netsettings_changed); setCookie('profilaction_changed', data.profilaction_changed); setCookie('need_confirm', data.need_confirm); checkNotify(); }, function(error){}); } function snmpSaSubmit(){ var url = 'snmp.cgi?'; var string = ''; for (var i = 0; i < rowsToSubmit(snmpArray).length; i++) { if(i == rowsToSubmit(snmpArray).length-1) { string+= $(rowsToSubmit(snmpArray)[i]).id + '=' + arrayToBitMask(rowsToSubmit(snmpArray)[i]); } else { string+= $(rowsToSubmit(snmpArray)[i]).id + '=' + arrayToBitMask(rowsToSubmit(snmpArray)[i]) + '&'; } } if (string){ loadXMLDoc( url + string, 'GET', updatepage); } else { updatepage(); } $('sa').style.height = 0; $('sa').style.opacity = 0; snmpArray = []; return false; } function snmpChangeCancel(){ updatepage(); $('sa').style.height = 0; $('sa').style.opacity = 0; snmpArray = []; } function checkAll(e,id){ var rows = $('snmp_list').getElementsByTagName('tr'); if ($(id).checked && !$(id).indeterminate){ for (var i = 0; i < rows.length; i++) { var input = rows[i].children[e].getElementsByTagName('input')[0]; if (!input.checked) { input.checked = true; snmpPush(input.id); } } } else if (!$(id).checked && !$(id).indeterminate) { for (var i = 0; i < rows.length; i++) { var input = rows[i].children[e].getElementsByTagName('input')[0]; input.checked = false; snmpPush(input.id); } } else if ($(id).checked) { for (var i = 0; i < rows.length; i++) { var input = rows[i].children[e].getElementsByTagName('input')[0]; input.checked = true; snmpPush(input.id); } } } function checkAllStates(){ allCheckboxStates(1,'cb_snmp'); // allCheckboxStates(2,'cb_sms'); // allCheckboxStates(3,'cb_email'); } function allCheckboxStates(e,id){ var rows = $('snmp_list').getElementsByTagName('tr'); var c = []; var nc = []; for (var i = 0; i < rows.length; i++) { var input = rows[i].children[e].getElementsByTagName('input')[0]; if (input.checked){ c.push(input.id); } else { nc.push(input.id); } } if (c.length && nc.length) { $(id).checked = false; $(id).indeterminate = true; } else if (c.length == rows.length) { $(id).checked = true; $(id).indeterminate = false; } else { $(id).checked = false; $(id).indeterminate = false; } } function decimalToBinary(decimal) { return (decimal >>> 0).toString(2); } function binaryToDecimal(binaryString) { return parseInt(binaryString, 2); } function cbToBit(id, n){ var bit = $(id).checked ? 1 : 0; return bit << n; } function arrayToBitMask(id){ // var parent = $(id).id; var snmp = cbToBit('cb0'+id, 0); // var sms = cbToBit('cb1'+id, 1); // var email = cbToBit('cb2'+id, 2); return binaryToDecimal( decimalToBinary( (snmp) ) ); } function NotificationBox (id, options) { this.id = id; this.options = (options ? options : {}); if(! ('message' in this.options)) this.options.message = 'NotificationBox: Hello World!'; if(! ('bgcolor' in this.options)) this.options.bgcolor = '#009966'; if(! ('textcolor' in this.options)) this.options.textcolor = '#fff'; if(! ('show' in this.options)) this.options.show = true; if(! ('url' in this.options)) this.options.url = false; } NotificationBox.prototype.init = function(){ if (!$(this.id)) { if (this.options.show) { var maindiv = document.createElement('div'); maindiv.id = this.id; maindiv.className = 'notify-box'; maindiv.style.backgroundColor = this.options.bgcolor; maindiv.style.color = this.options.textcolor; var string = document.createElement('p'); string.textContent = this.options.message; maindiv.appendChild(string); if (this.options.url) { var confirm = document.createElement('button'); confirm.className = 'btn btn-danger-inverted'; confirm.textContent = 'Подтвердить'; confirm.setAttribute('onclick', 'loadXMLDoc(\''+ this.options.url +'\',\'GET\', updatepage)'); maindiv.appendChild(confirm); } if (this.options.cancelButton) { var cancel = document.createElement('button'); cancel.className = 'btn btn-warning-inverted'; cancel.style.marginLeft = '5px'; cancel.textContent = 'Отмена'; cancel.setAttribute('onclick', 'loadXMLDoc(\''+ this.options.cancelUrl +'\',\'GET\', updatepage)'); maindiv.appendChild(cancel); } document.body.insertBefore(maindiv, document.body.childNodes[0]); fadeIn($(this.id)); } } }; NotificationBox.prototype.close = function(){ if ($(this.id) ){ var set = $(this.id); document.body.removeChild(set); } };