Nuova area conf x IOB-MON

This commit is contained in:
2021-12-17 12:44:53 +01:00
parent 18ff37d151
commit f273e3b4ff
39 changed files with 31237 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
[id]
idxMacchina = 1501
[web]
URLREBO = http://10.74.82.218/MP/IO/sendReboot?idxMacchina=
#URLREBO = http://192.168.51.71/MP/IO/sendReboot?idxMacchina=
[log]
LOGLEVEL = 10
LOGREBO = /var/log/logReboot.txt
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+7
View File
@@ -0,0 +1,7 @@
# Setup steamware
localNet="10.74"
srvAddr="10.74.82.219"
# DEMO setup cliente
#localNet="192.168.51"
#srvAddr="192.168.51.79"
+510
View File
@@ -0,0 +1,510 @@
<!DOCTYPE html>
<!-- saved from url=(0014)about:internet -->
<html lang="it-it" style="" class=" js flexbox flexboxlegacy canvas canvastext webgl no-touch geolocation postmessage websqldatabase indexeddb hashchange history draganddrop websockets rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow textshadow opacity cssanimations csscolumns cssgradients cssreflections csstransforms csstransforms3d csstransitions fontface generatedcontent video audio localstorage sessionstorage webworkers no-applicationcache svg inlinesvg smil svgclippaths"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MP-MON DEMO</title>
<link href="./MP-MON-DEMO_files/bootstrap.css" rel="stylesheet">
<link href="./MP-MON-DEMO_files/fonts.css" rel="stylesheet">
<link href="./MP-MON-DEMO_files/baseStyle.css" rel="stylesheet">
<link href="./MP-MON-DEMO_files/Site.css" rel="stylesheet">
<script src="./MP-MON-DEMO_files/modernizr-2.8.3.js"></script>
<script src="./MP-MON-DEMO_files/jquery-3.5.1.js"></script>
</head>
<body>
<nav class="navbar fixed-top navbar-expand-sm px-2 py-0 m-0">
<a href="http://10.74.82.218/MP/MON/" class="navbar-brand m-0 pr-4" style="vertical-align: bottom; text-align: left; font-size: 1em;">
<img class="logoImg" src="./MP-MON-DEMO_files/logoMapo.png" style="margin-top: -10px;">
</a>
<button class="navbar-toggler navbar-dark" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<span class="mainHead"><b><span style="color: #DEDEDE;">DEMO OFFLINE | MP MON</span>itor</b> | DEMO OFFLINE </span>
</li>
</ul>
<div class="px-2">
<div id="divClock text-right">
</div>
<div class="fontSmall text-right">
127.0.0.1 | v: 6.10.2010.1305
</div>
</div>
</div>
</nav>
<div class="container-fluid body-content mt-2 mt-lg-3 mt-xl-4">
<div id="mainDiv">
<div class="row statusMap mx-2 mt-3 mb-1">
<div class="col" style="padding:2px;">
<div class="semGi_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SimDP1</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">[005128]</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">5'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 01:12</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">0 / 4962</div>
</div>
</div>
<div class="semGi p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:31
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semVe_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SimDP2</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">[005122]</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">5'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 02:00</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">79912 / 2064</div>
</div>
</div>
<div class="semVe p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:29
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semVe_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 01</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">[-]</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">3'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 00:00</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">0 / 0</div>
</div>
</div>
<div class="semVe p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:31
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semVe_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 02</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">13051125</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">0'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 01:00</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">65109 / 3793</div>
</div>
</div>
<div class="semVe p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:29
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semGi_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 03</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">179L0810</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">1'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 00:48</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">64114 / 10000</div>
</div>
</div>
<div class="semGi p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:27
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semVe_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 04</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">D695/A00</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">0'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 01:00</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">57661 / 9882070</div>
</div>
</div>
<div class="semVe p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:35
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><div class="row statusMap mx-2 my-1"> <div class="col" style="padding:2px;">
<div class="semGi_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 05</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">[60682]</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">4'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 00:54</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">66270 / 12500</div>
</div>
</div>
<div class="semGi p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:29
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semVe_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 06</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">[60121]</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">3'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 00:48</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">64474 / 10000</div>
</div>
</div>
<div class="semVe p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:30
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semRo_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 07</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">[60131]</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">0'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 00:48</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">65912 / 10000</div>
</div>
</div>
<div class="semRo p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:26
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding:2px;">
<div class="semVe_b p-1">
<div class="row mb-1">
<div class="col-12">
<div class="ui-title text-uppercase">IOB SIM 08</div>
</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-4 pr-0">Art.</div>
<div class="col-8 pl-0 text-right ui-art">[60022]</div>
</div>
<div class="row pt-0 pb-2 px-1 fontSmall">
<div class="col-9 text-uppercase"><b>lavorazione</b></div>
<div class="col-3 pl-0 text-right">0'</div>
<div class="col-4 pr-0">T.Ciclo</div>
<div class="col-4 pl-0 text-right">std: 01:12</div>
<div class="col-4 pl-0 text-right">act: 00:00</div>
<div class="col-6 pr-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="col-6 pl-0 text-right">65899 / 8825</div>
</div>
</div>
<div class="semVe p-1">
<div class="row fontSmaller mt-1">
<div class="col-12">
<div class="text-right ui-footer px-2">
<div class="row">
<div class="col-6 text-warning invisible">
<b>C.101</b>
</div>
<div class="col-6">
06/10/2020 14:08:27
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col" style="padding: 2px;">aaa</div><div class="col" style="padding: 2px;">aaa</div>
</div>
</div>
<script type="text/javascript">
function reloadData() {
$("#mainDiv").load('http://10.74.82.218/MP/MON/MSE/StatusMap?baseCss=sem');
}
$(document).ready(function () {
// ciclo reload infinito ogni secondo...
myTimer = setInterval(reloadData, 1000);
});
</script>
<footer class="navbar p-0 m-0 fixed-bottom">
<div class="d-flex justify-content-start pl-3 text-left">
<span style="color: #DEDEDE;">MP MON</span>itor
</div>
<div class="d-flex justify-content-center text-center">
<strong></strong>
</div>
<div class="d-flex justify-content-end pr-3 text-right">
2007-2020 © <img class="logoImg" src="./MP-MON-DEMO_files/logoSteamware.png" style="height: 30px;">
</div>
</footer>
</div>
<script src="./MP-MON-DEMO_files/bootstrap.js"></script>
<script src="./MP-MON-DEMO_files/respond.js"></script>
<!-- Code to wire up your DatePicker -->
<script type="text/javascript">
// fix datekeeper
if (!Modernizr.inputtypes.date) {
$('input[type=date]').datepicker({
// Consistent format with the HTML5 picker
dateFormat: 'yy-mm-dd'
});
}
</script>
<script src="./MP-MON-DEMO_files/jquery.validate.js"></script>
<script src="./MP-MON-DEMO_files/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript">
function reloadDT() {
$("#divClock").load('http://10.74.82.218/MP/MON/Home/GetClock');
}
$(document).ready(function () {
// ciclo reload infinito ogni 10 secondi x aggiornare clock...
myTimer = setInterval(reloadDT, 10000);
});
</script>
</body></html>
@@ -0,0 +1,547 @@
<!DOCTYPE html>
<!-- saved from url=(0020)http://iis01/MP-MON/ -->
<html lang="it-it" class=" js flexbox flexboxlegacy canvas canvastext webgl touch geolocation postmessage websqldatabase indexeddb hashchange history draganddrop websockets rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow textshadow opacity cssanimations csscolumns cssgradients cssreflections csstransforms csstransforms3d csstransitions fontface generatedcontent video audio localstorage sessionstorage webworkers applicationcache svg inlinesvg smil svgclippaths"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index - MP-MONi DEMO</title>
<link href="./MP-MON-DEMO_files/css" rel="stylesheet">
<script src="./MP-MON-DEMO_files/modernizr"></script>
<script src="./MP-MON-DEMO_files/jquery"></script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="#" class="navbar-brand" style="vertical-align: bottom; margin: 0; text-align: left; font-size: 2em;"><img class="logoImg" src="./MP-MON-DEMO_files/logoSteamware.png" style="margin-top: -10px;"></a>
<span class="mainHead navbar-brand"><b><span style="color: #DEDEDE;">MP MON</span>itor</b>i - DEMO OFFLINE MODE</span>
</div>
<div class="navbar-collapse collapse">
<div class="nav navbar-text navbar-right" style="margin: 5px;">
<div id="divClock text-right">
venerdì 14 ottobre 2016, 11:07
</div>
<div class="fontSmall text-right">
127.0.0.1 | v: 4.1.491.467
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid body-content">
<br>
<div id="mainDiv">
<div class="row statusMap">
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semG" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.09</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">-</div>
<div class="col-xs-12"><b>fermo generico</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">00:00</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semG" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">PUL.03</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5010710</div>
<div class="col-xs-12"><b>fermo generico</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">07:31</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.04</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5009047</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">07:01</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">PUL.02</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5010225</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">07:00</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semG" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.03</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5009595</div>
<div class="col-xs-12"><b>fermo generico</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">10:49</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.08</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5009595</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">09:07</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.07</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5009580</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">07:34</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.02</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5003049</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">06:55</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.01</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5009030</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">08:04</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">EXABB</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5010290</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">10:03</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">PUL.04</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5010660</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">14:43</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.10</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5009556</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">14:03</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">PUL.01</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5010260</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">06:45</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.06</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5007041</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">02:00</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semG" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">TAV.02</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5010720</div>
<div class="col-xs-12"><b>manuale</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">02:01</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">TAV.01</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5010181</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">01:43</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semR" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SBAV.05</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5007580</div>
<div class="col-xs-12"><b>allarme CN</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">03:13</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semV" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">SMER.11</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">5009053</div>
<div class="col-xs-12"><b>lavorazione</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">08:45</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semS" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">TAV.COS</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">-</div>
<div class="col-xs-12"><b>n.d.</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">00:00</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semS" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">COMB.01</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">-</div>
<div class="col-xs-12"><b>n.d.</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">00:00</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semS" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">COMB.02</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">-</div>
<div class="col-xs-12"><b>n.d.</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">00:00</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-3 col-lg-2" style="padding: 2px;">
<div class="semS" style="padding: 1px;">
<div class="row" style="margin-bottom: 0.5em;">
<div class="col-xs-12"><div class="ui-title">COMB.03</div></div>
</div>
<div class="row" style="padding: 0.4em 0.2em;">
<div class="col-xs-4 padZR">articolo:</div>
<div class="col-xs-8 padZL text-right">-</div>
<div class="col-xs-12"><b>n.d.</b></div>
<div class="col-xs-6 padZR">tempo ciclo:</div>
<div class="col-xs-6 padZL text-right">00:00</div>
</div>
<div class="row fontSmall" style="margin-top: 0.5em;">
<div class="col-xs-12"><div class="text-right ui-footer">last update: 14/10/2016 11:07:48</div></div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
function reloadData() {
location.replace("file:///home/pi/steamware/MP-MON-DEMO.html");
}
$(document).ready(function () {
// ciclo reload infinito ogni secondo...
myTimer = setInterval(reloadData, 1000);
// fix dataora
var date = new Date();
var n = date.toDateString();
var time = date.toLocaleTimeString();
document.getElementById('divClock').innerHTML = n + ' ' + time;
});
</script>
<footer class="navbar navbar-inverse navbar-fixed-bottom">
<div class="row">
<div class="col-sm-4 col-xs-5 padZR">
<p style="padding-left:1em;">MoonPro MONitor</p>
</div>
<div class="col-sm-4 col-xs-2 padZR padZL text-center">
<strong>SteamWare</strong>
</div>
<div class="col-sm-4 col-xs-5 padZL">
<p style="padding-right:1em;" class="text-right">Steamware s.r.l. - © 2007-2016</p>
</div>
</div>
</footer>
</div>
<script src="./MP-MON-DEMO_files/bootstrap"></script>
<!-- Code to wire up your DatePicker -->
<script type="text/javascript">
// fix datekeeper
if (!Modernizr.inputtypes.date) {
$('input[type=date]').datepicker({
// Consistent format with the HTML5 picker
dateFormat: 'yy-mm-dd'
});
}
</script>
<script src="./MP-MON-DEMO_files/jqueryval"></script>
</body></html>
@@ -0,0 +1,230 @@
/*Import fonts!*/
@import url('fonts.min.css');
/* Gestione blocchi base */
body {
font-family: 'Open Sans', sans-serif;
background-color: #5d5d5d;
padding: 25px 0 20px 0;
}
body .ui-body-a,
body .ui-body-c,
body .ui-overlay-c {
text-shadow: 0 0 0;
}
.logoImg {
height: 40px;
}
/* Set padding to keep content from hitting the edges */
.body-content {
padding: 0.1em 0.2em;
}
/* Override the default bootstrap behavior where horizontal description lists
will truncate terms that are too long to fit in the left column
*/
.dl-horizontal dt {
white-space: normal;
}
@media all and (min-width: 425px) {
.mainHead {
font-size: 1.3em;
}
body {
font-size: 0.8em;
}
.logoImg {
height: 30px;
}
}
@media all and (min-width: 768px) {
.mainHead {
font-size: 1.4em;
}
body {
font-size: 1em;
}
.logoImg {
height: 35px;
}
}
@media all and (min-width: 1024px) {
.mainHead {
font-size: 1.5em;
}
body {
font-size: 1.2em;
}
.logoImg {
height: 40px;
}
}
@media all and (min-width: 1440px) {
.mainHead {
font-size: 1.6em;
}
body {
font-size: 1.4em;
}
.logoImg {
height: 40px;
}
}
@media all and (min-width: 1600px) {
.mainHead {
font-size: 1.6em;
}
body {
font-size: 1.6em;
}
.logoImg {
height: 40px;
}
}
@media all and (max-width: 425px) {
.mainHead {
font-size: 1em;
}
body {
font-size: 0.7em;
}
.logoImg {
height: 25px;
}
}
/* Set width on the form input elements since they're 100% wide by default */
input,
select,
textarea {
max-width: 280px;
}
.deleted {
text-decoration: line-through;
}
.padZL {
padding-left: 0.2em;
}
.padZR {
padding-right: 0.2em;
}
.padZRL {
padding-left: 0.2em;
padding-right: 0.2em;
}
.colAlt {
color: #C93;
}
.fontSmall {
font-size: 0.66em;
}
.fontSmaller {
font-size: 0.5em;
}
.fontBig {
font-size: 2em;
}
.tNote {
color: #8a8a8a;
font-style: italic;
}
.tNoWrap {
white-space: nowrap;
}
.navbar {
min-height: 0;
/*z-index: 0; // commentare quando in prod?!?*/
color: #696969;
background-color: #000;
}
/*------------------------------------------------------------------
[ Shortcuts / .shortcuts ]
*/
.shortcuts {
text-align: center;
}
.shortcuts .shortcut {
min-width: 180px;
min-height: 100px;
display: inline-block;
padding: 13.33333333px 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
background: #F3F3F3;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee));
background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 10px;
}
.shortcuts .shortcut-sm {
min-width: 90px;
min-height: 60px;
display: inline-block;
padding: 5px 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
background: #F3F3F3;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee));
background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 10px;
}
.shortcuts .shortcut .shortcut-icon {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: 40px;
color: #333;
}
.shortcuts .shortcut-sm .shortcut-icon {
width: 100%;
margin-top: 0;
margin-bottom: 0;
font-size: 40px;
color: #333;
}
.shortcuts .shortcut:hover {
background: #E8E8E8;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1));
background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%);
background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%);
background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0);
}
.shortcuts .shortcut-sm:hover {
background: #E8E8E8;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1));
background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%);
background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%);
background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0);
}
.shortcuts .shortcut:active {
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.shortcuts .shortcut-sm:active {
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.shortcuts .shortcut:hover .shortcut-icon {
color: #C93;
}
.shortcuts .shortcut-sm:hover .shortcut-icon {
color: #666;
}
.shortcuts .shortcut-label {
display: block;
margin-top: .75em;
font-weight: 400;
color: #666;
}
@@ -0,0 +1,176 @@
/*Import fonts!*/
@import url('fonts.min.css');
/* Gestione blocchi base */
body {
font-family: 'Open Sans Condensed', sans-serif;
background-color: #5d5d5d;
}
body .ui-body-a,
body .ui-body-c,
body .ui-overlay-c {
text-shadow: 0 0 0;
}
/* END: gestione blocchi base */
/* area semafori*/
.semBlinkVe,
.semFixVe,
.semFixVe_b,
.semVe,
.semVe_b {
background: #009036;
background: rgba(0, 255, 80, 0.6);
color: #FFFFAA;
}
.semBlinkGr,
.semFixGr,
.semFixGr_b,
.semGr,
.semGr_b {
background-color: #bcbcbc;
background: rgba(180, 180, 180, 0.6);
}
.semGi {
text-align: left;
background: #8a8d27;
background: rgba(230, 210, 0, 0.6);
padding: 0px 4px 0px 4px;
color: #000;
}
.semGi_b,
.semFixGi,
.semFixGi_b {
text-align: left;
background: #f9ff18;
background: rgba(255, 255, 0, 0.8);
padding: 0px 4px 0px 4px;
color: #333;
}
.semBl {
text-align: left;
background: #000E7A;
background: rgba(0, 5, 200, 0.6);
padding: 0px 4px 0px 4px;
color: #959500;
}
.semBl_b,
.semFixBl,
.semFixBl_b {
text-align: left;
background: #243FFF;
background: rgba(60, 80, 255, 0.8);
padding: 0px 4px 0px 4px;
color: #ffff32;
}
.semRo {
text-align: left;
background-color: #7a000e;
background: rgba(200, 0, 5, 0.6);
padding: 0px 4px 0px 4px;
color: #959500;
}
.semRo_b,
.semFixRo,
.semFixRo_b {
text-align: left;
background-color: #ff243f;
background: rgba(255, 60, 80, 0.8);
padding: 0px 4px 0px 4px;
color: #ffff32;
}
/* semafori con animazione blinking */
.no-cpu {
-moz-transform: translateZ(0);
-o-transform: translateZ(0);
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
}
@-webkit-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@-moz-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@-o-keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@keyframes blinkBack {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
.semBlinkGi {
background: linear-gradient(270deg, #8a8d27, #f9ff18);
background-size: 400% 400%;
-webkit-animation: blinkBack 2s ease infinite;
-moz-animation: blinkBack 2s ease infinite;
-o-animation: blinkBack 2s ease infinite;
animation: blinkBack 2s ease infinite;
}
.semBlinkRo {
background: linear-gradient(270deg, #7a000e, #ff243f);
background-size: 400% 400%;
-webkit-animation: blinkBack 2s ease infinite;
-moz-animation: blinkBack 2s ease infinite;
-o-animation: blinkBack 2s ease infinite;
animation: blinkBack 2s ease infinite;
color: Yellow;
}
/*end semafori */
/* MAIN: gestione layout dinamico mappa... */
/* A bit custom styling */
.statusMap {
background: #222;
}
/* Link to the Google webfont is in the head */
.statusMap .ui-title,
.statusMap .ui-li-aside {
font-family: 'Open Sans Condensed', sans-serif;
font-weight: 800;
text-transform: uppercase;
font-size: 2.5em;
line-height: 1.1em;
color: #DEDEDE;
text-shadow: 2px 2px 4px #000;
text-align: center;
background: linear-gradient(270deg, rgba(20, 20, 20, 0.7), rgba(100, 100, 100, 0.7), rgba(20, 20, 20, 0.7));
}
.statusMap .ui-art {
font-family: 'Open Sans Condensed', sans-serif;
}
.statusMap .ui-footer {
font-family: 'Open Sans Condensed', sans-serif;
color: #CDCDCD;
background: linear-gradient(270deg, rgba(10, 10, 10, 0.7), rgba(80, 80, 80, 0.7), rgba(10, 10, 10, 0.7));
}
/* END: gestione layout dinamico mappa... */
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,28 @@
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: url('OpenSans.woff') format('woff');
}
@font-face {
font-family: 'Open Sans Condensed';
font-style: normal;
font-weight: 300;
src: url('OpenSansCondensed.woff') format('woff');
}
/* latin-ext */
@font-face {
font-family: 'Roboto Condensed';
font-style: normal;
font-weight: 400;
src: url('RobotoCondensedExt.woff2') format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto Condensed';
font-style: normal;
font-weight: 400;
src: url('RobotoCondensed.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215;
}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,432 @@
// Unobtrusive validation support library for jQuery and jQuery Validate
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// @version v3.2.11
/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
/*global document: false, jQuery: false */
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define("jquery.validate.unobtrusive", ['jquery-validation'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS-like environments that support module.exports
module.exports = factory(require('jquery-validation'));
} else {
// Browser global
jQuery.validator.unobtrusive = factory(jQuery);
}
}(function ($) {
var $jQval = $.validator,
adapters,
data_validation = "unobtrusiveValidation";
function setValidationValues(options, ruleName, value) {
options.rules[ruleName] = value;
if (options.message) {
options.messages[ruleName] = options.message;
}
}
function splitAndTrim(value) {
return value.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g);
}
function escapeAttributeValue(value) {
// As mentioned on http://api.jquery.com/category/selectors/
return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
}
function getModelPrefix(fieldName) {
return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
}
function appendModelPrefix(value, prefix) {
if (value.indexOf("*.") === 0) {
value = value.replace("*.", prefix);
}
return value;
}
function onError(error, inputElement) { // 'this' is the form element
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
container.removeClass("field-validation-valid").addClass("field-validation-error");
error.data("unobtrusiveContainer", container);
if (replace) {
container.empty();
error.removeClass("input-validation-error").appendTo(container);
}
else {
error.hide();
}
}
function onErrors(event, validator) { // 'this' is the form element
var container = $(this).find("[data-valmsg-summary=true]"),
list = container.find("ul");
if (list && list.length && validator.errorList.length) {
list.empty();
container.addClass("validation-summary-errors").removeClass("validation-summary-valid");
$.each(validator.errorList, function () {
$("<li />").html(this.message).appendTo(list);
});
}
}
function onSuccess(error) { // 'this' is the form element
var container = error.data("unobtrusiveContainer");
if (container) {
var replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
container.addClass("field-validation-valid").removeClass("field-validation-error");
error.removeData("unobtrusiveContainer");
if (replace) {
container.empty();
}
}
}
function onReset(event) { // 'this' is the form element
var $form = $(this),
key = '__jquery_unobtrusive_validation_form_reset';
if ($form.data(key)) {
return;
}
// Set a flag that indicates we're currently resetting the form.
$form.data(key, true);
try {
$form.data("validator").resetForm();
} finally {
$form.removeData(key);
}
$form.find(".validation-summary-errors")
.addClass("validation-summary-valid")
.removeClass("validation-summary-errors");
$form.find(".field-validation-error")
.addClass("field-validation-valid")
.removeClass("field-validation-error")
.removeData("unobtrusiveContainer")
.find(">*") // If we were using valmsg-replace, get the underlying error
.removeData("unobtrusiveContainer");
}
function validationInfo(form) {
var $form = $(form),
result = $form.data(data_validation),
onResetProxy = $.proxy(onReset, form),
defaultOptions = $jQval.unobtrusive.options || {},
execInContext = function (name, args) {
var func = defaultOptions[name];
func && $.isFunction(func) && func.apply(form, args);
};
if (!result) {
result = {
options: { // options structure passed to jQuery Validate's validate() method
errorClass: defaultOptions.errorClass || "input-validation-error",
errorElement: defaultOptions.errorElement || "span",
errorPlacement: function () {
onError.apply(form, arguments);
execInContext("errorPlacement", arguments);
},
invalidHandler: function () {
onErrors.apply(form, arguments);
execInContext("invalidHandler", arguments);
},
messages: {},
rules: {},
success: function () {
onSuccess.apply(form, arguments);
execInContext("success", arguments);
}
},
attachValidation: function () {
$form
.off("reset." + data_validation, onResetProxy)
.on("reset." + data_validation, onResetProxy)
.validate(this.options);
},
validate: function () { // a validation function that is called by unobtrusive Ajax
$form.validate();
return $form.valid();
}
};
$form.data(data_validation, result);
}
return result;
}
$jQval.unobtrusive = {
adapters: [],
parseElement: function (element, skipAttach) {
/// <summary>
/// Parses a single HTML element for unobtrusive validation attributes.
/// </summary>
/// <param name="element" domElement="true">The HTML element to be parsed.</param>
/// <param name="skipAttach" type="Boolean">[Optional] true to skip attaching the
/// validation to the form. If parsing just this single element, you should specify true.
/// If parsing several elements, you should specify false, and manually attach the validation
/// to the form when you are finished. The default is false.</param>
var $element = $(element),
form = $element.parents("form")[0],
valInfo, rules, messages;
if (!form) { // Cannot do client-side validation without a form
return;
}
valInfo = validationInfo(form);
valInfo.options.rules[element.name] = rules = {};
valInfo.options.messages[element.name] = messages = {};
$.each(this.adapters, function () {
var prefix = "data-val-" + this.name,
message = $element.attr(prefix),
paramValues = {};
if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy)
prefix += "-";
$.each(this.params, function () {
paramValues[this] = $element.attr(prefix + this);
});
this.adapt({
element: element,
form: form,
message: message,
params: paramValues,
rules: rules,
messages: messages
});
}
});
$.extend(rules, { "__dummy__": true });
if (!skipAttach) {
valInfo.attachValidation();
}
},
parse: function (selector) {
/// <summary>
/// Parses all the HTML elements in the specified selector. It looks for input elements decorated
/// with the [data-val=true] attribute value and enables validation according to the data-val-*
/// attribute values.
/// </summary>
/// <param name="selector" type="String">Any valid jQuery selector.</param>
// $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one
// element with data-val=true
var $selector = $(selector),
$forms = $selector.parents()
.addBack()
.filter("form")
.add($selector.find("form"))
.has("[data-val=true]");
$selector.find("[data-val=true]").each(function () {
$jQval.unobtrusive.parseElement(this, true);
});
$forms.each(function () {
var info = validationInfo(this);
if (info) {
info.attachValidation();
}
});
}
};
adapters = $jQval.unobtrusive.adapters;
adapters.add = function (adapterName, params, fn) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
/// <param name="params" type="Array" optional="true">[Optional] An array of parameter names (strings) that will
/// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and
/// mmmm is the parameter name).</param>
/// <param name="fn" type="Function">The function to call, which adapts the values from the HTML
/// attributes into jQuery Validate rules and/or messages.</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
if (!fn) { // Called with no params, just a function
fn = params;
params = [];
}
this.push({ name: adapterName, params: params, adapt: fn });
return this;
};
adapters.addBool = function (adapterName, ruleName) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
/// the jQuery Validate validation rule has no parameter values.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
/// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
/// of adapterName will be used instead.</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, function (options) {
setValidationValues(options, ruleName || adapterName, true);
});
};
adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
/// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and
/// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
/// <param name="minRuleName" type="String">The name of the jQuery Validate rule to be used when you only
/// have a minimum value.</param>
/// <param name="maxRuleName" type="String">The name of the jQuery Validate rule to be used when you only
/// have a maximum value.</param>
/// <param name="minMaxRuleName" type="String">The name of the jQuery Validate rule to be used when you
/// have both a minimum and maximum value.</param>
/// <param name="minAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
/// contains the minimum value. The default is "min".</param>
/// <param name="maxAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
/// contains the maximum value. The default is "max".</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) {
var min = options.params.min,
max = options.params.max;
if (min && max) {
setValidationValues(options, minMaxRuleName, [min, max]);
}
else if (min) {
setValidationValues(options, minRuleName, min);
}
else if (max) {
setValidationValues(options, maxRuleName, max);
}
});
};
adapters.addSingleVal = function (adapterName, attribute, ruleName) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
/// the jQuery Validate validation rule has a single value.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>
/// <param name="attribute" type="String">[Optional] The name of the HTML attribute that contains the value.
/// The default is "val".</param>
/// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
/// of adapterName will be used instead.</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, [attribute || "val"], function (options) {
setValidationValues(options, ruleName || adapterName, options.params[attribute]);
});
};
$jQval.addMethod("__dummy__", function (value, element, params) {
return true;
});
$jQval.addMethod("regex", function (value, element, params) {
var match;
if (this.optional(element)) {
return true;
}
match = new RegExp(params).exec(value);
return (match && (match.index === 0) && (match[0].length === value.length));
});
$jQval.addMethod("nonalphamin", function (value, element, nonalphamin) {
var match;
if (nonalphamin) {
match = value.match(/\W/g);
match = match && match.length >= nonalphamin;
}
return match;
});
if ($jQval.methods.extension) {
adapters.addSingleVal("accept", "mimtype");
adapters.addSingleVal("extension", "extension");
} else {
// for backward compatibility, when the 'extension' validation method does not exist, such as with versions
// of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for
// validating the extension, and ignore mime-type validations as they are not supported.
adapters.addSingleVal("extension", "extension", "accept");
}
adapters.addSingleVal("regex", "pattern");
adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");
adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");
adapters.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength");
adapters.add("equalto", ["other"], function (options) {
var prefix = getModelPrefix(options.element.name),
other = options.params.other,
fullOtherName = appendModelPrefix(other, prefix),
element = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(fullOtherName) + "']")[0];
setValidationValues(options, "equalTo", element);
});
adapters.add("required", function (options) {
// jQuery Validate equates "required" with "mandatory" for checkbox elements
if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") {
setValidationValues(options, "required", true);
}
});
adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
var value = {
url: options.params.url,
type: options.params.type || "GET",
data: {}
},
prefix = getModelPrefix(options.element.name);
$.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
var paramName = appendModelPrefix(fieldName, prefix);
value.data[paramName] = function () {
var field = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(paramName) + "']");
// For checkboxes and radio buttons, only pick up values from checked fields.
if (field.is(":checkbox")) {
return field.filter(":checked").val() || field.filter(":hidden").val() || '';
}
else if (field.is(":radio")) {
return field.filter(":checked").val() || '';
}
return field.val();
};
});
setValidationValues(options, "remote", value);
});
adapters.add("password", ["min", "nonalphamin", "regex"], function (options) {
if (options.params.min) {
setValidationValues(options, "minlength", options.params.min);
}
if (options.params.nonalphamin) {
setValidationValues(options, "nonalphamin", options.params.nonalphamin);
}
if (options.params.regex) {
setValidationValues(options, "regex", options.params.regex);
}
});
adapters.add("fileextensions", ["extensions"], function (options) {
setValidationValues(options, "extension", options.params.extensions);
});
$(function () {
$jQval.unobtrusive.parse(document);
});
return $jQval.unobtrusive;
}));
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,224 @@
/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
(function(w) {
"use strict";
w.matchMedia = w.matchMedia || function(doc, undefined) {
var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement("body"), div = doc.createElement("div");
div.id = "mq-test-1";
div.style.cssText = "position:absolute;top:-100em";
fakeBody.style.background = "none";
fakeBody.appendChild(div);
return function(q) {
div.innerHTML = '&shy;<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>';
docElem.insertBefore(fakeBody, refNode);
bool = div.offsetWidth === 42;
docElem.removeChild(fakeBody);
return {
matches: bool,
media: q
};
};
}(w.document);
})(this);
/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs */
(function(w) {
"use strict";
var respond = {};
w.respond = respond;
respond.update = function() {};
var requestQueue = [], xmlHttp = function() {
var xmlhttpmethod = false;
try {
xmlhttpmethod = new w.XMLHttpRequest();
} catch (e) {
xmlhttpmethod = new w.ActiveXObject("Microsoft.XMLHTTP");
}
return function() {
return xmlhttpmethod;
};
}(), ajax = function(url, callback) {
var req = xmlHttp();
if (!req) {
return;
}
req.open("GET", url, true);
req.onreadystatechange = function() {
if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {
return;
}
callback(req.responseText);
};
if (req.readyState === 4) {
return;
}
req.send(null);
};
respond.ajax = ajax;
respond.queue = requestQueue;
respond.regex = {
media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,
keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,
urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,
findStyles: /@media *([^\{]+)\{([\S\s]+?)$/,
only: /(only\s+)?([a-zA-Z]+)\s?/,
minw: /\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,
maxw: /\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/
};
respond.mediaQueriesSupported = w.matchMedia && w.matchMedia("only all") !== null && w.matchMedia("only all").matches;
if (respond.mediaQueriesSupported) {
return;
}
var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName("head")[0] || docElem, base = doc.getElementsByTagName("base")[0], links = head.getElementsByTagName("link"), lastCall, resizeDefer, eminpx, getEmValue = function() {
var ret, div = doc.createElement("div"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;
div.style.cssText = "position:absolute;font-size:1em;width:1em";
if (!body) {
body = fakeUsed = doc.createElement("body");
body.style.background = "none";
}
docElem.style.fontSize = "100%";
body.style.fontSize = "100%";
body.appendChild(div);
if (fakeUsed) {
docElem.insertBefore(body, docElem.firstChild);
}
ret = div.offsetWidth;
if (fakeUsed) {
docElem.removeChild(body);
} else {
body.removeChild(div);
}
docElem.style.fontSize = originalHTMLFontSize;
if (originalBodyFontSize) {
body.style.fontSize = originalBodyFontSize;
}
ret = eminpx = parseFloat(ret);
return ret;
}, applyMedia = function(fromResize) {
var name = "clientWidth", docElemProp = docElem[name], currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();
if (fromResize && lastCall && now - lastCall < resizeThrottle) {
w.clearTimeout(resizeDefer);
resizeDefer = w.setTimeout(applyMedia, resizeThrottle);
return;
} else {
lastCall = now;
}
for (var i in mediastyles) {
if (mediastyles.hasOwnProperty(i)) {
var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em";
if (!!min) {
min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);
}
if (!!max) {
max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);
}
if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {
if (!styleBlocks[thisstyle.media]) {
styleBlocks[thisstyle.media] = [];
}
styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);
}
}
}
for (var j in appendedEls) {
if (appendedEls.hasOwnProperty(j)) {
if (appendedEls[j] && appendedEls[j].parentNode === head) {
head.removeChild(appendedEls[j]);
}
}
}
appendedEls.length = 0;
for (var k in styleBlocks) {
if (styleBlocks.hasOwnProperty(k)) {
var ss = doc.createElement("style"), css = styleBlocks[k].join("\n");
ss.type = "text/css";
ss.media = k;
head.insertBefore(ss, lastLink.nextSibling);
if (ss.styleSheet) {
ss.styleSheet.cssText = css;
} else {
ss.appendChild(doc.createTextNode(css));
}
appendedEls.push(ss);
}
}
}, translate = function(styles, href, media) {
var qs = styles.replace(respond.regex.keyframes, "").match(respond.regex.media), ql = qs && qs.length || 0;
href = href.substring(0, href.lastIndexOf("/"));
var repUrls = function(css) {
return css.replace(respond.regex.urls, "$1" + href + "$2$3");
}, useMedia = !ql && media;
if (href.length) {
href += "/";
}
if (useMedia) {
ql = 1;
}
for (var i = 0; i < ql; i++) {
var fullq, thisq, eachq, eql;
if (useMedia) {
fullq = media;
rules.push(repUrls(styles));
} else {
fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;
rules.push(RegExp.$2 && repUrls(RegExp.$2));
}
eachq = fullq.split(",");
eql = eachq.length;
for (var j = 0; j < eql; j++) {
thisq = eachq[j];
mediastyles.push({
media: thisq.split("(")[0].match(respond.regex.only) && RegExp.$2 || "all",
rules: rules.length - 1,
hasquery: thisq.indexOf("(") > -1,
minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""),
maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "")
});
}
}
applyMedia();
}, makeRequests = function() {
if (requestQueue.length) {
var thisRequest = requestQueue.shift();
ajax(thisRequest.href, function(styles) {
translate(styles, thisRequest.href, thisRequest.media);
parsedSheets[thisRequest.href] = true;
w.setTimeout(function() {
makeRequests();
}, 0);
});
}
}, ripCSS = function() {
for (var i = 0; i < links.length; i++) {
var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
if (!!href && isCSS && !parsedSheets[href]) {
if (sheet.styleSheet && sheet.styleSheet.rawCssText) {
translate(sheet.styleSheet.rawCssText, href, media);
parsedSheets[href] = true;
} else {
if (!/^([a-zA-Z:]*\/\/)/.test(href) && !base || href.replace(RegExp.$1, "").split("/")[0] === w.location.host) {
if (href.substring(0, 2) === "//") {
href = w.location.protocol + href;
}
requestQueue.push({
href: href,
media: media
});
}
}
}
}
makeRequests();
};
ripCSS();
respond.update = ripCSS;
respond.getEmValue = getEmValue;
function callMedia() {
applyMedia(true);
}
if (w.addEventListener) {
w.addEventListener("resize", callMedia, false);
} else if (w.attachEvent) {
w.attachEvent("onresize", callMedia);
}
})(this);
+10
View File
@@ -0,0 +1,10 @@
Per sistemare log e script vari eseguire file install (come sudo)
POI va sistemata chiamata x target sysctl:
systemctl enable sendRebootIOB
systemctl daemon-reload
systemctl status sendRebootIOB
RICORDARSI di creare crontab x root x registrazione temperature!!!
*/20 * * * * /usr/local/bin/saveTemp.sh
+20
View File
@@ -0,0 +1,20 @@
#!/bin/bash
# gestione check x riavvio se offline
FILE=/home/pi/steamware/ImOffline.sta
# in aggiunta verifico di essere ancora online...
netStatus=`cat /sys/class/net/eth0/operstate`
if [[ $netStatus != "up" ]] ;
then
echo "Creating offline file $FILE"
touch "$FILE"
fi
# Verifica: se fosse offline esegue startBrowser...
if test -f "$FILE" ;
then
echo "$FILE exists, MON offline, try restart"
systemctl restart startBrowser
rm $FILE
fi
@@ -0,0 +1,60 @@
#|/bin/bash
#installa il necessario per RPI-MON partendo dal contenuto della folder /home/pi/steamware
#step 1: creo file di log nuovi
rm /var/log/log*.txt
rm /var/log/log*.log
rm /home/pi/steamware/log*.txt
rm /home/pi/steamware/log*.log
touch /var/log/logReboot.log
touch /var/log/logBrowser.log
touch /var/log/logTemp.log
touch /var/log/logMonitor.log
ln -sf /var/log/logReboot.log /home/pi/steamware/logReboot.log
ln -sf /var/log/logBrowser.log /home/pi/steamware/logBrowser.log
ln -sf /var/log/logTemp.log /home/pi/steamware/logTemp.log
ln -sf /var/log/logMonitor.log /home/pi/steamware/logMonitor.log
chown pi:pi /home/pi -R
chmod 777 /var/log/log*.log
#step 2: copio files in /usr/local/bin
chmod +x *.sh
cp *.sh /usr/local/bin/
cp *.ini /usr/local/bin/
# step 3: copio target systemd in avvio...
cp -f sendRebootIOB /etc/init.d/sendRebootIOB
chmod +x /etc/init.d/sendRebootIOB
cp -f sendRebootIOB.service /etc/systemd/system/sendRebootIOB.service
echo ""
echo "-----------------------------------------------"
echo "Completare registrazione servizio avvio: digitare i seguenti comandi"
echo "systemctl enable sendRebootIOB"
echo "systemctl daemon-reload"
echo "systemctl status sendRebootIOB"
echo "-----------------------------------------------"
echo ""
echo ""
echo ""
echo "-----------------------------------------------"
echo "Infine creare voce crontab che salvi temperatura CPU/GPU ogni 20 minuti..."
echo "crontab -e"
echo "*/20 * * * * /usr/local/bin/saveTemp.sh"
echo "-----------------------------------------------"
# step 4: copio target systemd in avvio x start browser...
cp -f startBrowser.service /etc/systemd/system/startBrowser.service
echo ""
echo "-----------------------------------------------"
echo "Completare registrazione servizio avvio: digitare i seguenti comandi"
echo "systemctl enable startBrowser"
echo "systemctl daemon-reload"
echo "systemctl status startBrowser"
echo "-----------------------------------------------"
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
xset s noblank
xset s off
xset -dpms
unclutter -idle 0.5 -root &
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences
/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
export DISPLAY=:0.0
xset dpms force standby
#imposto logFile
logFile="/var/log/logMonitor.log"
echo "$(date) | Monitor OFF " >> $logFile
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
export DISPLAY=:0.0
xset dpms force on
#imposto logFile
logFile="/var/log/logMonitor.log"
echo "$(date) | Monitor ON " >> $logFile
+17
View File
@@ -0,0 +1,17 @@
#!/bin/bash
#salva la temperatura CPU e GPU su chiamata...
# imposto logfile...
logFile="/var/log/logTemp.txt"
cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
gpuTemp=`vcgencmd measure_temp`
loadAvg=`cat /proc/loadavg`
echo "$(date) | CPU: temp=$cpuTemp1.$cpuTempM ºC | GPU: $gpuTemp | LoadAvg: $loadAvg" >> $logFile
+131
View File
@@ -0,0 +1,131 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# sendReboot v. 1.8
#---------------------------------------------------------------
import time
import sys
from datetime import datetime
import urllib.request
import configparser
import os, sys
import logging
import time
#---------------------------------------------------------------
# COSTANTI
PROGRAM_NAME = "SendReboot IOB-pi v.1.8"
# DA FILE CONF
idxMacchina = "99"
# registro se ho fatto chiamata
global numTry
numTry = 1
#---------------------------------------------------------------
#Funzione di scrittura su url con try-except
#---------------------------------------------------------------
def chiamaUrl(numTry):
try:
with urllib.request.urlopen( url ) as urlCli:
s = urlCli.read()
print(s)
numTry = numTry + 10
except Exception as e:
print (e)
logging.info ( e )
print("Url aforte" , url)
return numTry
#---------------------------------------------------------------
# Funzione di recupero mac address per poterlo inviare a MPIO
#---------------------------------------------------------------
def getMAC(interface):
# Return the MAC address of interface
try:
str = open('/sys/class/net/' + interface + '/address').read()
except:
str = "00:00:00:00:00:00"
return str[0:17]
#---------------------------------------------------------------
# MAIN
#---------------------------------------------------------------
try:
config = configparser.RawConfigParser()
config.read ( 'IOB.cfg' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
URLREBO = config.get ( 'web' , 'URLREBO' )
LOGFILE = config.get ( 'log' , 'LOGREBO' )
except:
print("\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg')
sys.exit(1)
#--------------------------------------------
# oggetto Logger
#--------------------------------------------
try:
# log = Logger(LOGFILE)
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=LOGFILE,
filemode='a')
except:
# manda mail o simili - FARE!!!
print ("LOG: Impossibile creare file log con nome ")
print (LOGFILE)
#--------------------------------------------
print ("\n\n" + PROGRAM_NAME + "\n\n")
global startstatus
startstatus = 1
if startstatus == 1:
logging.info("Avvio Programma " + PROGRAM_NAME)
# lettura file configurazione
print ( ' idxMacchina = %s' % ( idxMacchina ) )
print ( ' URLREBO = %s' % ( URLREBO ) )
print ( ' LOGFILE = %s' % ( LOGFILE ) )
# lettura mac address
myMac = getMAC('eth0')
print ( ' MAC Address = %s' % ( myMac ) )
# configuro URL da inviare
url = URLREBO + idxMacchina + "&mac=" + myMac
# modifica: cerco se ho inviato segnale altrimenti ritento invio...
while (numTry < 11):
logging.info("Tentativo invio URL: " + str(numTry) )
numTry = chiamaUrl(numTry)
time.sleep(3)
numTry = numTry + 1
# registro che ho inviato!
logging.info("Inviato segnale di reboot!: " + url )
+31
View File
@@ -0,0 +1,31 @@
#!/bin/sh -
#
### BEGIN INIT INFO
# Provides: sendReboot
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Steamware's IOB reboot signal
# Description: Steamware's sendReboot segnalazione reboot dispositivo
### END INIT INFO
#! /bin/sh
# /etc/init.d/sendReboot
export HOME
case "$1" in
start)
echo "Starting sendReboot"
cd /home/pi/steamware
/usr/bin/python ./sendReboot.py 2>&1 &
;;
*)
echo "Usage: /etc/init.d/sendReboot {start}"
exit 1
;;
esac
exit 0
@@ -0,0 +1,21 @@
[Unit]
SourcePath=/etc/init.d/sendRebootIOB
Description=LSB: Steamware's IOB reboot signal
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
Wants=network-online.target
After=network.target network-online.target auditd.service
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/init.d/sendRebootIOB start
ExecStop=/etc/init.d/sendRebootIOB stop
[Install]
WantedBy=multi-user.target
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,15 @@
[Unit]
Description=LSB: Steamware's IOB MON Chromium startup
After=graphical.target
[Service]
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/pi/.Xauthority
Type=simple
ExecStart=/bin/bash /home/pi/steamware/startBrowser.sh
Restart=on-abort
User=pi
Group=pi
[Install]
WantedBy=graphical.target
+91
View File
@@ -0,0 +1,91 @@
#!/bin/bash
# imposto logfile...
logFile="/var/log/logBrowser.txt"
#imposto rete e server: leggo conf file (non funziona all'avvio)
. MON.ini
#setup rete steamware
#localNet="10.74.82"
#srvAddr="10.74.82.219"
#setup rete cliente
#localNet="??.??.??"
#srvAddr="??.??.??.??"
# chiudo se fosse aperto un chrome precedente...
killall -9 chromium-browser
# primo test: rete online...
numTry=0
netStatus=`cat /sys/class/net/eth0/operstate`
iaddr=`ifconfig eth0 | grep "inet " | cut -d 'n' -f 2 | cut -d ' ' -f 2`
#echo "Netstatus: $netstatus" >> $logFile
while [ $netStatus != "up" ] ;
do
numTry=$(( $numTry + 1 ))
echo "$(date) | Siamo Offline, tentativo num $numTry" >> $logFile
if [ $numTry -gt 15 ]
then
netStatus=`cat /sys/class/net/eth0/operstate`
break
fi
sleep 1s
netStatus=`cat /sys/class/net/eth0/operstate`
#echo "Netstatus: $netstatus"
done
echo "$(date) | Cavo connesso, eth: $netStatus" >> $logFile
#ora aspetto prenda IP...
iaddr=`/sbin/ifconfig eth0 | grep "inet " | cut -d 'n' -f 2 | cut -d ' ' -f 2`
numTry=0
while [[ $iaddr == "" ]] ;
do
numTry=$(( $numTry + 1 ))
echo "$(date) | Attesa IP, tentativo num $numTry" >> $logFile
if [ $numTry -gt 60 ]
then
iaddr=`/sbin/ifconfig eth0 | grep "inet " | cut -d 'n' -f 2 | cut -d ' ' -f 2`
break
fi
sleep 1s
iaddr=`/sbin/ifconfig eth0 | grep "inet " | cut -d 'n' -f 2 | cut -d ' ' -f 2`
#echo "IP: $iaddr"
done
echo "$(date) | IP: $iaddr" >> $logFile
# default imposto su pagina demo!!
url='/home/pi/steamware/MP-MON-DEMO.html'
#url='http://10.74.82.218/MP/MON'
if [[ $iaddr == "$localNet"* ]]
then
url="http://$srvAddr/MP/MON"
echo "$(date) | Siamo in target URL, imposto pagina a $url!" >> $logFile
rm /home/pi/steamware/ImOffline.sta >> /dev/null 2>&1
else
# salvo che sono offline
touch /home/pi/steamware/ImOffline.sta
fi
# chiudo se fosse aperto un chrome precedente...
killall -9 chromium-browser
# fix salvaschermo
xset s noblank
xset s off
xset -dpms
unclutter -idle 1.5 -root &
# pulizia eventuale di errori su ultima chiusura chromium
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate --disable-infobars --disable-component-update
+20
View File
@@ -0,0 +1,20 @@
#!/bin/bash
# verifico se sia rete donati o rete steamware o offline...
netStatus=`cat /sys/class/net/eth0/operstate`
iaddr=`ifconfig eth0 | grep "inet " | cut -d 'n' -f 2 | cut -d ' ' -f 2`
if [[ $netStatus != "up" ]]
then
echo "Siamo Offline, pagina demo!"
elif [[ $iaddr == "10.74.82"* ]]
then
echo "Siamo in Steamware!"
elif [[ $iaddr == "192.168.51"* ]]
then
echo "Siamo a Passirano!"
else
echo "Siamo altrove, pagina demo!"
fi
echo "$iaddr"