diff --git a/panels/clock/script.js b/panels/clock/script.js index fd702f88e349e82718b09038573de5462a496cae..86ff9b1df4f23cdcf21a95c4d9763ff8dee182d4 100755 --- a/panels/clock/script.js +++ b/panels/clock/script.js @@ -57,7 +57,6 @@ this.loaded = function(panel, config) { smlFontPost = "time-medium"; // width * 18.75% init = function() { - if (fontsReady) { digiBackground = document.createElement('canvas'); analBackground = document.createElement('canvas'); @@ -75,6 +74,8 @@ this.loaded = function(panel, config) { } this.resize = function(width, height) { +console.log("width " + width); +console.log("height " + height); if (height > width) { var size = height / 2; if (!!analClock) { @@ -89,7 +90,7 @@ this.loaded = function(panel, config) { $(analClock).attr('width', size).attr('height', height); } if (!!digiClock) { - $(digiClock).attr('width', width - size - 5).attr('height', height); + $(digiClock).attr('width', width - size - 6).attr('height', height); } } calc(); diff --git a/panels/departure/departures.php b/panels/departure/departures.php index c5c03bc4907194035f252108a904197ed3e9e612..e08149fe5fd2ceb53fd7aec20513212de58d163f 100644 --- a/panels/departure/departures.php +++ b/panels/departure/departures.php @@ -1,196 +1,193 @@ -<?php - error_reporting (-1); - ini_set ('display_errors', 1); - - // initialize frontend - header('Content-type: text/javascript'); - - // set root - chdir($_SERVER['DOCUMENT_ROOT']); - - // version-info - $version = "0.05"; - $vrrf_version = "0.07"; - - // options - $options = array(); - - // max entries - $max = 1000000; - - // configuration - if (isset($_GET['config'])) { - $file = $_GET['config']; - if (!file_exists($file)) { - $result['error'] = 'config file "'.$file.'" not found'; - $result['config']['name'] = $file; - $result['options'] = $options; - echo json_encode($result); - exit; - } - $config = file_get_contents($file); - $buffer = json_decode($config, true); - $options['stops'] = $buffer['stops']; - $options['filter'] = $buffer['filter']; - if (is_numeric($buffer['max'])) { - $max = $buffer['max']; - } - if (count($options['stops']) == 0) { - $result['error'] = 'no stops defined'; - $result['config']['name'] = $config_name; - $result['config']['type'] = 'panel/departure'; - $result['options'] = $options; - echo json_encode($result); - exit; - } - } else { - $result['error'] = 'no config defined'; - $result['config']['name'] = $config_name; - $result['config']['type'] = 'panel/departure'; - $result['options'] = $options; - echo json_encode($result); - exit; - } - - - usort($options['stops'], function($a, $b) { - return strcmp($a, $b); - }); - - // cache - $name = json_encode($options); - $cachefile = "cache/vrr_".md5($name).".json"; - $cachetime = 60; - $cache_ablauf = 0; - $cacheused = false; - $rawdata = array(); - $alldata = array(); - - if (is_file($cachefile)) - $cache_ablauf=filemtime($cachefile)+$cachetime; - if (!isset($_GET["nocache"]) && is_file($cachefile) && (time() < filemtime($cachefile)+$cachetime)) { - $plain = file_get_contents($cachefile); - $alldata = json_decode($plain, true); - $cacheused = true; - } else { - foreach ($options['stops'] as $n => $stop) { - $stopsplit = explode(":",$stop); - - // errors? - if ($stopsplit == $stop) - echo "<div error><h1>NAME ERROR!</h1>$stop<br/>Not a propper stop name. Usage: city:stop[;city:stop]*</div>"; - - // get departures - $plain = file_get_contents("http://vrrf.finalrewind.org/$stopsplit[0]/$stopsplit[1].json?frontend=json"); - $data = json_decode($plain, true); - // version - $alldata["version"] = $version; - $alldata["vrrf_version"] = $data['version']; - $alldata["used_vrrf_version"] = $vrrf_version; - // api_errors - $alldata["errors"]["$stopsplit[0] - $stopsplit[1]"] = $data['error']; - // info - $alldata["info"] = ""; // TODO generate informations - // data - $rawdata["$stopsplit[0] - $stopsplit[1]"] = $data['raw']; - } - - $reftime = date("dHi"); - $alldata['lines'] = array(); - foreach ($rawdata as $stop => $data) { - // process - foreach ($data as $i => $entry) { - - // filter - if (isset($options['filter']['bl'])) { - if (isset($options['filter']['bl']['line']) ) { - if (in_array($entry['line'], $options['filter']['bl']['line'])) { - continue; - } - } - if (isset($options['filter']['bl']['type']) ) { - if (in_array($entry['type'], $options['filter']['bl']['type'])) { - continue; - } - } - if (isset($options['filter']['bl']['platform']) ) { - if (in_array($entry['platform'], $options['filter']['bl']['platform'])) { - continue; - } - } - } - if (isset($options['filter']['wl'])) { - if (isset($options['filter']['wl']['line']) ) { - if (!in_array($entry['line'], $options['filter']['wl']['line'])) { - continue; - } - } - if (isset($options['filter']['wl']['type']) ) { - if (!in_array($entry['type'], $options['filter']['wl']['type'])) { - continue; - } - } - if (isset($options['filter']['wl']['platform']) ) { - if (!in_array($entry['platform'], $options['filter']['wl']['platform'])) { - continue; - } - } - } - // !filter - - $scheddate = explode(".",$entry['sched_date']); - $schedtime = explode(":",$entry['sched_time']); - $deptime = $scheddate[0].$schedtime[0].$schedtime[1]; - //echo intval($deptime)." + ".intval($entry['delay'])." - ".intval($reftime)." = ".(intval($deptime) + intval($entry['delay']) - intval($reftime))."<br/>"; - if (intval($deptime) + intval($entry['delay']) - intval($reftime) > 0) { - $buf = array('date' => $entry['sched_date'], 'time' => $entry['sched_time'], 'delay' => $entry['delay'], 'cancel' => $entry['is_cancelled'], 'name' => $stop, 'info' => $entry['info']); - foreach ($alldata['lines'] as $key => $value) { - if (($entry['key'] == $value['key']) && ($entry['lineref']['identifier'] == $value['identifier']) && ($entry['line'] == $value['line'])) { - $ibuf = sizeof($alldata['lines'][$key]['stops']); - while ($buf != null) { - if ($ibuf < 1 || strcmp($buf['time'], $alldata['lines'][$key]['stops'][$ibuf - 1]['time']) > 0) { - $alldata['lines'][$key]['stops'][$ibuf] = $buf; - $buf = null; - } else { - $alldata['lines'][$key]['stops'][$ibuf] = $alldata['lines'][$key]['stops'][$ibuf - 1]; - $ibuf--; - } - } - break; - } - } - if ($buf != null) { - $dbuf = array('line' => $entry['line'], 'destination' => $entry['destination'], 'type' => $entry['type'], 'key' => $entry['key'], 'identifier' => $entry['lineref']['identifier'], 'stops' => array($buf)); - $alldata['lines'][] = $dbuf; - } - } - } - - } - - // sort - usort($alldata['lines'], function($a, $b) { - // atime - $scheddate = explode(".",$a['stops'][0]['date']); - $schedtime = explode(":",$a['stops'][0]['time']); - $atime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1]; - // btime - $scheddate = explode(".",$b['stops'][0]['date']); - $schedtime = explode(":",$b['stops'][0]['time']); - $btime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1]; - // compare - return intval($atime) - intval($btime); - }); - - // clean - foreach ($alldata['lines'] as $id => $line) { - unset($alldata['lines'][$id]['key']); - unset($alldata['lines'][$id]['identifier']); - } - - // save cache - file_put_contents($cachefile,json_encode($alldata)); - } - - echo json_encode($alldata); -?> +<?php + error_reporting (-1); + ini_set ('display_errors', 1); + + // initialize frontend + header('Content-type: text/json'); + + // version-info + $version = "0.05"; + $vrrf_version = "0.07"; + + // options + $options = array(); + + // max entries + $max = 1000000; + + // configuration + if (isset($_GET['config'])) { + $file = "config/" . $_GET['config'] . ".json"; + if (!file_exists($file)) { + $result['error'] = 'config file "'.$file.'" not found'; + $result['config']['name'] = $file; + $result['options'] = $options; + echo json_encode($result); + exit; + } + $config = file_get_contents($file); + $buffer = json_decode($config, true); + $options['stops'] = $buffer['stops']; + $options['filter'] = $buffer['filter']; + if (is_numeric($buffer['max'])) { + $max = $buffer['max']; + } + if (count($options['stops']) == 0) { + $result['error'] = 'no stops defined'; + $result['config']['name'] = $config_name; + $result['config']['type'] = 'panel/departure'; + $result['options'] = $options; + echo json_encode($result); + exit; + } + } else { + $result['error'] = 'no config defined'; + $result['config']['name'] = $config_name; + $result['config']['type'] = 'panel/departure'; + $result['options'] = $options; + echo json_encode($result); + exit; + } + + + usort($options['stops'], function($a, $b) { + return strcmp($a, $b); + }); + + // cache + $name = json_encode($options); + $cachefile = "cache/vrr_".md5($name).".json"; + $cachetime = 60; + $cache_ablauf = 0; + $cacheused = false; + $rawdata = array(); + $alldata = array(); + + if (is_file($cachefile)) + $cache_ablauf=filemtime($cachefile)+$cachetime; + if (!isset($_GET["nocache"]) && is_file($cachefile) && (time() < filemtime($cachefile)+$cachetime)) { + $plain = file_get_contents($cachefile); + $alldata = json_decode($plain, true); + $cacheused = true; + } else { + foreach ($options['stops'] as $n => $stop) { + $stopsplit = explode(":",$stop); + + // errors? + if ($stopsplit == $stop) + echo "<div error><h1>NAME ERROR!</h1>$stop<br/>Not a propper stop name. Usage: city:stop[;city:stop]*</div>"; + + // get departures + $plain = file_get_contents("http://vrrf.finalrewind.org/$stopsplit[0]/$stopsplit[1].json?frontend=json"); + $data = json_decode($plain, true); + // version + $alldata["version"] = $version; + $alldata["vrrf_version"] = $data['version']; + $alldata["used_vrrf_version"] = $vrrf_version; + // api_errors + $alldata["errors"]["$stopsplit[0] - $stopsplit[1]"] = $data['error']; + // info + $alldata["info"] = ""; // TODO generate informations + // data + $rawdata["$stopsplit[0] - $stopsplit[1]"] = $data['raw']; + } + + $reftime = date("dHi"); + $alldata['lines'] = array(); + foreach ($rawdata as $stop => $data) { + // process + foreach ($data as $i => $entry) { + + // filter + if (isset($options['filter']['bl'])) { + if (isset($options['filter']['bl']['line']) ) { + if (in_array($entry['line'], $options['filter']['bl']['line'])) { + continue; + } + } + if (isset($options['filter']['bl']['type']) ) { + if (in_array($entry['type'], $options['filter']['bl']['type'])) { + continue; + } + } + if (isset($options['filter']['bl']['platform']) ) { + if (in_array($entry['platform'], $options['filter']['bl']['platform'])) { + continue; + } + } + } + if (isset($options['filter']['wl'])) { + if (isset($options['filter']['wl']['line']) ) { + if (!in_array($entry['line'], $options['filter']['wl']['line'])) { + continue; + } + } + if (isset($options['filter']['wl']['type']) ) { + if (!in_array($entry['type'], $options['filter']['wl']['type'])) { + continue; + } + } + if (isset($options['filter']['wl']['platform']) ) { + if (!in_array($entry['platform'], $options['filter']['wl']['platform'])) { + continue; + } + } + } + // !filter + + $scheddate = explode(".",$entry['sched_date']); + $schedtime = explode(":",$entry['sched_time']); + $deptime = $scheddate[0].$schedtime[0].$schedtime[1]; + //echo intval($deptime)." + ".intval($entry['delay'])." - ".intval($reftime)." = ".(intval($deptime) + intval($entry['delay']) - intval($reftime))."<br/>"; + if (intval($deptime) + intval($entry['delay']) - intval($reftime) > 0) { + $buf = array('date' => $entry['sched_date'], 'time' => $entry['sched_time'], 'delay' => $entry['delay'], 'cancel' => $entry['is_cancelled'], 'name' => $stop, 'info' => $entry['info']); + foreach ($alldata['lines'] as $key => $value) { + if (($entry['key'] == $value['key']) && ($entry['lineref']['identifier'] == $value['identifier']) && ($entry['line'] == $value['line'])) { + $ibuf = sizeof($alldata['lines'][$key]['stops']); + while ($buf != null) { + if ($ibuf < 1 || strcmp($buf['time'], $alldata['lines'][$key]['stops'][$ibuf - 1]['time']) > 0) { + $alldata['lines'][$key]['stops'][$ibuf] = $buf; + $buf = null; + } else { + $alldata['lines'][$key]['stops'][$ibuf] = $alldata['lines'][$key]['stops'][$ibuf - 1]; + $ibuf--; + } + } + break; + } + } + if ($buf != null) { + $dbuf = array('line' => $entry['line'], 'destination' => $entry['destination'], 'type' => $entry['type'], 'key' => $entry['key'], 'identifier' => $entry['lineref']['identifier'], 'stops' => array($buf)); + $alldata['lines'][] = $dbuf; + } + } + } + + } + + // sort + usort($alldata['lines'], function($a, $b) { + // atime + $scheddate = explode(".",$a['stops'][0]['date']); + $schedtime = explode(":",$a['stops'][0]['time']); + $atime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1]; + // btime + $scheddate = explode(".",$b['stops'][0]['date']); + $schedtime = explode(":",$b['stops'][0]['time']); + $btime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1]; + // compare + return intval($atime) - intval($btime); + }); + + // clean + foreach ($alldata['lines'] as $id => $line) { + unset($alldata['lines'][$id]['key']); + unset($alldata['lines'][$id]['identifier']); + } + + // save cache + file_put_contents($cachefile,json_encode($alldata)); + } + + echo json_encode($alldata); +?> diff --git a/panels/departure/script.js b/panels/departure/script.js index d453dab98b3ddd5a09bc145e125b8d184532d534..e5d17c99bd3acc7d164a3fba70ddf3e271e89a82 100755 --- a/panels/departure/script.js +++ b/panels/departure/script.js @@ -65,7 +65,7 @@ this.loaded = function(panel, config) { var update = function(config, fields) { console.log("departures: get data [" + config + "]"); - $.get("panels/departure/departures.php?config=config/panel/departure/" + config + ".json", function(decodedData) { + $.get("panels/departure/departures.php?config=" + config , function(decodedData) { console.log("departures: check vrrf errors [" + config + "]"); if (!!decodedData.errors) { @@ -286,4 +286,4 @@ var buildDOM = function(config, fields) { elements.push(buf.self); } $(fields.cont).append(elements); -} \ No newline at end of file +} diff --git a/panels/departure/style.less b/panels/departure/style.less index 9c06e3842aee1a8e2558b42b3d9ca98f0ca08e11..dc1b3d4ac72ff7994ecf5d930ccb8b365f6786f8 100755 --- a/panels/departure/style.less +++ b/panels/departure/style.less @@ -10,7 +10,7 @@ box-sizing: border-box; overflow: hidden; font-family: display; - font-weight: bold; + /* font-weight: bold */ [data-departure] { position: relative; @@ -137,4 +137,4 @@ width: 100%; } } -} \ No newline at end of file +} diff --git a/panels/scrollbar/script.js b/panels/scrollbar/script.js index 76df35f421ab101053c43b3dda939494107b959f..b473444d69e918483a68a50d40d3574d8765a359 100755 --- a/panels/scrollbar/script.js +++ b/panels/scrollbar/script.js @@ -2,7 +2,7 @@ var CM; this.loaded = function(panel, config) { console.log("scrollbar: register with config [" + config + "]"); - + function CanvasMarquee() { var me = this, @@ -20,7 +20,7 @@ this.loaded = function(panel, config) { mctx = null, strings = [], texts = []; - + init = function() { marquee = $(panel).find('[data-marquee]')[0]; width = $(panel).width(); @@ -28,14 +28,14 @@ this.loaded = function(panel, config) { $(marquee).attr('width', width).attr('height', height); mctx = marquee.getContext('2d'); } - + this.setTexts = function(t) { strings = t; prerender(); textID = -1; nextText(); } - + this.resize = function() { oldWidth = width; width = $(panel).width(); @@ -45,30 +45,35 @@ this.loaded = function(panel, config) { prerender(); left = left * width / oldWidth; } - - render = function() { + + render = function(delta) { if (left > -texts[textID].width) { + + left = left - (amount > 0 ? amount : 1); + mctx.fillStyle = bgColor; mctx.fillRect(0, 0, width, height); - mctx.drawImage(texts[textID].text, (left = left - (amount > 0 ? amount : 1)), 0); + mctx.drawImage(texts[textID].text, left, 0); window.requestAnimationFrame(render); } else { setTimeout(nextText, (delay >= 0 ? delay : 0) * 1000); } - + } - + nextText = function() { textID = (textID + 1) % texts.length; left = width; + start = new Date(); + start=null; window.requestAnimationFrame(render); } - + prerender = function() { mctx.font = height + "px " + font; texts = []; for (var i = 0; i < strings.length; ++i) { - var + var text = '+++ ' + strings[i].join(' +++ +++ ') + ' +++', bWidth = mctx.measureText(text).width, buffer = document.createElement('canvas'), @@ -84,23 +89,23 @@ this.loaded = function(panel, config) { }); } } - + init(); } $.get("config/panel/scrollbar/oh14.json", function(decodedData) { CM = new CanvasMarquee(); CM.setTexts(decodedData.texts); }); - + r = function() { resize(); } - + $(window).resize(r); - + } var resize = function() { if (CM) CM.resize(); -} \ No newline at end of file +}