aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts
diff options
context:
space:
mode:
authorXinhui2017-06-16 17:58:08 +0200
committerXinhui2017-06-16 17:58:08 +0200
commit641b1458236d2718a76ffaf0c04a5998623276bf (patch)
treedb738af25bcdd7b3b400a0f8db5e6350ef373c51 /app/assets/javascripts
parent6886441ce86bcd720b27cdd089567def5b9d771a (diff)
parent9ef3d205aa091d509455b3607d5ecc74431c6196 (diff)
downloadchouette-core-641b1458236d2718a76ffaf0c04a5998623276bf.tar.bz2
Merge branch 'master' into staging
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/application.js1
-rw-r--r--app/assets/javascripts/cleanup.coffee9
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/index.js36
-rw-r--r--app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js8
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js150
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js3
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/components/JourneyPattern.js2
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/actions/index.js15
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js4
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/ErrorModal.js39
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js6
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js7
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/App.js2
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js5
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/ErrorModal.js21
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js12
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js3
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js3
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js7
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js10
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js101
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/NotesEditVehicleJourney.js36
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/index.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js6
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js1
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js4
-rw-r--r--app/assets/javascripts/forms.coffee9
-rw-r--r--app/assets/javascripts/main_menu.coffee2
-rw-r--r--app/assets/javascripts/nav_panels.coffee2
-rw-r--r--app/assets/javascripts/routing_constraint_zones.coffee90
-rw-r--r--app/assets/javascripts/select2.coffee4
-rw-r--r--app/assets/javascripts/selectable_table.coffee3
-rw-r--r--app/assets/javascripts/time_table_combinations.coffee3
34 files changed, 402 insertions, 206 deletions
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index b90f7539d..0024b62b5 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -4,7 +4,6 @@
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
-//= require turbolinks
//= require jquery
//= require jquery_ujs
//= require modernizr
diff --git a/app/assets/javascripts/cleanup.coffee b/app/assets/javascripts/cleanup.coffee
new file mode 100644
index 000000000..169a006a9
--- /dev/null
+++ b/app/assets/javascripts/cleanup.coffee
@@ -0,0 +1,9 @@
+$(document).on("change", 'input[name="clean_up[date_type]"]', (e) ->
+ type = $(this).val()
+ end_date = $('.cleanup_end_date_wrapper')
+
+ if type == 'between'
+ end_date.removeClass('hidden').show()
+ else
+ end_date.hide()
+)
diff --git a/app/assets/javascripts/es6_browserified/itineraries/index.js b/app/assets/javascripts/es6_browserified/itineraries/index.js
index 53f7bc7f9..2f1e9d180 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/index.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/index.js
@@ -38,7 +38,7 @@ const getInitialState = () => {
for_alighting: v.for_alighting || "normal",
longitude: v.longitude || 0,
latitude: v.latitude || 0,
- comment: v.comment,
+ comment: v.comment ? v.comment.replace("'", "\'") : '',
olMap: {
isOpened: false,
json: {}
@@ -66,11 +66,31 @@ render(
document.querySelector('input[name=commit]').addEventListener('click', (event)=>{
let state = store.getState()
- state.stopPoints.map((stopPoint, i) => {
- addInput('id', (datas[i]) ? datas[i].stoppoint_id : '', i)
- addInput('stop_area_id',stopPoint.stoparea_id, i)
- addInput('position',i, i)
- addInput('for_boarding',stopPoint.for_boarding, i)
- addInput('for_alighting',stopPoint.for_alighting, i)
- })
+
+ if(state.stopPoints.length >= 2) {
+ state.stopPoints.map((stopPoint, i) => {
+ addInput('id', (datas[i]) ? datas[i].stoppoint_id : '', i)
+ addInput('stop_area_id',stopPoint.stoparea_id, i)
+ addInput('position',i, i)
+ addInput('for_boarding',stopPoint.for_boarding, i)
+ addInput('for_alighting',stopPoint.for_alighting, i)
+ })
+ if(state.stopPoints.length < datas.length){
+ for(var j= state.stopPoints.length; j < datas.length; j++){
+ updateFormForDeletion(datas[j])
+ }
+ }
+ } else {
+ event.preventDefault()
+ let msg = "L'itinéraire doit comporter au moins deux arrêts"
+ $('#stop_points').find('.subform').after("<div class='alert alert-danger'><span class='fa fa-lg fa-exclamation-circle'></span><span>" + msg + "</span></div>")
+ }
})
+
+const updateFormForDeletion = (stop) =>{
+ if (stop.stoppoint_id !== undefined){
+ let now = Date.now()
+ addInput('id', stop.stoppoint_id, now)
+ addInput('_destroy', 'true', now)
+ }
+}
diff --git a/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js b/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js
index 18fee8bd1..24c3e5d87 100644
--- a/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js
+++ b/app/assets/javascripts/es6_browserified/itineraries/reducers/stopPoints.js
@@ -19,13 +19,6 @@ const stopPoint = (state = {}, action, length) => {
return state
}
}
-const updateFormForDeletion = (stop) =>{
- if (stop.stoppoint_id !== undefined){
- let now = Date.now()
- addInput('id', stop.stoppoint_id, now)
- addInput('_destroy', 'true', now)
- }
-}
const stopPoints = (state = [], action) => {
switch (action.type) {
@@ -49,7 +42,6 @@ const stopPoints = (state = [], action) => {
...state.slice(action.index + 2)
]
case 'DELETE_STOP':
- updateFormForDeletion(state[action.index])
return [
...state.slice(0, action.index),
...state.slice(action.index + 1).map((stopPoint)=>{
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 aa2d208df..5aade3348 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/CreateModal.js
@@ -22,90 +22,90 @@ class CreateModal extends Component {
}
if(this.props.status.fetchSuccess == true) {
return (
- <div className='row mt-md'>
- <div className='col-lg-12 text-right'>
- <button
- type='button'
- className='btn btn-outline-primary'
- data-toggle='modal'
- data-target='#NewJourneyPatternModal'
- onClick={this.props.onOpenCreateModal}
- >
- Ajouter une mission
- </button>
+ <div className="select_toolbox">
+ <ul>
+ <li className='st_action'>
+ <button
+ type='button'
+ data-toggle='modal'
+ data-target='#NewJourneyPatternModal'
+ onClick={this.props.onOpenCreateModal}
+ >
+ <span className="fa fa-plus"></span>
+ </button>
- <div className={ 'modal fade ' + ((this.props.modal.type == 'create') ? 'in' : '') } id='NewJourneyPatternModal'>
- <div className='modal-container'>
- <div className='modal-dialog'>
- <div className='modal-content'>
- <div className='modal-header'>
- <h4 className='modal-title'>Ajouter une mission</h4>
- </div>
+ <div className={ 'modal fade ' + ((this.props.modal.type == 'create') ? 'in' : '') } id='NewJourneyPatternModal'>
+ <div className='modal-container'>
+ <div className='modal-dialog'>
+ <div className='modal-content'>
+ <div className='modal-header'>
+ <h4 className='modal-title'>Ajouter une mission</h4>
+ </div>
- {(this.props.modal.type == 'create') && (
- <form>
- <div className='modal-body'>
- <div className='form-group'>
- <label className='control-label is-required'>Nom</label>
- <input
- type='text'
- ref='name'
- className='form-control'
- onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
- required
- />
- </div>
- <div className='row'>
- <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
- <div className='form-group'>
- <label className='control-label is-required'>Nom public</label>
- <input
- type='text'
- ref='published_name'
- className='form-control'
- onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
- required
- />
- </div>
+ {(this.props.modal.type == 'create') && (
+ <form>
+ <div className='modal-body'>
+ <div className='form-group'>
+ <label className='control-label is-required'>Nom</label>
+ <input
+ type='text'
+ ref='name'
+ className='form-control'
+ onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
+ required
+ />
</div>
- <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
- <div className='form-group'>
- <label className='control-label is-required'>Code mission</label>
- <input
- type='text'
- ref='registration_number'
- className='form-control'
- onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
- required
- />
+ <div className='row'>
+ <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
+ <div className='form-group'>
+ <label className='control-label is-required'>Nom public</label>
+ <input
+ type='text'
+ ref='published_name'
+ className='form-control'
+ onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
+ required
+ />
+ </div>
+ </div>
+ <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
+ <div className='form-group'>
+ <label className='control-label'>Code mission</label>
+ <input
+ type='text'
+ ref='registration_number'
+ className='form-control'
+ onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
+ />
+ </div>
</div>
</div>
</div>
- </div>
- <div className='modal-footer'>
- <button
- className='btn btn-link'
- data-dismiss='modal'
- type='button'
- onClick={this.props.onModalClose}
- >
- Annuler
- </button>
- <button
- className='btn btn-primary'
- type='button'
- onClick={this.handleSubmit.bind(this)}
- >
- Valider
- </button>
- </div>
- </form>
- )}
+ <div className='modal-footer'>
+ <button
+ className='btn btn-link'
+ data-dismiss='modal'
+ type='button'
+ onClick={this.props.onModalClose}
+ >
+ Annuler
+ </button>
+ <button
+ className='btn btn-primary'
+ type='button'
+ onClick={this.handleSubmit.bind(this)}
+ >
+ Valider
+ </button>
+ </div>
+ </form>
+ )}
+ </div>
</div>
</div>
</div>
- </div>
- </div>
+ </li>
+ </ul>
</div>
)
} else {
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js b/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js
index 81c59b2ce..1fc935932 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/components/EditModal.js
@@ -63,7 +63,7 @@ class EditModal extends Component {
</div>
<div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
<div className='form-group'>
- <label className='control-label is-required'>Code mission</label>
+ <label className='control-label'>Code mission</label>
<input
type='text'
ref='registration_number'
@@ -71,7 +71,6 @@ class EditModal extends Component {
id={this.props.modal.modalProps.index}
defaultValue={this.props.modal.modalProps.journeyPattern.registration_number}
onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
- required
/>
</div>
</div>
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 14ddf2b99..43c40a4d5 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 data-turbolinks="false" href={vjURL}>Horaires des courses</a>
+ <a href={vjURL}>Horaires des courses</a>
)
}
diff --git a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
index 41d247b21..951664129 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
@@ -122,6 +122,9 @@ const actions = {
type : 'OPEN_CONFIRM_MODAL',
callback
}),
+ showErrorModal: () => ({
+ type: 'OPEN_ERROR_MODAL'
+ }),
closeModal : () => ({
type : 'CLOSE_MODAL'
}),
@@ -185,9 +188,13 @@ const actions = {
return improvedCM
},
- checkConfirmModal: (event, callback, stateChanged,dispatch) => {
+ checkConfirmModal: (event, callback, stateChanged, dispatch, metas, timetable) => {
if(stateChanged === true){
- return actions.openConfirmModal(callback)
+ if(timetable.time_table_periods.length == 0 && _.some(metas.day_types)){
+ return actions.showErrorModal()
+ }else{
+ return actions.openConfirmModal(callback)
+ }
}else{
dispatch(actions.fetchingApi())
return callback
@@ -201,8 +208,8 @@ const actions = {
start = new Date(start)
end = new Date(end)
_.each(periods, (period, i) => {
- if(index != i && !period.deleted){
- if((new Date(period.period_start) <= start && new Date(period.period_end) >= start) || (new Date(period.period_start) <= end && new Date(period.period_end) >= end))
+ if(index !== i && !period.deleted){
+ if((new Date(period.period_start) <= start && new Date(period.period_end) >= start) || (new Date(period.period_start) <= end && new Date(period.period_end) >= end) || (start >= new Date(period.period_start) && end <= new Date(period.period_end)) || (start <= new Date(period.period_start) && end >= new Date(period.period_end)))
error = 'Les périodes ne peuvent pas se chevaucher'
}
})
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js b/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js
index c2229d991..40ae0eccf 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/ConfirmModal.js
@@ -2,7 +2,7 @@ var React = require('react')
var Component = require('react').Component
var PropTypes = require('react').PropTypes
-const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, journeyPatterns}) => (
+const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, timetable, metas}) => (
<div className={ 'modal fade ' + ((modal.type == 'confirm') ? 'in' : '') } id='ConfirmModal'>
<div className='modal-container'>
<div className='modal-dialog'>
@@ -28,7 +28,7 @@ const ConfirmModal = ({dispatch, modal, onModalAccept, onModalCancel, journeyPat
className='btn btn-primary'
data-dismiss='modal'
type='button'
- onClick = {() => {onModalAccept(modal.confirmModal.callback, journeyPatterns)}}
+ onClick = {() => {onModalAccept(modal.confirmModal.callback, timetable, metas)}}
>
Valider
</button>
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/ErrorModal.js b/app/assets/javascripts/es6_browserified/time_tables/components/ErrorModal.js
new file mode 100644
index 000000000..31ed256ea
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/ErrorModal.js
@@ -0,0 +1,39 @@
+var React = require('react')
+var Component = require('react').Component
+var PropTypes = require('react').PropTypes
+
+const ErrorModal = ({dispatch, modal, onModalClose}) => (
+ <div className={ 'modal fade ' + ((modal.type == 'error') ? 'in' : '') } id='ErrorModal'>
+ <div className='modal-container'>
+ <div className='modal-dialog'>
+ <div className='modal-content'>
+ <div className='modal-header'>
+ <h4 className='modal-title'>Erreur</h4>
+ </div>
+ <div className='modal-body'>
+ <div className='mt-md mb-md'>
+ <p>Un calendrier d'application ne peut pas avoir de journée(s) d'application sans période(s).</p>
+ </div>
+ </div>
+ <div className='modal-footer'>
+ <button
+ className='btn btn-link'
+ data-dismiss='modal'
+ type='button'
+ onClick= {() => {onModalClose()}}
+ >
+ Retour
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+)
+
+ErrorModal.propTypes = {
+ modal: PropTypes.object.isRequired,
+ onModalClose: PropTypes.func.isRequired
+}
+
+module.exports = ErrorModal
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js b/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js
index 74ca36ea6..6a3690cb0 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/Navigate.js
@@ -39,7 +39,7 @@ let Navigate = ({ dispatch, metas, timetable, pagination, status, filters}) => {
value={month}
onClick={e => {
e.preventDefault()
- dispatch(actions.checkConfirmModal(e, actions.changePage(dispatch, e.currentTarget.value), pagination.stateChanged, dispatch))
+ dispatch(actions.checkConfirmModal(e, actions.changePage(dispatch, e.currentTarget.value), pagination.stateChanged, dispatch, metas, timetable))
}}
>
{actions.monthName(month) + ' ' + new Date(month).getFullYear()}
@@ -56,7 +56,7 @@ let Navigate = ({ dispatch, metas, timetable, pagination, status, filters}) => {
<button
onClick={e => {
e.preventDefault()
- dispatch(actions.checkConfirmModal(e, actions.goToPreviousPage(dispatch, pagination), pagination.stateChanged, dispatch))
+ dispatch(actions.checkConfirmModal(e, actions.goToPreviousPage(dispatch, pagination), pagination.stateChanged, dispatch, metas, timetable))
}}
type='button'
data-target='#ConfirmModal'
@@ -66,7 +66,7 @@ let Navigate = ({ dispatch, metas, timetable, pagination, status, filters}) => {
<button
onClick={e => {
e.preventDefault()
- dispatch(actions.checkConfirmModal(e, actions.goToNextPage(dispatch, pagination), pagination.stateChanged, dispatch))
+ dispatch(actions.checkConfirmModal(e, actions.goToNextPage(dispatch, pagination), pagination.stateChanged, dispatch, metas, timetable))
}}
type='button'
data-target='#ConfirmModal'
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js b/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js
index 24c91f282..e8c0aa3ba 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/SaveTimetable.js
@@ -2,6 +2,7 @@ var React = require('react')
var Component = require('react').Component
var PropTypes = require('react').PropTypes
var actions = require('../actions')
+var _ = require('lodash')
class SaveTimetable extends Component{
constructor(props){
@@ -18,7 +19,11 @@ class SaveTimetable extends Component{
type='button'
onClick={e => {
e.preventDefault()
- actions.submitTimetable(this.props.dispatch, this.props.timetable, this.props.metas)
+ if(this.props.timetable.time_table_periods.length == 0 && _.some(this.props.metas.day_types)){
+ this.props.onShowErrorModal()
+ }else{
+ actions.submitTimetable(this.props.getDispatch(), this.props.timetable, this.props.metas)
+ }
}}
>
Valider
diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/App.js b/app/assets/javascripts/es6_browserified/time_tables/containers/App.js
index 7c75377ea..02f0ddbd8 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/containers/App.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/App.js
@@ -8,6 +8,7 @@ var Navigate = require('./Navigate')
var PeriodForm = require('./PeriodForm')
var SaveTimetable = require('./SaveTimetable')
var ConfirmModal = require('./ConfirmModal')
+var ErrorModal = require('./ErrorModal')
class App extends Component {
componentDidMount(){
@@ -24,6 +25,7 @@ class App extends Component {
<PeriodForm />
<SaveTimetable />
<ConfirmModal />
+ <ErrorModal />
</div>
</div>
)
diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js b/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js
index 8095e1e7c..6282c1d1d 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/ConfirmModal.js
@@ -5,13 +5,14 @@ var ConfirmModal = require('../components/ConfirmModal')
const mapStateToProps = (state) => {
return {
modal: state.modal,
- journeyPatterns: state.journeyPatterns
+ timetable: state.timetable,
+ metas: state.metas
}
}
const mapDispatchToProps = (dispatch) => {
return {
- onModalAccept: (next, timetable, metas, state) =>{
+ onModalAccept: (next, timetable, metas) =>{
dispatch(actions.fetchingApi())
actions.submitTimetable(dispatch, timetable, metas, next)
},
diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/ErrorModal.js b/app/assets/javascripts/es6_browserified/time_tables/containers/ErrorModal.js
new file mode 100644
index 000000000..16a7d45dd
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/ErrorModal.js
@@ -0,0 +1,21 @@
+var actions = require('../actions')
+var connect = require('react-redux').connect
+var ErrorModal = require('../components/ErrorModal')
+
+const mapStateToProps = (state) => {
+ return {
+ modal: state.modal
+ }
+}
+
+const mapDispatchToProps = (dispatch) => {
+ return {
+ onModalClose: () =>{
+ dispatch(actions.closeModal())
+ }
+ }
+}
+
+const ErrorModalContainer = connect(mapStateToProps, mapDispatchToProps)(ErrorModal)
+
+module.exports = ErrorModalContainer
diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js b/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js
index 7d2684dde..b5539e7d8 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/SaveTimetable.js
@@ -11,6 +11,16 @@ const mapStateToProps = (state) => {
}
}
-const SaveTimetable = connect(mapStateToProps)(SaveTimetableComponent)
+const mapDispatchToProps = (dispatch) => {
+ return {
+ onShowErrorModal: () => {
+ dispatch(actions.showErrorModal())
+ },
+ getDispatch: () => {
+ return dispatch
+ }
+ }
+}
+const SaveTimetable = connect(mapStateToProps, mapDispatchToProps)(SaveTimetableComponent)
module.exports = SaveTimetable
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js
index 4f1e7a528..2ce084efd 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/metas.js
@@ -12,6 +12,9 @@ const metas = (state = {}, action) => {
color: action.json.color,
calendar: action.json.calendar ? action.json.calendar : null
})
+ case 'RECEIVE_MONTH':
+ let dt = (typeof state.day_types === 'string') ? actions.strToArrayDayTypes(state.day_types) : state.day_types
+ return _.assign({}, state, {day_types: dt})
case 'INCLUDE_DATE_IN_PERIOD':
case 'EXCLUDE_DATE_FROM_PERIOD':
case 'DELETE_PERIOD':
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
index 56486a105..69f7b206e 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
@@ -19,6 +19,9 @@ const modal = (state = {}, action) => {
callback: action.callback,
}
})
+ case 'OPEN_ERROR_MODAL':
+ $('#ErrorModal').modal('show')
+ return _.assign({}, state, {type: 'error'})
case 'CLOSE_PERIOD_FORM':
newModalProps = _.assign({}, state.modalProps, {active: false})
return _.assign({}, state, {modalProps: newModalProps})
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js
index 660484c58..3d96fb7b7 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/pagination.js
@@ -5,8 +5,12 @@ const pagination = (state = {}, action) => {
case 'RECEIVE_TIME_TABLES':
return _.assign({}, state, {
currentPage: action.json.current_periode_range,
- periode_range: action.json.periode_range
+ periode_range: action.json.periode_range,
+ stateChanged: false
})
+ case 'RECEIVE_MONTH':
+ case 'RECEIVE_ERRORS':
+ return _.assign({}, state, {stateChanged: false})
case 'GO_TO_PREVIOUS_PAGE':
case 'GO_TO_NEXT_PAGE':
let nextPage = action.nextPage ? 1 : -1
@@ -22,7 +26,6 @@ const pagination = (state = {}, action) => {
case 'VALIDATE_PERIOD_FORM':
case 'UPDATE_COMMENT':
case 'UPDATE_COLOR':
- case 'UPDATE_DAY_TYPES':
toggleOnConfirmModal('modal')
return _.assign({}, state, {stateChanged: true})
default:
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
index e2d03e195..f74bfa71d 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
@@ -107,7 +107,9 @@ const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTi
onChange={onToggleWithoutSchedule}
checked={filters.query.withoutSchedule}
></input>
- <span className='switch-label' data-checkedvalue='Non' data-uncheckedvalue='Oui'></span>
+ <span className='switch-label' data-checkedvalue='Non' data-uncheckedvalue='Oui'>
+ {filters.query.withoutSchedule ? 'Oui' : 'Non'}
+ </span>
</label>
</div>
</div>
@@ -117,7 +119,7 @@ const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTi
<div className="ffg-row">
{/* Switch avec/sans calendrier */}
<div className='form-group has_switch'>
- <label className='control-label pull-left'>Afficher les courses sans calendrier</label>
+ <label className='control-label pull-left'>Afficher les courses avec calendrier</label>
<div className='form-group pull-left' style={{padding: 0}}>
<div className='checkbox'>
<label>
@@ -126,7 +128,9 @@ const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTi
onChange={onToggleWithoutTimeTable}
checked={filters.query.withoutTimeTable}
></input>
- <span className='switch-label' data-checkedvalue='Oui' data-uncheckedvalue='Non'></span>
+ <span className='switch-label' data-checkedvalue='Non' data-uncheckedvalue='Oui'>
+ {filters.query.withoutTimeTable ? 'Oui' : 'Non'}
+ </span>
</label>
</div>
</div>
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 f5e01de7c..0cf102693 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
@@ -53,72 +53,75 @@ class DuplicateVehicleJourney extends Component {
<div className='modal-header'>
<h4 className='modal-title'>Dupliquer une course</h4>
{(this.props.modal.type == 'duplicate') && (
- <em>Dupliquer les horaires de la course {actions.getSelected(this.props.vehicleJourneys)[0].objectid}</em>
+ <em>Dupliquer les horaires de la course {actions.humanOID(actions.getSelected(this.props.vehicleJourneys)[0].objectid)}</em>
)}
</div>
{(this.props.modal.type == 'duplicate') && (
- <form>
+ <form className='form-horizontal'>
<div className='modal-body'>
- <div className='row'>
- <div className='col-lg-3 col-md-3 col-sm-3 col-xs-3'>
- <div className='form-group'>
- <label className='control-label is-required'>Horaire de départ</label>
- <span className={'input-group time' + (actions.getSelected(this.props.vehicleJourneys).length > 1 ? ' disabled' : '')}>
- <input
- type='number'
- ref='duplicate_time_hh'
- min='00'
- max='23'
- className='form-control'
- defaultValue={this.getDefaultValue('hour')}
- disabled={(actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
- />
- <span>:</span>
- <input
- type='number'
- ref='duplicate_time_mm'
- min='00'
- max='59'
- className='form-control'
- defaultValue={this.getDefaultValue('minute')}
- disabled={(actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
- />
- </span>
- </div>
- </div>
-
- <div className='col-lg-6 col-md-6 col-sm-6 col-xs-6'>
- <div className='form-group'>
- <label className='control-label is-required'>Nombre de courses à créer et dupliquer</label>
+ <div className={'form-group ' + (actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'hidden' : '' )}>
+ <label className='control-label is-required col-sm-8'>Horaire de départ indicatif</label>
+ <span className="col-sm-4">
+ <span className={'input-group time' + (actions.getSelected(this.props.vehicleJourneys).length > 1 ? ' disabled' : '')}>
<input
type='number'
- ref='duplicate_number'
- min='1'
- max='20'
+ ref='duplicate_time_hh'
+ min='00'
+ max='23'
className='form-control'
- onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
- required
+ defaultValue={this.getDefaultValue('hour')}
+ disabled={(actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
/>
- </div>
- </div>
-
- <div className='col-lg-3 col-md-3 col-sm-3 col-xs-3'>
- <div className='form-group'>
- <label className='control-label is-required'>Avec un décalage de</label>
+ <span>:</span>
<input
type='number'
- ref='additional_time'
- min='-59'
+ ref='duplicate_time_mm'
+ min='00'
max='59'
className='form-control'
- onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
- required
+ defaultValue={this.getDefaultValue('minute')}
+ disabled={(actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
/>
- </div>
+ </span>
+ </span>
+ </div>
+
+ <div className='form-group'>
+ <label className='control-label is-required col-sm-8'>Nombre de courses à créer et dupliquer</label>
+ <div className="col-sm-4">
+ <input
+ type='number'
+ style={{'width': 104}}
+ ref='duplicate_number'
+ min='1'
+ max='20'
+ defaultValue='1'
+ className='form-control'
+ onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
+ required
+ />
+ </div>
+ </div>
+
+ <div className='form-group'>
+ <label className='control-label is-required col-sm-8'>Décalage à partir duquel on créé les courses</label>
+ <div className="col-sm-4">
+ <input
+ type='number'
+ style={{'width': 104}}
+ ref='additional_time'
+ min='-59'
+ max='59'
+ defaultValue='0'
+ className='form-control'
+ onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
+ required
+ />
</div>
</div>
</div>
+
<div className='modal-footer'>
<button
className='btn btn-link'
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 d4c3f4231..4c18ef96f 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
@@ -2,6 +2,7 @@ var React = require('react')
var Component = require('react').Component
var PropTypes = require('react').PropTypes
var actions = require('../../actions')
+var _ = require('lodash')
class NotesEditVehicleJourney extends Component {
constructor(props) {
@@ -27,16 +28,28 @@ class NotesEditVehicleJourney extends Component {
type='button'
className='btn btn-outline-danger btn-xs'
onClick={() => this.props.onToggleFootnoteModal(lf, false)}
- ><span className="fa fa-trash"></span></button>
+ ><span className="fa fa-trash"></span> Retirer</button>
}else{
return <button
type='button'
className='btn btn-outline-primary btn-xs'
onClick={() => this.props.onToggleFootnoteModal(lf, true)}
- ><span className="fa fa-plus"></span></button>
+ ><span className="fa fa-plus"></span> Ajouter</button>
}
}
+ filterFN() {
+ return _.filter(window.line_footnotes, (lf, i) => {
+ let bool = true
+ _.map(this.props.modal.modalProps.vehicleJourney.footnotes, (f, j) => {
+ if(lf.id === f.id) {
+ bool = false
+ }
+ })
+ return bool
+ })
+ }
+
render() {
if(this.props.status.isFetching == true) {
return false
@@ -65,7 +78,24 @@ class NotesEditVehicleJourney extends Component {
{(this.props.modal.type == 'notes_edit') && (
<form>
<div className='modal-body'>
- {window.line_footnotes.map((lf, i) =>
+ <h3>Notes associées</h3>
+ {(this.props.modal.modalProps.vehicleJourney.footnotes).map((lf, i) =>
+ <div
+ key={i}
+ className='panel panel-default'
+ >
+ <div className='panel-heading'>
+ <h4 className='panel-title clearfix'>
+ <div className='pull-left' style={{paddingTop: '3px'}}>{lf.code}</div>
+ <div className='pull-right'>{this.renderFootnoteButton(lf, this.props.modal.modalProps.vehicleJourney.footnotes)}</div>
+ </h4>
+ </div>
+ <div className='panel-body'><p>{lf.label}</p></div>
+ </div>
+ )}
+
+ <h3 className='mt-lg'>Sélectionnez les notes à associer à cette course :</h3>
+ {this.filterFN().map((lf, i) =>
<div
key={i}
className='panel panel-default'
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 36aaa5cfd..b3df767ab 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
@@ -50,7 +50,7 @@ class BSelect4 extends React.Component{
},
cache: true
},
- minimumInputLength: 2,
+ minimumInputLength: 0,
escapeMarkup: function (markup) { return markup; },
templateResult: formatRepo
}}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
index 2a76ae43a..97aa60526 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
@@ -48,7 +48,7 @@ var initialState = {
comment: ''
},
withoutSchedule: true,
- withoutTimeTable: false
+ withoutTimeTable: true
}
},
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 9f071069d..229fd2058 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/modal.js
@@ -90,11 +90,15 @@ const modal = (state = {}, action) => {
case 'CREATE_VEHICLEJOURNEY_MODAL':
let selectedJP = {}
if (window.jpOrigin){
+ let stopAreas = _.map(window.jpOriginStopPoints, (sa, i) =>{
+ return _.assign({}, {stop_area_short_description : {id : sa.stop_area_id}})
+ })
selectedJP = {
id: window.jpOrigin.id,
name: window.jpOrigin.name,
published_name: window.jpOrigin.published_name,
- objectid: window.jpOrigin.objectid
+ objectid: window.jpOrigin.objectid,
+ stop_areas: stopAreas
}
}
return {
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 ee59fca6d..a8189fc97 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/pagination.js
@@ -2,6 +2,7 @@ var _ = require('lodash')
const pagination = (state = {}, action) => {
switch (action.type) {
case 'RECEIVE_JOURNEY_PATTERNS':
+ case 'RECEIVE_VEHICLE_JOURNEYS':
return _.assign({}, state, {stateChanged: false})
case 'GO_TO_PREVIOUS_PAGE':
if (action.pagination.page > 1){
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 9dea63e07..c7e8d58e7 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
@@ -42,7 +42,9 @@ const vehicleJourney= (state = {}, action, keep) => {
time_tables: [],
vehicle_journey_at_stops: pristineVjasList,
selected: false,
- deletable: false
+ deletable: false,
+ transport_mode: window.transportMode ? window.transportMode : 'undefined',
+ transport_submode: window.transportSubmode ? window.transportSubmode : 'undefined'
}
case 'DUPLICATE_VEHICLEJOURNEY':
case 'SHIFT_VEHICLEJOURNEY':
diff --git a/app/assets/javascripts/forms.coffee b/app/assets/javascripts/forms.coffee
index 6b00e9c26..12d82fef1 100644
--- a/app/assets/javascripts/forms.coffee
+++ b/app/assets/javascripts/forms.coffee
@@ -41,10 +41,11 @@ isEdge = !isIE && !!window.StyleMedia
else
$(selectedStatus).css('color', selectedValue)
-$(document).on 'turbolinks:load', togglableFilter
-$(document).on 'turbolinks:load', submitMover
-$(document).on 'turbolinks:load', switchInput
-$(document).on 'turbolinks:load', colorSelector
+$ ->
+ togglableFilter()
+ submitMover()
+ switchInput()
+ colorSelector()
if isIE || isEdge
$(document).on 'click', '.formSubmitr', (e)->
diff --git a/app/assets/javascripts/main_menu.coffee b/app/assets/javascripts/main_menu.coffee
index f6266f06b..a12c47576 100644
--- a/app/assets/javascripts/main_menu.coffee
+++ b/app/assets/javascripts/main_menu.coffee
@@ -1,4 +1,4 @@
-$(document).on 'turbolinks:load', ->
+$ ->
link = []
ptitleCont = ""
diff --git a/app/assets/javascripts/nav_panels.coffee b/app/assets/javascripts/nav_panels.coffee
index 829db5ad0..25f15f063 100644
--- a/app/assets/javascripts/nav_panels.coffee
+++ b/app/assets/javascripts/nav_panels.coffee
@@ -1,4 +1,4 @@
-$(document).on 'turbolinks:load', ->
+$ ->
$('#menu_top [data-panel="toggle"]').on 'click', (e) ->
e.preventDefault()
$(this).siblings().removeClass 'active'
diff --git a/app/assets/javascripts/routing_constraint_zones.coffee b/app/assets/javascripts/routing_constraint_zones.coffee
index fc032f074..ceb9fb218 100644
--- a/app/assets/javascripts/routing_constraint_zones.coffee
+++ b/app/assets/javascripts/routing_constraint_zones.coffee
@@ -1,28 +1,62 @@
-fill_stop_points_options = ->
- stop_point_select = $('#routing_constraint_zone_stop_point_ids')
- stop_point_select.empty()
- referential_id = document.location.pathname.match(/\d+/g)[0]
- line_id = document.location.pathname.match(/\d+/g)[1]
- route_id = $('#routing_constraint_zone_route_id').val()
-
- if errors_on_form()
- stop_point_ids = eval($('#stop_point_ids').val())
-
- $.ajax
- url: "/referentials/#{referential_id}/lines/#{line_id}/routes/#{route_id}/stop_points"
- dataType: 'json'
- success: (data, textStatus, jqXHR) ->
- for stop_point in data
- selected = $.inArray(stop_point.id, stop_point_ids) != -1
- stop_point_select.append "<option value='#{stop_point.id}'" + "#{if selected then ' selected' else ''}" + ">#{stop_point.name}</option>"
- error: (jqXHR, textStatus, errorThrown) ->
- console.log textStatus
- console.log errorThrown
-
-errors_on_form = ->
- document.location.pathname.endsWith('routing_constraint_zones') && $('#new_routing_constraint_zone').length
-
-$(document).on 'turbolinks:load', ->
- if document.location.pathname.endsWith('routing_constraint_zones/new') || errors_on_form()
- fill_stop_points_options()
- $('#routing_constraint_zone_route_id').change(fill_stop_points_options)
+@ITL_stoppoints = ->
+ routeID = $('#routing_constraint_zone_route_id').val()
+
+ if (routeID)
+ origin = window.location.origin
+ path = window.location.pathname.split('/', 5).join('/')
+ reqURL = origin + path + '/routes/' + routeID + '/stop_points.json'
+
+ $.ajax
+ url: reqURL
+ dataType: 'json'
+ error: (jqXHR, textStatus, errorThrown) ->
+ console.log(errorThrown)
+ success: (collection, textStatus, jqXHR) ->
+ html = ''
+ stopAreaBaseURL = origin + window.location.pathname.split('/', 3).join('/') + '/stop_areas/'
+
+ collection.forEach (item, index) ->
+ html += "<div class='nested-fields'><div class='wrapper'>
+ <div><a href='" + stopAreaBaseURL + item.stop_area_id + "' class='navlink' title='Voir l&#39;arrêt'><span>" + item.name + "</span></a></div>
+ <div><span>" + item.city_name + " (" + item.zip_code + ")</span></div>
+ <div>
+ <span class='has_radio'>
+ <input type='checkbox' name='routing_constraint_zone[stop_point_ids][" + index + "]' value='" + item.id + "'>
+ <span class='radio-label'></span>
+ </span>
+ </div>
+ </div></div>"
+
+ $('#ITL_stoppoints').find('.nested-fields').remove()
+ $('#ITL_stoppoints').find('.nested-head').after(html)
+
+ # VALIDATION
+ selection = []
+ $('#ITL_stoppoints').on 'click', "input[type='checkbox']", (e) ->
+ v = $(e.target).val()
+
+ if ( $.inArray(v, selection) != -1 )
+ selection.splice(selection.indexOf(v), 1)
+ else
+ selection.push(v)
+
+ alertMsg = "<div class='alert alert-danger' style='margin-bottom:15px;'>
+ <p class='small'>Un ITL doit comporter au moins deux arrêts</p>
+ </div>"
+
+ $(document).on 'click', "input[type='submit']", (e)->
+ inputName = $('#routing_constraint_zone_name').val()
+
+ $('.alert-danger').remove()
+
+ if ( selection.length < 2 && inputName != "")
+ e.preventDefault()
+ $('#routing_constraint_zone_name').closest('.form-group').removeClass('has-error').find('.help-block').remove()
+ $('#ITL_stoppoints').prepend(alertMsg)
+
+$ ->
+ ITL_stoppoints()
+
+ $('#routing_constraint_zone_route_id').on 'change', ->
+ $('.alert-danger').remove()
+ ITL_stoppoints()
diff --git a/app/assets/javascripts/select2.coffee b/app/assets/javascripts/select2.coffee
index af3dc6d75..d54ddb811 100644
--- a/app/assets/javascripts/select2.coffee
+++ b/app/assets/javascripts/select2.coffee
@@ -20,6 +20,7 @@ bind_select2_ajax = (el, cfg = {}) ->
delay: 125,
processResults: (data, params) -> results: data
minimumInputLength: 3
+ placeholder: target.data('select2ed-placeholder')
templateResult: (item) ->
item.text
templateSelection: (item) ->
@@ -39,4 +40,5 @@ bind_select2_ajax = (el, cfg = {}) ->
-$(document).on 'turbolinks:load', select_2
+$ ->
+ select_2()
diff --git a/app/assets/javascripts/selectable_table.coffee b/app/assets/javascripts/selectable_table.coffee
index 4086bf6c2..681c8f9e6 100644
--- a/app/assets/javascripts/selectable_table.coffee
+++ b/app/assets/javascripts/selectable_table.coffee
@@ -53,4 +53,5 @@
.addClass 'noselect'
.children('.info-msg').children('span').text(selection.length)
-$(document).on 'turbolinks:load', selectTable
+$ ->
+ selectTable()
diff --git a/app/assets/javascripts/time_table_combinations.coffee b/app/assets/javascripts/time_table_combinations.coffee
index 8923af958..6104da7ff 100644
--- a/app/assets/javascripts/time_table_combinations.coffee
+++ b/app/assets/javascripts/time_table_combinations.coffee
@@ -3,4 +3,5 @@
$(this).closest('.has_switch').siblings('.form-group').each ->
$(this).toggleClass('hidden')
-$(document).on 'turbolinks:load', combinedTypeToggle
+$ ->
+ combinedTypeToggle()