Skip to content

Commit ddcb344

Browse files
committed
More hooks
1 parent 6166381 commit ddcb344

File tree

2 files changed

+28
-25
lines changed

2 files changed

+28
-25
lines changed

csvtogeocoder.css

+5-9
Original file line numberDiff line numberDiff line change
@@ -92,24 +92,20 @@ progress {
9292
.csvtogeocoder #helpEncoding {
9393
display: none;
9494
}
95-
.csvtogeocoder #helpEncoding select {
95+
.csvtogeocoder select {
9696
display: inline;
9797
width: auto;
9898
}
99-
.csvtogeocoder .step2,
100-
.csvtogeocoder .step3,
101-
.csvtogeocoder .step4 {
99+
.csvtogeocoder .step {
102100
display: none;
103101
}
104-
.csvtogeocoder .step {
102+
.csvtogeocoder .step-title {
105103
color: #ccc;
106104
}
107-
.csvtogeocoder.active .step {
105+
.csvtogeocoder.active .step-title {
108106
color: inherit;
109107
}
110-
.csvtogeocoder.active .step2,
111-
.csvtogeocoder.active .step3,
112-
.csvtogeocoder.active .step4 {
108+
.csvtogeocoder.active .step {
113109
display: block;
114110
}
115111
.csvtogeocoder .error {

csvtogeocoder.js

+23-16
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
1+
/*globals CSVToGeocoder Papa*/
2+
'use strict';
13
var CSVToGeocoder = function (options) {
24
options = options || {};
35
options.i18n = options.i18n || {};
46

57
var _ = function (k) {
6-
return options.i18n[k] || k;
8+
return options.i18n[k] || k;
79
};
810

911
var createNode = function (what, attrs, parent, content) {
1012
var el = document.createElement(what);
11-
for (var attr in attrs || {}) el[attr] = attrs[attr];
13+
for (var attr in attrs || {}) el[attr] = attrs[attr];
1214
if (typeof parent !== 'undefined') parent.appendChild(el);
1315
if (content) {
1416
if (content.nodeType && content.nodeType === 1) el.appendChild(content);
1517
else el.innerHTML = content;
1618
}
1719
return el;
1820
};
21+
CSVToGeocoder.createNode = createNode;
22+
1923
var hasClass = function (el, name) {
2024
return el.className.length && new RegExp('(^|\\s)' + name + '(\\s|$)').test(el.className);
2125
};
@@ -42,21 +46,22 @@ var CSVToGeocoder = function (options) {
4246
createNode('h2', {}, container, '1. ' + _('Choose a file'));
4347
var fileInput = createNode('input', {type: 'file', id: 'fileInput'}, container);
4448
var holder = createNode('div', {id: 'holder'}, container, _('Drag your file here') + ', ' + _('or') + ' <a id="browseLink" href="#">' + _('browse') + '</a>');
45-
createNode('h2', {className: 'step', id: 'next'}, container, '2. ' + _('Preview the file and check encoding'));
46-
var step2 = createNode('div', {className: 'step2'}, container);
49+
createNode('h2', {className: 'step-title', id: 'next'}, container, '2. ' + _('Preview the file and check encoding'));
50+
var step2 = createNode('div', {className: 'step'}, container);
4751
var previewContainer = createNode('table', {className: 'preview'}, step2);
4852
var helpEncoding = createNode('p', {id: 'helpEncoding'}, step2, _('If you see weird characters in the preview, you can try with another encoding') + ': ');
4953
var selectEncoding = createNode('select', {}, helpEncoding);
5054
for (var i = 0; i < options.encodings.length; i++) {
5155
createNode('option', {value: options.encodings[i]}, selectEncoding, options.encodings[i]);
5256
}
53-
createNode('h2', {className: 'step'}, container, '3. ' + _('Choose the columns you want to use to compute the addresses'));
54-
var step3 = createNode('div', {className: 'step3'}, container);
55-
var helpColumns = createNode('p', {id: 'helpColumns'}, step3, _('Drag or click on a column to select it. You can then drag the selected columns to reorder them.'));
57+
createNode('h2', {className: 'step-title'}, container, '3. ' + _('Choose the columns you want to use to compute the addresses'));
58+
var step3 = createNode('div', {className: 'step'}, container);
5659
var availableColumns = createNode('ul', {id: 'availableColumns'}, step3);
5760
var chosenColumns = createNode('ul', {id: 'chosenColumns'}, step3);
58-
var errorContainer = createNode('div', {className: 'error'}, container);
59-
var submitButton = createNode('input', {type: 'button', value: _('Geocode'), disabled: 'disabled'}, step3);
61+
if (options.onBuild) options.onBuild({container: container});
62+
var lastStep = createNode('div', {className: 'step'}, container);
63+
var submitButton = createNode('input', {type: 'button', value: _('Geocode'), disabled: 'disabled'}, lastStep);
64+
var errorContainer = createNode('div', {className: 'error'}, lastStep);
6065

6166
var error = function (message) {
6267
if (options.onError) {
@@ -75,7 +80,7 @@ var CSVToGeocoder = function (options) {
7580
var progressBar = createNode('progress', {}, container);
7681
progressBar.max = 100;
7782
var xhr = new XMLHttpRequest();
78-
xhr.open('POST', options.postURL || '.');
83+
xhr.open('POST', options.postURL || '.');
7984
xhr.overrideMimeType('text/csv');
8085
var columns = document.querySelectorAll('#chosenColumns li');
8186
var formData = new FormData();
@@ -85,6 +90,7 @@ var CSVToGeocoder = function (options) {
8590
formData.append('data', blob, file.name);
8691
formData.append('encoding', getEncoding());
8792
formData.append('delimiter', parsed.meta.delimiter);
93+
if (options.onSubmit) options.onSubmit({form: formData});
8894
xhr.onreadystatechange = function() {
8995
if (xhr.readyState === 4) {
9096
progressBar.parentNode.removeChild(progressBar);
@@ -106,7 +112,7 @@ var CSVToGeocoder = function (options) {
106112
}
107113
}, false);
108114
xhr.upload.addEventListener('load', function (){
109-
progressBar.removeAttribute('value'); // Switch to undeterminate state.
115+
progressBar.removeAttribute('value'); // Switch to undeterminate state.
110116
}, false);
111117
xhr.send(formData);
112118
return false;
@@ -159,6 +165,7 @@ var CSVToGeocoder = function (options) {
159165
blob = new Blob([reader.result], {type: 'text/csv; charset=' + getEncoding()});
160166
if (!hasClass(container, 'active')) addClass(container, 'active');
161167
window.location.hash = '#next';
168+
if (options.onFileLoad) options.onFileLoad({file: blob, headers: headers});
162169
};
163170
var populatePreview = function () {
164171
previewContainer.innerHTML = '';
@@ -205,7 +212,7 @@ var CSVToGeocoder = function (options) {
205212
var el = document.getElementById(e.dataTransfer.getData('text/plain'));
206213
this.parentNode.insertBefore(el, this);
207214
};
208-
var onColumnClick = function (e) {
215+
var onColumnClick = function () {
209216
this.className = '';
210217
var from, to;
211218
if (this.parentNode === chosenColumns) {
@@ -218,18 +225,18 @@ var CSVToGeocoder = function (options) {
218225
from.removeChild(this);
219226
to.appendChild(this);
220227
};
221-
var onColumnDragOver = function (e) {
228+
var onColumnDragOver = function () {
222229
this.className = 'hover';
223230
};
224-
var onColumnDragLeave = function (e) {
231+
var onColumnDragLeave = function () {
225232
this.className = '';
226233
};
227234
var onFileInputChange = function (e) {
228235
stop(e);
229236
file = this.files[0];
230237
processFile();
231238
};
232-
var onSelectEncodingChange = function (e) {
239+
var onSelectEncodingChange = function () {
233240
processFile();
234241
};
235242
var listenBrowseLink = function () {
@@ -243,7 +250,7 @@ var CSVToGeocoder = function (options) {
243250
var downloadFileName = function () {
244251
// As we are in CORS ajax, we can't access the Content-Disposition header,
245252
// so built the file name from here.
246-
var name = file.name || 'file';
253+
var name = file.name || 'file';
247254
if (name.indexOf('.csv', name.length - 4) !== -1) name = name.slice(0, name.length - 4);
248255
return name + '.geocoded.csv';
249256
};

0 commit comments

Comments
 (0)