Nuova area conf x IOB-MON
This commit is contained in:
@@ -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 |
@@ -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"
|
||||
@@ -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>
|
||||
Binary file not shown.
Binary file not shown.
@@ -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
+10259
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
+10872
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 = '­<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);
|
||||
@@ -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
|
||||
@@ -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 "-----------------------------------------------"
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 )
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user