Transalvador Improver

Adiciona a quantidade de horário e a frequência média entre as linhas no site da Transvaldor, além possibilitar a busca pelas linhas apertando ENTER

目前為 2016-06-27 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        Transalvador Improver
// @namespace   none
// @version     1.01
// @grant       none
// @description Adiciona a quantidade de horário e a frequência média entre as linhas no site da Transvaldor, além possibilitar a busca pelas linhas apertando ENTER
// @include	http://www.transalvador.salvador.ba.gov.br/*
// @date	29/mar/2014
// @rewrite	16/apr/2016
// @update	20/jun/2016
// ==/UserScript==

/* jshint expr: true, esversion: 6 */
/* global jQuery, buscar_linha, buscar_codigo, change_busca */

( function( $ ) {
'use strict';

var sf_interval;

function format_time( time ) {
	var hour = Math.floor( time / 60 ),
		minutes = Math.floor( time % 60 );

	return ( hour > 0 ? ( ( hour < 10 && '0' ) + hour + 'h' ) : '' ) + ( ( minutes < 10 && '0' ) + minutes + 'min' );
}

function schedule_features() {
	var hours_day = 0,
		hours_afternoon = 0,
		hours_night = 0,
		hours_total = 0,
		average_day = 0,
		average_afternoon = 0,
		average_night = 0,
		average_general = 0;

	return function() {
		var hour_part, prev_minutes, current_minutes, average_increment;

		if ( !$( '#frmHorario' ).length )
			return;

		if ( !$( '#schedule_amount' ).length ) {
			$( '.tit02' ).eq( 0 ).append( '<div id="schedule_amount" style="float:right;">Quantidade de horários</div>' );
			$( '.tit02' ).eq( 1 ).append(
				$( '<div id="schedule_amount_total_text" style="float:right"> - Total: </div>' ).append( $( '<div id="schedule_amount_total" style="float:right" />' ) ),
				$( '<div id="schedule_amount_night_text" style="float:right"> - Noite: </div>' ).append( $( '<div id="schedule_amount_night" style="float:right" />' ) ),
				$( '<div id="schedule_amount_afternoon_text" style="float:right"> - Tarde: </div>' ).append( $( '<div id="schedule_amount_afternoon" style="float:right" />' ) ),
				$( '<div id="schedule_amount_day_text" style="float:right">Dia: </div>' ).append( $( '<div id="schedule_amount_day" style="float:right" />' ) )
			);
			$( '.tit02' ).eq( 1 ).parent().parent().next().prepend(
				$( '<div id="schedule_average" style="float:right">Média entre as saídas</div>' ), '<br />',
				$( '<div id="schedule_average_general_text" style="float:right"> - Geral: </div>' ).append( $( '<div id="schedule_average_general" style="float:right" />' ) ),
				$( '<div id="schedule_average_night_text" style="float:right"> - Noite: </div>' ).append( $( '<div id="schedule_average_night" style="float:right" />' ) ),
				$( '<div id="schedule_average_afternoon_text" style="float:right"> - Tarde: </div>' ).append( $( '<div id="schedule_average_afternoon" style="float:right" />' ) ),
				$( '<div id="schedule_average_day_text" style="float:right">Dia: </div>' ).append( $( '<div id="schedule_average_day" style="float:right" />' ) )
			);
		}

		$( '#content table' ).eq( 0 ).find( 'td div' ).each ( function( i ) {
			if ( $( this ).html().search( /\d{2}:\d{2}/ ) === -1 )
				return;

			hour_part = $( this ).html().split( ':' );
			current_minutes = parseInt( hour_part[ 0 ] ) * 60 + parseInt( hour_part[ 1 ] );

			if ( i === 3 || !prev_minutes )
				prev_minutes = current_minutes;

			if ( i > 3 ) {
				average_increment = current_minutes < prev_minutes ? 60 - hour_part[ 1 ] + current_minutes : current_minutes - prev_minutes;
				prev_minutes = current_minutes;
				
				$( this ).parent().attr( 'bgcolor' ) === '#6699CC' && ( average_day += average_increment );
				$( this ).parent().attr( 'bgcolor' ) === '#eaedf4' && ( average_afternoon += average_increment );
				$( this ).parent().attr( 'bgcolor' ) === '#999CC' && ( average_night += average_increment );
			}

			( $( this ).parent().attr( 'bgcolor' ) === '#6699CC' ) && hours_day++;
			( $( this ).parent().attr( 'bgcolor' ) === '#eaedf4' ) && hours_afternoon++;
			( $( this ).parent().attr( 'bgcolor' ) === '#999CC' ) && hours_night++;
		} );

		hours_total = ( hours_day + hours_afternoon + hours_night );
		average_general = average_day + average_afternoon + average_night;
		average_general = hours_total > 2 ? average_general / ( hours_total - 1 ) : average_general;
		average_day = hours_day > 2 ? average_day / ( hours_day - 1 ) : average_day;
		average_afternoon = hours_afternoon > 2 ? average_afternoon / hours_afternoon : average_afternoon;
		average_night = hours_night > 2 ? average_night / hours_night : average_night;

		$( '#schedule_amount_day' ).html( hours_day );
		$( '#schedule_amount_afternoon' ).html( hours_afternoon );
		$( '#schedule_amount_night' ).html( hours_night );
		$( '#schedule_amount_total' ).html( hours_total < 0 ? 0 : hours_total );
		$( '#schedule_average_day' ).html( format_time( average_day ) );
		$( '#schedule_average_afternoon' ).html( format_time( average_afternoon ) );
		$( '#schedule_average_night' ).html( format_time( average_night ) );
		$( '#schedule_average_general' ).html( format_time( average_general ) );
		$( '#frmHorario img[height="20"]' ).click( () => {
			clearInterval( sf_interval );
			sf_interval = setInterval( schedule_features(), 50 );
		} );

		hours_day = hours_afternoon = hours_night = average_day = average_afternoon = average_night = average_general = 0;
	};
}

function main() {
	$( '#itemBusca' ).change( function() {
		var code, name;

		if ( $( this ).val() == "3" ) {
			code = setInterval( function() {
				$( '#codigoBusca' ).keydown( function( e ) {
					clearInterval( code );

					if ( e.which === 13 ) {
						e.preventDefault();
						buscar_codigo( '3' );
					}
				} );
			}, 50 );
		}

		if ( $( this ).val() == "4" ) {
			name = setInterval( function() {
				$( '#linhaBusca' ).keydown( function( e ) {
					clearInterval( name );

					if ( e.which === 13 ) {
						e.preventDefault();
						buscar_linha();
					}
				} );
			}, 50 );
		}
	} );

	sf_interval = setInterval( schedule_features(), 50 );

	$( '#itemBusca' ).find( 'option[value="3"]' ).attr( 'selected', true ).trigger( 'change' );
	change_busca();
}

$( main );

}( jQuery ) );