aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts
diff options
context:
space:
mode:
authorRobertDober2017-04-06 19:00:24 +0200
committerRobertDober2017-04-07 07:07:26 +0200
commitdc515f5eda324baae5a9583f1be433ac7dcd2915 (patch)
tree850f26f59c5f9420bd3a1ed32179c6e5e20676e2 /app/assets/javascripts
parent2a682f54f583a985809ba9ba1e33a1608f9f63b0 (diff)
parent7ac766fb016108429730248f1a8bfd5065e8c31b (diff)
downloadchouette-core-dc515f5eda324baae5a9583f1be433ac7dcd2915.tar.bz2
db:schema:dump
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/application.js2
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js22
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/OlMap.js3
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/components/StopPoint.js8
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/form_helper.js3
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/index.js14
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js29
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js23
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js2
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js23
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js1
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js3
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js2
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/index.js1
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js9
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js7
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js11
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/reducers/status.js7
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js97
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js5
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js44
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js8
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js10
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js8
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js10
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js8
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/NotesEditVehicleJourney.js8
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js10
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js36
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js22
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js15
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/status.js9
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js66
-rw-r--r--app/assets/javascripts/forms.coffee20
-rw-r--r--app/assets/javascripts/main_menu.coffee36
-rw-r--r--app/assets/javascripts/routes.coffee8
-rw-r--r--app/assets/javascripts/select2.coffee8
41 files changed, 378 insertions, 232 deletions
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 3bce3ec7d..b90f7539d 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -21,3 +21,5 @@
//= require footable/footable.sort
//= require_directory ./plugins
//= require_directory .
+require('whatwg-fetch')
+require('babel-polyfill')
diff --git a/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js b/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js
index 81bf2dcbe..dae62d3e1 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/components/BSelect2.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
@@ -27,6 +28,23 @@ class BSelect3 extends React.Component{
})
}
+ parsedText(data) {
+ let a = data.replace('</em></small>', '')
+ let b = a.split('<small><em>')
+ if (b.length > 1) {
+ return (
+ <span>
+ {b[0]}
+ <small><em>{b[1]}</em></small>
+ </span>
+ )
+ } else {
+ return (
+ <span>{data}</span>
+ )
+ }
+ }
+
render() {
if(this.props.value.edit)
return (
@@ -48,7 +66,7 @@ class BSelect3 extends React.Component{
href={origin + path + '/stop_areas/' + this.props.value.stoparea_id}
title="Voir l'arrêt"
>
- {this.props.value.text}
+ {this.parsedText(this.props.value.text)}
</a>
)
}
@@ -84,7 +102,7 @@ class BSelect2 extends React.Component{
processResults: function(data, params) {
return {
results: data.map(
- item => Object.assign(
+ item => _.assign(
{},
item,
{ text: item.name + ", " + item.zip_code + " " + item.short_city_name + " <small><em>(" + item.user_objectid + ")</em></small>" }
diff --git a/app/assets/javascripts/es6_browserified/itineraries/components/OlMap.js b/app/assets/javascripts/es6_browserified/itineraries/components/OlMap.js
index 76142b0e1..0eca5f3ff 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/components/OlMap.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/components/OlMap.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var React = require('react')
var Component = require('react').Component
var PropTypes = require('react').PropTypes
@@ -96,7 +97,7 @@ class OlMap extends Component{
return false
}
}
- let data = Object.assign({}, e.selected[0].getProperties(), {geometry: undefined});
+ let data = _.assign({}, e.selected[0].getProperties(), {geometry: undefined});
this.props.onSelectMarker(this.props.index, data)
} else {
diff --git a/app/assets/javascripts/es6_browserified/itineraries/components/StopPoint.js b/app/assets/javascripts/es6_browserified/itineraries/components/StopPoint.js
index de95759e1..48f77b8e9 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/components/StopPoint.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/components/StopPoint.js
@@ -7,7 +7,9 @@ const StopPoint = (props) => {
return (
<div className='nested-fields'>
<div className='wrapper'>
- <div style={{width: 90}}>{props.value.user_objectid}</div>
+ <div style={{width: 90}}>
+ <span>{props.value.user_objectid}</span>
+ </div>
<div>
<BSelect2 id={'route_stop_points_' + props.id} value={props.value} onChange={props.onChange} index={props.index} />
@@ -47,12 +49,12 @@ const StopPoint = (props) => {
>
<span className='fa fa-arrow-down'></span>
</div>
-
+
<div
className='btn btn-link'
onClick={props.onToggleEdit}
>
- <span className={'fa' + (props.value.edit ? ' fa-undo' : ' fa-pencil')}></span>
+ <span className={'fa' + (props.value.edit ? ' fa-check' : ' fa-pencil')}></span>
</div>
<div
className='btn btn-link'
diff --git a/app/assets/javascripts/es6_browserified/itineraries/form_helper.js b/app/assets/javascripts/es6_browserified/itineraries/form_helper.js
index d48718841..0baba27ef 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/form_helper.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/form_helper.js
@@ -1,8 +1,9 @@
const addInput = (name, value, index) => {
let form = document.querySelector('form')
let input = document.createElement('input')
+ let formatedName = 'route[stop_points_attributes]['+ index.toString()+']['+name+']'
input.setAttribute('type', 'hidden')
- input.setAttribute('name', `route[stop_points_attributes][${index}][${name}]`)
+ input.setAttribute('name', formatedName)
input.setAttribute('value', value)
form.appendChild(input)
}
diff --git a/app/assets/javascripts/es6_browserified/itineraries/index.js b/app/assets/javascripts/es6_browserified/itineraries/index.js
index e4a28ab49..57c63a97b 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/index.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/index.js
@@ -17,21 +17,21 @@ const getInitialState = () => {
let datas = JSON.parse(decodeURIComponent(window.itinerary_stop))
datas.map(function(v, i) {
- let fancyText = v.name
+ let fancyText = v.name.replace("&#39;", "\'")
if(v.zip_code && v.city_name)
- fancyText += ", " + v.zip_code + " " + v.city_name
+ fancyText += ", " + v.zip_code + " " + v.city_name.replace("&#39;", "\'")
state.push({
stoppoint_id: v.stoppoint_id,
stoparea_id: v.stoparea_id,
user_objectid: v.user_objectid,
- short_name: v.short_name,
+ short_name: v.short_name.replace("&#39;", "\'"),
area_type: v.area_type,
index: i,
edit: false,
- city_name: v.city_name,
+ city_name: v.city_name.replace("&#39;", "\'"),
zip_code: v.zip_code,
- name: v.name,
+ name: v.name.replace("&#39;", "\'"),
registration_number: v.registration_number,
text: fancyText,
for_boarding: v.for_boarding || "normal",
@@ -65,7 +65,7 @@ render(
document.querySelector('input[name=commit]').addEventListener('click', (event)=>{
let state = store.getState()
- for (let [i, stopPoint] of state.stopPoints.entries()){
+ state.stopPoints.map((stopPoint, i) => {
if (stopPoint.stoppoint_id == undefined){
stopPoint.stoppoint_id = ""
}
@@ -74,5 +74,5 @@ document.querySelector('input[name=commit]').addEventListener('click', (event)=>
addInput('position',i, i)
addInput('for_boarding',stopPoint.for_boarding, i)
addInput('for_alighting',stopPoint.for_alighting, i)
- }
+ })
})
diff --git a/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js b/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js
index 6fc5c165f..79b9648a6 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var addInput = require('../form_helper')
const stopPoint = (state = {}, action, length) => {
@@ -60,7 +61,7 @@ const stopPoints = (state = [], action) => {
return state.map( (t, i) => {
if (i === action.index) {
updateFormForDeletion(t)
- return Object.assign(
+ return _.assign(
{},
t,
{
@@ -84,7 +85,7 @@ const stopPoints = (state = [], action) => {
case 'UPDATE_SELECT_VALUE':
return state.map( (t, i) => {
if (i === action.index) {
- let stopState = Object.assign({}, t)
+ let stopState = _.assign({}, t)
stopState[action.select_id] = action.select_value
return stopState
} else {
@@ -94,7 +95,7 @@ const stopPoints = (state = [], action) => {
case 'TOGGLE_EDIT':
return state.map((t, i) => {
if (i === action.index){
- return Object.assign({}, t, {edit: !t.edit})
+ return _.assign({}, t, {edit: !t.edit})
} else {
return t
}
@@ -103,19 +104,19 @@ const stopPoints = (state = [], action) => {
return state.map( (t, i) => {
if (i === action.index){
let val = !t.olMap.isOpened
- let jsonData = val ? Object.assign({}, t, {olMap: undefined}) : {}
- let stateMap = Object.assign({}, t.olMap, {isOpened: val, json: jsonData})
- return Object.assign({}, t, {olMap: stateMap})
+ let jsonData = val ? _.assign({}, t, {olMap: undefined}) : {}
+ let stateMap = _.assign({}, t.olMap, {isOpened: val, json: jsonData})
+ return _.assign({}, t, {olMap: stateMap})
}else {
- let emptyMap = Object.assign({}, t.olMap, {isOpened: false, json : {}})
- return Object.assign({}, t, {olMap: emptyMap})
+ let emptyMap = _.assign({}, t.olMap, {isOpened: false, json : {}})
+ return _.assign({}, t, {olMap: emptyMap})
}
})
case 'SELECT_MARKER':
return state.map((t, i) => {
if (i === action.index){
- let stateMap = Object.assign({}, t.olMap, {json: action.data})
- return Object.assign({}, t, {olMap: stateMap})
+ let stateMap = _.assign({}, t.olMap, {json: action.data})
+ return _.assign({}, t, {olMap: stateMap})
} else {
return t
}
@@ -123,16 +124,16 @@ const stopPoints = (state = [], action) => {
case 'UNSELECT_MARKER':
return state.map((t, i) => {
if (i === action.index){
- let stateMap = Object.assign({}, t.olMap, {json: {}})
- return Object.assign({}, t, {olMap: stateMap})
+ let stateMap = _.assign({}, t.olMap, {json: {}})
+ return _.assign({}, t, {olMap: stateMap})
} else {
return t
}
})
case 'CLOSE_MAP':
return state.map( (t, i) => {
- let emptyMap = Object.assign({}, t.olMap, {isOpened: false, json: {}})
- return Object.assign({}, t, {olMap: emptyMap})
+ let emptyMap = _.assign({}, t.olMap, {isOpened: false, json: {}})
+ return _.assign({}, t, {olMap: emptyMap})
})
default:
return state
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
index a31f89841..709686f21 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
@@ -1,3 +1,10 @@
+var Promise = require('promise-polyfill')
+
+// To add to window
+if (!window.Promise) {
+ window.Promise = Promise;
+}
+
const actions = {
receiveJourneyPatterns : (json) => ({
type: "RECEIVE_JOURNEY_PATTERNS",
@@ -101,7 +108,8 @@ const actions = {
submitJourneyPattern : (dispatch, state, next) => {
dispatch(actions.fetchingApi())
let urlJSON = window.location.pathname + ".json"
- let req = new Request(urlJSON, {
+ let hasError = false
+ fetch(urlJSON, {
credentials: 'same-origin',
method: 'PATCH',
contentType: 'application/json; charset=utf-8',
@@ -110,10 +118,7 @@ const actions = {
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
- })
- let hasError = false
- fetch(req)
- .then(response => {
+ }).then(response => {
if(!response.ok) {
hasError = true
}
@@ -158,12 +163,10 @@ const actions = {
str = '.json?page=' + page.toString()
}
let urlJSON = window.location.pathname + str
- let req = new Request(urlJSON, {
- credentials: 'same-origin',
- })
let hasError = false
- fetch(req)
- .then(response => {
+ fetch(urlJSON, {
+ credentials: 'same-origin',
+ }).then(response => {
if(response.status == 500) {
hasError = true
}
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js
index 573ebf228..aa2d208df 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js
@@ -17,7 +17,7 @@ class CreateModal extends Component {
}
render() {
- if(this.props.status.isFetching == true) {
+ if(this.props.status.isFetching == true || this.props.status.policy['journey_patterns.edit'] == false) {
return false
}
if(this.props.status.fetchSuccess == true) {
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js
index 3dae38d74..d9f6d5550 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js
@@ -14,7 +14,7 @@ class JourneyPattern extends Component{
let vjURL = routeURL + '/vehicle_journeys?jp=' + jpOid
return (
- <a href={vjURL}>Horaires des courses</a>
+ <a data-no-turbolink="true" href={vjURL}>Horaires des courses</a>
)
}
@@ -34,7 +34,7 @@ class JourneyPattern extends Component{
type='checkbox'
id={sp.id}
checked={sp.checked}
- disabled={this.props.value.deletable ? 'disabled' : ''}
+ disabled={(this.props.value.deletable || this.props.status.policy['journey_patterns.edit'] == false) ? 'disabled' : ''}
>
</input>
<span className='radio-label'></span>
@@ -74,29 +74,30 @@ class JourneyPattern extends Component{
<span className='fa fa-cog'></span>
</div>
<ul className='dropdown-menu'>
- <li className={this.props.value.deletable ? 'disabled' : ''}>
- <a
- href='#'
+ <li className={(this.props.value.deletable || this.props.status.policy['journey_patterns.edit'] == false) ? 'disabled' : ''}>
+ <button
+ type='button'
onClick={this.props.onOpenEditModal}
data-toggle='modal'
data-target='#JourneyPatternModal'
>
Editer
- </a>
+ </button>
</li>
<li className={this.props.value.object_id ? '' : 'disabled'}>
{this.vehicleJourneyURL(this.props.value.object_id)}
</li>
- <li className='delete-action'>
- <a
- href='#'
+ <li className={'delete-action' + ((this.props.status.policy['journey_patterns.edit'] == false)? ' disabled' : '')}>
+ <button
+ type='button'
+ disabled={(this.props.status.policy['journey_patterns.edit'] == false)? 'disabled' : ''}
onClick={(e) => {
e.preventDefault()
this.props.onDeleteJourneyPattern(this.props.index)}
}
>
- <span className='fa fa-trash'></span>Supprimer
- </a>
+ <span className='fa fa-trash'></span>Supprimer
+ </button>
</li>
</ul>
</div>
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js
index 37a0a5126..e0557d651 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPatterns.js
@@ -116,6 +116,7 @@ class JourneyPatterns extends Component{
onCheckboxChange= {(e) => this.props.onCheckboxChange(e, index)}
onOpenEditModal= {() => this.props.onOpenEditModal(index, journeyPattern)}
onDeleteJourneyPattern={() => this.props.onDeleteJourneyPattern(index)}
+ status= {this.props.status}
/>
)}
</div>
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js
index 839d8f72e..3ca860e2e 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/Navigate.js
@@ -7,7 +7,6 @@ let Navigate = ({ dispatch, journeyPatterns, pagination, status }) => {
let firstPage = 1
let lastPage = Math.ceil(pagination.totalCount / window.journeyPatternsPerPage)
- let ItemLength = window.journeyPatternLength
let firstItemOnPage = firstPage + (pagination.perPage * (pagination.page - firstPage))
let lastItemOnPage = firstItemOnPage + (pagination.perPage - firstPage)
@@ -19,7 +18,7 @@ let Navigate = ({ dispatch, journeyPatterns, pagination, status }) => {
<div className='row'>
<div className='col-lg-12 text-right'>
<div className='pagination'>
- Liste des missions {firstItemOnPage} à {(lastItemOnPage < ItemLength) ? lastItemOnPage : ItemLength} sur {ItemLength}
+ Liste des missions {firstItemOnPage} à {(lastItemOnPage < pagination.totalCount) ? lastItemOnPage : pagination.totalCount} sur {pagination.totalCount}
<form className='page_links' onSubmit={e => {
e.preventDefault()
}}>
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js
index 6e09430a0..93dfa8c6b 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/SaveJourneyPattern.js
@@ -15,7 +15,7 @@ class SaveJourneyPattern extends Component{
}
render() {
- if(this.props.status.isFetching == true) {
+ if(this.props.status.isFetching == true || (this.props.status.policy['journey_patterns.edit'] == false)) {
return false
}
if(this.props.status.fetchSuccess == true) {
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/index.js
index a2e1c2fb6..b06957e0f 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/index.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/index.js
@@ -13,6 +13,7 @@ var App = require('./components/App')
var initialState = {
status: {
+ policy: window.perms,
fetchSuccess: true,
isFetching: false
},
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
index 92381f018..d4f7257d7 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/journeyPatterns.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var actions = require("../actions")
const journeyPattern = (state = {}, action) => {
@@ -21,12 +22,12 @@ const journeyPattern = (state = {}, action) => {
case 'UPDATE_CHECKBOX_VALUE':
var updatedStopPoints = state.stop_points.map((s) => {
if (String(s.id) == action.id) {
- return Object.assign({}, s, {checked : !s.checked})
+ return _.assign({}, s, {checked : !s.checked})
}else {
return s
}
})
- return Object.assign({}, state, {stop_points: updatedStopPoints})
+ return _.assign({}, state, {stop_points: updatedStopPoints})
default:
return state
}
@@ -61,7 +62,7 @@ const journeyPatterns = (state = [], action) => {
case 'DELETE_JOURNEYPATTERN':
return state.map((j, i) =>{
if(i == action.index) {
- return Object.assign({}, j, {deletable: true})
+ return _.assign({}, j, {deletable: true})
} else {
return j
}
@@ -74,7 +75,7 @@ const journeyPatterns = (state = [], action) => {
case 'SAVE_MODAL':
return state.map((j, i) =>{
if(i == action.index) {
- return Object.assign({}, j, {
+ return _.assign({}, j, {
name: action.data.name.value,
published_name: action.data.published_name.value,
registration_number: action.data.registration_number.value
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
index cb274d767..86cfb5a25 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/modal.js
@@ -1,8 +1,9 @@
+var _ = require('lodash')
const modal = (state = {}, action) => {
switch (action.type) {
case 'OPEN_CONFIRM_MODAL':
$('#ConfirmModal').modal('show')
- return Object.assign({}, state, {
+ return _.assign({}, state, {
type: 'confirm',
confirmModal: {
callback: action.callback,
@@ -24,9 +25,9 @@ const modal = (state = {}, action) => {
confirmModal: {}
}
case 'DELETE_JOURNEYPATTERN':
- return Object.assign({}, state, { type: '' })
+ return _.assign({}, state, { type: '' })
case 'SAVE_MODAL':
- return Object.assign({}, state, { type: '' })
+ return _.assign({}, state, { type: '' })
case 'CLOSE_MODAL':
return {
type: '',
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js
index 48d95fdea..0714ca843 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/pagination.js
@@ -1,26 +1,27 @@
+var _ = require('lodash')
const pagination = (state = {}, action) => {
switch (action.type) {
case 'RECEIVE_JOURNEY_PATTERNS':
- return Object.assign({}, state, {stateChanged: false})
+ return _.assign({}, state, {stateChanged: false})
case 'GO_TO_PREVIOUS_PAGE':
if (action.pagination.page > 1){
toggleOnConfirmModal()
- return Object.assign({}, state, {page : action.pagination.page - 1, stateChanged: false})
+ return _.assign({}, state, {page : action.pagination.page - 1, stateChanged: false})
}
return state
case 'GO_TO_NEXT_PAGE':
if (state.totalCount - (action.pagination.page * action.pagination.perPage) > 0){
toggleOnConfirmModal()
- return Object.assign({}, state, {page : action.pagination.page + 1, stateChanged: false})
+ return _.assign({}, state, {page : action.pagination.page + 1, stateChanged: false})
}
return state
case 'UPDATE_CHECKBOX_VALUE':
case 'ADD_JOURNEYPATTERN':
case 'SAVE_MODAL':
toggleOnConfirmModal('modal')
- return Object.assign({}, state, {stateChanged: true})
+ return _.assign({}, state, {stateChanged: true})
case 'UPDATE_TOTAL_COUNT':
- return Object.assign({}, state, {totalCount : state.totalCount - action.diff })
+ return _.assign({}, state, {totalCount : state.totalCount - action.diff })
default:
return state
}
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/status.js b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/status.js
index 973fab0f9..6241777da 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/reducers/status.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/reducers/status.js
@@ -1,13 +1,14 @@
+var _ = require('lodash')
var actions = require("../actions")
const status = (state = {}, action) => {
switch (action.type) {
case 'UNAVAILABLE_SERVER':
- return Object.assign({}, state, {fetchSuccess: false})
+ return _.assign({}, state, {fetchSuccess: false})
case 'FETCH_API':
- return Object.assign({}, state, {isFetching: true})
+ return _.assign({}, state, {isFetching: true})
case 'RECEIVE_JOURNEY_PATTERNS':
- return Object.assign({}, state, {fetchSuccess: true, isFetching: false})
+ return _.assign({}, state, {fetchSuccess: true, isFetching: false})
default:
return state
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
index 14e127d3c..9abaf9d0f 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
@@ -1,3 +1,9 @@
+var Promise = require('promise-polyfill')
+
+// To add to window
+if (!window.Promise) {
+ window.Promise = Promise;
+}
var batchActions = require('../batch').batchActions
const actions = {
@@ -271,12 +277,10 @@ const actions = {
if (queryString){
urlJSON = urlJSON + sep + queryString
}
- let req = new Request(urlJSON, {
- credentials: 'same-origin',
- })
let hasError = false
- fetch(req)
- .then(response => {
+ fetch(urlJSON, {
+ credentials: 'same-origin',
+ }).then(response => {
if(response.status == 500) {
hasError = true
}
@@ -322,7 +326,8 @@ const actions = {
submitVehicleJourneys : (dispatch, state, next) => {
dispatch(actions.fetchingApi())
let urlJSON = window.location.pathname + "_collection.json"
- let req = new Request(urlJSON, {
+ let hasError = false
+ fetch(urlJSON, {
credentials: 'same-origin',
method: 'PATCH',
contentType: 'application/json; charset=utf-8',
@@ -331,10 +336,7 @@ const actions = {
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
- })
- let hasError = false
- fetch(req)
- .then(response => {
+ }).then(response => {
if(!response.ok) {
hasError = true
}
@@ -360,13 +362,29 @@ const actions = {
return obj.selected
})
},
- pad: (d) => {
+ simplePad: (d) => {
if(d.toString().length == 1){
return (d < 10) ? '0' + d.toString() : d.toString();
}else{
return d.toString()
}
},
+ pad: (d, timeUnit) => {
+ let val = d.toString()
+ if(d.toString().length == 1){
+ val = (d < 10) ? '0' + d.toString() : d.toString();
+ }
+ if(val.length > 2){
+ val = val.substr(1)
+ }
+ if(timeUnit == 'minute' && parseInt(val) > 59){
+ val = '59'
+ }
+ if(timeUnit == 'hour' && parseInt(val) > 23){
+ val = '23'
+ }
+ return val
+ },
encodeParams: (params) => {
let esc = encodeURIComponent
let queryString = Object.keys(params).map((k) => esc(k) + '=' + esc(params[k])).join('&')
@@ -388,20 +406,61 @@ const actions = {
return vjas
},
checkSchedules: (schedule) => {
+ let hours = 0
+ let minutes = 0
if (parseInt(schedule.departure_time.minute) > 59){
- schedule.departure_time.minute = actions.pad(parseInt(schedule.departure_time.minute) - 60)
- schedule.departure_time.hour = actions.pad(parseInt(schedule.departure_time.hour) + 1)
+ hours = Math.floor(parseInt(schedule.departure_time.minute) / 60)
+ minutes = parseInt(schedule.departure_time.minute) % 60
+ schedule.departure_time.minute = actions.simplePad(minutes, 'minute')
+ schedule.departure_time.hour = parseInt(schedule.departure_time.hour) + hours
}
if (parseInt(schedule.arrival_time.minute) > 59){
- schedule.arrival_time.minute = actions.pad(parseInt(schedule.arrival_time.minute) - 60)
- schedule.arrival_time.hour = actions.pad(parseInt(schedule.arrival_time.hour) + 1)
+ hours = Math.floor(parseInt(schedule.arrival_time.minute) / 60)
+ minutes = parseInt(schedule.arrival_time.minute) % 60
+ schedule.arrival_time.minute = actions.simplePad(minutes, 'minute')
+ schedule.arrival_time.hour = parseInt(schedule.arrival_time.hour) + hours
+ }
+ if (parseInt(schedule.departure_time.minute) < 0){
+ hours = Math.floor(parseInt(schedule.departure_time.minute) / 60)
+ minutes = (parseInt(schedule.departure_time.minute) % 60) + 60
+ schedule.departure_time.minute = actions.simplePad(minutes, 'minute')
+ schedule.departure_time.hour = parseInt(schedule.departure_time.hour) + hours
+ }
+ if (parseInt(schedule.arrival_time.minute) < 0){
+ hours = Math.floor(parseInt(schedule.arrival_time.minute) / 60)
+ minutes = (parseInt(schedule.arrival_time.minute) % 60) + 60
+ schedule.arrival_time.minute = actions.simplePad(minutes, 'minute')
+ schedule.arrival_time.hour = parseInt(schedule.arrival_time.hour) + hours
}
- if (parseInt(schedule.departure_time.hour) > 23){
- schedule.departure_time.hour = actions.pad(parseInt(schedule.departure_time.hour) - 24)
+
+ if(schedule.departure_time.hour > 23){
+ schedule.departure_time.hour = '23'
+ schedule.departure_time.minute = '59'
+ }
+ if(schedule.arrival_time.hour > 23){
+ schedule.arrival_time.hour = '23'
+ schedule.arrival_time.minute = '59'
}
- if (parseInt(schedule.arrival_time.hour) > 23){
- schedule.arrival_time.hour = actions.pad(parseInt(schedule.arrival_time.hour) - 24)
+
+ if(schedule.departure_time.hour < 0){
+ schedule.departure_time.hour = '00'
+ schedule.departure_time.minute = '00'
}
+ if(schedule.arrival_time.hour > 23){
+ schedule.arrival_time.hour = '00'
+ schedule.arrival_time.minute = '00'
+ }
+
+ schedule.departure_time.hour = actions.simplePad(parseInt(schedule.departure_time.hour), 'hour')
+ schedule.arrival_time.hour = actions.simplePad(parseInt(schedule.arrival_time.hour), 'hour')
+ // if (parseInt(schedule.departure_time.hour) > 23){
+ // schedule.departure_time.hour = parseInt(schedule.departure_time.hour) - 24
+ // }
+ // if (parseInt(schedule.arrival_time.hour) > 23){
+ // schedule.arrival_time.hour = parseInt(schedule.arrival_time.hour) - 24
+ // }
+ // schedule.departure_time.hour = actions.pad(schedule.departure_time.hour, 'hour')
+ // schedule.arrival_time.hour = actions.pad(schedule.arrival_time.hour, 'hour')
}
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js
index b22e1d826..bd34ae114 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/SaveVehicleJourneys.js
@@ -15,7 +15,7 @@ class SaveVehicleJourneys extends Component{
}
render() {
- if(this.props.status.isFetching == true) {
+ if(this.props.status.isFetching == true || this.props.filters.policy['vehicle_journeys.edit'] == false) {
return false
}
if(this.props.status.fetchSuccess == true) {
@@ -46,7 +46,8 @@ class SaveVehicleJourneys extends Component{
SaveVehicleJourneys.propTypes = {
vehicleJourneys: PropTypes.array.isRequired,
page: PropTypes.number.isRequired,
- status: PropTypes.object.isRequired
+ status: PropTypes.object.isRequired,
+ filters: PropTypes.object.isRequired
}
module.exports = SaveVehicleJourneys
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js
index c88dda5f4..0645fdd19 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/VehicleJourney.js
@@ -54,31 +54,33 @@ class VehicleJourney extends Component {
<div key={i}>{this.timeTableURL(tt.id)}</div>
)}
- <div className={(this.props.value.deletable ? 'disabled ' : '') + 'checkbox'}>
- <input
- id={this.props.index}
- name={this.props.index}
- onChange={(e) => this.props.onSelectVehicleJourney(this.props.index)}
- type='checkbox'
- disabled={this.props.value.deletable}
- checked={this.props.value.selected}
- ></input>
- <label htmlFor={this.props.index}></label>
- </div>
- </div>
+ {(this.props.filters.policy['vehicle_journeys.edit'] == true) &&
+ <div className={(this.props.value.deletable ? 'disabled ' : '') + 'checkbox'}>
+ <input
+ id={this.props.index}
+ name={this.props.index}
+ onChange={(e) => this.props.onSelectVehicleJourney(this.props.index)}
+ type='checkbox'
+ disabled={this.props.value.deletable}
+ checked={this.props.value.selected}
+ ></input>
+ <label htmlFor={this.props.index}></label>
+ </div>
+ }
+ </div>
{this.props.value.vehicle_journey_at_stops.map((vj, i) =>
<div key={i} className='td text-center'>
- <div className={'cellwrap' + (this.cityNameChecker(vj) ? ' headlined' : '')}>
+ <div className={'cellwrap' + (vj.dummy ? ' headlined' : '') + (this.cityNameChecker(vj) ? ' headlined' : '')}>
{this.props.filters.toggleArrivals &&
- <div data-headline='Départ à'>
- <span className={((this.props.value.deletable && (!vj.dummy)) ? 'disabled ' : '') + 'input-group time'}>
+ <div data-headline='Arrivée à'>
+ <span className={((this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false) ? 'disabled ' : '') + 'input-group time'}>
<input
type='number'
min='00'
max='23'
className='form-control'
- disabled={(this.props.value.deletable && (!vj.dummy))}
+ disabled={(this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}
onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', false, false)}}
value={vj.arrival_time['hour']}
/>
@@ -88,7 +90,7 @@ class VehicleJourney extends Component {
min='00'
max='59'
className='form-control'
- disabled={((this.props.value.deletable) && (!vj.dummy))}
+ disabled={((this.isDisabled(this.props.value.deletable), vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}
onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'minute', false, false)}}
value={vj.arrival_time['minute']}
/>
@@ -100,14 +102,14 @@ class VehicleJourney extends Component {
<span className='sb sb-chrono sb-lg text-warning' data-textinside={vj.delta}></span>
}
</div>
- <div data-headline='Arrivée à'>
- <span className={(this.isDisabled(this.props.value.deletable, vj.dummy) ? 'disabled ' : '') + 'input-group time'}>
+ <div data-headline='Départ à'>
+ <span className={((this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false) ? 'disabled ' : '') + 'input-group time'}>
<input
type='number'
min='00'
max='23'
className='form-control'
- disabled={this.isDisabled(this.props.value.deletable, vj.dummy)}
+ disabled={(this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}
onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', true, this.props.filters.toggleArrivals)}}
value={vj.departure_time['hour']}
/>
@@ -117,7 +119,7 @@ class VehicleJourney extends Component {
min='00'
max='59'
className='form-control'
- disabled={this.isDisabled(this.props.value.deletable, vj.dummy)}
+ disabled={(this.isDisabled(this.props.value.deletable, vj.dummy) || this.props.filters.policy['vehicle_journeys.edit'] == false)}
onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, "minute", true, this.props.filters.toggleArrivals)}}
value={vj.departure_time['minute']}
/>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js
index 19a5af869..e32c873e6 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CalendarsEditVehicleJourney.js
@@ -22,15 +22,15 @@ class CalendarsEditVehicleJourney extends Component {
if(this.props.status.fetchSuccess == true) {
return (
<li className='st_action'>
- <a
- href='#'
- className={(actions.getSelected(this.props.vehicleJourneys).length > 0 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
+ <button
+ type='button'
+ disabled={(actions.getSelected(this.props.vehicleJourneys).length > 0 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
data-toggle='modal'
data-target='#CalendarsEditVehicleJourneyModal'
onClick={() => this.props.onOpenCalendarsEditModal(actions.getSelected(this.props.vehicleJourneys))}
>
<span className='fa fa-calendar'></span>
- </a>
+ </button>
<div className={ 'modal fade ' + ((this.props.modal.type == 'duplicate') ? 'in' : '') } id='CalendarsEditVehicleJourneyModal'>
<div className='modal-container'>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js
index 2150287ba..1273921e7 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/CreateModal.js
@@ -25,22 +25,22 @@ class CreateModal extends Component {
if(this.props.status.fetchSuccess == true) {
return (
<li className='st_action'>
- <a
- href='#'
- className={((this.props.filters.policy['vehicle_journeys.create']) ? '' : 'disabled')}
+ <button
+ type='button'
+ disabled={((this.props.filters.policy['vehicle_journeys.edit'] == true) ? '' : 'disabled')}
data-toggle='modal'
data-target='#NewVehicleJourneyModal'
onClick={this.props.onOpenCreateModal}
>
<span className='fa fa-plus'></span>
- </a>
+ </button>
<div className={ 'modal fade ' + ((this.props.modal.type == 'create') ? 'in' : '') } id='NewVehicleJourneyModal'>
<div className='modal-container'>
<div className='modal-dialog'>
<div className='modal-content'>
<div className='modal-header'>
- <h4 className='modal-title'>Ajouter une mission</h4>
+ <h4 className='modal-title'>Ajouter une course</h4>
</div>
{(this.props.modal.type == 'create') && (
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js
index e2425cc22..c98b794a8 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DeleteVehicleJourneys.js
@@ -5,9 +5,9 @@ var actions = require('../../actions')
const DeleteVehicleJourneys = ({onDeleteVehicleJourneys, vehicleJourneys, filters}) => {
return (
<li className='st_action'>
- <a
- href='#'
- className={(actions.getSelected(vehicleJourneys).length > 0 && filters.policy['vehicle_journeys.destroy']) ? '' : 'disabled'}
+ <button
+ type='button'
+ disabled={(actions.getSelected(vehicleJourneys).length > 0 && filters.policy['vehicle_journeys.destroy']) ? '' : 'disabled'}
onClick={e => {
e.preventDefault()
onDeleteVehicleJourneys()
@@ -15,7 +15,7 @@ const DeleteVehicleJourneys = ({onDeleteVehicleJourneys, vehicleJourneys, filter
title='Supprimer'
>
<span className='fa fa-trash'></span>
- </a>
+ </button>
</li>
)
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js
index b0cb1c850..7448aa06e 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js
@@ -23,15 +23,15 @@ class DuplicateVehicleJourney extends Component {
if(this.props.status.fetchSuccess == true) {
return (
<li className='st_action'>
- <a
- href='#'
- className={((actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled')}
+ <button
+ type='button'
+ disabled={((actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled')}
data-toggle='modal'
data-target='#DuplicateVehicleJourneyModal'
onClick={this.props.onOpenDuplicateModal}
>
<span className='fa fa-files-o'></span>
- </a>
+ </button>
<div className={ 'modal fade ' + ((this.props.modal.type == 'duplicate') ? 'in' : '') } id='DuplicateVehicleJourneyModal'>
<div className='modal-container'>
@@ -68,7 +68,7 @@ class DuplicateVehicleJourney extends Component {
<input
type='number'
ref='additional_time'
- min='0'
+ min='-59'
max='59'
className='form-control'
onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js
index f7726dad9..12814bad1 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js
@@ -24,15 +24,15 @@ class EditVehicleJourney extends Component {
if(this.props.status.fetchSuccess == true) {
return (
<li className='st_action'>
- <a
- href='#'
- className={(actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
+ <button
+ type='button'
+ disabled={(actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
data-toggle='modal'
data-target='#EditVehicleJourneyModal'
onClick={() => this.props.onOpenEditModal(actions.getSelected(this.props.vehicleJourneys)[0])}
>
<span className='fa fa-info'></span>
- </a>
+ </button>
<div className={ 'modal fade ' + ((this.props.modal.type == 'duplicate') ? 'in' : '') } id='EditVehicleJourneyModal'>
<div className='modal-container'>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/NotesEditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/NotesEditVehicleJourney.js
index 7c5df3333..ca8b2ec7d 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/NotesEditVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/NotesEditVehicleJourney.js
@@ -44,15 +44,15 @@ class NotesEditVehicleJourney extends Component {
if(this.props.status.fetchSuccess == true) {
return (
<li className='st_action'>
- <a
- href='#'
- className={(actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
+ <button
+ type='button'
+ disabled={(actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
data-toggle='modal'
data-target='#NotesEditVehicleJourneyModal'
onClick={() => this.props.onOpenNotesEditModal(actions.getSelected(this.props.vehicleJourneys)[0])}
>
<span className='fa fa-sticky-note'></span>
- </a>
+ </button>
<div className={ 'modal fade ' + ((this.props.modal.type == 'duplicate') ? 'in' : '') } id='NotesEditVehicleJourneyModal'>
<div className='modal-container'>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js
index a373ed1e5..ee7d01cf5 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js
@@ -23,15 +23,15 @@ class ShiftVehicleJourney extends Component {
if(this.props.status.fetchSuccess == true) {
return (
<li className='st_action'>
- <a
- href='#'
- className={(actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
+ <button
+ type='button'
+ disabled={(actions.getSelected(this.props.vehicleJourneys).length == 1 && this.props.filters.policy['vehicle_journeys.edit']) ? '' : 'disabled'}
data-toggle='modal'
data-target='#ShiftVehicleJourneyModal'
onClick={this.props.onOpenShiftModal}
>
<span className='sb sb-update-vj'></span>
- </a>
+ </button>
<div className={ 'modal fade ' + ((this.props.modal.type == 'shift') ? 'in' : '') } id='ShiftVehicleJourneyModal'>
<div className='modal-container'>
@@ -54,7 +54,7 @@ class ShiftVehicleJourney extends Component {
<input
type='number'
ref='additional_time'
- min='0'
+ min='-59'
max='59'
className='form-control'
onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js
index d9c7d7296..7837cdbff 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
@@ -38,7 +39,7 @@ class BSelect4 extends React.Component{
return {
results: data.map(
- item => Object.assign(
+ item => _.assign(
{},
item,
{text: item.name}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
index 2b4e1cd80..75cbd1f3c 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
@@ -37,7 +38,7 @@ class BSelect4 extends React.Component{
processResults: function(data, params) {
return {
results: data.map(
- item => Object.assign(
+ item => _.assign(
{},
item,
{text: item.published_name}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
index fd1e30afb..c28d8e06f 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
@@ -38,7 +39,7 @@ class BSelect4 extends React.Component{
return {
results: data.map(
- item => Object.assign(
+ item => _.assign(
{},
item,
{text: item.comment}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js
index 5af30ab82..87bbe5353 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/SaveVehicleJourneys.js
@@ -7,7 +7,8 @@ const mapStateToProps = (state) => {
return {
vehicleJourneys: state.vehicleJourneys,
page: state.pagination.page,
- status: state.status
+ status: state.status,
+ filters: state.filters
}
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
index 5b5ba0788..0fcb3489e 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
@@ -1,3 +1,4 @@
+var _ = require('lodash')
var actions = require("../actions")
let newQuery, newInterval
@@ -14,37 +15,37 @@ const filters = (state = {}, action) => {
minute: '59'
}
}
- newQuery = Object.assign({}, state.query, {interval: interval, journeyPattern: {}, timetable: {}, withoutSchedule: false })
- return Object.assign({}, state, {query: newQuery, queryString: ''})
+ newQuery = _.assign({}, state.query, {interval: interval, journeyPattern: {}, timetable: {}, withoutSchedule: false })
+ return _.assign({}, state, {query: newQuery, queryString: ''})
case 'TOGGLE_WITHOUT_SCHEDULE':
- newQuery = Object.assign({}, state.query, {withoutSchedule: !state.query.withoutSchedule})
- return Object.assign({}, state, {query: newQuery})
+ newQuery = _.assign({}, state.query, {withoutSchedule: !state.query.withoutSchedule})
+ return _.assign({}, state, {query: newQuery})
case 'UPDATE_END_TIME_FILTER':
newInterval = JSON.parse(JSON.stringify(state.query.interval))
- newInterval.end[action.unit] = actions.pad(action.val)
+ newInterval.end[action.unit] = actions.pad(action.val, action.unit)
if(parseInt(newInterval.start.hour + newInterval.start.minute) < parseInt(newInterval.end.hour + newInterval.end.minute)){
- newQuery = Object.assign({}, state.query, {interval: newInterval})
- return Object.assign({}, state, {query: newQuery})
+ newQuery = _.assign({}, state.query, {interval: newInterval})
+ return _.assign({}, state, {query: newQuery})
}else{
return state
}
case 'UPDATE_START_TIME_FILTER':
newInterval = JSON.parse(JSON.stringify(state.query.interval))
- newInterval.start[action.unit] = actions.pad(action.val)
+ newInterval.start[action.unit] = actions.pad(action.val, action.unit)
if(parseInt(newInterval.start.hour + newInterval.start.minute) < parseInt(newInterval.end.hour + newInterval.end.minute)){
- newQuery = Object.assign({}, state.query, {interval: newInterval})
- return Object.assign({}, state, {query: newQuery})
+ newQuery = _.assign({}, state.query, {interval: newInterval})
+ return _.assign({}, state, {query: newQuery})
}else{
return state
}
case 'SELECT_TT_FILTER':
- newQuery = Object.assign({}, state.query, {timetable : action.selectedItem})
- return Object.assign({}, state, {query: newQuery})
+ newQuery = _.assign({}, state.query, {timetable : action.selectedItem})
+ return _.assign({}, state, {query: newQuery})
case 'SELECT_JP_FILTER':
- newQuery = Object.assign({}, state.query, {journeyPattern : action.selectedItem})
- return Object.assign({}, state, {query: newQuery})
+ newQuery = _.assign({}, state.query, {journeyPattern : action.selectedItem})
+ return _.assign({}, state, {query: newQuery})
case 'TOGGLE_ARRIVALS':
- return Object.assign({}, state, {toggleArrivals: !state.toggleArrivals})
+ return _.assign({}, state, {toggleArrivals: !state.toggleArrivals})
case 'QUERY_FILTER_VEHICLEJOURNEYS':
actions.fetchVehicleJourneys(action.dispatch, undefined, undefined, state.queryString)
return state
@@ -53,10 +54,11 @@ const filters = (state = {}, action) => {
'q[journey_pattern_id_eq]': state.query.journeyPattern.id || undefined,
'q[time_tables_id_eq]': state.query.timetable.id || undefined,
'q[vehicle_journey_at_stops_departure_time_gteq]': (state.query.interval.start.hour + ':' + state.query.interval.start.minute),
- 'q[vehicle_journey_at_stops_departure_time_lteq]': (state.query.interval.end.hour + ':' + state.query.interval.end.minute)
+ 'q[vehicle_journey_at_stops_departure_time_lteq]': (state.query.interval.end.hour + ':' + state.query.interval.end.minute),
+ 'q[vehicle_journey_without_u2]' : state.toggleArrivals
}
let queryString = actions.encodeParams(params)
- return Object.assign({}, state, {queryString: queryString})
+ return _.assign({}, state, {queryString: queryString})
default:
return state
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
index a36aaa4fe..3b13ab9de 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
@@ -4,14 +4,14 @@ const modal = (state = {}, action) => {
switch (action.type) {
case 'OPEN_CONFIRM_MODAL':
$('#ConfirmModal').modal('show')
- return Object.assign({}, state, {
+ return _.assign({}, state, {
type: 'confirm',
confirmModal: {
callback: action.callback,
}
})
case 'EDIT_NOTES_VEHICLEJOURNEY_MODAL':
- let vehicleJourneyModal = Object.assign({}, action.vehicleJourney)
+ let vehicleJourneyModal = _.assign({}, action.vehicleJourney)
return {
type: 'notes_edit',
modalProps: {
@@ -26,7 +26,7 @@ const modal = (state = {}, action) => {
}else{
newModalProps.vehicleJourney.footnotes = newModalProps.vehicleJourney.footnotes.filter((f) => {return f.id != action.footnote.id })
}
- return Object.assign({}, state, {modalProps: newModalProps})
+ return _.assign({}, state, {modalProps: newModalProps})
case 'EDIT_VEHICLEJOURNEY_MODAL':
return {
type: 'edit',
@@ -55,11 +55,11 @@ const modal = (state = {}, action) => {
confirmModal: {}
}
case 'SELECT_CP_EDIT_MODAL':
- newModalProps = Object.assign({}, state.modalProps, {selectedCompany : action.selectedItem})
- return Object.assign({}, state, {modalProps: newModalProps})
+ newModalProps = _.assign({}, state.modalProps, {selectedCompany : action.selectedItem})
+ return _.assign({}, state, {modalProps: newModalProps})
case 'SELECT_TT_CALENDAR_MODAL':
- newModalProps = Object.assign({}, state.modalProps, {selectedTimetable : action.selectedItem})
- return Object.assign({}, state, {modalProps: newModalProps})
+ newModalProps = _.assign({}, state.modalProps, {selectedTimetable : action.selectedItem})
+ return _.assign({}, state, {modalProps: newModalProps})
case 'ADD_SELECTED_TIMETABLE':
if(state.modalProps.selectedTimetable){
newModalProps = JSON.parse(JSON.stringify(state.modalProps))
@@ -77,7 +77,7 @@ const modal = (state = {}, action) => {
if (!_.find(newModalProps.timetables, newModalProps.selectedTimetable)){
newModalProps.timetables.push(newModalProps.selectedTimetable)
}
- return Object.assign({}, state, {modalProps: newModalProps})
+ return _.assign({}, state, {modalProps: newModalProps})
}
case 'DELETE_CALENDAR_MODAL':
newModalProps = JSON.parse(JSON.stringify(state.modalProps))
@@ -97,7 +97,7 @@ const modal = (state = {}, action) => {
})
newModalProps.vehicleJourneys = vehicleJourneysModal
newModalProps.timetables = timetablesModal
- return Object.assign({}, state, {modalProps: newModalProps})
+ return _.assign({}, state, {modalProps: newModalProps})
case 'CREATE_VEHICLEJOURNEY_MODAL':
return {
type: 'create',
@@ -105,8 +105,8 @@ const modal = (state = {}, action) => {
confirmModal: {}
}
case 'SELECT_JP_CREATE_MODAL':
- newModalProps = Object.assign({}, state.modalProps, {selectedJPModal : action.selectedItem})
- return Object.assign({}, state, {modalProps: newModalProps})
+ newModalProps = _.assign({}, state.modalProps, {selectedJPModal : action.selectedItem})
+ return _.assign({}, state, {modalProps: newModalProps})
case 'SHIFT_VEHICLEJOURNEY_MODAL':
return {
type: 'shift',
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js
index 31c855a2f..ee59fca6d 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js
@@ -1,27 +1,28 @@
+var _ = require('lodash')
const pagination = (state = {}, action) => {
switch (action.type) {
case 'RECEIVE_JOURNEY_PATTERNS':
- return Object.assign({}, state, {stateChanged: false})
+ return _.assign({}, state, {stateChanged: false})
case 'GO_TO_PREVIOUS_PAGE':
if (action.pagination.page > 1){
- return Object.assign({}, state, {page : action.pagination.page - 1, stateChanged: false})
+ return _.assign({}, state, {page : action.pagination.page - 1, stateChanged: false})
}
return state
case 'GO_TO_NEXT_PAGE':
if (state.totalCount - (action.pagination.page * action.pagination.perPage) > 0){
- return Object.assign({}, state, {page : action.pagination.page + 1, stateChanged: false})
+ return _.assign({}, state, {page : action.pagination.page + 1, stateChanged: false})
}
return state
case 'ADD_VEHICLEJOURNEY':
case 'UPDATE_TIME':
toggleOnConfirmModal('modal')
- return Object.assign({}, state, {stateChanged: true})
+ return _.assign({}, state, {stateChanged: true})
case 'RESET_PAGINATION':
- return Object.assign({}, state, {page: 1, stateChanged: false})
+ return _.assign({}, state, {page: 1, stateChanged: false})
case 'RECEIVE_TOTAL_COUNT':
- return Object.assign({}, state, {totalCount: action.total})
+ return _.assign({}, state, {totalCount: action.total})
case 'UPDATE_TOTAL_COUNT':
- return Object.assign({}, state, {totalCount : state.totalCount - action.diff })
+ return _.assign({}, state, {totalCount : state.totalCount - action.diff })
default:
return state
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/status.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/status.js
index 3351aec4f..e658e164e 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/status.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/status.js
@@ -1,13 +1,16 @@
+var _ = require('lodash')
var actions = require("../actions")
const status = (state = {}, action) => {
switch (action.type) {
case 'UNAVAILABLE_SERVER':
- return Object.assign({}, state, {fetchSuccess: false})
+ return _.assign({}, state, {fetchSuccess: false})
case 'FETCH_API':
- return Object.assign({}, state, {isFetching: true})
+ return _.assign({}, state, {isFetching: true})
case 'RECEIVE_VEHICLE_JOURNEYS':
- return Object.assign({}, state, {fetchSuccess: true, isFetching: false})
+ return _.assign({}, state, {fetchSuccess: true, isFetching: false})
+ case 'RECEIVE_ERRORS':
+ return _.assign({}, state, {fetchSuccess: true, isFetching: false})
default:
return state
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
index ae98b6743..ba3d58c22 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
@@ -4,9 +4,9 @@ var actions = require("../actions")
const vehicleJourney= (state = {}, action) => {
switch (action.type) {
case 'SELECT_VEHICLEJOURNEY':
- return Object.assign({}, state, {selected: !state.selected})
+ return _.assign({}, state, {selected: !state.selected})
case 'CANCEL_SELECTION':
- return Object.assign({}, state, {selected: false})
+ return _.assign({}, state, {selected: false})
case 'ADD_VEHICLEJOURNEY':
let pristineVjasList = []
_.each(action.stopPointsList, (sp) =>{
@@ -47,45 +47,56 @@ const vehicleJourney= (state = {}, action) => {
case 'SHIFT_VEHICLEJOURNEY':
let shiftedArray, shiftedSchedule, shiftedVjas
shiftedArray = state.vehicle_journey_at_stops.map((vjas, i) => {
- shiftedSchedule = {
- departure_time: {
- hour: vjas.departure_time.hour,
- minute: String(parseInt(vjas.departure_time.minute) + parseInt(action.data.additional_time.value))
- },
- arrival_time: {
- hour: vjas.arrival_time.hour,
- minute: String(parseInt(vjas.arrival_time.minute) + parseInt(action.data.additional_time.value))
+ if (!vjas.dummy){
+ shiftedSchedule = {
+ departure_time: {
+ hour: vjas.departure_time.hour,
+ minute: actions.simplePad(parseInt(vjas.departure_time.minute) + parseInt(action.data.additional_time.value))
+ },
+ arrival_time: {
+ hour: vjas.arrival_time.hour,
+ minute: actions.simplePad(parseInt(vjas.arrival_time.minute) + parseInt(action.data.additional_time.value))
+ }
}
+ actions.checkSchedules(shiftedSchedule)
+ shiftedVjas = _.assign({}, state.vehicle_journey_at_stops[i], shiftedSchedule)
+ delete shiftedVjas['id']
+ return _.assign({}, state.vehicle_journey_at_stops[i], shiftedVjas)
+ }else {
+ return vjas
}
- actions.checkSchedules(shiftedSchedule)
- shiftedVjas = Object.assign({}, state.vehicle_journey_at_stops[i], shiftedSchedule)
- return Object.assign({}, state.vehicle_journey_at_stops[i], shiftedVjas)
})
- return Object.assign({}, state, {vehicle_journey_at_stops: shiftedArray})
+ return _.assign({}, state, {vehicle_journey_at_stops: shiftedArray})
case 'UPDATE_TIME':
let vj, vjas, vjasArray, newSchedule
vjasArray = state.vehicle_journey_at_stops.map((vjas, i) =>{
if(i == action.subIndex){
newSchedule = {
- departure_time: Object.assign({}, vjas.departure_time),
- arrival_time: Object.assign({}, vjas.arrival_time)
+ departure_time: _.assign({}, vjas.departure_time),
+ arrival_time: _.assign({}, vjas.arrival_time)
}
if (action.isDeparture){
- newSchedule.departure_time[action.timeUnit] = actions.pad(action.val)
+ newSchedule.departure_time[action.timeUnit] = actions.pad(action.val, action.timeUnit)
if(!action.isArrivalsToggled)
- newSchedule.arrival_time[action.timeUnit] = actions.pad(action.val)
+ newSchedule.arrival_time[action.timeUnit] = actions.pad(action.val, action.timeUnit)
newSchedule = actions.getDelta(newSchedule)
- return Object.assign({}, state.vehicle_journey_at_stops[action.subIndex], {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})
+ if(newSchedule.delta < 0){
+ return vjas
+ }
+ return _.assign({}, state.vehicle_journey_at_stops[action.subIndex], {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})
}else{
- newSchedule.arrival_time[action.timeUnit] = actions.pad(action.val)
+ newSchedule.arrival_time[action.timeUnit] = actions.pad(action.val, action.timeUnit)
newSchedule = actions.getDelta(newSchedule)
- return Object.assign({}, state.vehicle_journey_at_stops[action.subIndex], {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})
+ if(newSchedule.delta < 0){
+ return vjas
+ }
+ return _.assign({}, state.vehicle_journey_at_stops[action.subIndex], {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})
}
}else{
return vjas
}
})
- return Object.assign({}, state, {vehicle_journey_at_stops: vjasArray})
+ return _.assign({}, state, {vehicle_journey_at_stops: vjasArray})
default:
return state
}
@@ -115,7 +126,7 @@ const vehicleJourneys = (state = [], action) => {
case 'EDIT_VEHICLEJOURNEY':
return state.map((vj, i) => {
if (vj.selected){
- return Object.assign({}, vj, {
+ return _.assign({}, vj, {
company: action.selectedCompany,
published_journey_name: action.data.published_journey_name.value,
published_journey_identifier: action.data.published_journey_identifier.value,
@@ -127,7 +138,7 @@ const vehicleJourneys = (state = [], action) => {
case 'EDIT_VEHICLEJOURNEY_NOTES':
return state.map((vj, i) => {
if (vj.selected){
- return Object.assign({}, vj, {
+ return _.assign({}, vj, {
footnotes: action.footnotes
})
}else{
@@ -137,7 +148,7 @@ const vehicleJourneys = (state = [], action) => {
case 'EDIT_VEHICLEJOURNEYS_CALENDARS':
return state.map((vj,i) =>{
if(vj.selected){
- let updatedVJ = Object.assign({}, vj)
+ let updatedVJ = _.assign({}, vj)
action.vehicleJourneys.map((vjm, j) =>{
if(vj.objectid == vjm.objectid){
updatedVJ.time_tables = vjm.time_tables
@@ -160,11 +171,12 @@ const vehicleJourneys = (state = [], action) => {
let dupeVj
let dupes = []
let selectedIndex
+ let val = action.data.additional_time.value
state.map((vj, i) => {
if(vj.selected){
selectedIndex = i
for (i = 0; i< action.data.duplicate_number.value; i++){
- action.data.additional_time.value *= (i + 1)
+ action.data.additional_time.value = val * (i + 1)
dupeVj = vehicleJourney(vj, action)
dupeVj.published_journey_name = dupeVj.published_journey_name + '-' + i
dupeVj.selected = false
@@ -179,7 +191,7 @@ const vehicleJourneys = (state = [], action) => {
case 'DELETE_VEHICLEJOURNEYS':
return state.map((vj, i) =>{
if (vj.selected){
- return Object.assign({}, vj, {deletable: true, selected: false})
+ return _.assign({}, vj, {deletable: true, selected: false})
} else {
return vj
}
diff --git a/app/assets/javascripts/forms.coffee b/app/assets/javascripts/forms.coffee
index c8dd69581..9d884edcd 100644
--- a/app/assets/javascripts/forms.coffee
+++ b/app/assets/javascripts/forms.coffee
@@ -1,3 +1,7 @@
+# IE fix
+isIE = false || !!document.documentMode
+isEdge = !isIE && !!window.StyleMedia
+
@togglableFilter = ->
$('.form-filter').on 'click', '.form-group.togglable', (e)->
if $(e.target).hasClass('togglable') || $(e.target).parent().hasClass('togglable')
@@ -23,17 +27,15 @@
$('.formSubmitr').appendTo('.page-action')
- # IE fix
- isIE = false || !!document.documentMode
- isEdge = !isIE && !!window.StyleMedia
-
if isIE || isEdge
- $('.formSubmitr').each ->
- target = $(this).attr('form')
-
- $(this).on 'click', ->
- $('#' + target).submit()
+ $('.formSubmitr').off()
$(document).on 'ready page:load', togglableFilter
$(document).on 'ready page:load', submitMover
$(document).on 'ready page:load', switchInput
+
+if isIE || isEdge
+ $(document).on 'click', '.formSubmitr', (e)->
+ e.preventDefault()
+ target = $(this).attr('form')
+ $('#' + target).submit()
diff --git a/app/assets/javascripts/main_menu.coffee b/app/assets/javascripts/main_menu.coffee
index ed8ac655e..9357cff34 100644
--- a/app/assets/javascripts/main_menu.coffee
+++ b/app/assets/javascripts/main_menu.coffee
@@ -1,4 +1,11 @@
$(document).on 'ready page:load', ->
+
+ link = []
+ ptitleCont = ""
+ $(document).on 'page:before-change', ->
+ link = []
+ ptitleCont = ""
+
$el = $('#main_nav')
# Opening/closing left-side menu
$el.find('.openMenu').on 'click', (e) ->
@@ -12,32 +19,35 @@ $(document).on 'ready page:load', ->
selectedItem.closest('.panel-collapse').addClass 'in'
selectedItem.closest('.panel-title').children('a').attr('aria-expanded') == true
+ # Sticky content
# Sticky behavior
$(document).on 'scroll', ->
limit = 51
- data = ""
- $('.page-action').children().each ->
- data += $(this)[0].outerHTML
-
- stickyContent = '<div class="sticky-content">'
- stickyContent += '<div class="sticky-ptitle">' + $(".page-title").html() + '</div>'
- stickyContent += '<div class="sticky-paction">' + data + '</div>'
- stickyContent += '</div>'
+ if $(window).scrollTop() >= limit
+ if ($('.page-action .small').length > 0)
+ data = $('.page-action .small')[0].innerHTML
- # console.log stickyContent
+ if ($(".page-title").length > 0)
+ ptitleCont = $(".page-title").html()
- if $(window).scrollTop() >= limit
+ stickyContent = '<div class="sticky-content">'
+ stickyContent += '<div class="sticky-ptitle">' + ptitleCont + '</div>'
+ stickyContent += '<div class="sticky-paction"><div class="small">' + data + '</div></div>'
+ stickyContent += '</div>'
$('#main_nav').addClass 'sticky'
if $('#menu_top').find('.sticky-content').length == 0
- $('#menu_top').children('.menu-content').after(stickyContent)
- # $('.sticky-paction .small').after($('.formSubmitr'))
+ if ptitleCont.length > 0
+ $('#menu_top').children('.menu-content').after(stickyContent)
+ if link.length == 0
+ link = $('.page-action .small').next()
+ $('.sticky-paction .small').after(link)
else
$('#main_nav').removeClass 'sticky'
if $('#menu_top').find('.sticky-content').length > 0
- # $('.page-action .small').after($('.formSubmitr'))
+ $('.page-action .small').after(link)
$('.sticky-content').remove()
diff --git a/app/assets/javascripts/routes.coffee b/app/assets/javascripts/routes.coffee
new file mode 100644
index 000000000..2e36061b8
--- /dev/null
+++ b/app/assets/javascripts/routes.coffee
@@ -0,0 +1,8 @@
+$(document).on("change", '#route_wayback', (e) ->
+ way = if $(this).is(':checked') then "backward" else "straight_forward"
+ $('.opposite_route').hide().find('select').prop('disabled', true)
+
+ field = $(".opposite_route.#{way}")
+ if field.length
+ field.removeClass('hidden').show().find('select').prop('disabled', false)
+)
diff --git a/app/assets/javascripts/select2.coffee b/app/assets/javascripts/select2.coffee
index edd4c476d..e20ef8d32 100644
--- a/app/assets/javascripts/select2.coffee
+++ b/app/assets/javascripts/select2.coffee
@@ -7,5 +7,13 @@
placeholder: target.data('select2ed-placeholder')
allowClear: true
+ $('select.form-control.tags').each ->
+ target = $(this)
+ target.select2
+ theme: 'bootstrap'
+ language: 'fr'
+ allowClear: true
+ tags: true
+
$(document).on 'ready page:load', select_2