From fbafa0e7efc71aa392d0d400e1777203cc95c841 Mon Sep 17 00:00:00 2001 From: Bruno Perles Date: Tue, 3 Nov 2015 17:30:33 +0100 Subject: Update IHM for vehicle journey frequency --- app/assets/javascripts/application.js | 3 +- .../vehicle_journey_frequencies.js.coffee | 13 ----- .../vehicle_journey_frequencies/index.js.coffee | 4 ++ .../javascripts/vehicle_journeys/index.js.coffee | 2 +- app/assets/stylesheets/application.css.scss.erb | 2 - .../main/vehicle_journey_frequencies.scss | 47 +++++++++++++++++ .../stylesheets/vendor/bootstrap_changes.css.scss | 24 +++++++++ app/helpers/vehicle_journey_frequencies_helper.rb | 7 +++ app/helpers/vehicle_journeys_helper.rb | 16 ++++-- .../_vehicle_journeys_matrix.html.erb | 61 ++++++++-------------- .../_vehicle_journeys_page_info.html.erb | 1 - .../vehicle_journeys/_vehicle_journeys.html.erb | 3 +- .../_vehicle_journeys_page_info.html.erb | 1 - app/views/vehicle_journeys/index.html.erb | 43 +++++++-------- config/locales/vehicle_journeys.en.yml | 1 + config/locales/vehicle_journeys.fr.yml | 1 + spec/models/gtfs_export_spec.rb | 4 +- spec/views/vehicle_journeys/_form.html.erb_spec.rb | 42 ++++++++++++--- .../_vehicle_journey.html.erb_spec.rb | 6 +++ 19 files changed, 186 insertions(+), 95 deletions(-) create mode 100644 app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee delete mode 100644 app/views/vehicle_journey_frequencies/_vehicle_journeys_page_info.html.erb delete mode 100644 app/views/vehicle_journeys/_vehicle_journeys_page_info.html.erb create mode 100644 spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 74e680a68..1ae76cd05 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -23,12 +23,11 @@ //= require footable/footable.paginate //= require footable/footable.sort //= require tools -//= require datatables -//= require datatables-fixedcolumns //= require_directory ./plugins //= require_directory . //= require_directory ./stop_areas //= require_directory ./vehicle_journeys +//= require_directory ./vehicle_journey_frequencies //= require_directory ./import_tasks //= require_directory ./compliance_check_tasks //= require_directory ./compliance_checks diff --git a/app/assets/javascripts/vehicle_journey_frequencies.js.coffee b/app/assets/javascripts/vehicle_journey_frequencies.js.coffee index 020283116..e69de29bb 100644 --- a/app/assets/javascripts/vehicle_journey_frequencies.js.coffee +++ b/app/assets/javascripts/vehicle_journey_frequencies.js.coffee @@ -1,13 +0,0 @@ -(($) -> - $ -> - $('.ce-VehicleJourneyFrequencyTableBlock').dataTable - searching: false, - ordering: false, - paging: false, - scrollX: true, - fixedColumns: true, - bInfo: false - window.setTimeout('$( ".dataTables_scrollBody" ).animate({scrollLeft: 100}, 500).animate({scrollLeft: 0}, 500)', 1000) - return - return -) jQuery diff --git a/app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee b/app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee new file mode 100644 index 000000000..4f4fccc18 --- /dev/null +++ b/app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee @@ -0,0 +1,4 @@ +$(".vehicle_journey_frequencies.index").ready -> + $( 'body' ).popover({html: true, trigger: "click", selector: '[rel="popover"]'}).on("show.bs.popover", (event)-> + $('[aria-describedby]').click() + $(event.target).data("bs.popover").tip().css("maxWidth", "350px")) diff --git a/app/assets/javascripts/vehicle_journeys/index.js.coffee b/app/assets/javascripts/vehicle_journeys/index.js.coffee index e21580f4e..02de558d4 100644 --- a/app/assets/javascripts/vehicle_journeys/index.js.coffee +++ b/app/assets/javascripts/vehicle_journeys/index.js.coffee @@ -1,4 +1,4 @@ -$(".vehicle_journeys.index, .vehicle_journey_frequencies.index").ready -> +$(".vehicle_journeys.index").ready -> $( 'body' ).popover({html: true, trigger: "focus", selector: 'thead th button'}) .on("show.bs.popover", (event)-> diff --git a/app/assets/stylesheets/application.css.scss.erb b/app/assets/stylesheets/application.css.scss.erb index f29ca4738..770e3c82b 100644 --- a/app/assets/stylesheets/application.css.scss.erb +++ b/app/assets/stylesheets/application.css.scss.erb @@ -30,8 +30,6 @@ $body-bg: #eee; @import "formtastic"; @import 'eonasdan-bootstrap-datetimepicker'; @import 'footable'; -@import 'datatables'; -@import 'datatables-fixedcolumns'; @import "vendor/openlayers_style"; @import "vendor/openlayers_ie6-style"; diff --git a/app/assets/stylesheets/main/vehicle_journey_frequencies.scss b/app/assets/stylesheets/main/vehicle_journey_frequencies.scss index 911a3f267..f973de209 100644 --- a/app/assets/stylesheets/main/vehicle_journey_frequencies.scss +++ b/app/assets/stylesheets/main/vehicle_journey_frequencies.scss @@ -103,4 +103,51 @@ .ce-VehicleJourneyFrequencyTableBlock { margin: 0 !important; } + .ce-VehicleJourneyFrequenciesMatrix { + margin: 0; + padding: 0; + > li { + background-color: #eee; + height: 22px; + margin-bottom: 20px; + position: relative; + > ul { + margin: 0; + padding: 0; + > li { + cursor: pointer; + position: absolute; + padding: 0 2px; + top: 0; + bottom: 0; + background-color: $brand-primary; + border-left: 1px solid #000; + border-right: 1px solid #000; + &:hover { + z-index: 9999; + background-color: #4d7809; + top: -2px; + bottom: -2px; + > span { + display: block; + } + } + } + } + } + } + .ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime, + .ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime { + display: none; + position: absolute; + top: -13px; + font-size: 11px; + color: #262626; + } + .ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime { + left: -32px; + } + .ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime { + right: -32px; + } } diff --git a/app/assets/stylesheets/vendor/bootstrap_changes.css.scss b/app/assets/stylesheets/vendor/bootstrap_changes.css.scss index 67cf90ae4..6e2ccc1f6 100644 --- a/app/assets/stylesheets/vendor/bootstrap_changes.css.scss +++ b/app/assets/stylesheets/vendor/bootstrap_changes.css.scss @@ -11,6 +11,7 @@ span.included_day_type { color: black; + font-weight: bold; } span.excluded_day_type { } @@ -32,3 +33,26 @@ color: $brand-success; } } +.popover-title { + display: table; + width: 100%; + > a { + display: table-cell; + vertical-align: top; + &:first-child { + padding-right: 10px; + } + &:last-child { + width: 32px; + } + } +} +.popover-content { + > ul { + margin: 0; + padding: 0; + > li { + list-style: none !important; + } + } +} diff --git a/app/helpers/vehicle_journey_frequencies_helper.rb b/app/helpers/vehicle_journey_frequencies_helper.rb index 5d62aaf7f..237c9b371 100644 --- a/app/helpers/vehicle_journey_frequencies_helper.rb +++ b/app/helpers/vehicle_journey_frequencies_helper.rb @@ -1,2 +1,9 @@ module VehicleJourneyFrequenciesHelper + def journey_frequency_percent(journey_frequency) + base = 100.0 / 2359.0 + left = base * journey_frequency.first_departure_time.strftime("%H%M").to_i + right = base * journey_frequency.last_departure_time.strftime("%H%M").to_i + width = right - left + [left.round(2), width.round(2)] + end end diff --git a/app/helpers/vehicle_journeys_helper.rb b/app/helpers/vehicle_journeys_helper.rb index 9b4f055a1..c5f3242be 100644 --- a/app/helpers/vehicle_journeys_helper.rb +++ b/app/helpers/vehicle_journeys_helper.rb @@ -25,12 +25,20 @@ module VehicleJourneysHelper l(departure_time, :format => :hour).gsub( / /, ' ') end - def vehicle_title(vehicle, departure_time=nil) + def vehicle_title(vehicle, journey_frequency=nil) return t("vehicle_journeys.vehicle_journey#{'_frequency' if vehicle.frequency?}.title_stopless", :name => vehicle_name( vehicle)) if vehicle.vehicle_journey_at_stops.empty? first_vjas = vehicle.vehicle_journey_at_stops.first - t("vehicle_journeys.vehicle_journey#{'_frequency' if vehicle.frequency?}.title", - :stop => first_vjas.stop_point.stop_area.name, - :time => vehicle_departure(vehicle, departure_time)) + if vehicle.frequency? && journey_frequency + t("vehicle_journeys.vehicle_journey_frequency.title_frequency", + :interval => l(journey_frequency.scheduled_headway_interval, format: :hour), + :stop => first_vjas.stop_point.stop_area.name, + :time_first => vehicle_departure(nil, journey_frequency.first_departure_time), + :time_last => vehicle_departure(nil, journey_frequency.last_departure_time)) + else + t("vehicle_journeys.vehicle_journey#{'_frequency' if vehicle.frequency?}.title", + :stop => first_vjas.stop_point.stop_area.name, + :time => vehicle_departure(vehicle, (journey_frequency ? journey_frequency.first_departure_time : nil ))) + end end def edit_vehicle_title( vehicle) diff --git a/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb b/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb index c915e4f54..c023f9cfb 100644 --- a/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb +++ b/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb @@ -1,41 +1,22 @@ - - - - - <% @matrix.each do |departure_time, vj| %> - + - - - <% @matrix_interval = Chouette::VehicleJourneyFrequency.matrix_interval(@matrix) %> - <% @route.stop_points.each do |sp| %> - - - <% @matrix.each do |departure_time, vj| %> - <% next unless @matrix_interval[sp.id] %> - <% vjas = @matrix_interval[sp.id][departure_time.to_i] %> - - <% end %> - - <% end %> - -
- - - -
<%= sp.stop_area.name %><%= (vjas && vjas.departure_time) ? l( vjas.departure_time, format: :hour) : '--' %>
+ + +<% end %> + diff --git a/app/views/vehicle_journey_frequencies/_vehicle_journeys_page_info.html.erb b/app/views/vehicle_journey_frequencies/_vehicle_journeys_page_info.html.erb deleted file mode 100644 index fe3ae29e0..000000000 --- a/app/views/vehicle_journey_frequencies/_vehicle_journeys_page_info.html.erb +++ /dev/null @@ -1 +0,0 @@ - <%= t("will_paginate.page_entries_info.search") %> <%= page_entries_info @vehicle_journeys %> <%= t('.with_matrix_size', matrix_size: @matrix.size) %> diff --git a/app/views/vehicle_journeys/_vehicle_journeys.html.erb b/app/views/vehicle_journeys/_vehicle_journeys.html.erb index 8dc2a74ef..9d553e48b 100644 --- a/app/views/vehicle_journeys/_vehicle_journeys.html.erb +++ b/app/views/vehicle_journeys/_vehicle_journeys.html.erb @@ -1,5 +1,6 @@
- <%= render 'vehicle_journeys_page_info' %> + <%= t("will_paginate.page_entries_info.search") %> + <%= page_entries_info @vehicle_journeys %>
diff --git a/config/locales/vehicle_journeys.en.yml b/config/locales/vehicle_journeys.en.yml index b70ddb025..6e8aba661 100644 --- a/config/locales/vehicle_journeys.en.yml +++ b/config/locales/vehicle_journeys.en.yml @@ -8,6 +8,7 @@ en: vehicle_journey_frequency: title_stopless: "Vehicle journey frequency %{name}" title: "Vehicle journey frequency leaving from %{stop} at %{time}" + title_frequency: "Vehicle journey frequency with %{interval}min leaving from %{stop} at %{time_first} to %{time_last}" actions: index: "Vehicle time's board" new: "Add a new timed vehicle journey" diff --git a/config/locales/vehicle_journeys.fr.yml b/config/locales/vehicle_journeys.fr.yml index eda76bde6..b9f155153 100644 --- a/config/locales/vehicle_journeys.fr.yml +++ b/config/locales/vehicle_journeys.fr.yml @@ -8,6 +8,7 @@ fr: vehicle_journey_frequency: title_stopless: "Course à fréquence %{name}" title: "Course à fréquence partant de %{stop} à %{time}" + title_frequency: "Course à fréquence de %{interval}min partant de %{stop} de %{time_first} à %{time_last}" actions: index: "Horaires des courses" new: "Ajouter une course à horaire" diff --git a/spec/models/gtfs_export_spec.rb b/spec/models/gtfs_export_spec.rb index 6051497a7..ccc98e872 100644 --- a/spec/models/gtfs_export_spec.rb +++ b/spec/models/gtfs_export_spec.rb @@ -11,7 +11,7 @@ describe GtfsExport, :type => :model do end it "should be mandatory" do - subject.should validate_presence_of(:time_zone) + should validate_presence_of(:time_zone) end end @@ -23,7 +23,7 @@ describe GtfsExport, :type => :model do end it "should be mandatory" do - subject.should_not validate_presence_of(:time_zone) + should_not validate_presence_of(:time_zone) end end diff --git a/spec/views/vehicle_journeys/_form.html.erb_spec.rb b/spec/views/vehicle_journeys/_form.html.erb_spec.rb index ab1d946bf..05fa068d9 100644 --- a/spec/views/vehicle_journeys/_form.html.erb_spec.rb +++ b/spec/views/vehicle_journeys/_form.html.erb_spec.rb @@ -8,7 +8,11 @@ describe "/vehicle_journeys/_form", :type => :view do let!(:vehicle_journey) { assign :vehicle_journey, create(:vehicle_journey, :route => route) } it "should render an input for transport_mode" do - render + render partial: 'vehicle_journeys/form', + locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential, + line, + route, + vehicle_journey) } expect(rendered).to have_selector( "select#vehicle_journey_transport_mode_name") do |node| Chouette::Line.transport_modes.each do |mode| expect(node).to have_selector("option", :text => mode.text_code) @@ -17,14 +21,22 @@ describe "/vehicle_journeys/_form", :type => :view do end it "should render an input for comment" do - render + render partial: 'vehicle_journeys/form', + locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential, + line, + route, + vehicle_journey) } expect(rendered).to have_selector("form") do with_selector "input[type=text][comment=]", vehicle_journey.comment end end context "stop's time view part" do it "should render stop's names" do - render + render partial: 'vehicle_journeys/form', + locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential, + line, + route, + vehicle_journey) } expect(rendered).to have_selector("form") do |form_node| vehicle_journey.stop_points.each do |sp| form_node.with_selector "label", :text => sp.stop_area.name @@ -32,12 +44,20 @@ describe "/vehicle_journeys/_form", :type => :view do end end it "renders _vehicle_journey_at_stop_fields partial for each vehicle_journey_at_stop" do - render + render partial: 'vehicle_journeys/form', + locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential, + line, + route, + vehicle_journey) } expect(view).to render_template(:partial => "_vehicle_journey_at_stop_fields", :count => vehicle_journey.vehicle_journey_at_stops.count) end it "should render vehicle_journey_at_stop's departure time" do - render + render partial: 'vehicle_journeys/form', + locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential, + line, + route, + vehicle_journey) } expect(rendered).to have_selector("form") do |form_node| vehicle_journey.stop_points.each_with_index do |sp, index| form_node.with_selector "select", :name => "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(4i)]" @@ -48,7 +68,11 @@ describe "/vehicle_journeys/_form", :type => :view do end context "when existing vehicle_journey" do it "should display objectid not as an input" do - render + render partial: 'vehicle_journeys/form', + locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential, + line, + route, + vehicle_journey) } expect(rendered).to have_selector("form") do with_selector "input[type=text][objectid=][disabled=true]", vehicle_journey.objectid end @@ -57,7 +81,11 @@ describe "/vehicle_journeys/_form", :type => :view do context "when new vehicle_journey" do let!(:vehicle_journey) { assign :vehicle_journey, build(:vehicle_journey, :route => route) } it "should render an input for objectid" do - render + render partial: 'vehicle_journeys/form', + locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential, + line, + route, + vehicle_journey) } expect(rendered).to have_selector("form") do with_selector "input[type=text][objectid=][disabled=false]", vehicle_journey.objectid end diff --git a/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb b/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb new file mode 100644 index 000000000..e1c61c4a7 --- /dev/null +++ b/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb @@ -0,0 +1,6 @@ +require 'spec_helper' + +describe "/vehicle_journeys/_vehicle_journey", :type => :view do + + assign_referential +end -- cgit v1.2.3