diff --git a/.gitattributes b/.gitattributes index bb9254b..096af20 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,17 +1,17 @@ * text=auto !eol -www/TileLayer.Grayscale.js -text -www/first.png -text -www/jquery.localtime-0.9.1.min.js -text -www/jquery.tablesorter.min.js -text -www/jquery.tablesorter.pager.css -text -www/jquery.tablesorter.pager.min.js -text -www/jquery.tablesorter.widgets.min.js -text -www/last.png -text -www/leaflet.css -text -www/leaflet.js -text +www/external/TileLayer.Grayscale.js -text +www/external/first.png -text +www/external/jquery.localtime-0.9.1.min.js -text +www/external/jquery.tablesorter.min.js -text +www/external/jquery.tablesorter.pager.css -text +www/external/jquery.tablesorter.pager.min.js -text +www/external/jquery.tablesorter.widgets.min.js -text +www/external/last.png -text +www/external/leaflet.css -text +www/external/leaflet.js -text +www/external/next.png -text +www/external/prev.png -text +www/external/sprintf.min.js -text +www/external/theme.blue.css -text +www/external/widget-pager.js -text www/logo_RUB_155x30.png -text -www/next.png -text -www/prev.png -text -www/sprintf.min.js -text -www/theme.blue.css -text -www/widget-pager.js -text diff --git a/www/events.js b/www/events.js index 6891b1d..bef9f19 100644 --- a/www/events.js +++ b/www/events.js @@ -1,3 +1,27 @@ +/********************************************************************** + * events.js * + * script for event specific functions and setup * + **********************************************************************/ + +/* License + Copyright 2014 Kasper D. Fischer + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License along + with this program. If not, see http://www.gnu.org/licenses/. + + $Id$ +*/ + /* do reverse geolocation lookup */ function getGeolocation(id, lat, lng) { if ( !geolocationTable[id] ) { @@ -50,7 +74,7 @@ function ajaxLoadEvents(stime, etime) { maxlat: N+d, minlon: W-d, maxlon: E+d, - minmag: minMag-0.1, + minmag: config['event']['minMag']-0.1, }; $.ajax({ type: "GET", @@ -68,10 +92,17 @@ function ajaxLoadEvents(stime, etime) { var evaluationMode = $(this).find('evaluationMode').text(); var evaluationStatus = $(this).find('evaluationStatus').text(); var type = $(this).find('type').last().text(); - var location = getLocation(Number(lat), Number(lng))[0]; - ( location ) ? null : location = $(this).find('description > text').text(); + var location + // try use location with reverse geolocation lookup (nominatim), check cache first + // use getLocation if it fails or description -> text if it also fails + if ( geolocationTable[id] ) { + location = geolocationTable[id]; + } else { + location = getGeolocation(id, lat, lng); + ( location ) ? null : location = $(this).find('description > text').text(); + }; // create table row: Date, Time, Mag, Location - if ( !eventTable[id] && ( type == 'earthquake' || type == 'induced or triggered event' || type == 'outside of network interest') && evaluationMode != 'automatic' && evaluationStatus != 'preliminary' && Number(mag)+0.05 >= minMag ) { + if ( !eventTable[id] && $.inArray(type, config['event']['typeWhitelist'] )+1 && $.inArray(evaluationStatus, config['event']['evaluationBlacklist'])<0 && Number(mag)+0.05 >= config['event']['minMag'] ) { var row = '' + ''+otime.split('.')[0]+'Z' + ''+otime.split('.')[0]+'Z' @@ -99,8 +130,6 @@ function ajaxLoadEvents(stime, etime) { + sprintf('Ort: %.4f °N, %.4f °O
', Number(lat), Number(lng)) + sprintf('Zeit: %sZ

', otime.split('.')[0], otime.split('.')[0]); marker.bindPopup(text); - // try to get better location with reverse geolocation lookup (nominatim), check cache first - ( geolocationTable[id] ) ? $("#eventstable a.toggle[eventid="+id+"]").text(geolocationTable[id]) : getGeolocation(id, lat, lng); }; }); }, @@ -119,7 +148,8 @@ function ajaxLoadEvents(stime, etime) { }); }; -// add row to table +/* add row to table + obsolete */ function addEventRow(id, props) { $('#eventstable').tablesorter({ sortList: "[[0,0], [1,1]], [2,1]", @@ -167,6 +197,79 @@ function addEventRow(id, props) { $("#eventstable").trigger("update", [true]); }; +/* toggles visibility of filtered markers + * only events in the event list are shown */ +function toggleFilteredMarkers() { + // show all shown events in map + $("#eventstable > tbody > tr:not(.filtered) > td > a.map-link").each( function() { + if ( $(this).attr("eventid") ) { + eventTable[$(this).attr("eventid")].setStyle({opacity: 1, strokeOpacity: 1, fillOpacity: config['event']['markerOpacity']}); + }; + }); + + // hide filtered events in map + $("#eventstable > tbody > tr.filtered > td > a.map-link").each( function() { + if ( $(this).attr("eventid") ) { + eventTable[$(this).attr("eventid")].setStyle({opacity: 0, strokeOpacity: 0, fillOpacity: 0}); + }; + }); + highlightFirstEvent(); +}; + +/* Highlight the first event of the event list on the map if no + * other event is selected */ +function highlightFirstEvent() { + var highlightStyle = { + color: 'red', + fillColor: '#f03', + }; + var normalStyle = { + fillColor: "#FFF500", + color: "#FFF500" + }; + $("#eventstable a.map-link").each( function() { + if ( $(this).attr("eventid") ) { + eventTable[$(this).attr("eventid")].setStyle(normalStyle); + $(this).removeClass('first'); + $(this).text('Karte'); + }; + }); + $("#eventstable > tbody > tr:not(.filtered)").first().find("a.map-link").each(function() { + if ( $(this).attr("eventid") ) { + eventTable[$(this).attr("eventid")].setStyle(highlightStyle); + $(this).addClass('first'); + $(this).text('Karte (rot)'); + }; + }); +}; + +function highlightEvent( id ) { + var highlightStyle = { + color: 'red', + fillColor: '#f03', + }; + var normalStyle = { + fillColor: "#FFF500", + color: "#FFF500" + }; + $("#eventstable > tbody > tr:not(.filtered)").find("a.map-link").each( function() { + if ( $(this).attr("eventid") ) { + if ( $(this).attr("eventid") == id ) { + eventTable[$(this).attr("eventid")].setStyle(highlightStyle); + $(this).addClass('first'); + $(this).text('Karte (rot)'); + } else { + eventTable[$(this).attr("eventid")].setStyle(normalStyle); + $(this).removeClass('first'); + $(this).text('Karte'); + } + }; + }); +}; + +/********************************************************************** + * document ready * + **********************************************************************/ $(document).ready(function() { // tablesorter for event list $("#eventstable").tablesorter( diff --git a/www/TileLayer.Grayscale.js b/www/external/TileLayer.Grayscale.js similarity index 100% rename from www/TileLayer.Grayscale.js rename to www/external/TileLayer.Grayscale.js diff --git a/www/first.png b/www/external/first.png similarity index 100% rename from www/first.png rename to www/external/first.png diff --git a/www/jquery.localtime-0.9.1.min.js b/www/external/jquery.localtime-0.9.1.min.js similarity index 100% rename from www/jquery.localtime-0.9.1.min.js rename to www/external/jquery.localtime-0.9.1.min.js diff --git a/www/jquery.tablesorter.min.js b/www/external/jquery.tablesorter.min.js similarity index 100% rename from www/jquery.tablesorter.min.js rename to www/external/jquery.tablesorter.min.js diff --git a/www/jquery.tablesorter.pager.css b/www/external/jquery.tablesorter.pager.css similarity index 100% rename from www/jquery.tablesorter.pager.css rename to www/external/jquery.tablesorter.pager.css diff --git a/www/jquery.tablesorter.pager.min.js b/www/external/jquery.tablesorter.pager.min.js similarity index 100% rename from www/jquery.tablesorter.pager.min.js rename to www/external/jquery.tablesorter.pager.min.js diff --git a/www/jquery.tablesorter.widgets.min.js b/www/external/jquery.tablesorter.widgets.min.js similarity index 100% rename from www/jquery.tablesorter.widgets.min.js rename to www/external/jquery.tablesorter.widgets.min.js diff --git a/www/last.png b/www/external/last.png similarity index 100% rename from www/last.png rename to www/external/last.png diff --git a/www/leaflet.css b/www/external/leaflet.css similarity index 100% rename from www/leaflet.css rename to www/external/leaflet.css diff --git a/www/leaflet.js b/www/external/leaflet.js similarity index 100% rename from www/leaflet.js rename to www/external/leaflet.js diff --git a/www/next.png b/www/external/next.png similarity index 100% rename from www/next.png rename to www/external/next.png diff --git a/www/prev.png b/www/external/prev.png similarity index 100% rename from www/prev.png rename to www/external/prev.png diff --git a/www/sprintf.min.js b/www/external/sprintf.min.js similarity index 100% rename from www/sprintf.min.js rename to www/external/sprintf.min.js diff --git a/www/theme.blue.css b/www/external/theme.blue.css similarity index 100% rename from www/theme.blue.css rename to www/external/theme.blue.css diff --git a/www/widget-pager.js b/www/external/widget-pager.js similarity index 100% rename from www/widget-pager.js rename to www/external/widget-pager.js diff --git a/www/index.html.de b/www/index.html.de index 06f7c82..71f8620 100644 --- a/www/index.html.de +++ b/www/index.html.de @@ -16,29 +16,29 @@ - + - - - - - + + + + + - + - - + + - - - + + + @@ -56,11 +56,11 @@
- First - Prev + First + Prev - Next - Last + Next + Last diff --git a/www/map.js b/www/map.js index 6671a3e..7150158 100644 --- a/www/map.js +++ b/www/map.js @@ -1,72 +1,26 @@ -/* toggles visibility of filtered markers - * only events in the event list are shown */ -function toggleFilteredMarkers() { - // show all shown events in map - $("#eventstable > tbody > tr:not(.filtered) > td > a.map-link").each( function() { - if ( $(this).attr("eventid") ) { - eventTable[$(this).attr("eventid")].setStyle({opacity: 1, strokeOpacity: 1, fillOpacity: eventMarkerOpacity}); - }; - }); +/********************************************************************** + * map.js * + * script for map specific functions and setup * + **********************************************************************/ - // hide filtered events in map - $("#eventstable > tbody > tr.filtered > td > a.map-link").each( function() { - if ( $(this).attr("eventid") ) { - eventTable[$(this).attr("eventid")].setStyle({opacity: 0, strokeOpacity: 0, fillOpacity: 0}); - }; - }); - highlightFirstEvent(); -}; +/* License + Copyright 2014 Kasper D. Fischer -/* Highlight the first event of the event list on the map if no - * other event is selected */ -function highlightFirstEvent() { - var highlightStyle = { - color: 'red', - fillColor: '#f03', - }; - var normalStyle = { - fillColor: "#FFF500", - color: "#FFF500" - }; - $("#eventstable a.map-link").each( function() { - if ( $(this).attr("eventid") ) { - eventTable[$(this).attr("eventid")].setStyle(normalStyle); - $(this).removeClass('first'); - $(this).text('Karte'); - }; - }); - $("#eventstable > tbody > tr:not(.filtered)").first().find("a.map-link").each(function() { - if ( $(this).attr("eventid") ) { - eventTable[$(this).attr("eventid")].setStyle(highlightStyle); - $(this).addClass('first'); - $(this).text('Karte (rot)'); - }; - }); -}; + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. -function highlightEvent( id ) { - var highlightStyle = { - color: 'red', - fillColor: '#f03', - }; - var normalStyle = { - fillColor: "#FFF500", - color: "#FFF500" - }; - $("#eventstable > tbody > tr:not(.filtered)").find("a.map-link").each( function() { - if ( $(this).attr("eventid") ) { - if ( $(this).attr("eventid") == id ) { - eventTable[$(this).attr("eventid")].setStyle(highlightStyle); - $(this).addClass('first'); - $(this).text('Karte (rot)'); - } else { - eventTable[$(this).attr("eventid")].setStyle(normalStyle); - $(this).removeClass('first'); - $(this).text('Karte'); - } - }; - }); -}; + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License along + with this program. If not, see http://www.gnu.org/licenses/. + + $Id$ +*/ /* add station marker */ function addStationMarker(id, lat, lng) { @@ -80,7 +34,7 @@ function addStationMarker(id, lat, lng) { color: "#1C771C", weight: 1, opacity: 1, - fillOpacity: stationMarkerOpacity, + fillOpacity: config['station']['markerOpacity'], className: id+' stationMarker', }).addTo(stationLayer); stationTable[id] = marker; @@ -93,7 +47,7 @@ function addEventMarker(id, lat, lng, mag) { color: "#FFF500", weight: 1, opacity: 1, - fillOpacity: eventMarkerOpacity, + fillOpacity: config['event']['markerOpacity'], className: id+' eventMarker', }; var marker = L.circle(L.latLng(lat, lng), mag2radius(mag), markerOptions).addTo(eventLayer); @@ -130,27 +84,27 @@ function initMapLink() { $(this).removeClass('selected'); $(this).text('Karte'); eventTable[$(this).attr('eventid')].setStyle(normalStyle); - map.setView(mapCentreDefault, zoomDefault); + map.setView(config['map']['centerDefault'], config['map']['zoomDefault']); highlightFirstEvent(); // unselected -> selected } else { $(this).addClass('selected'); $(this).text('im Fokus (rot)'); eventTable[$(this).attr('eventid')].setStyle(highlightStyle); - map.setView(eventTable[$(this).attr('eventid')].getLatLng(), zoomFocus); + map.setView(eventTable[$(this).attr('eventid')].getLatLng(), config['map']['zoomFocus']); }; }); return false; }); }; -/****************** - * document ready * - ******************/ +/********************************************************************** + * document ready * + **********************************************************************/ $(document).ready(function() { // create a map in the "map" div, set the view to a given place and zoom - map = L.map('map', { zoomControl: false }).setView(mapCentreDefault, zoomDefault); + map = L.map('map', { zoomControl: false }).setView(config['map']['centerDefault'], config['map']['zoomDefault']); new L.Control.Zoom({ position: 'topright' }).addTo(map); // add MapQuestOSM tile layer diff --git a/www/misc.js b/www/misc.js index 48d1fce..bdde136 100644 --- a/www/misc.js +++ b/www/misc.js @@ -1,10 +1,35 @@ -// calculate marker radius from magnitude, both formulas have equal radii at mag=1.2 +/********************************************************************** + * misc.js * + * script for unspecific functions and setup * + **********************************************************************/ + +/* License + Copyright 2014 Kasper D. Fischer + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License along + with this program. If not, see http://www.gnu.org/licenses/. + + $Id$ +*/ + +/* calculate marker radius from magnitude + * both formulas have equal radii at mag=1.2 */ function mag2radius(mag) { return 400*mag; // radius proportional to magagnitude // return 8.104*Math.pow(30,mag) // radius proportional to energy }; -// set height of eventlist div +/* set height of eventlist div */ function sleep(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7; i++) { @@ -13,6 +38,8 @@ function sleep(milliseconds) { } } } + +/* setInfoHeight */ function setInfoHeight() { var height = $('div.map').height() - 36; $('div.info').height(height); @@ -51,24 +78,36 @@ function getLocation(lat, lng) { return [ region, regionID ]; }; -// window resize +/* window resize */ $( window ).resize(function() { setInfoHeight(); }); -// create global vars -var map +/* create global vars */ +var map; var eventTable = {}; var eventDetails = {}; var stationTable = {}; -var eventMarkerOpacity = 0.3; -var stationMarkerOpacity = 0.5; -var zoomFocus = 12; -var zoomDefault = 9; -var mapCentreDefault = [51.85, 7.0]; -var minMag = 1.2; +var config = { + event: { + evaluationBlacklist: ['automatic', 'preliminary'], + markerOpacity: 0.3, + minMag: 1.2, + typeWhitelist: ['earthquake', 'induced or triggered event'], + }, + map: { + zoomDefault: 9, + zoomFocus: 12, + centerDefault: [51.85, 7.0], + }, + station: { + markerOpacity: 0.5, + }, +}; -// run when ready +/********************************************************************** + * document ready * + **********************************************************************/ $(document).ready(function() { // AJAX setup $.ajaxSetup({timeout: 15000}); // 15 seconds diff --git a/www/stations.js b/www/stations.js index 87fbc2a..f8c2109 100644 --- a/www/stations.js +++ b/www/stations.js @@ -1,4 +1,28 @@ -// Load the stations using ajax +/********************************************************************** + * stations.js * + * script for station specific functions and setup * + **********************************************************************/ + +/* License + Copyright 2014 Kasper D. Fischer + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License along + with this program. If not, see http://www.gnu.org/licenses/. + + $Id$ +*/ + +/* Load the stations using ajax */ function loadStations(stime, etime) { var mapBounds = map.getBounds(); var N = mapBounds.getNorth(); @@ -57,6 +81,7 @@ function loadStations(stime, etime) { }); }; +/* initStationTable */ function initStationTable() { // tablesorter for station list $("#stationstable").tablesorter( @@ -113,6 +138,10 @@ function initStationTable() { } }); }; + +/********************************************************************** + * document ready * + **********************************************************************/ $(document).ready(function() { loadStations(); });