diff options
8 files changed, 169 insertions, 134 deletions
| diff --git a/app/assets/stylesheets/components/_tables.sass b/app/assets/stylesheets/components/_tables.sass index 5f8b06f09..1e02ad586 100644 --- a/app/assets/stylesheets/components/_tables.sass +++ b/app/assets/stylesheets/components/_tables.sass @@ -326,7 +326,25 @@      border-bottom: 2px solid rgba($grey, 0.5)      border-top: 1px solid rgba($grey, 0.5)      text-transform: capitalize -     + +    .info-button +      position: absolute +      width: 20px +      height: 20px +      top: 0 +      right: 0 +      margin: 6px 8px +      button +        border: none +        background: $blue +        border-radius: 20px +        width: 100% +        height: 100% +        font-size: 12px +        line-height: 14px +        color: white +        outline: none +    .td      position: relative      padding: 6px 8px diff --git a/app/javascript/vehicle_journeys/components/Navigate.js b/app/javascript/vehicle_journeys/components/Navigate.js index 0158b8392..24843babc 100644 --- a/app/javascript/vehicle_journeys/components/Navigate.js +++ b/app/javascript/vehicle_journeys/components/Navigate.js @@ -17,8 +17,7 @@ export default function Navigate({ dispatch, vehicleJourneys, pagination, status    if(status.fetchSuccess == true) {      return (        <div className="pagination"> -        Liste des horaires {minVJ} à {maxVJ} sur {pagination.totalCount} - +        {I18n.t("vehicle_journeys.vehicle_journeys_matrix.pagination", {minVJ, maxVJ, total:pagination.totalCount})}          <form className='page_links' onSubmit={e => {e.preventDefault()}}>            <button              onClick={e => { @@ -53,4 +52,4 @@ Navigate.propTypes = {    status: PropTypes.object.isRequired,    pagination: PropTypes.object.isRequired,    dispatch: PropTypes.func.isRequired -}
\ No newline at end of file +} diff --git a/app/javascript/vehicle_journeys/components/ToggleArrivals.js b/app/javascript/vehicle_journeys/components/ToggleArrivals.js index 9e7089be5..9a2b0097f 100644 --- a/app/javascript/vehicle_journeys/components/ToggleArrivals.js +++ b/app/javascript/vehicle_journeys/components/ToggleArrivals.js @@ -5,7 +5,7 @@ import PropTypes from 'prop-types'  export default function ToggleArrivals({filters, onToggleArrivals}) {    return (      <div className='has_switch form-group inline'> -      <label htmlFor='toggleArrivals' className='control-label'>Afficher et éditer les horaires d'arrivée</label> +      <label htmlFor='toggleArrivals' className='control-label'>{I18n.t('vehicle_journeys.form.show_arrival_time')}</label>        <div className='form-group'>          <div className='checkbox'>            <label> diff --git a/app/javascript/vehicle_journeys/components/Tools.js b/app/javascript/vehicle_journeys/components/Tools.js index ee02e5a68..22ea44283 100644 --- a/app/javascript/vehicle_journeys/components/Tools.js +++ b/app/javascript/vehicle_journeys/components/Tools.js @@ -44,8 +44,8 @@ export default class Tools extends Component {            <DeleteVehicleJourneys disabled={!this.hasPolicy("destroy") || !editMode}/>          </ul> -        <span className='info-msg'>{actions.getSelected(vehicleJourneys).length} course(s) sélectionnée(s)</span> -        <button className='btn btn-xs btn-link pull-right' onClick={onCancelSelection}>Annuler la sélection</button> +        <span className='info-msg'>{I18n.t('vehicle_journeys.vehicle_journeys_matrix.selected_journeys', {count: actions.getSelected(vehicleJourneys).length})}</span> +        <button className='btn btn-xs btn-link pull-right' onClick={onCancelSelection}>{I18n.t('vehicle_journeys.vehicle_journeys_matrix.cancel_selection')}</button>        </div>      )    } diff --git a/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js b/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js index bcfd4eb41..d3c01f154 100644 --- a/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js +++ b/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js @@ -59,7 +59,7 @@ export default class EditVehicleJourney extends Component {                <div className='modal-dialog'>                  <div className='modal-content'>                    <div className='modal-header'> -                    <h4 className='modal-title'>Informations</h4> +                    <h4 className='modal-title'>{I18n.t('vehicle_journeys.form.infos')}</h4>                      <span type="button" className="close modal-close" data-dismiss="modal">×</span>                    </div> @@ -69,7 +69,7 @@ export default class EditVehicleJourney extends Component {                            <div className='row'>                              <div className='col-lg-6 col-md-6 col-sm-6 col-xs-12'>                                <div className='form-group'> -                                <label className='control-label'>Nom de la course</label> +                                <label className='control-label'>{I18n.attribute_name('vehicle_journey', 'journey_name')}</label>                                  <input                                    type='text'                                    ref='published_journey_name' @@ -82,7 +82,7 @@ export default class EditVehicleJourney extends Component {                              </div>                              <div className='col-lg-6 col-md-6 col-sm-6 col-xs-12'>                                <div className='form-group'> -                                <label className='control-label'>Mission</label> +                                <label className='control-label'>{I18n.attribute_name('vehicle_journey', 'journey_pattern')}</label>                                  <input                                    type='text'                                    className='form-control' @@ -96,7 +96,7 @@ export default class EditVehicleJourney extends Component {                          <div className='row'>                            <div className='col-lg-6 col-md-6 col-sm-6 col-xs-12'>                              <div className='form-group'> -                              <label className='control-label'>Numéro de train</label> +                              <label className='control-label'>{I18n.attribute_name('vehicle_journey', 'company')}</label>                                <input                                  type='text'                                  ref='published_journey_identifier' @@ -109,7 +109,7 @@ export default class EditVehicleJourney extends Component {                            </div>                            <div className='col-lg-6 col-md-6 col-sm-6 col-xs-12'>                              <div className='form-group'> -                              <label className='control-label'>Transporteur</label> +                              <label className='control-label'>{I18n.attribute_name('vehicle_journey', 'company')}</label>                                <CompanySelect2                                  editModal={this.props.modal.type == "edit"}                                  editMode={this.editMode()} @@ -124,7 +124,7 @@ export default class EditVehicleJourney extends Component {                          <div className='row'>                            <div className='col-lg-6 col-md-6 col-sm-6 col-xs-12'>                              <div className='form-group'> -                              <label className='control-label'>Mode de transport</label> +                              <label className='control-label'>{I18n.attribute_name('vehicle_journey', 'transport_mode')}</label>                                <input                                  type='text'                                  className='form-control' @@ -135,18 +135,18 @@ export default class EditVehicleJourney extends Component {                            </div>                            <div className='col-lg-6 col-md-6 col-sm-6 col-xs-12'>                              <div className='form-group'> -                              <label className='control-label'>Sous mode de transport</label> +                              <label className='control-label'>{I18n.attribute_name('vehicle_journey', 'transport_submode')}</label>                                <input                                  type='text'                                  className='form-control' -                                value={window.I18n.fr.enumerize.transport_submode[this.props.modal.modalProps.vehicleJourney.transport_submode]} +                                value={I18n.enumerize('transport_submode', this.props.modal.modalProps.vehicleJourney.transport_submode)}                                  disabled={true}                                />                              </div>                            </div>                          </div>                          <div className='form-group'> -                          <label className='control-label'>Signature métier</label> +                          <label className='control-label'>{I18n.attribute_name('vehicle_journey', 'checksum')}</label>                              <input                              type='text'                              ref='checksum' diff --git a/app/javascript/vehicle_journeys/components/tools/VehicleJourneyInfoButton.js b/app/javascript/vehicle_journeys/components/tools/VehicleJourneyInfoButton.js index a63a1d701..538bbdbd6 100644 --- a/app/javascript/vehicle_journeys/components/tools/VehicleJourneyInfoButton.js +++ b/app/javascript/vehicle_journeys/components/tools/VehicleJourneyInfoButton.js @@ -10,7 +10,7 @@ export default class VehicleJourneyInfoButton extends Component {    render() {      return ( -      <li className='st_action'> +      <div className='info-button'>          <button            type='button'            data-toggle='modal' @@ -19,7 +19,7 @@ export default class VehicleJourneyInfoButton extends Component {          >            <span className='fa fa-info'></span>          </button> -      </li> +      </div>      )    }  } diff --git a/config/locales/vehicle_journeys.en.yml b/config/locales/vehicle_journeys.en.yml index a1f20a7e8..0c8a75b0c 100644 --- a/config/locales/vehicle_journeys.en.yml +++ b/config/locales/vehicle_journeys.en.yml @@ -1,11 +1,14 @@  en:    vehicle_journeys:      vehicle_journeys_matrix: -      line_routes: "Line's routes" +      cancel_selection: "Cancel Selection"        fetching_error: "There has been a problem fetching the data. Please reload the page to try again." -      show_timetable: 'Show calendar' -      show_purchase_window: 'Show the purchase window' +      line_routes: "Line's routes"        modal_confirm: 'Do you want to save mofications before moving on to the next page ?' +      pagination: "Schedules %{minVJ} to %{maxVJ} over %{total}" +      selected_journeys: "%{count} selected journeys" +      show_purchase_window: 'Show the purchase window' +      show_timetable: 'Show calendar'      vehicle_journey:        title_stopless: "Vehicle journey %{name}"        title: "Vehicle journey leaving from %{stop} at %{time}" @@ -29,52 +32,54 @@ en:        title_stopless: "Update vehicle journey %{name}"        title: "Update vehicle journey %{name} leaving from %{stop} at %{time}"      form: -      stop_title: "Stop" -      departure: "Departure" +      arrival_at: "Arrival at"        arrival: "Arrival"        departure_at: "Departure at" -      arrival_at: "Arrival at" -      to_arrivals: "Copy departures to arrivals" -      to_departures: "Copy arrivals to departures" -      time_tables: "Associated calendars to vehicle journey" -      slide: "Shift" -      slide_title: "Shift all vehicle passing times" -      set: "Set" -      to: "at" +      departure: "Departure"        departure_range:          label: Journey departure range          start: Start          end: End -      show_journeys_without_schedule: "Show journeys without schedule" +      infos: Informations +      set: "Set" +      show_arrival_time: "Show and edit arrival times"        show_journeys_with_calendar: "Show journeys with calendar" -      slide_departure: "departure time at first stop" +      show_journeys_without_schedule: "Show journeys without schedule"        slide_arrival: "arrival time at first stop" -      submit_timed: "Create vehicle journey" +      slide_departure: "departure time at first stop" +      slide_title: "Shift all vehicle passing times" +      slide: "Shift" +      stop_title: "Stop" +      submit_frequency_edit: "Edit frequency vehicle journey"        submit_frequency: "Create frequency vehicle journey"        submit_timed_edit: "Edit vehicle journey" -      submit_frequency_edit: "Edit frequency vehicle journey" +      submit_timed: "Create vehicle journey" +      time_tables: "Associated calendars to vehicle journey" +      to_arrivals: "Copy departures to arrivals" +      to_departures: "Copy arrivals to departures" +      to: "at"      timeless:        title: "Timeless vehicle journeys"        vehicle_journeys: "Vehicle journeys with times at stop"        vehicles_list: "Vehicle journeys list"      show: -      title: "Vehicle Journey %{vehicle journey}" -      stop_title: "Stop" -      departure: "Departure"        arrival: "Arrival" -      time_tables: "Calendars list"        bounding: "From %{start} to %{end}" -      translation_form: "Vehicle journey translations" +      departure: "Departure"        journey_frequencies: "Timeband" +      stop_title: "Stop" +      time_tables: "Calendars list" +      title: "Vehicle Journey %{vehicle journey}" +      translation_form: "Vehicle journey translations"      index: -      title: "Vehicle journeys on route %{route}" -      vehicle_journeys: "Departure's times" -      selection: "Filter on" -      selection_all: "All" +      advanced_search: "Advanced Search"        select_journey_patterns: "Select journey pattern"        select_time_tables: "Enter a timetable" +      selection_all: "All" +      selection: "Filter on"        time_range: "Departure time threshold" -      advanced_search: "Advanced Search" +      title: "Vehicle journeys on route %{route}" +      vehicle_journeys: "Departure's times"      time_filter:        time_range_filter: "Filter"      sidebar: @@ -90,43 +95,47 @@ en:          other: "vehicle journeys"      attributes:        vehicle_journey: -        line: "Line" -        route: "Route" -        journey_pattern: "Journey Pattern" -        journey_pattern_id: "Pattern ID" -        time_tables: "Calendars" -        time_slot: "Time Slot" -        company: "Company" -        number: "Number" +        accessible: "Accessible" +        arrival_time: "Arrival" +        checksum: "Checksum"          comment: "Comments" -        status_value: "Status Value" -        transport_mode: "Transport Mode" -        mobility_restricted_suitability: "PRM accessibility" +        company: "Company" +        created_at: Created at +        creator_id: "Created by" +        departure_time: "Departure" +        facility: "Facility"          flexible_service: "On demond transportation" -        unspecified_mrs: "Not specified" -        accessible: "Accessible" +        footnote_ids: "Footnotes" +        id: "Journey ID" +        journey_frequency_ids: "Timeband" +        journey_name: "Name of the journey" +        journey_pattern_id: "Pattern ID" +        journey_pattern: "Journey Pattern" +        line: "Line" +        mobility_restricted_suitability: "PRM accessibility" +        name: "Journey Name"          not_accessible: "Not accessible" -        unspecified_fs: "Not specified" +        number: "Number" +        object_version: "Version" +        objectid: "Neptune identifier"          on_demand_fs: "On demand service" -        regular_fs: "Regular service" -        published_journey_name: "Published Name"          published_journey_identifier: "Published Identifier" -        facility: "Facility" -        vehicle_type_identifier: "Vehicle Type Identifier" +        published_journey_name: "Published Name" +        purchase_window: "Purchase availability" +        regular_fs: "Regular service" +        route: "Route" +        status_value: "Status Value" +        time_slot: "Time Slot"          time_table_ids: "Calendar list" -        vehicle_journey_at_stop_ids: "Time list" -        journey_frequency_ids: "Timeband" -        objectid: "Neptune identifier" -        object_version: "Version" -        created_at: Created at +        time_tables: "Calendars" +        train_number: "Train number" +        transport_mode: "Transport Mode" +        transport_submode: "Transport Submode" +        unspecified_fs: "Not specified" +        unspecified_mrs: "Not specified"          updated_at: Updated at -        creator_id: "Created by" -        footnote_ids: "Footnotes" -        departure_time: "Departure" -        arrival_time: "Arrival" -        purchase_window: "Purchase availability" -        name: "Journey Name" -        id: "Journey ID" +        vehicle_journey_at_stop_ids: "Time list" +        vehicle_type_identifier: "Vehicle Type Identifier"      errors:        models:          vehicle_journey: diff --git a/config/locales/vehicle_journeys.fr.yml b/config/locales/vehicle_journeys.fr.yml index be5be2382..6bf167234 100644 --- a/config/locales/vehicle_journeys.fr.yml +++ b/config/locales/vehicle_journeys.fr.yml @@ -1,11 +1,14 @@  fr:    vehicle_journeys:      vehicle_journeys_matrix: -      line_routes: "Séquences d'arrêts de la ligne" +      cancel_selection: "Annuler la sélection"        fetching_error: "La récupération des missions a rencontré un problème. Rechargez la page pour tenter de corriger le problème." -      show_timetable: 'Voir le calendrier' -      show_purchase_window: 'Voir le calendrier commercial' +      line_routes: "Séquences d'arrêts de la ligne"        modal_confirm: 'Voulez-vous valider vos modifications avant de changer de page?' +      pagination: "Liste des horaires %{minVJ} à %{maxVJ} sur %{total}" +      selected_journeys: "%{count} course(s) sélectionnée(s)" +      show_purchase_window: 'Voir le calendrier commercial' +      show_timetable: 'Voir le calendrier'      vehicle_journey:        title_stopless: "Course %{name}"        title: "Course partant de %{stop} à %{time}" @@ -29,53 +32,55 @@ fr:        title_stopless: "Editer la course %{name}"        title: "Editer la course partant de %{stop} à %{time}"      form: -      stop_title: "Arrêt" -      departure: "Départ" -      departure_at: "Départ à" -      arrival: "Arrivée"        arrival_at: "Arrivée à" -      to_arrivals: "Copie départs vers arrivées" -      to_arrivals: "Copie départs vers arrivées" -      to_departures: "Copie arrivées vers départs" -      time_tables: "Calendriers associés à la course" -      slide: "Décaler" -      slide_title: "Décaler l'ensemble des horaires de course" -      set: "Fixer" -      to: "à" +      arrival: "Arrivée" +      departure_at: "Départ à" +      departure: "Départ"        departure_range:          label: Plage horaire au départ de la course          start: Début          end: Fin -      show_journeys_without_schedule: "Afficher les courses sans horaires" +      infos: Informations +      set: "Fixer" +      show_arrival_time: "Afficher et éditer les horaires d'arrivée"        show_journeys_with_calendar: "Afficher les courses avec calendrier" -      slide_departure: "horaire de départ au 1° arrêt à" +      show_journeys_without_schedule: "Afficher les courses sans horaires"        slide_arrival: "horaire d'arrivée au 1° arrêt à" -      submit_timed: "Créer course" +      slide_departure: "horaire de départ au 1° arrêt à" +      slide_title: "Décaler l'ensemble des horaires de course" +      slide: "Décaler" +      stop_title: "Arrêt" +      submit_frequency_edit: "Editer course en fréquence"        submit_frequency: "Créer course en fréquence"        submit_timed_edit: "Editer course" -      submit_frequency_edit: "Editer course en fréquence" +      submit_timed: "Créer course" +      time_tables: "Calendriers associés à la course" +      to_arrivals: "Copie départs vers arrivées" +      to_arrivals: "Copie départs vers arrivées" +      to_departures: "Copie arrivées vers départs" +      to: "à"      timeless:        title: "Courses sans horaire"        vehicle_journeys: "Courses ayant des horaires"        vehicles_list: "Liste des courses"      show: -      title: "Course au départ de %{stop} à %{time} sur la séquence %{route}" -      stop_title: "Arrêt" -      departure: "Départ"        arrival: "Arrivée" -      time_tables: "Liste des calendriers"        bounding: "De %{start} à %{end}" -      translation_form: "Cloner la course" +      departure: "Départ"        journey_frequencies: "Créneau horaire" +      stop_title: "Arrêt" +      time_tables: "Liste des calendriers" +      title: "Course au départ de %{stop} à %{time} sur la séquence %{route}" +      translation_form: "Cloner la course"      index: -      title: "Horaires de '%{route}'" -      vehicle_journeys: "Horaires de départ aux arrêts" -      selection: "Filtrer sur" -      selection_all: "Tous" +      advanced_search: "Recherche avancée"        select_journey_patterns: "Sélectionner une mission"        select_time_tables: "Saisir un calendrier" +      selection_all: "Tous" +      selection: "Filtrer sur"        time_range: "Seuil horaire au départ" -      advanced_search: "Recherche avancée" +      title: "Horaires de '%{route}'" +      vehicle_journeys: "Horaires de départ aux arrêts"      time_filter:        time_range_filter: "Filtrer"      sidebar: @@ -91,43 +96,47 @@ fr:          other: "courses"      attributes:        vehicle_journey: -        line: "Ligne" -        route: "Séquence d'arrêt" -        journey_pattern: "Mission" -        journey_pattern_id: "ID Mission" -        time_tables: "Calendriers" -        time_slot: "Fréquence" -        company: "Transporteur" -        number: "Numéro" +        accessible: "Accessible" +        arrival_time: "Arrivée" +        checksum: "Signature métier"          comment: "Commentaires" -        status_value: "Etat de trafic" -        transport_mode: "Mode de transport" -        mobility_restricted_suitability: "Accessibilité PMR" +        company: "Transporteur" +        created_at: "Créé le" +        creator_id: "Créé par" +        departure_time: "Départ" +        facility: "Equipement"          flexible_service: "Transport à la demande" -        unspecified_mrs: "Non spécifié" -        accessible: "Accessible" +        footnote_ids: "Notes de bas de page" +        id: "ID Course" +        journey_frequency_ids: "Créneau horaire" +        journey_name: "Nom de la course" +        journey_pattern_id: "ID Mission" +        journey_pattern: "Mission" +        line: "Ligne" +        mobility_restricted_suitability: "Accessibilité PMR" +        name: "Nom Course"          not_accessible: "Non accessible" -        unspecified_fs: "Non spécifié" +        number: "Numéro" +        object_version: "Version" +        objectid: "Identifiant Neptune"          on_demand_fs: "Service à la demande" -        regular_fs: "Service régulier" -        published_journey_name: "Nom public"          published_journey_identifier: "Identifiant public" -        facility: "Equipement" -        vehicle_type_identifier: "Type d'identifiant du véhicule" +        published_journey_name: "Nom public" +        purchase_window: "Disponibilité commerciale" +        regular_fs: "Service régulier" +        route: "Séquence d'arrêt" +        status_value: "Etat de trafic" +        time_slot: "Fréquence"          time_table_ids: "Liste des calendriers" -        vehicle_journey_at_stop_ids: "Liste des horaires" -        journey_frequency_ids: "Créneau horaire" -        objectid: "Identifiant Neptune" -        object_version: "Version" -        created_at: "Créé le" +        time_tables: "Calendriers" +        train_number: "Numéro de train" +        transport_mode: "Mode de transport" +        transport_submode: "Sous-mode de transport" +        unspecified_fs: "Non spécifié" +        unspecified_mrs: "Non spécifié"          updated_at: "Edité le" -        creator_id: "Créé par" -        footnote_ids: "Notes de bas de page" -        departure_time: "Départ" -        arrival_time: "Arrivée" -        purchase_window: "Disponibilité commerciale" -        name: "Nom Course" -        id: "ID Course" +        vehicle_journey_at_stop_ids: "Liste des horaires" +        vehicle_type_identifier: "Type d'identifiant du véhicule"      errors:        models:          vehicle_journey: | 
