diff options
| -rwxr-xr-x | index.pl | 79 | ||||
| -rw-r--r-- | public/static/js/travelynx-actions.js | 49 | 
2 files changed, 64 insertions, 64 deletions
| @@ -299,39 +299,17 @@ helper 'checkout' => sub {  	my $user     = $self->get_user_status;  	my $train_id = $user->{train_id}; -	if ( $status->{errstr} and not $force ) { -		return $status->{errstr}; -	}  	if ( not $user->{checked_in} ) {  		return 'You are not checked into any train';  	} -	else { -		my ($train) -		  = first { $_->train_id eq $train_id } @{ $status->{results} }; -		if ( not defined $train ) { -			if ($force) { -				my $success = $self->app->checkout_query->execute( -					$self->get_user_id, -					$self->get_station_id( -						ds100 => $status->{station_ds100}, -						name  => $status->{station_name} -					), -					DateTime->now( time_zone => 'Europe/Berlin' )->epoch, -					undef, undef, undef, undef, undef, -					undef, undef, undef -				); -				if ( defined $success ) { -					return; -				} -				else { -					return 'INSERT failed'; -				} -			} -			else { -				return "Train ${train_id} not found"; -			} -		} -		else { +	if ( $status->{errstr} and not $force ) { +		return $status->{errstr}; +	} + +	my ($train) +		= first { $_->train_id eq $train_id } @{ $status->{results} }; +	if ( not defined $train ) { +		if ($force) {  			my $success = $self->app->checkout_query->execute(  				$self->get_user_id,  				$self->get_station_id( @@ -339,16 +317,8 @@ helper 'checkout' => sub {  					name  => $status->{station_name}  				),  				DateTime->now( time_zone => 'Europe/Berlin' )->epoch, -				$train->type, -				$train->line_no, -				$train->train_no, -				$train->train_id, -				$train->sched_arrival ? $train->sched_arrival->epoch : undef, -				$train->arrival       ? $train->arrival->epoch       : undef, -				join( '|', $train->route ), -				join( '|', -					map { ( $_->[0] ? $_->[0]->epoch : q{} ) . ':' . $_->[1] } -					  $train->messages ) +				undef, undef, undef, undef, undef, +				undef, undef, undef  			);  			if ( defined $success ) {  				return; @@ -357,6 +327,35 @@ helper 'checkout' => sub {  				return 'INSERT failed';  			}  		} +		else { +			return "Train ${train_id} not found"; +		} +	} +	else { +		my $success = $self->app->checkout_query->execute( +			$self->get_user_id, +			$self->get_station_id( +				ds100 => $status->{station_ds100}, +				name  => $status->{station_name} +			), +			DateTime->now( time_zone => 'Europe/Berlin' )->epoch, +			$train->type, +			$train->line_no, +			$train->train_no, +			$train->train_id, +			$train->sched_arrival ? $train->sched_arrival->epoch : undef, +			$train->arrival       ? $train->arrival->epoch       : undef, +			join( '|', $train->route ), +			join( '|', +				map { ( $_->[0] ? $_->[0]->epoch : q{} ) . ':' . $_->[1] } +					$train->messages ) +		); +		if ( defined $success ) { +			return; +		} +		else { +			return 'INSERT failed'; +		}  	}  }; diff --git a/public/static/js/travelynx-actions.js b/public/static/js/travelynx-actions.js index 7cec0cd..91953a6 100644 --- a/public/static/js/travelynx-actions.js +++ b/public/static/js/travelynx-actions.js @@ -1,41 +1,42 @@ -$(document).ready(function() { +function travelynx_run_action(link, req, redir, err_callback) {  	var error_icon = '<i class="material-icons">error</i>'; +	var progressbar = $('<div class="progress"><div class="indeterminate"></div></div>'); +	link.hide(); +	link.after(progressbar); +	$.post('/action', req, function(data) { +		if (data.success) { +			$(location).attr('href', redir); +		} else { +			M.toast({html: error_icon + ' ' + data.error}); +			progressbar.remove(); +			if (err_callback) { +				err_callback(); +			} +			link.append(' ' + error_icon); +			link.show(); +		} +	}); +} +$(document).ready(function() {  	$('.action-checkin').click(function() {  		var link = $(this); -		req = { +		var req = {  			action: 'checkin',  			station: link.data('station'),  			train: link.data('train'),  		}; -		progressbar = $('<div class="progress"><div class="indeterminate"></div></div>'); -		link.replaceWith(progressbar); -		$.post('/action', req, function(data) { -			if (data.success) { -				$(location).attr('href', '/'); -			} else { -				M.toast({html: error_icon + ' ' + data.error}); -				link.append(' ' + error_icon); -				progressbar.replaceWith(link); -			} -		}); +		travelynx_run_action(link, req, '/');  	});  	$('.action-checkout').click(function() {  		var link = $(this); -		req = { +		var req = {  			action: 'checkout',  			station: link.data('station'),  			force: link.data('force'),  		}; -		progressbar = $('<div class="progress"><div class="indeterminate"></div></div>'); -		link.replaceWith(progressbar); -		$.post('/action', req, function(data) { -			if (data.success) { -				$(location).attr('href', '/' + req.station); -			} else { -				M.toast({html: error_icon + ' ' + data.error}); -				link.append(' ' + error_icon); -				progressbar.replaceWith(link); -			} +		travelynx_run_action(link, req, '/' + req.station, function() { +			link.append(' – Keine Echtzeitdaten vorhanden') +			link.data('force', true);  		});  	});  }); | 
