Ei muokkausyhteenvetoa |
Ei muokkausyhteenvetoa |
||
| (249 välissä olevaa versiota samalta käyttäjältä ei näytetä) | |||
| Rivi 16: | Rivi 16: | ||
function <!--{$id|default:TheGraph|escape:'html'}-->_func() { | function <!--{$id|default:TheGraph|escape:'html'}-->_func() { | ||
css_link = jQuery( "<link>", { rel: "stylesheet", type: "text/css", href: "//www.jarviwiki.fi/ | css_link = jQuery( "<link>", { rel: "stylesheet", type: "text/css", href: "//www.jarviwiki.fi/embed/css/obschart.css?ver=1" }); | ||
css_link.appendTo('head'); | css_link.appendTo('head'); | ||
jQuery.getScript( "//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js", function() { | jQuery.getScript( "//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js", function() { | ||
| Rivi 36: | Rivi 36: | ||
memo.lang = memo.widgetEl.attr( 'data-lang' ); if (typeof memo.lang == 'undefined') { memo.lang = 'fi'; } | memo.lang = memo.widgetEl.attr( 'data-lang' ); if (typeof memo.lang == 'undefined') { memo.lang = 'fi'; } | ||
memo.height = memo.widgetEl.attr( 'data-height' ); if (typeof memo.height == 'undefined') { memo.height = 450; } | memo.height = memo.widgetEl.attr( 'data-height' ); if (typeof memo.height == 'undefined') { memo.height = 450; } | ||
memo.siteid = jQuery( this ).attr( 'data-jw-siteid' ); | |||
memo.obscode = jQuery( this ).attr( 'data-jw-obscode' ); | |||
memo.obscodeParts = memo.obscode.split('_'); | |||
memo.service = jQuery( this ).attr( 'data-coo311-service_code' ); | |||
memo.graphType = jQuery( this ).attr( 'data-graph-type' ); | |||
memo.editUrl = jQuery( this ).attr( 'data-edit-url' ); if (typeof memo.editUrl == 'undefined') { memo.editUrl = '-'; } | |||
memo.csvfile = jQuery( this ).attr( 'data-csv-filename' ); if (typeof memo.csvfile == 'undefined') { memo.csvfile = i18n[ memo.obscode ].title[ memo.lang ] + '_SiteID-' + memo.siteid + '_Downloaded-' + today.toISOString().split( 'T' )[0] + '.csv'; } | |||
if ( typeof jQuery( this ).attr( 'data-maintainer' ) == 'undefined' ) { memo.maintainerShow = false; } | |||
else { memo.maintainerShow = ( jQuery( this ).attr( 'data-maintainer' ).toLowerCase() == 'true' ); } | |||
memo.id = jQuery( this ).attr( 'id' ); if (typeof memo.id == 'undefined') { memo.id = 'jwsitegraph_' + Math.random() + '_container'; jQuery( this ).attr( 'id', memo.id ); } | |||
memo.widgetEl.css( 'position', 'relative' ); | memo.widgetEl.css( 'position', 'relative' ); | ||
| Rivi 59: | Rivi 70: | ||
memo.fullscreenEl = jQuery( this ).find( '.fullscreen-button' ); | memo.fullscreenEl = jQuery( this ).find( '.fullscreen-button' ); | ||
// add edit button | // add edit button | ||
memo.headerEl.append( '<div class="obschartbutton edit-button" style="Xdisplay: none; margin-left: 10px; float: right; Xbackground-color: rgba( 255, 255, 255, 1 ); border-radius: 50%; Xborder: 1px solid rgba( 0, 0, 0, 0.5 ); Xpadding: 1px;"><button title="' + i18n['edit'][memo.lang] + '" style="width: 24px; height: 24px; padding: 0; margin: 0; color: #1B599B; background: none; border: none;"><i class="fas fa-edit"></i></button></div>' ); | if ( memo.editUrl != '-' ) { | ||
memo.headerEl.append( '<div class="obschartbutton edit-button" style="Xdisplay: none; margin-left: 10px; float: right; Xbackground-color: rgba( 255, 255, 255, 1 ); border-radius: 50%; Xborder: 1px solid rgba( 0, 0, 0, 0.5 ); Xpadding: 1px;"><button title="' + i18n['edit'][memo.lang] + '" style="width: 24px; height: 24px; padding: 0; margin: 0; color: #1B599B; background: none; border: none;"><i class="fas fa-edit"></i></button></div>' ); | |||
memo.editEl = jQuery( this ).find( '.edit-button' ); | |||
} | |||
// add download data button | // add download data button | ||
memo.headerEl.append( '<div class="obschartbutton download-button" style="display: none; margin-left: 10px; float: right; Xbackground-color: rgba( 255, 255, 255, 1 ); border-radius: 50%; Xborder: 1px solid rgba( 0, 0, 0, 0.5 ); Xpadding: 1px;"><button title="' + i18n['download'][memo.lang] + '" style="width: 24px; height: 24px; padding: 0; margin: 0; color: #1B599B; background: none; border: none;"><i class="fas fa-download"></i></button></div>' ); | memo.headerEl.append( '<div class="obschartbutton download-button" style="display: none; margin-left: 10px; float: right; Xbackground-color: rgba( 255, 255, 255, 1 ); border-radius: 50%; Xborder: 1px solid rgba( 0, 0, 0, 0.5 ); Xpadding: 1px;"><button title="' + i18n['download'][memo.lang] + '" style="width: 24px; height: 24px; padding: 0; margin: 0; color: #1B599B; background: none; border: none;"><i class="fas fa-download"></i></button></div>' ); | ||
memo.downloadEl = jQuery( this ).find( '.download-button' ); | memo.downloadEl = jQuery( this ).find( '.download-button' ); | ||
memo.loadStarts = 0; | memo.loadStarts = 0; | ||
memo.obses = {}; | memo.obses = {}; | ||
| Rivi 85: | Rivi 91: | ||
memo.trendType = jQuery( this ).attr( 'data-trend-type' ); if (typeof memo.trendType == 'undefined') { memo.trendType = i18n[memo.obscode]['trend']['type']; } | memo.trendType = jQuery( this ).attr( 'data-trend-type' ); if (typeof memo.trendType == 'undefined') { memo.trendType = i18n[memo.obscode]['trend']['type']; } | ||
//memo.titleEl.html( i18n[ memo.obscode ].title[ memo.lang ] ); | |||
//getJWobses(memo); | //getJWobses(memo); | ||
| Rivi 115: | Rivi 123: | ||
memo.options = { | memo.options = { | ||
backgroundColor: 'transparent', | backgroundColor: 'transparent', | ||
chartArea: { backgroundColor: { fill: '#daf0fa', stroke: '# | chartArea: { backgroundColor: { fill: '#ffffff', 'd': '#daf0fa', stroke: '#ccc', strokeWidth: 6 }}, | ||
legend: { position: 'bottom' }, | legend: { position: 'bottom' }, | ||
crosshair: { trigger: 'both' }, | crosshair: { trigger: 'both' }, | ||
| Rivi 127: | Rivi 135: | ||
maxAlternation: 1, | maxAlternation: 1, | ||
direction: memo.vaxisdir, | direction: memo.vaxisdir, | ||
gridlines: { color: '# | gridlines: { color: '#eee', count: -1 }, | ||
minorGridlines: { count: 0 }, | minorGridlines: { count: 0 }, | ||
viewWindow: { } | viewWindow: { } | ||
| Rivi 135: | Rivi 143: | ||
slantedText: false, | slantedText: false, | ||
maxAlternation: 1, | maxAlternation: 1, | ||
gridlines: { color: '# | gridlines: { color: '#eee' }, | ||
minorGridlines: { count: 0 }, | minorGridlines: { count: 0 }, | ||
viewWindow: { } | viewWindow: { } | ||
| Rivi 186: | Rivi 194: | ||
obs.img = new Image(); | obs.img = new Image(); | ||
obs.img.src = obs.media_url; | obs.img.src = obs.media_url; | ||
obs.addInfo = ' | obs.addInfo = '<img style="max-width: 196px; max-height: 196px;" src="' + obs.media_url + '" />'; | ||
} | } | ||
if ( !!obs.printouts[ 'Lisätiedot' ][0] ) { | if ( !!obs.printouts[ 'Lisätiedot' ][0] ) { | ||
| Rivi 200: | Rivi 208: | ||
// add compare date to obses | // add compare date to obses | ||
if ( memo.season == 'summer' || obs.obsdatetime.getMonth() > 7 ) { | if ( memo.season == 'summer' || obs.obsdatetime.getMonth() > 7 ) { | ||
obs.compareDate = new Date( memo.curSeason, obs.obsdatetime.getMonth(), obs.obsdatetime.getDate() ); | obs.compareDate = new Date( memo.curSeason, obs.obsdatetime.getMonth(), obs.obsdatetime.getDate(), obs.obsdatetime.getHours(), obs.obsdatetime.getMinutes() ); | ||
} else { | } else { | ||
obs.compareDate = new Date( memo.curSeason+1, obs.obsdatetime.getMonth(), obs.obsdatetime.getDate() ); | obs.compareDate = new Date( memo.curSeason+1, obs.obsdatetime.getMonth(), obs.obsdatetime.getDate(), obs.obsdatetime.getHours(), obs.obsdatetime.getMinutes() ); | ||
} | } | ||
ms = obs.compareDate.getTime(); | ms = obs.compareDate.getTime(); | ||
| Rivi 233: | Rivi 241: | ||
obs.popup += '(' + obs.obsdatetime.inRelationToToday(memo.lang) + ')'; | obs.popup += '(' + obs.obsdatetime.inRelationToToday(memo.lang) + ')'; | ||
obs.popup += '</div>'; | obs.popup += '</div>'; | ||
if (!!obs.addInfo) { obs.popup += '<div style="margin-top: 5px;">' + obs.addInfo + '</div>'; } | if (!!obs.addInfo) { | ||
obs.popup += '<div style="margin-top: 5px;">' + obs.addInfo + '</div>'; | |||
} | |||
obs.popup += '</div>'; | obs.popup += '</div>'; | ||
| Rivi 266: | Rivi 276: | ||
//if ( memo.graphType == 'dateofyear' ) { baseSize = baseSize + 1; } | //if ( memo.graphType == 'dateofyear' ) { baseSize = baseSize + 1; } | ||
if ( memo.maintainerShow ) { maintcol = maintColors[obs.maintainer]; } | |||
else { maintcol = 'transparent'; } | |||
if (!!obs.addInfo) { | if (!!obs.addInfo) { | ||
obs.style = 'point { shape-type: star; size: ' + (baseSize+3) + '; shape-dent: 0.5 | obs.style = 'point { shape-type: star; size: ' + (baseSize+3) + '; shape-dent: 0.5; stroke-width: 0; stroke-color: ' + maintcol + '; }'; | ||
} else { | } else { | ||
obs.style = 'point { size: ' + baseSize + '; stroke-width: 0.5; stroke-color: ' + | obs.style = 'point { size: ' + baseSize + '; stroke-width: 0.5; stroke-color: ' + maintcol + '; }'; | ||
} | } | ||
| Rivi 297: | Rivi 308: | ||
memo.options.vAxis.ticks.sort( function(a, b) { return a.v-b.v } ); | memo.options.vAxis.ticks.sort( function(a, b) { return a.v-b.v } ); | ||
memo.options.vAxis.viewWindow = { min: -0.5, max: parseInt(memo.options.vAxis.ticks[memo.options.vAxis.ticks.length-1].v)+0.5 }; | memo.options.vAxis.viewWindow = { min: -0.5, max: parseInt(memo.options.vAxis.ticks[memo.options.vAxis.ticks.length-1].v)+0.5 }; | ||
memo.options.vAxis.gridlines.color = '# | memo.options.vAxis.gridlines.color = '#eee'; | ||
memo.options.vAxis.baselineColor = 'none'; | memo.options.vAxis.baselineColor = 'none'; | ||
} else if ( typeof i18n[memo.obscode]['min'] != 'undefined' ) { | } else if ( typeof i18n[memo.obscode]['min'] != 'undefined' ) { | ||
| Rivi 304: | Rivi 315: | ||
memo.options.vAxis.viewWindow = { min: 0 }; | memo.options.vAxis.viewWindow = { min: 0 }; | ||
} | } | ||
memo.titleEl.html( i18n[ memo.obscode ].title[ memo.lang ] ); | |||
memo.titleEl.append( ' <button style="padding: 0 0.25em; font-size: 13px; margin-bottom: 3px;" type="button" class="btn btn-secondary btn-info" data-toggle="tooltip" data-placement="top" title="' + i18n[ memo.obscode ].changes[ memo.lang ] + '">' + i18n[ 'new' ][ memo.lang ] + '</button>' ); | |||
jQuery( '[data-toggle="tooltip"]' ).tooltip(); | |||
if (memo.graphType == 'trend') { | if (memo.graphType == 'trend') { | ||
| Rivi 382: | Rivi 397: | ||
s = obs.seriesId; | s = obs.seriesId; | ||
if ( typeof memo.seriesO[ s ] == 'undefined' ) { | if ( typeof memo.seriesO[ s ] == 'undefined' ) { | ||
memo.seriesO[ s ] = { 'id': s, 'order': parseInt( obs.data.cat ), 'title': i18n[ s ].title[ memo.lang ], 'type': 'scatter', 'color': i18n[ s ].color, 'obses': [] }; | |||
memo.seriesO[ s ] = { 'id': s, 'title': i18n[ s ].title[ memo.lang ], 'type': 'scatter', 'color': i18n[ s ].color | |||
} | } | ||
obs.xvalue = obs.seasonmiddle; | obs.xvalue = obs.seasonmiddle; | ||
obs.yvalue = obs.compareDate; | obs.yvalue = obs.compareDate; | ||
obs.tooltip = '<p><b> | obs.value = obs.obsdatetime.toLocaleDateString( memo.lang ); | ||
obs.valueUnit = i18n[ 'Date' ][ memo.lang ]; | |||
obs.tooltip = '<p><b>' + i18n[ 'season' ][ 'winter' ][ memo.lang ] + ' ' + obs.season + '–' + (obs.season+1) + '</b></p>'; | |||
obs.tooltip += '<p>' + i18n[ s ].title2[ memo.lang ] + ': ' + obs.obsdatetime.toLocaleDateString( memo.lang ) + '</p>'; | |||
obs.tooltip += obs.addInfo; | |||
memo.seriesO[ s ].obses.push( obs ); | memo.seriesO[ s ].obses.push( obs ); | ||
} | } | ||
| Rivi 400: | Rivi 411: | ||
// create ice cover series | // create ice cover series | ||
if ( memo.obscode == 'ice_cat_2,5' ) { | if ( memo.obscode == 'ice_cat_2,5' ) { | ||
memo.obsesS = {}; | memo.obsesS = {}; | ||
for ( var o in memo.obsesA ) { | for ( var o in memo.obsesA ) { | ||
var obs = memo.obsesA[ o ]; | var obs = memo.obsesA[ o ]; | ||
if ( typeof memo.obsesS[ obs.season ] == 'undefined' ) { | if ( typeof memo.obsesS[ obs.season ] == 'undefined' ) { | ||
memo.obsesS[ obs.season ] = {}; | memo.obsesS[ obs.season ] = { 'maintainer': obs.maintainer }; | ||
} | } | ||
if ( obs.data.cat == '2' ) { | if ( obs.data.cat == '2' ) { | ||
memo.obsesS[ obs.season ][ 'low' ] = obs.compareDate; | memo.obsesS[ obs.season ][ 'low' ] = obs.compareDate; | ||
} else if ( obs.data.cat == '5' ) { | } else if ( obs.data.cat == '5' ) { | ||
memo.obsesS[ obs.season ][ 'high' ] = obs.compareDate; | memo.obsesS[ obs.season ][ 'high' ] = obs.compareDate; | ||
} | } | ||
if ( memo.obsesS[ obs.season ][ 'maintainer' ] != obs.maintainer ) { memo.obsesS[ obs.season ][ 'maintainer' ] = ''; } | |||
if ( typeof memo.obsesS[ obs.season ][ 'low' ] != 'undefined' && typeof memo.obsesS[ obs.season ][ 'high' ] != 'undefined' ) { | if ( typeof memo.obsesS[ obs.season ][ 'low' ] != 'undefined' && typeof memo.obsesS[ obs.season ][ 'high' ] != 'undefined' ) { | ||
if ( typeof memo.seriesO[ ' | days = Math.round( ( memo.obsesS[ obs.season ][ 'high' ].getTime() - memo.obsesS[ obs.season ][ 'low' ].getTime() ) / ( 1000*60*60*24 ) ); | ||
memo.seriesO[ ' | if ( typeof memo.seriesO[ 'ice_cat_2,5' ] == 'undefined' ) { | ||
memo.seriesO[ 'ice_cat_2,5' ] = { 'id': 'ice_cat_2,5', 'order': 10, 'title': i18n[ 'ice_cat_2,5' ].title[ memo.lang ], 'type': 'candlestick', 'color': i18n[ 'ice_cat_2,5' ].color, obses: [] }; | |||
} | } | ||
memo.seriesO[ ' | memo.seriesO[ 'ice_cat_2,5' ].obses.push( { 'obsdatetime': obs.obsdatetime, 'season': obs.season, 'value': days, 'valueUnit': i18n[ 'days' ][ memo.lang ], 'addInfo': '', 'maintainer': memo.obsesS[ obs.season ][ 'maintainer' ], 'xvalue': obs.seasonmiddle, 'low': memo.obsesS[ obs.season ][ 'low' ], 'high': memo.obsesS[ obs.season ][ 'high' ], 'tooltip': '<p><b>' + i18n[ 'season' ][ 'winter' ][ memo.lang ] + ' ' + obs.season + '–' + (obs.season+1) + '</b></p><p>' + i18n[ 'ice_cat_2,5' ].title[ memo.lang ] + ': ' + days + ' ' + i18n[ 'days' ][ memo.lang ] + '</p>' } ); | ||
} | } | ||
} | } | ||
} | } | ||
memo.seriesA = []; for ( var s in memo.seriesO ) { memo.seriesA.push( memo.seriesO[s] ) }; | memo.seriesA = []; for ( var s in memo.seriesO ) { memo.seriesA.push( memo.seriesO[s] ) }; | ||
memo.seriesA.sort( function( a, b ) { return a.order-b.order; } ); | |||
for ( var s in memo.seriesA ) { | for ( var s in memo.seriesA ) { | ||
| Rivi 430: | Rivi 444: | ||
if ( memo.seriesA[ s ].type == 'scatter' ) { | if ( memo.seriesA[ s ].type == 'scatter' ) { | ||
memo.data.addColumn( 'date', memo.seriesA[ s ].title + ' ' + memo.obsMinYear + '-' + memo.obsMaxYear ); | memo.data.addColumn( 'date', memo.seriesA[ s ].title ); // + ' ' + memo.obsMinYear + '-' + memo.obsMaxYear ); | ||
memo.data.addColumn( { type: 'string', 'role': 'style' } ); | memo.data.addColumn( { type: 'string', 'role': 'style' } ); | ||
memo.data.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } ); | memo.data.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } ); | ||
memo.data.addColumn( { type: 'string', role: 'annotation' } ); | memo.data.addColumn( { type: 'string', role: 'annotation' } ); | ||
memo.options.series.push( { type: 'scatter', pointType: 'circle', pointSize: 9, color: memo.seriesA[ s ].color | memo.options.series.push( { type: 'scatter', pointType: 'circle', pointSize: 9, color: memo.seriesA[ s ].color } ); | ||
memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, | if ( memo.seriesA[ s ].obses.length > 1 ) { | ||
memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 2.33, visibleInLegend: false, tooltip: false }; | |||
} else { | |||
memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 0, color: 'transparent', visibleInLegend: false, tooltip: false }; | |||
} | |||
} else if ( memo.seriesA[ s ].type == 'candlestick' ) { | } else if ( memo.seriesA[ s ].type == 'candlestick' ) { | ||
memo.data.addColumn( 'date', ' | memo.data.addColumn( 'date', memo.seriesA[ s ].title ); | ||
memo.data.addColumn( 'date', '' ); | |||
memo.data.addColumn( 'date', '' ); | memo.data.addColumn( 'date', '' ); | ||
memo.data.addColumn( 'date', '' ); | memo.data.addColumn( 'date', '' ); | ||
memo.data.addColumn({ role: 'tooltip', 'p': { 'html': true } }); | memo.data.addColumn({ role: 'tooltip', 'p': { 'html': true } }); | ||
memo.options.series.push( { type: 'candlesticks', color: memo.seriesA[ s ].color } ); | memo.options.series.push( { type: 'candlesticks', color: memo.seriesA[ s ].color, strokeWidth: 2, stroke: '#cccccc' } ); | ||
} | } | ||
| Rivi 505: | Rivi 523: | ||
for (g=0; g < memo.vAxisGridlines.length; g++) { | for (g=0; g < memo.vAxisGridlines.length; g++) { | ||
memo.data.addColumn( 'date', 'vAxis gridline_' + g ); | memo.data.addColumn( 'date', 'vAxis gridline_' + g ); | ||
memo.options.series[g+1] = { type: 'line', pointSize: 0, lineWidth: 1, color: '# | memo.options.series[g+1] = { type: 'line', pointSize: 0, lineWidth: 1, color: '#eee', XlineDashStyle: [3, 3], visibleInLegend: false }; | ||
} | } | ||
// add gridlines | // add gridlines | ||
for (g=0; g < memo.vAxisGridlines.length; g++) { | for (g=0; g < memo.vAxisGridlines.length; g++) { | ||
| Rivi 582: | Rivi 599: | ||
} | } | ||
function addDataToSeasonChart(memo) { | function addDataToSeasonChart( memo ) { | ||
if ( i18n[memo.obscode]['type'] == 'cat') { | |||
memo.distF = 0.1; | |||
} else { | |||
memo.distF = 0; | |||
} | |||
// set x-axis min and max for season chart | |||
memo.axisMinDate = new Date( memo.obsMinCompDateMs ); | memo.axisMinDate = new Date( memo.obsMinCompDateMs ); | ||
memo.axisMinDate.setDate(1); | memo.axisMinDate.setDate(1); | ||
| Rivi 590: | Rivi 614: | ||
memo.axisMaxDate.setDate(0); | memo.axisMaxDate.setDate(0); | ||
// create series of each season | |||
memo.seasonsO = {}; | memo.seasonsO = {}; | ||
memo.seasonsA = []; | memo.seasonsA = []; | ||
memo.seriesO = {}; | |||
for (var o in memo.obsesA) { | memo.seriesA = []; | ||
for ( var o in memo.obsesA ) { | |||
s = memo.obsesA[o].seriesId; | s = memo.obsesA[o].seriesId; | ||
if (typeof memo.seasonsO[s] == 'undefined' ) { memo.seasonsO[s] = { 'obses': [] }; } | if ( typeof memo.seasonsO[ s ] == 'undefined' ) { memo.seasonsO[ s ] = { 'id': s, 'obses': [] }; } | ||
memo.seasonsO[s].obses.push( memo.obsesA[o] ); | memo.seasonsO[s].obses.push( memo.obsesA[o] ); | ||
} | } | ||
for ( var s in memo.seasonsO ) { memo.seasonsA.push( memo.seasonsO[ s ] ); } memo.seasonsA.sort( function(a,b) { return b-a; } ); | |||
for (var | |||
for ( var s in memo.seasonsA ) { | |||
var legend = false; | |||
var color = colors.obses; | |||
for (var s in memo.seasonsA) { | var size = 6; | ||
var line = 0; | |||
var highlight = true; | |||
if ( memo.seasonsA[ s ].id == memo.curSeason ) { | |||
legend = true; color = colors.curObses; | |||
size = 9; | |||
line = 4; | |||
highlight = false; | |||
} | } | ||
memo.seriesA.push( { 'type': 'scatter', 'title': memo.seasonsA[ s ].id, 'highlight': highlight, 'color': color, 'size': size, 'line': line, 'legend': legend, 'trendline': 'none', obses: [] } ); | |||
memo. | for ( var o in memo.seasonsA[ s ].obses ) { | ||
memo.seriesA[ memo.seriesA.length - 1 ].obses.push( { | |||
'x': memo.seasonsA[ s ].obses[ o ].compareDate, | |||
'y': memo.seasonsA[ s ].obses[ o ].value, | |||
'style': memo.seasonsA[ s ].obses[ o ].style, | |||
'tooltip': memo.seasonsA[ s ].obses[ o ].popup, | |||
'annotation': null | |||
}); | |||
} | |||
} | |||
memo.seriesA.push( { 'type': 'scatter', 'title': memo.obsMinDate.getFullYear() + '-' + memo.obsMaxDate.getFullYear(), 'highlight': false, 'color': colors.obses, 'size': 6, 'line': 0, 'legend': true, 'trendline': 'none', obses: [] } ); | |||
// make week averages | |||
memo.avgW = {}; | |||
for (var o in memo.obsesA) { | |||
mwDate = new Date( memo.obsesA[o].compareDate.getFullYear(), memo.obsesA[o].compareDate.getMonth(), memo.obsesA[o].compareDate.getDate(), 12 ); | |||
mwDate.setDate( mwDate.getDate() - mwDate.getDay() + 3 ); | |||
w = mwDate.getWeek(); | |||
v = memo.obsesA[o].value; | |||
if ( typeof memo.avgW[w] == 'undefined' ) { | |||
mwDate.setDate( mwDate.getDate() - mwDate.getDay() + 3 ); | |||
memo. | memo.avgW[w] = { week: w, cDate: new Date( mwDate.getTime() ), values: [ v ], sum: v, count: 1, avg: v }; | ||
} else { | |||
memo.avgW[w].values.push( v ); | |||
memo.avgW[w].sum += v; | |||
memo.avgW[w].count++; | |||
memo.avgW[w].avg = memo.avgW[w].sum / memo.avgW[w].count; | |||
} | |||
} | |||
memo.avgWA = []; | |||
if ( memo.season == 'summer' ) { | |||
for ( var w=1; w<54; w++ ) { | |||
if ( typeof memo.avgW[ w ] != 'undefined' ) { memo.avgWA.push( memo.avgW[ w ] ); } | |||
} | } | ||
} else { | } else { | ||
memo. | for ( var w=30; w<54; w++ ) { | ||
if ( typeof memo.avgW[ w ] != 'undefined' ) { memo.avgWA.push( memo.avgW[ w ] ); } | |||
} | |||
for ( var w=1; w<30; w++ ) { | |||
if ( typeof memo.avgW[ w ] != 'undefined' ) { memo.avgWA.push( memo.avgW[ w ] ); } | |||
} | |||
} | |||
for ( var w=0; w<(memo.avgWA.length); w++ ) { | |||
memo.avgWA[ w ].running3 = memo.avgWA[ w ].avg; | |||
memo.avgWA[ w ].running5 = memo.avgWA[ w ].avg; | |||
} | } | ||
memo. | // make running average of 3 week averages | ||
memo. | for ( var w=1; w<(memo.avgWA.length-1); w++ ) { | ||
memo.avgWA[ w ].running3 = ( memo.avgWA[ w-1 ].sum + memo.avgWA[ w ].sum + memo.avgWA[ w+1 ].sum ) / ( memo.avgWA[ w-1 ].count + memo.avgWA[ w ].count + memo.avgWA[ w+1 ].count ); | |||
//memo.avgWA[ w ].running3 = ( memo.avgWA[ w-1 ].avg + memo.avgWA[ w ].avg + memo.avgWA[ w+1 ].avg ) / ( 3 ); | |||
} | |||
// make running average of 5 week averages | |||
for ( var w=2; w<(memo.avgWA.length-2); w++ ) { | |||
memo.avgWA[ w ].running = ( memo.avgWA[ w-2 ].sum + memo.avgWA[ w-1 ].sum + memo.avgWA[ w ].sum + memo.avgWA[ w+1 ].sum + memo.avgWA[ w+2 ].sum ) / ( memo.avgWA[ w-2 ].count + memo.avgWA[ w-1 ].count + memo.avgWA[ w ].count + memo.avgWA[ w+1 ].count + memo.avgWA[ w+2 ].count ); | |||
//memo.avgWA[ w ].running = ( memo.avgWA[ w-2 ].avg + memo.avgWA[ w-1 ].avg + memo.avgWA[ w ].avg + memo.avgWA[ w+1 ].avg + memo.avgWA[ w+2 ].avg ) / ( 5 ); | |||
} | |||
// | // make raw hma | ||
memo. | for ( var w=0; w<(memo.avgWA.length); w++ ) { | ||
memo.avgWA[ w ].hma = 2*memo.avgWA[ w ].running3 - memo.avgWA[ w ].running5; | |||
memo.avgWA[ w ].hmas = memo.avgWA[ w ].hma; | |||
} | |||
// | for ( var w=1; w<(memo.avgWA.length-1); w++ ) { | ||
memo.avgWA[ w ].hmas = ( memo.avgWA[ w-1 ].hma + memo.avgWA[ w ].hma + memo.avgWA[ w+1 ].hma ) / ( 3 ); | |||
} | |||
// make running average of week averages | |||
if ( | for ( var w=0; w<memo.avgWA.length; w++ ) { | ||
memo. | if ( w == 0 ) { | ||
//memo.avgWA[ w ].running = ( memo.avgWA[ w ].sum + memo.avgWA[ w+1 ].sum ) / ( memo.avgWA[ w ].count + memo.avgWA[ w+1 ].count ); | |||
memo.avgWA[ w ].running = ( memo.avgWA[ w ].avg ); | |||
} else if ( w == ( memo.avgWA.length - 1) ) { | |||
//memo.avgWA[ w ].running = ( memo.avgWA[ w ].sum + memo.avgWA[ w-1 ].sum ) / ( memo.avgWA[ w ].count + memo.avgWA[ w-1 ].count ); | |||
memo.avgWA[ w ].running = ( memo.avgWA[ w ].avg ); | |||
} else if ( w == 1 || w == (memo.avgWA.length - 2) ) { | |||
memo.avgWA[ w ].running = ( memo.avgWA[ w ].sum + memo.avgWA[ w-1 ].sum ) / ( memo.avgWA[ w ].count + memo.avgWA[ w-1 ].count ); | |||
} else { | } else { | ||
memo. | memo.avgWA[ w ].running = ( memo.avgWA[ w-2 ].sum + memo.avgWA[ w-1 ].sum + memo.avgWA[ w ].sum + memo.avgWA[ w+1 ].sum + memo.avgWA[ w+2 ].sum ) / ( memo.avgWA[ w-2 ].count + memo.avgWA[ w-1 ].count + memo.avgWA[ w ].count + memo.avgWA[ w+1 ].count + memo.avgWA[ w+2 ].count ); | ||
} | } | ||
} | |||
// calculate standard deviation | |||
devSum = 0; | |||
devC = 0; | |||
devMax = 0; | |||
for ( var w=0; w<memo.avgWA.length; w++ ) { | |||
devC++; | |||
devx = 0; | |||
for (var vi in memo.avgWA[w].values ) { | |||
devx += Math.pow( (memo.avgWA[w].values[vi] - memo.avgWA[w].avg), 2 ); | |||
} | } | ||
memo.avgWA[w].dev = Math.sqrt( devx/memo.avgWA[w].count ); | |||
devSum += memo.avgWA[w].dev; | |||
devMax = Math.max( memo.avgWA[w].dev, devMax ); | |||
} | |||
devAvg = devSum/devC; | |||
//console.log( memo.avgWA ); | |||
memo.seriesA.push( { 'type': 'area', 'title': i18n[ 'average' ][ memo.lang ], 'highlight': false, 'color': colors.average, 'size': 0, 'line': 2.33, 'legend': true, 'trendline': 'none', obses: [] } ); | |||
for ( var w in memo.avgWA ) { | |||
memo.seriesA[ memo.seriesA.length - 1 ].obses.push( { | |||
'x': memo.avgWA[ w ].cDate, | |||
'y': memo.avgWA[ w ].hmas, | |||
'style': null, | |||
'tooltip': i18n[ 'moving' ][ memo.lang ], | |||
'annotation': null | |||
}); | |||
} | |||
/* | |||
memo.seriesA.push( { 'type': 'scatter', 'title': 'Hull', 'highlight': false, 'color': 'green', 'size': 0, 'line': 2.33, 'legend': true, 'trendline': 'none', obses: [] } ); | |||
for ( var w in memo.avgWA ) { | |||
memo.seriesA[ memo.seriesA.length - 1 ].obses.push( { | |||
'x': memo.avgWA[ w ].cDate, | |||
//'y': memo.avgWA[ w ].running + Math.max( memo.avgWA[ w ].dev, devAvg ) * 2, | |||
'y': memo.avgWA[ w ].hmas, | |||
'style': null, | |||
'tooltip': i18n[ 'moving' ][ memo.lang ], | |||
'annotation': null | |||
}); | |||
} | |||
*/ | |||
for ( var w=0; w<memo.avgWA.length; w++ ) { | |||
//Integer( SquareRoot(Period) ) WMA [2 x Integer(Period/2) WMA(Price) - Period WMA(Price)] | |||
} | |||
// add columns | |||
for ( var s in memo.seriesA ) { | |||
if ( memo.seriesA[ s ].type == 'scatter' ) { | |||
memo.data.addColumn( 'number', memo.seriesA[ s ].title ); | |||
memo.data.addColumn( { type: 'string', 'role': 'style' } ); | |||
memo.data.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } ); | |||
memo.data.addColumn( { type: 'string', role: 'annotation' } ); | |||
memo.options.series.push( { label: memo.seriesA[ s ].title, type: 'line', curveType: 'function', pointType: 'circle', pointSize: memo.seriesA[ s ].size, lineWidth: memo.seriesA[ s ].line, 'color': memo.seriesA[ s ].color, 'visibleInLegend': memo.seriesA[ s ].legend, highlight: memo.seriesA[ s ].highlight } ); | |||
if ( memo.seriesA[ s ].trendline != 'none' ) { | |||
if ( memo.seriesA[ s ].obses.length > 1 ) { | |||
memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 2.33, visibleInLegend: false, tooltip: false }; | |||
} else { | } else { | ||
memo. | memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 0, color: 'transparent', visibleInLegend: false, tooltip: false }; | ||
} | |||
} | |||
} | } | ||
} else if ( memo.seriesA[ s ].type == 'area' ) { | |||
memo.data.addColumn( 'number', memo.seriesA[ s ].title ); | |||
memo.data.addColumn( { type: 'string', 'role': 'style' } ); | |||
memo.data.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } ); | |||
memo.data.addColumn( { type: 'string', role: 'annotation' } ); | |||
memo.options.series.push( { label: memo.seriesA[ s ].title, type: 'area', curveType: 'function', pointType: 'circle', pointSize: memo.seriesA[ s ].size, lineWidth: memo.seriesA[ s ].line, 'color': memo.seriesA[ s ].color, 'areaOpacity': 0.8, 'visibleInLegend': memo.seriesA[ s ].legend, highlight: memo.seriesA[ s ].highlight } ); | |||
if ( memo.seriesA[ s ].trendline != 'none' ) { | |||
if ( memo.seriesA[ s ].obses.length > 1 ) { | |||
memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 2.33, visibleInLegend: false, tooltip: false }; | |||
} else { | } else { | ||
memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 0, color: 'transparent', visibleInLegend: false, tooltip: false }; | |||
} | |||
} | |||
} | } | ||
} | } | ||
} | |||
} | |||
// add data | |||
var cc = memo.data.getNumberOfColumns(); | |||
for ( var s in memo.seriesA ) { | |||
for (var o in memo.seriesA[s].obses ) { | |||
obs = memo.seriesA[s].obses[o]; | |||
dataRow = []; | dataRow = []; | ||
| Rivi 895: | Rivi 835: | ||
// x axis value | // x axis value | ||
dataRow[0] = obs. | dataRow[0] = obs.x; | ||
// data for series cols | // data for series cols | ||
if ( memo. | if ( memo.seriesA[ s ].id == memo.curSeason ) { | ||
dataRow[s*4+1] = obs. | dataRow[s*4+1] = obs.y; | ||
} else { | } else { | ||
dataRow[s*4+1] = obs. | dataRow[s*4+1] = obs.y + memo.distF*Math.random() - memo.distF*Math.random(); | ||
} | } | ||
dataRow[s*4+2] = obs.style; | dataRow[s*4+2] = obs.style; | ||
dataRow[s*4+3] = obs. | dataRow[s*4+3] = obs.tooltip; | ||
dataRow[s*4+4] = | dataRow[s*4+4] = obs.annotation; | ||
memo.dataA.push( dataRow ); | memo.dataA.push( dataRow ); | ||
| Rivi 911: | Rivi 851: | ||
} | } | ||
} | } | ||
console.log( memo.dataA ); | |||
// make ticks for x axis | // make ticks for x axis | ||
| Rivi 948: | Rivi 890: | ||
memo.options.hAxis.ticks.push({v: middleOfMonth, f: i18n.months[m]['roman'] }); | memo.options.hAxis.ticks.push({v: middleOfMonth, f: i18n.months[m]['roman'] }); | ||
} | } | ||
} | } | ||
drawChart(memo); | drawChart(memo); | ||
} | } | ||
function drawChart(memo) { | function drawChart(memo) { | ||
| Rivi 968: | Rivi 909: | ||
memo.downloadEl.fadeIn( "slow" ); | memo.downloadEl.fadeIn( "slow" ); | ||
memo.selectedCol = | memo.selectedCol = -1; | ||
google.visualization.events.addListener( memo.chart, 'select', function () { | google.visualization.events.addListener( memo.chart, 'select', function () { | ||
for ( var c in memo.options.series ) { | |||
if ( memo.options.series[c].highlight ) { | |||
memo.options.series[c].lineWidth = 0; | |||
//memo.options.series[c].pointSize = memo.options.series[c].origSize; | |||
memo.options.series[c].color = colors['obses']; | |||
memo.options.series[c].visibleInLegend = false; | |||
} | |||
} | |||
var selection = memo.chart.getSelection(); | var selection = memo.chart.getSelection(); | ||
if (selection.length > 0) { | if ( selection.length > 0 ) { | ||
var col = selection[0].column; | var col = selection[0].column; | ||
var sLabel = memo.data.getColumnLabel( selection[0].column ); | |||
var sSeries = ''; | |||
for (var c in memo.options.series) { | for (var c in memo.options.series) { | ||
if (memo.options.series[c]. | if ( memo.options.series[c].label == sLabel ) { | ||
sSeries = c; break; | |||
} | |||
} | |||
} | } | ||
if (col != memo.selectedCol && memo.options.series[ | if ( col != memo.selectedCol && memo.options.series[c].highlight ) { | ||
memo.selectedCol = col; | memo.selectedCol = col; | ||
memo.options.series[ | memo.options.series[ sSeries ].lineWidth = 3; | ||
//memo.options.series[(col-1)/4].pointSize = 12; | //memo.options.series[(col-1)/4].pointSize = 12; | ||
memo.options.series[ | memo.options.series[ sSeries ].color = colors[ 'selObses' ]; | ||
memo.options.series[ | memo.options.series[ sSeries ].visibleInLegend = true; | ||
} else { | } else { | ||
memo.selectedCol = | memo.selectedCol = -1; | ||
} | } | ||
} | } | ||
doResize(); | |||
}); | |||
memo.editEl.on( 'click', function() { | |||
window.location.href = memo.editUrl; | |||
}); | }); | ||
memo.fullscreenEl.on( 'click', function() { | memo.fullscreenEl.on( 'click', function() { | ||
| Rivi 1 056: | Rivi 998: | ||
memo.downloadEl.on( 'click', function() { | memo.downloadEl.on( 'click', function() { | ||
var header = ''; | |||
header += '\uFEFF'; // BOM | |||
var csv = ''; | |||
//csv += '\r\nsep=,\r\n'; | |||
var headerCols = []; | |||
var csvCols = []; | |||
if ( i18n[memo.obscode].type == 'num' ) { | |||
headerCols.push( i18n[ 'Date' ][ memo.lang ] ); | |||
headerCols.push( i18n[ 'Time' ][ memo.lang ] ); | |||
headerCols.push( i18n[ 'Observation' ][ memo.lang ] ); | |||
headerCols.push( i18n[ 'Value' ][ memo.lang ] ); | |||
headerCols.push( i18n[ 'ValueUnit' ][ memo.lang ] ); | |||
headerCols.push( i18n[ 'Additionalinfo' ][ memo.lang ] ); | |||
headerCols.push( i18n[ 'Image' ][ memo.lang ] ); | |||
headerCols.push( i18n[ 'ObserverStatus' ][ memo.lang ] ); | |||
header += headerCols.join( ';' ); | |||
for ( var o in memo.obses ) { | |||
csvCols = []; | |||
csvCols.push( memo.obses[o].obsdatetime.toLocaleDateString( memo.lang ) ); | |||
csvCols.push( memo.obses[o].obsdatetime.toLocaleTimeString( memo.lang ) ); | |||
//csvCols.push( memo.obses[o].obsdatetime.getFullYear() + '-' + ( memo.obses[o].obsdatetime.getMonth() + 1 ) + '-' + memo.obses[o].obsdatetime.getDate() ); | |||
//if ( memo.obses[o].obsdatetime.getUTCHours() == 0 && memo.obses[o].obsdatetime.getUTCMinutes() == 0 && memo.obses[o].obsdatetime.getUTCSeconds() == 0 ) { | |||
// csvCols.push( '' ); | |||
//} else { | |||
// csvCols.push( ( "0" + memo.obses[o].obsdatetime.getUTCHours() ).slice(-2) + ':' + ( "0" + memo.obses[o].obsdatetime.getUTCMinutes() ).slice(-2) ); | |||
//} | |||
csvCols.push( i18n[ memo ].title[memo.lang ] ); | |||
csvCols.push( '"' + memo.obses[o].value.toString().replace( '.', i18n['dec'][memo.lang] ) + '"' ); | |||
csvCols.push( memo.obses[o].addInfo ); | |||
csvCols.push( '' ); | |||
csvCols.push( memo.obses[o].maintainer ); | |||
csv += '\r\n' + csvCols.join( i18n['sep'][memo.lang] ); | |||
} | |||
} else if ( i18n[memo.obscode].type == 'date' ) { | |||
if ( i18n[memo.obscode].season == 'winter' ) { | |||
header += i18n[ 'season' ][ i18n[memo.obscode].season ][ memo.lang ]; | |||
} else { | } else { | ||
header += i18n[ 'year' ][ memo.lang ]; | |||
} | } | ||
header += ';' + i18n[ 'Observation' ][ memo.lang ]; | |||
header += ';' + i18n[ 'Value' ][ memo.lang ]; | |||
header += ';' + i18n[ 'ValueUnit' ][ memo.lang ]; | |||
header += ';' + i18n[ 'Additionalinfo' ][ memo.lang ]; | |||
header += ';' + i18n[ 'Image' ][ memo.lang ]; | |||
header += ';' + i18n[ 'ObserverStatus' ][ memo.lang ]; | |||
for ( var s in memo.seriesA ) { | |||
for ( var o in memo.seriesA[ s ].obses ) { | |||
obs = memo.seriesA[ s ].obses[ o ]; | |||
csv += '\r\n'; | |||
csv += obs.season + '-' + (obs.season+1); | |||
csv += ';' + i18n[ memo.seriesA[ s ].id ].title[ memo.lang ]; | |||
csv += ';' + obs.value; | |||
csv += ';' + obs.valueUnit; | |||
csv += ';' + obs.addInfo; | |||
csv += ';'; | |||
csv += ';' + obs.maintainer; | |||
} | |||
} | |||
} else if ( i18n[memo.obscode].type == 'cat' ) { | |||
header += 'Päivämäärä'; | |||
header += ';' + 'Kellonaika'; | |||
header += ';' + i18n[memo.obscode].title[memo.lang]; | |||
header += ';' + i18n[memo.obscode].title[memo.lang]; | |||
header += ';' + utf8StringToUtf16String( 'Lisätiedot' ); | |||
header += ';' + 'Valokuva'; | |||
header += ';' + 'Havainnoijan status'; | |||
for ( var o in memo.obses ) { | |||
csv += '\r\n'; | |||
csv += memo.obses[o].obsdatetime.toLocaleDateString(); //.toISOString(); | |||
if ( memo.obses[o].obsdatetime.getUTCHours() == 0 && memo.obses[o].obsdatetime.getUTCMinutes() == 0 && memo.obses[o].obsdatetime.getUTCSeconds() == 0 ) { | |||
csv += ';'; | |||
} else { | |||
csv += ';' + ( "0" + memo.obses[o].obsdatetime.getUTCHours() ).slice(-2) + ':' + ( "0" + memo.obses[o].obsdatetime.getUTCMinutes() ).slice(-2); | |||
} | |||
csv += ';' + memo.obses[o].value; | |||
csv += ';' + i18n[memo.obscode].catNames[memo.obses[o].value][memo.lang]; | |||
csv += ';' + memo.obses[o].addInfo; | |||
csv += ';'; | |||
csv += ';' + memo.obses[o].maintainer; | |||
} | } | ||
} | } | ||
csv = header + csv; | |||
//console.log( csv ); | |||
var exportedFilename = memo.csvfile; | |||
var blob = new Blob( [csv], { type: 'text/csv;charset=utf-16LE;' }); | |||
if (navigator.msSaveBlob) { // IE 10+ | |||
navigator.msSaveBlob(blob, exportedFilename); | |||
} else { | |||
var link = document.createElement("a"); | |||
if (link.download !== undefined) { // feature detection | |||
// Browsers that support HTML5 download attribute | |||
var url = URL.createObjectURL(blob); | |||
link.setAttribute("href", url); | |||
link.setAttribute("download", exportedFilename); | |||
link.style.visibility = 'hidden'; | |||
document.body.appendChild(link); | |||
link.click(); | |||
document.body.removeChild(link); | |||
} | |||
} | } | ||
| Rivi 1 204: | Rivi 1 163: | ||
//memo.options.chartArea = { top: memo.margins.top, left: memo.margins.left, width: (memo.widgetEl.width() - memo.margins.left - memo.margins.right), height: (memo.widgetEl.height() - memo.margins.top - memo.margins.bottom), backgroundColor: { fill: '#daf0fa', stroke: '#fff', strokeWidth: 6 }}; | //memo.options.chartArea = { top: memo.margins.top, left: memo.margins.left, width: (memo.widgetEl.width() - memo.margins.left - memo.margins.right), height: (memo.widgetEl.height() - memo.margins.top - memo.margins.bottom), backgroundColor: { fill: '#daf0fa', stroke: '#fff', strokeWidth: 6 }}; | ||
} | } | ||
memo.options.chartArea = { top: t, left: l, width: (w - l - r), height: (h - t - b), backgroundColor: { fill: '#daf0fa', stroke: '#fff', strokeWidth: 6 }}; | //memo.options.chartArea = { top: t, left: l, width: (w - l - r), height: (h - t - b), backgroundColor: { fill: '#daf0fa', stroke: '#fff', strokeWidth: 6 }}; | ||
memo.options.chartArea = { top: t, left: l, width: (w - l - r), height: (h - t - b), backgroundColor: { fill: '#fff', stroke: '#eee', strokeWidth: 4 }}; | |||
console.log( memo.options ); | //console.log( memo.options ); | ||
memo.chart.draw( memo.data, memo.options ); | memo.chart.draw( memo.data, memo.options ); | ||
| Rivi 1 221: | Rivi 1 181: | ||
// add dash to trendlines | // add dash to trendlines | ||
jQuery( document.getElementById(memo.id) ).find( 'path[stroke=" | jQuery( document.getElementById(memo.id) ).find( 'path[stroke-width="2.33"]' ).each( function() { | ||
jQuery( this ).attr('stroke-dasharray', '5, 5'); | jQuery( this ).attr('stroke-dasharray', '5, 5'); | ||
}); | }); | ||
| Rivi 1 234: | Rivi 1 194: | ||
jQuery( document.getElementById(memo.id) ).find( 'circle[stroke-width="3"]' ).each( function() { jQuery( this ).parent().append( jQuery( this ) ); }); | jQuery( document.getElementById(memo.id) ).find( 'circle[stroke-width="3"]' ).each( function() { jQuery( this ).parent().append( jQuery( this ) ); }); | ||
//jQuery( document.getElementById(memo.id) ).find( 'circle[fill="#3366cc"]' ).each( function() { jQuery( this ).parent().append( jQuery( this ) ); }); | //jQuery( document.getElementById(memo.id) ).find( 'circle[fill="#3366cc"]' ).each( function() { jQuery( this ).parent().append( jQuery( this ) ); }); | ||
//jQuery( document.getElementById(memo.id) ).find( 'path[stroke="#3366cc"]' ).each( function() { jQuery( this ).parent().append( jQuery( this ) ); }); | //jQuery( document.getElementById(memo.id) ).find( 'path[stroke="#3366cc"]' ).each( function() { jQuery( this ).parent().append( jQuery( this ) ); }); | ||
} | } | ||
| Rivi 1 292: | Rivi 1 240: | ||
Date.prototype.getWeek = function() { | Date.prototype.getWeek = function() { | ||
var date = new Date(this.getTime()); | var date = new Date(this.getTime()); | ||
date.setHours( | date.setHours(12, 0, 0, 0); | ||
// Thursday in current week decides the year. | // Thursday in current week decides the year. | ||
date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7); | date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7); | ||
| Rivi 1 306: | Rivi 1 254: | ||
var seriesC = [ 'lightgray', '#3366cc', 'orange' ]; | var seriesC = [ 'lightgray', '#3366cc', 'orange' ]; | ||
var colors = { 'average': ' | var colors = { 'average': '#c1e7f7', 'trend': '#ff4500', 'obses': 'lightgray', 'curObses': '#3366cc', 'selObses': 'gold', 'noticeObses': 'tan' }; | ||
var i18n = { | var i18n = { | ||
'download': { 'fi': 'Lataa csv-muodossa', 'en': 'Download in csv format', 'sv': 'Ladda ner i csv-format' }, | 'download': { 'fi': 'Lataa csv-muodossa', 'en': 'Download in csv format', 'sv': 'Ladda ner i csv-format' }, | ||
'fullscreen': { 'fi': 'Ota käyttöön/poista kokoruututila', 'en': 'Toggle fullscreen mode', 'sv': 'Växla helskärmsläge' }, | 'fullscreen': { 'fi': 'Ota käyttöön/poista kokoruututila', 'en': 'Toggle fullscreen mode', 'sv': 'Växla helskärmsläge' }, | ||
'edit': { 'fi': 'Lisää/muokkaa havaintoja', 'en': 'Add/edit observations', 'sv': '' }, | 'edit': { 'fi': 'Lisää/muokkaa havaintoja', 'en': 'Add/edit observations', 'sv': 'Lägg till/redigera observationer' }, | ||
'season': { 'winter': { 'fi': 'Talvi', 'en': 'Winter', 'sv': 'Vintern' } }, | |||
'dec': { 'fi': ',', 'en': '.', 'sv': ',' }, | 'dec': { 'fi': ',', 'en': '.', 'sv': ',' }, | ||
'sep': { 'fi': '\t', 'en': ' ', 'sv': ' ' }, | 'sep': { 'fi': '\t', 'en': ' ', 'sv': ' ' }, | ||
| Rivi 1 331: | Rivi 1 280: | ||
'title': { 'fi': 'Pintaveden lämpötila', 'en': 'Surface water termperature', 'sv': 'Ytvattentemperatur', 'ru': '???' }, | 'title': { 'fi': 'Pintaveden lämpötila', 'en': 'Surface water termperature', 'sv': 'Ytvattentemperatur', 'ru': '???' }, | ||
'unit': '°C', | 'unit': '°C', | ||
'axisTitleV': { 'fi': 'Lämpötila, °C', 'en': 'Temperature, °C', 'sv': 'Temperatur, °C', 'ru': '°C' } | 'axisTitleV': { 'fi': 'Lämpötila, °C', 'en': 'Temperature, °C', 'sv': 'Temperatur, °C', 'ru': '°C' }, | ||
'changes': { | |||
'fi': 'Pintaveden lämpötilan kuvio on uudistunut.', | |||
'en': 'The surface water temperature graph has been renewed.', | |||
'sv': 'Ytvattentemperaturdiagrammet har förnyats.', | |||
'ru': '' | |||
} | |||
}, | }, | ||
'ice': { | 'ice': { | ||
| Rivi 1 338: | Rivi 1 293: | ||
'season': 'winter', | 'season': 'winter', | ||
'min': 0, | 'min': 0, | ||
'direction': -1, | //'direction': -1, | ||
'trend': { 'type': 'gaussian', 'layout': 'line' }, | 'trend': { 'type': 'gaussian', 'layout': 'line' }, | ||
'title': { 'fi': 'Jään paksuus', 'en': 'Ice thickness', 'sv': 'Isens tjocklek', 'ru': '???' }, | 'title': { 'fi': 'Jään paksuus', 'en': 'Ice thickness', 'sv': 'Isens tjocklek', 'ru': '???' }, | ||
'unit': 'cm', | 'unit': 'cm', | ||
'axisTitleV': { 'fi': 'Jääpeite, cm', 'en': 'Ice cover, cm', 'sv': 'Istäcket, cm', 'ru': 'm' } | 'axisTitleV': { 'fi': 'Jääpeite, cm', 'en': 'Ice cover, cm', 'sv': 'Istäcket, cm', 'ru': 'm' }, | ||
'changes': { | |||
'fi': 'Jääpeitteen paksuudesta kertova kuvio on uudistunut. Nyt voit esimerkiksi korostaa kuviosta tietyn vuoden kehityksen valitsemalla yksittäisen havainnon.', | |||
'en': 'The chart showing the thickness of the ice sheet has been renewed. For example, you can now highlight a particular year in the chart by selecting a single observation.', | |||
'sv': 'Diagrammet som visar isens tjocklek har förnyats. Till exempel kan du nu markera ett visst år i diagrammet genom att välja en enskild observation.', | |||
'ru': '' | |||
} | |||
}, | }, | ||
'ice_cat': { | 'ice_cat': { | ||
'catName': 'Jäätilanne', | 'catName': 'Jäätilanne', | ||
}, | }, | ||
'ice_cat_2': { 'title': { 'fi': 'Jäätyminen', 'en': ' | 'ice_cat_2': { 'title': { 'fi': 'Jäätyminen', 'en': 'Freeze-up', 'sv': 'Förfrysning', 'ru': '???' }, 'title2': { 'fi': 'Pysyvä jääpeite', 'en': 'Permanent ice cover', 'sv': 'Permanent istäcke', 'ru': '???' }, color: '#d5da26' }, | ||
'ice_cat_5': { 'title': { 'fi': 'Jäänlähtö', 'en': 'Ice- | 'ice_cat_5': { 'title': { 'fi': 'Jäänlähtö', 'en': 'Ice break-up', 'sv': 'Islossning', 'ru': '???' }, 'title2': { 'fi': 'Jäätön kausi alkoi', 'en': 'Beginning of ice-free season', 'sv': 'Början av den isfria säsongen', 'ru': '???' }, color: '#0076b0' }, | ||
'ice_cat_2,5': { | 'ice_cat_2,5': { | ||
'type': 'date', | 'type': 'date', | ||
'season': 'winter', | 'season': 'winter', | ||
'trend': { 'type': 'regression', 'layout': 'line' }, | 'trend': { 'type': 'regression', 'layout': 'line' }, | ||
'title': { 'fi': ' | 'title': { 'fi': 'Jääpeitekauden kesto', 'en': 'Duration of ice cover', 'sv': 'Längden på istäckesperioden', 'ru': '' }, | ||
'unit': ' | //'charttitle': { 'fi': 'Jääpeite', 'en': 'Ice cover', 'sv': 'Frysning och islossning', 'ru': '' }, | ||
'axisTitleV': { 'fi': '', 'en': '', 'sv': '', 'ru': '' } | 'color': '#c1e7f7', | ||
}, | 'unit': { 'fi': 'päivää', 'en': 'days', 'sv': 'dagar', 'ru': '' }, | ||
'axisTitleV': { 'fi': '', 'en': '', 'sv': '', 'ru': '' }, | |||
'changes': { | |||
'fi': 'Jääpeitekauden pituudesta kertova kuvio on muuttunut. Aiemmat jäänlähdöstä ja jäättömän kauden alusta kertoneet erilliset graafit on yhdistetty samaan kuvaan. Jos samalta talvelta on tehty havainnot sekä pysyvän jäätilanteen että jäättömän kauden alkamisesta, piirtyy kuvioon myös jääpeitekauden pituus.', | |||
'en': 'The graph showing the length of the ice cover period has changed. Separate graphs of previous freezing and icing have now been combined into the same figure. If there are observations from the same winter about the beginning of both the permanent ice situation and the ice-free season, the length of the ice cover period is also drawn in the figure.', | |||
'sv': 'Grafen som visar längden på istäckeperioden har ändrats. Separata grafer över tidigare frysning och isbildning har nu kombinerats till samma figur. Om det finns iakttagelser från samma vinter om början av både den permanenta issituationen och den isfria säsongen, ritas även istäckesperiodens längd i figuren.', | |||
'ru': '' | |||
}, | |||
}, | |||
'snow_load': { | 'snow_load': { | ||
'catName': 'Lumikuorma', | 'catName': 'Lumikuorma', | ||
| Rivi 1 386: | Rivi 1 354: | ||
'unit': 'cm', | 'unit': 'cm', | ||
'axisTitleV': { 'fi': 'Vedenkorkeus, cm', 'en': 'Water level, cm', 'sv': 'Vattenståndpunkt, cm', 'ru': 'cm' } | 'axisTitleV': { 'fi': 'Vedenkorkeus, cm', 'en': 'Water level, cm', 'sv': 'Vattenståndpunkt, cm', 'ru': 'cm' } | ||
}, | }, | ||
'Observation': { 'fi': 'Havainto', 'en': 'Observation', 'sv': 'Observation', 'ru': '???' }, | |||
'new': { 'fi': 'Uusi', 'en': 'New', 'sv': 'Nytt', 'ru': '???' }, | |||
'Value': { 'fi': 'Arvo', 'en': 'Value', 'sv': 'Värde', 'ru': '???' }, | |||
'ValueUnit': { 'fi': 'Arvon tyyppi', 'en': 'Value type', 'sv': 'Värdes typ', 'ru': '???' }, | |||
'Date': { 'fi': 'Päivämäärä', 'en': 'Date', 'sv': 'Datum', 'ru': '???' }, | |||
'Additionalinfo': { 'fi': 'Lisätiedot', 'en': 'Additional info', 'sv': 'Tillägsinformation', 'ru': '???' }, | |||
'Image': { 'fi': 'Valokuva', 'en': 'Image', 'sv': 'Bild', 'ru': '???' }, | |||
'ObserverStatus': { 'fi': 'Havainnoijan status', 'en': 'Observer status', 'sv': 'Observatörens status', 'ru': '???' }, | |||
'average': { 'fi': 'Keskimäärin', 'en': 'Average', 'sv': 'Genomsnitt', 'ru': '???' }, | 'average': { 'fi': 'Keskimäärin', 'en': 'Average', 'sv': 'Genomsnitt', 'ru': '???' }, | ||
'moving': { 'fi': 'Liukuva keskiarvo', 'en': 'Moving average', 'sv': 'Glidande medelvärde', 'ru': '???' }, | |||
'trendline': { 'fi': 'Trendiviiva', 'en': 'Trend line', 'sv': 'Trendlinje', 'ru': '???' }, | 'trendline': { 'fi': 'Trendiviiva', 'en': 'Trend line', 'sv': 'Trendlinje', 'ru': '???' }, | ||
'days': { 'fi': 'päivää', 'en': 'days', 'sv': 'dygn', 'ru': '???' }, | |||
'month': { 'fi': 'Kuukausi', 'en': 'Month', 'sv': 'Månad', 'ru': '???' }, | 'month': { 'fi': 'Kuukausi', 'en': 'Month', 'sv': 'Månad', 'ru': '???' }, | ||
'months': { | 'months': { | ||


