Moovit Improver

Adiciona a quantidade de horários e a frequência média entre as viagens ao buscar linhas no Moovit (https://moovitapp.com). Baseado no script Transalvador Improver.

  1. // ==UserScript==
  2. // @name Moovit Improver
  3. // @namespace none
  4. // @version 1.0.0
  5. // @author Roger Pestana (rogerlima@outlook.com)
  6. // @grant none
  7. // @license GNU General Public License v3.0
  8. // @description Adiciona a quantidade de horários e a frequência média entre as viagens ao buscar linhas no Moovit (https://moovitapp.com). Baseado no script Transalvador Improver.
  9. // @include *moovitapp.com/index/pt-br/transporte_p*time*
  10. // @date 14/jan/2024
  11. // ==/UserScript==
  12.  
  13. /* jshint laxbreak: true, esversion: 6 */
  14.  
  15. ( function( window ) {
  16. 'use strict';
  17.  
  18. function $qsa( el ) {
  19. return document.querySelectorAll( el );
  20. }
  21.  
  22. function format_time( time ) {
  23. let hour = Math.floor( time / 60 ),
  24. minutes = Math.floor( time % 60 );
  25.  
  26. return ( time < 60 ) ? parseInt( time ) + 'm' : ( `${ ( hour < 10 && '0' ) + hour }h` ) + ( `${ ( minutes < 10 && '0' ) + minutes }m` );
  27. }
  28.  
  29. // Main function
  30. // @return {undefined}
  31. function moovit_improver() {
  32. let i, j, hour_diff, hour_part,
  33. trips = new Map();
  34. const HOURS_TBODY = '.table-wrapper table tbody td';
  35. const HOURS_THEAD = '.table-wrapper table thead th';
  36.  
  37. for ( i = 0; i < $qsa( HOURS_THEAD ).length; i++ )
  38. trips.set( i, { list: [], average: [], average_sum: 0 } );
  39. const HOURS_THEAD_COUNT = trips.size;
  40.  
  41. // Gets the data
  42. $qsa( HOURS_TBODY ).forEach( ( hour, index ) => {
  43. if ( hour.textContent === '-' )
  44. return;
  45. hour_part = hour.textContent.split( ':' );
  46. trips.get( index % HOURS_THEAD_COUNT ).list.push( parseInt( hour_part[ 0 ] ) + ( parseInt( hour_part[ 1 ] ) / 60 ) );
  47. } );
  48.  
  49. // Gets the average between trips
  50. for ( i = 0; i < trips.size; i++ ) {
  51. for ( j = 0; j < trips.get( i ).list.length - 1; j++ ) {
  52. hour_diff = parseFloat( parseFloat( ( trips.get( i ).list[ j + 1 ] - trips.get( i ).list[ j ] ) * 60 ).toPrecision( 4 ) );
  53. trips.get( i ).average_sum += hour_diff;
  54. trips.get( i ).average.push( hour_diff );
  55. }
  56.  
  57. trips.get( i ).average_sum = trips.get( i ).average_sum / trips.get( i ).average.length;
  58. }
  59.  
  60. // Shows the data
  61. $qsa( HOURS_THEAD ).forEach(
  62. ( hour_block, index ) => hour_block.innerHTML +=
  63. `<br /><small>Viagens: ${ trips.get( ( index % HOURS_THEAD_COUNT ) ).list.length }`
  64. + `<br />Média entre as viagens: ${ format_time( trips.get( ( index % HOURS_THEAD_COUNT ) ).average_sum ) }</small>`
  65. );
  66. }
  67.  
  68. // Inits
  69. if ( location.href.indexOf( 'https://moovitapp.com/index/pt-br/transporte_p%C3%BAblico-time-' ) !== -1 )
  70. window.onload = moovit_improver;
  71. }( window ) );