Skip to content
This repository was archived by the owner on Mar 27, 2019. It is now read-only.

Commit 5d3b8a7

Browse files
committed
Merge pull request #204 from sgmap/es15
ES2015
2 parents af15f44 + c5f1459 commit 5d3b8a7

File tree

10 files changed

+144
-145
lines changed

10 files changed

+144
-145
lines changed

.eslintrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ rules:
2323
space-before-blocks: 2
2424
no-console: 1
2525

26+
parser: babel-eslint
27+
2628
env:
2729
browser: true
2830
commonjs: true

dist/bootstrap-compat.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/cout-embauche-widget.js

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/compat/bootstrap.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
var MAPPING = {
1+
const MAPPING = {
22
'.SGMAPembauche form > div': 'form-inline',
33
'.SGMAPembauche input, .SGMAPembauche select': 'form-control',
44
}
55

6-
7-
for (var selector in MAPPING) {
8-
if (! MAPPING.hasOwnProperty(selector))
9-
continue
10-
11-
Array.prototype.forEach.call(document.querySelectorAll(selector), function(element) {
12-
element.classList.add(MAPPING[selector])
13-
})
14-
}
6+
Object.keys(MAPPING).forEach(selector => {
7+
[ ...document.querySelectorAll(selector) ]
8+
.forEach(element => element.classList.add(MAPPING[selector]))
9+
})

js/index.js

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
var UI = require('./ui.js'),
2-
OpenFisca = require('./openfisca.js'),
3-
debounce = require('../lib/debounce.js')
1+
import UI from './ui.js'
2+
import OpenFisca from './openfisca.js'
3+
import debounce from '../lib/debounce.js'
44

55

66
/** Handle events from the given form to update data.
77
*/
88
function bindToForm(form) {
99
form.addEventListener('change', UI.reflectParameterChange)
1010

11-
var handleBasicFormChanges = debounce(OpenFisca.update.bind(form), 300)
11+
const handleBasicFormChanges = debounce(OpenFisca.update.bind(form), 300)
1212

1313
handleBasicFormChanges()
1414

15-
var handleFormChanges = function(event) {
15+
const handleFormChanges = event => {
1616
switch (event.target.name) {
1717
case 'code_postal_entreprise':
1818
handleCodePostalInput(event.target.value, handleBasicFormChanges)
@@ -37,52 +37,44 @@ function handleCodePostalInput(codePostal, next) {
3737
if (codePostal.length !== 5)
3838
return UI.displayCommunesFetchResults()
3939

40-
var request = new XMLHttpRequest()
41-
request.onload = function() {
42-
try {
43-
if (request.status !== 200) throw new Error(request.responseText)
44-
45-
var data = JSON.parse(request.responseText)
46-
if (data.length === 0) {
47-
UI.displayCommunesFetchResults('Aucune commune correspondante trouvée')
48-
return
40+
fetch(`https://apicarto.sgmap.fr/codes-postaux/communes/${codePostal}`)
41+
.then(response => {
42+
if (!response.ok) {
43+
const error = new Error(response.statusText)
44+
error.response = response
45+
throw error
4946
}
50-
UI.displayCommunesFetchResults('', data)
51-
} catch (err) {
47+
return response.json()
48+
})
49+
.then(json => {
50+
if (json.length === 0)
51+
UI.displayCommunesFetchResults('Aucune commune correspondante trouvée')
52+
else
53+
UI.displayCommunesFetchResults('', json)
54+
})
55+
.catch(error => {
5256
UI.displayCommunesFetchResults('Le code postal n\'a pas pu être pris en compte')
53-
console.error(err)
54-
} finally {
55-
next()
56-
}
57-
}
58-
59-
request.onerror = function() {
60-
UI.displayCommunesFetchResults('Le code postal n\'a pas pu être pris en compte (réseau faible ?)')
61-
next()
62-
}
63-
64-
request.open('GET', 'https://apicarto.sgmap.fr/codes-postaux/communes/' + codePostal)
65-
request.send()
57+
console.error(error)
58+
})
59+
.then(next)
6660
}
6761

6862
/*
6963
contrat_de_travail <select> value can trigger the display
7064
of the heures_remunerees_volume <input> field.
7165
*/
7266
function handleTempsPartielSelect(contrat, next) {
73-
var container = document.querySelector('#temps_partiel_container')
67+
const container = document.querySelector('#temps_partiel_container')
7468
if (contrat === 'temps_plein')
7569
container.setAttribute('hidden', true)
7670
else container.removeAttribute('hidden')
7771

7872
next()
7973
}
8074

81-
bindToForm(document.querySelector('.SGMAPembauche form'))
82-
83-
var jsNodes = document.querySelectorAll('.SGMAPembauche .js-only')
75+
bindToForm(document.querySelector('.SGMAPembauche form'));
8476

85-
for (var i = 0; i < jsNodes.length; i++)
86-
jsNodes[i].className = jsNodes[i].className.replace('js-only', '')
77+
[ ...document.querySelectorAll('.SGMAPembauche .js-only') ]
78+
.forEach(jsNode => jsNode.className = jsNode.className.replace('js-only', ''))
8779

88-
module.exports.OpenFisca = OpenFisca
80+
export {OpenFisca}

js/openfisca.js

Lines changed: 57 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,56 @@
1-
var UI = require('./ui')
2-
1+
import UI from './ui'
32

43
var buffer
54

6-
module.exports = {
5+
export default {
76
buildURL: buildOpenFiscaQueryURL,
8-
get: get,
9-
update: update,
10-
getLastResults: function() { return buffer },
7+
get,
8+
update,
9+
getLastResults: () => buffer,
1110
}
1211

1312

14-
function serialize(form) {
15-
var result = [],
16-
elements = form.elements
17-
18-
Array.prototype.forEach.call(elements, function(element) {
19-
if (! element.name)
20-
return
21-
22-
var value = element.value
13+
const serialize = form =>
14+
[ ...form.elements ]
15+
.map(element => {
16+
if (! element.name)
17+
return null
2318

24-
if (element.type == 'number')
25-
value = Number(element.value.replace(',', '.')) // IE doesn't support locale number formats
19+
let value = element.value
2620

27-
/* We are simulating a recruitment,
28-
hence requesting salaries with the new size of the entreprise */
29-
if (element.name == 'effectif_entreprise')
30-
value ++
21+
if (element.type == 'number')
22+
value = Number(element.value.replace(',', '.')) // IE doesn't support locale number formats
3123

32-
/* In the case of a `temps partiel`, we are asking hours per week,
33-
the most common way to reason about it. But OpenFisca needs hours per month */
34-
if (element.name == 'heures_remunerees_volume') {
35-
var dureeLegaleMensuelle = 151.66,
36-
dureeLegaleHebdomadaire = 35
37-
value = value * (dureeLegaleMensuelle / dureeLegaleHebdomadaire)
38-
}
24+
/* We are simulating a recruitment,
25+
hence requesting salaries with the new size of the entreprise */
26+
if (element.name == 'effectif_entreprise')
27+
value ++
3928

40-
result.push(encodeURI(element.name + '=' + value))
41-
})
29+
/* In the case of a `temps partiel`, we are asking hours per week,
30+
the most common way to reason about it. But OpenFisca needs hours per month */
31+
if (element.name == 'heures_remunerees_volume') {
32+
const dureeLegaleMensuelle = 151.66,
33+
dureeLegaleHebdomadaire = 35
34+
value = value * (dureeLegaleMensuelle / dureeLegaleHebdomadaire)
35+
}
4236

43-
return result.join('&')
44-
}
37+
return encodeURI(element.name + '=' + value)
38+
})
39+
.filter(value => value != null)
40+
.join('&')
4541

4642

47-
var BOOLEAN_PARAMETERS = {
43+
const BOOLEAN_PARAMETERS = {
4844
employee: [ 'stagiaire', 'apprenti' ],
4945
}
5046

51-
function getAdditionalParameters() {
52-
var result = {}
53-
54-
for (var provider in BOOLEAN_PARAMETERS) {
55-
var key = document.querySelector('[data-provides="' + provider + '"]').value
56-
47+
const getAdditionalParameters = () =>
48+
Object.keys(BOOLEAN_PARAMETERS).reduce((memo, provider) => {
49+
const key = document.querySelector('[data-provides="' + provider + '"]').value
5750
if (BOOLEAN_PARAMETERS[provider].indexOf(key) > -1)
58-
result[key] = true
59-
}
60-
61-
return result
62-
}
51+
memo[key] = true
52+
return memo
53+
}, {})
6354

6455
/** Serializes a shallow object into a series of query string parameters.
6556
* A naive and shallow implementation.
@@ -68,31 +59,23 @@ function getAdditionalParameters() {
6859
*@returns {String} The source object as a query string (with no leading '?').
6960
*@private
7061
*/
71-
function serializeObject(source) {
72-
var result = []
73-
74-
for (var key in source) {
75-
if (key && source.hasOwnProperty(key))
76-
result.push(encodeURI(key + '=' + source[key]))
77-
}
78-
79-
return result.join('&')
80-
}
62+
const serializeObject = source =>
63+
Object.keys(source)
64+
.map(key => encodeURI(key + '=' + source[key]))
65+
.join('&')
8166

8267
/** Creates an OpenFisca URL to the /formula endpoint, based on the current main form state and the given additional parameters.
8368
*
8469
*@param {Object} [additionalParameters] An object whose properties will be appended to the URL as query-string parameters.
8570
*@returns {String} The URL for the OpenFisca query.
8671
*/
8772
function buildOpenFiscaQueryURL(additionalParameters) {
88-
var form = document.querySelector('#input form'),
73+
const form = document.querySelector('#input form'),
8974
queryStringBlocks = [
9075
serialize(form),
9176
serializeObject(getAdditionalParameters()),
9277
serializeObject(additionalParameters),
93-
].filter(function(element) {
94-
return element !== ''}
95-
)
78+
].filter(element => element !== '')
9679

9780
return form.action + '?' + queryStringBlocks.join('&')
9881
}
@@ -108,28 +91,27 @@ function get(additionalParameters, callback) {
10891
additionalParameters = null
10992
}
11093

111-
var request = new XMLHttpRequest()
112-
113-
request.onload = function openFiscaOnloadHandler() {
114-
try {
115-
var data = JSON.parse(request.responseText)
116-
} catch (err) {
117-
callback(err)
118-
}
119-
120-
callback(request.status != 200 && request, data.values, data)
121-
}
122-
123-
request.onerror = callback.bind(null, request)
124-
125-
request.open('GET', buildOpenFiscaQueryURL(additionalParameters))
126-
request.send()
94+
const url = buildOpenFiscaQueryURL(additionalParameters)
95+
96+
fetch(url)
97+
.then( response => {
98+
if (!response.ok) {
99+
let error = new Error(response.statusText)
100+
error.response = response
101+
throw error
102+
}
103+
return response.json()
104+
})
105+
.then( json => callback(false, json.values, json))
106+
.catch( error => {
107+
callback(error)
108+
})
127109
}
128110

129111
/** Updates the displayed values.
130112
*/
131113
function update() {
132-
var today = new Date(),
114+
const today = new Date(),
133115
mm = ('0' + (today.getMonth() + 1)).slice(-2)
134116

135117
get({

js/ui.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module.exports = {
1+
export default {
22
display: display,
33
showError: showError,
44
reflectParameterChange: reflectParameterChange,
@@ -8,16 +8,16 @@ module.exports = {
88

99
function display(data) {
1010
Object.keys(data).forEach(function(toSet) {
11-
var target = document.querySelector('[data-source="' + toSet + '"]'),
12-
value = data[toSet]
11+
const target = document.querySelector('[data-source="' + toSet + '"]')
12+
let value = data[toSet]
1313

1414
if (! target)
1515
return
1616

1717
/* Only display the second result text, "cout du travail",
1818
if it is different from "salaire super brut" */
1919
if (toSet == 'cout_du_travail') {
20-
var container = document.querySelector('#cout_du_travail_container')
20+
const container = document.querySelector('#cout_du_travail_container')
2121
if (data['salaire_super_brut'] == value)
2222
container.setAttribute('hidden', true)
2323
else container.removeAttribute('hidden')
@@ -37,18 +37,18 @@ function display(data) {
3737

3838
function displayCommunesFetchResults(info, values) {
3939
// Inform the user
40-
var label = document.querySelector('label[for="depcom_entreprise"]')
40+
const label = document.querySelector('label[for="depcom_entreprise"]')
4141
label.textContent = info || ''
4242

4343
// Clear the <select>
44-
var depcomElement = document.querySelector('#depcom_entreprise')
44+
const depcomElement = document.querySelector('#depcom_entreprise')
4545
depcomElement.innerHTML = ''
4646

4747
// Update the commune <select> options
4848
if (!values) return depcomElement.setAttribute('hidden', '')
4949

5050
values.forEach(function(value) {
51-
var optionElement = document.createElement('option')
51+
const optionElement = document.createElement('option')
5252
optionElement.value = value.codeInsee
5353
optionElement.textContent = value.nomCommune
5454
depcomElement.appendChild(optionElement)
@@ -66,21 +66,21 @@ function showError(data) {
6666
}
6767

6868
function setErrorVisible(shouldBeVisible) {
69-
var element = document.getElementById('error')
69+
const element = document.getElementById('error')
7070
if (! shouldBeVisible)
7171
element.setAttribute('hidden', true)
7272
else element.removeAttribute('hidden')
7373
}
7474

7575
function reflectParameterChange(event) {
7676
if (event.target.attributes['data-sets']) {
77-
var modifier = event.target.attributes['data-sets'].value.split('@') // example: '#salaire@name'; first part is selector, second is attribute to set
77+
const modifier = event.target.attributes['data-sets'].value.split('@'); // example: '#salaire@name'; first part is selector, second is attribute to set
78+
79+
[ ...document.querySelectorAll(modifier[0]) ]
80+
.forEach(elementToUpdate => elementToUpdate[modifier[1]] = event.target.value)
7881

79-
Array.prototype.forEach.call(document.querySelectorAll(modifier[0]), function(elementToUpdate) {
80-
elementToUpdate[modifier[1]] = event.target.value
81-
})
8282
} else {
83-
var data = {},
83+
const data = {},
8484
name = event.target.name || event.target.attributes['data-provides'].value
8585

8686
data[name] = event.target.value

0 commit comments

Comments
 (0)