diff --git a/modules/behavior/copy.js b/modules/behavior/copy.js
index c4480ab0a..3f7e4e52c 100644
--- a/modules/behavior/copy.js
+++ b/modules/behavior/copy.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { cmd } from '../ui/index';
export function Copy(context) {
diff --git a/modules/behavior/draw.js b/modules/behavior/draw.js
index a040c5636..1217d850f 100644
--- a/modules/behavior/draw.js
+++ b/modules/behavior/draw.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import { rebind } from '../util/rebind';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { chooseEdge, euclideanDistance } from '../geo/index';
import { Edit } from './edit';
import { Hover } from './hover';
diff --git a/modules/behavior/hover.js b/modules/behavior/hover.js
index 36ad4ec4d..93a00911f 100644
--- a/modules/behavior/hover.js
+++ b/modules/behavior/hover.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import { rebind } from '../util/rebind';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { Entity } from '../core/index';
/*
@@ -71,7 +71,7 @@ export function Hover() {
var down;
- function mouseover() {
+ function mouseover(evt) {
if (down) return;
var target = d3.event.target;
enter(target ? target.__data__ : null);
diff --git a/modules/behavior/paste.js b/modules/behavior/paste.js
index d7a37c381..2c426efee 100644
--- a/modules/behavior/paste.js
+++ b/modules/behavior/paste.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { ChangeTags, CopyEntities, Move as MoveAction} from '../actions/index';
import { Extent, pointInPolygon } from '../geo/index';
import { Move as MoveMode } from '../modes/index';
diff --git a/modules/core/connection.js b/modules/core/connection.js
index 7f615b258..3b12d74a6 100644
--- a/modules/core/connection.js
+++ b/modules/core/connection.js
@@ -2,7 +2,7 @@ import * as d3 from 'd3';
import _ from 'lodash';
import { rebind } from '../util/rebind';
import { functor } from '../util/index';
-import { d3geoTile } from '../../js/lib/d3.geo.tile';
+import { d3geoTile } from '../lib/d3.geo.tile';
import { Detect } from '../util/detect';
import { Entity } from './entity';
import { Extent } from '../geo/index';
diff --git a/modules/index.js b/modules/index.js
index 52c6cc34f..f1db5a8c5 100644
--- a/modules/index.js
+++ b/modules/index.js
@@ -8,6 +8,7 @@ import * as services from './services/index';
import * as svg from './svg/index';
import * as ui from './ui/index';
import * as util from './util/index';
+import * as lib from './lib/index';
import * as validations from './validations/index';
// detect
@@ -50,6 +51,7 @@ export {
services,
svg,
util,
+ lib,
ui,
validations
};
diff --git a/js/lib/d3.combobox.js b/modules/lib/d3.combobox.js
similarity index 100%
rename from js/lib/d3.combobox.js
rename to modules/lib/d3.combobox.js
diff --git a/js/lib/d3.geo.tile.js b/modules/lib/d3.geo.tile.js
similarity index 100%
rename from js/lib/d3.geo.tile.js
rename to modules/lib/d3.geo.tile.js
diff --git a/js/lib/d3.keybinding.js b/modules/lib/d3.keybinding.js
similarity index 100%
rename from js/lib/d3.keybinding.js
rename to modules/lib/d3.keybinding.js
diff --git a/modules/lib/index.js b/modules/lib/index.js
new file mode 100644
index 000000000..b6ddad54a
--- /dev/null
+++ b/modules/lib/index.js
@@ -0,0 +1,3 @@
+export { d3combobox } from './d3.combobox';
+export { d3geoTile } from './d3.geo.tile';
+export { d3keybinding } from './d3.keybinding';
diff --git a/modules/modes/move.js b/modules/modes/move.js
index ebc11bfd2..9e424038d 100644
--- a/modules/modes/move.js
+++ b/modules/modes/move.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { Browse, Select } from './index';
import { Move as MoveAction, Noop } from '../actions/index';
diff --git a/modules/modes/rotate_way.js b/modules/modes/rotate_way.js
index 85afe9a88..43cbe1578 100644
--- a/modules/modes/rotate_way.js
+++ b/modules/modes/rotate_way.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { Browse, Select } from './index';
import { Noop, RotateWay as RotateWayAction } from '../actions/index';
diff --git a/modules/modes/select.js b/modules/modes/select.js
index f9e99d571..e0b6186da 100644
--- a/modules/modes/select.js
+++ b/modules/modes/select.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import * as Operations from '../operations/index';
import { Breathe, Copy, Hover, Lasso, Paste, Select as SelectBehavior } from '../behavior/index';
diff --git a/modules/renderer/tile_layer.js b/modules/renderer/tile_layer.js
index d9616728e..843083e33 100644
--- a/modules/renderer/tile_layer.js
+++ b/modules/renderer/tile_layer.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3geoTile } from '../../js/lib/d3.geo.tile';
+import { d3geoTile } from '../lib/d3.geo.tile';
import { prefixCSSProperty, functor } from '../util/index';
export function TileLayer(context) {
diff --git a/modules/services/mapillary.js b/modules/services/mapillary.js
index 6f69a79d7..168ef4415 100644
--- a/modules/services/mapillary.js
+++ b/modules/services/mapillary.js
@@ -3,7 +3,7 @@ import * as d3 from 'd3';
import _ from 'lodash';
import rbush from 'rbush';
import { rebind } from '../util/rebind';
-import { d3geoTile } from '../../js/lib/d3.geo.tile';
+import { d3geoTile } from '../lib/d3.geo.tile';
import { Detect } from '../util/detect';
import { Extent } from '../geo/index';
import { Icon } from '../svg/index';
diff --git a/modules/ui/background.js b/modules/ui/background.js
index b5c29315b..7826c1542 100644
--- a/modules/ui/background.js
+++ b/modules/ui/background.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { tooltip } from '../util/tooltip';
import { metersToOffset, offsetToMeters } from '../geo/index';
diff --git a/modules/ui/commit.js b/modules/ui/commit.js
index 2af07a3c2..f2dc5030d 100644
--- a/modules/ui/commit.js
+++ b/modules/ui/commit.js
@@ -1,7 +1,7 @@
import * as d3 from 'd3';
import _ from 'lodash';
import { rebind } from '../util/rebind';
-import { d3combobox } from '../../js/lib/d3.combobox.js';
+import { d3combobox } from '../lib/d3.combobox.js';
import { t } from '../util/locale';
import { triggerEvent } from '../util/trigger_event';
import { tooltip } from '../util/tooltip';
diff --git a/modules/ui/fields/access.js b/modules/ui/fields/access.js
index fd3427f2c..2ff4fe75e 100644
--- a/modules/ui/fields/access.js
+++ b/modules/ui/fields/access.js
@@ -2,7 +2,7 @@ import * as d3 from 'd3';
import _ from 'lodash';
import { rebind } from '../../util/rebind';
import { getSetValue } from '../../util/get_set_value';
-import { d3combobox } from '../../../js/lib/d3.combobox.js';
+import { d3combobox } from '../../lib/d3.combobox.js';
export function access(field) {
var dispatch = d3.dispatch('change'),
diff --git a/modules/ui/fields/address.js b/modules/ui/fields/address.js
index d5176207f..5901123f3 100644
--- a/modules/ui/fields/address.js
+++ b/modules/ui/fields/address.js
@@ -2,7 +2,7 @@ import * as d3 from 'd3';
import _ from 'lodash';
import { rebind } from '../../util/rebind';
import { getSetValue } from '../../util/get_set_value';
-import { d3combobox } from '../../../js/lib/d3.combobox.js';
+import { d3combobox } from '../../lib/d3.combobox.js';
import { Extent, chooseEdge, sphericalDistance } from '../../geo/index';
import { nominatim } from '../../services/index';
import { addressFormats } from '../../../data/index';
diff --git a/modules/ui/fields/combo.js b/modules/ui/fields/combo.js
index ae8e75a63..393cb0d0e 100644
--- a/modules/ui/fields/combo.js
+++ b/modules/ui/fields/combo.js
@@ -3,7 +3,7 @@ import _ from 'lodash';
import { t } from '../../util/locale';
import { rebind } from '../../util/rebind';
import { getSetValue } from '../../util/get_set_value';
-import { d3combobox } from '../../../js/lib/d3.combobox.js';
+import { d3combobox } from '../../lib/d3.combobox.js';
import { nominatim } from '../../services/index';
export {
diff --git a/modules/ui/fields/cycleway.js b/modules/ui/fields/cycleway.js
index 9ec0838be..fa68e197a 100644
--- a/modules/ui/fields/cycleway.js
+++ b/modules/ui/fields/cycleway.js
@@ -1,7 +1,7 @@
import * as d3 from 'd3';
import { rebind } from '../../util/rebind';
import { getSetValue } from '../../util/get_set_value';
-import { d3combobox } from '../../../js/lib/d3.combobox.js';
+import { d3combobox } from '../../lib/d3.combobox.js';
export function cycleway(field) {
var dispatch = d3.dispatch('change'),
diff --git a/modules/ui/fields/localized.js b/modules/ui/fields/localized.js
index e137dc4ff..857a128cd 100644
--- a/modules/ui/fields/localized.js
+++ b/modules/ui/fields/localized.js
@@ -1,7 +1,7 @@
import * as d3 from 'd3';
import _ from 'lodash';
import { rebind } from '../../util/rebind';
-import { d3combobox } from '../../../js/lib/d3.combobox.js';
+import { d3combobox } from '../../lib/d3.combobox.js';
import { getSetValue } from '../../util/get_set_value';
import { t } from '../../util/locale';
import { tooltip } from '../../util/tooltip';
diff --git a/modules/ui/fields/maxspeed.js b/modules/ui/fields/maxspeed.js
index dc05f5836..fb2ecd3ff 100644
--- a/modules/ui/fields/maxspeed.js
+++ b/modules/ui/fields/maxspeed.js
@@ -2,7 +2,7 @@ import * as d3 from 'd3';
import _ from 'lodash';
import { rebind } from '../../util/rebind';
import { getSetValue } from '../../util/get_set_value';
-import { d3combobox } from '../../../js/lib/d3.combobox.js';
+import { d3combobox } from '../../lib/d3.combobox.js';
import { pointInPolygon } from '../../geo/index';
import { imperial as imperialData } from '../../../data/index';
diff --git a/modules/ui/fields/wikipedia.js b/modules/ui/fields/wikipedia.js
index 2c14fa734..5b118a9f5 100644
--- a/modules/ui/fields/wikipedia.js
+++ b/modules/ui/fields/wikipedia.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3combobox } from '../../../js/lib/d3.combobox.js';
+import { d3combobox } from '../../lib/d3.combobox.js';
import { getSetValue } from '../../util/get_set_value';
import { rebind } from '../../util/rebind';
import { t } from '../../util/locale';
diff --git a/modules/ui/full_screen.js b/modules/ui/full_screen.js
index 79b92b862..5d98804ff 100644
--- a/modules/ui/full_screen.js
+++ b/modules/ui/full_screen.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { cmd } from './cmd';
export function FullScreen(context) {
diff --git a/modules/ui/help.js b/modules/ui/help.js
index 529a507ec..19198362d 100644
--- a/modules/ui/help.js
+++ b/modules/ui/help.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import marked from 'marked';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { tooltip } from '../util/tooltip';
import { Icon } from '../svg/index';
diff --git a/modules/ui/info.js b/modules/ui/info.js
index 2ef37414a..0ba683e19 100644
--- a/modules/ui/info.js
+++ b/modules/ui/info.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { Detect } from '../util/detect';
import { Extent } from '../geo/index';
diff --git a/modules/ui/init.js b/modules/ui/init.js
index 2173d41aa..cdff0c6e4 100644
--- a/modules/ui/init.js
+++ b/modules/ui/init.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { setDimensions } from '../util/dimensions';
import { tooltip } from '../util/tooltip';
diff --git a/modules/ui/map_data.js b/modules/ui/map_data.js
index da00d316d..51ddc30a4 100644
--- a/modules/ui/map_data.js
+++ b/modules/ui/map_data.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { tooltip } from '../util/tooltip';
import { Icon } from '../svg/index';
diff --git a/modules/ui/map_in_map.js b/modules/ui/map_in_map.js
index ea37627d2..1391a42ba 100644
--- a/modules/ui/map_in_map.js
+++ b/modules/ui/map_in_map.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { Debug, Gpx } from '../svg/index';
import { RawMercator } from '../geo/index';
import { TileLayer } from '../renderer/index';
diff --git a/modules/ui/modal.js b/modules/ui/modal.js
index d7099724f..aa3d9315c 100644
--- a/modules/ui/modal.js
+++ b/modules/ui/modal.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { Icon } from '../svg/index';
export function modal(selection, blocking) {
diff --git a/modules/ui/modes.js b/modules/ui/modes.js
index c9cf836a3..9a9bda5e8 100644
--- a/modules/ui/modes.js
+++ b/modules/ui/modes.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { tooltip } from '../util/tooltip';
import { AddArea, AddLine, AddPoint, Browse } from '../modes/index';
import { Icon } from '../svg/index';
diff --git a/modules/ui/preset.js b/modules/ui/preset.js
index 10e9db4c4..b91f2d5c6 100644
--- a/modules/ui/preset.js
+++ b/modules/ui/preset.js
@@ -2,7 +2,7 @@ import * as d3 from 'd3';
import _ from 'lodash';
import { rebind } from '../util/rebind';
import { getSetValue } from '../util/get_set_value';
-import { d3combobox } from '../../js/lib/d3.combobox.js';
+import { d3combobox } from '../lib/d3.combobox.js';
import { t } from '../util/locale';
import { Browse } from '../modes/index';
import { Disclosure } from './disclosure';
diff --git a/modules/ui/preset_list.js b/modules/ui/preset_list.js
index 08bb79abe..ee0ab8857 100644
--- a/modules/ui/preset_list.js
+++ b/modules/ui/preset_list.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import { rebind } from '../util/rebind';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { Browse } from '../modes/index';
import { ChangePreset } from '../actions/index';
diff --git a/modules/ui/raw_member_editor.js b/modules/ui/raw_member_editor.js
index d7c1f4f19..3acb87f99 100644
--- a/modules/ui/raw_member_editor.js
+++ b/modules/ui/raw_member_editor.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3combobox } from '../../js/lib/d3.combobox.js';
+import { d3combobox } from '../lib/d3.combobox.js';
import { t } from '../util/locale';
import { Browse, Select } from '../modes/index';
import { ChangeMember, DeleteMember } from '../actions/index';
diff --git a/modules/ui/raw_membership_editor.js b/modules/ui/raw_membership_editor.js
index 851eb4c2e..755edcb27 100644
--- a/modules/ui/raw_membership_editor.js
+++ b/modules/ui/raw_membership_editor.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3combobox } from '../../js/lib/d3.combobox.js';
+import { d3combobox } from '../lib/d3.combobox.js';
import { t } from '../util/locale';
import { AddEntity, AddMember, ChangeMember, DeleteMember } from '../actions/index';
import { Entity, Relation } from '../core/index';
diff --git a/modules/ui/raw_tag_editor.js b/modules/ui/raw_tag_editor.js
index 70239bae8..877223616 100644
--- a/modules/ui/raw_tag_editor.js
+++ b/modules/ui/raw_tag_editor.js
@@ -1,7 +1,7 @@
import * as d3 from 'd3';
import { rebind } from '../util/rebind';
import { getSetValue } from '../util/get_set_value';
-import { d3combobox } from '../../js/lib/d3.combobox.js';
+import { d3combobox } from '../lib/d3.combobox.js';
import { t } from '../util/locale';
import { Disclosure } from './disclosure';
import { Icon } from '../svg/index';
diff --git a/modules/ui/save.js b/modules/ui/save.js
index 21b5325f1..09fe0ef88 100644
--- a/modules/ui/save.js
+++ b/modules/ui/save.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { tooltip } from '../util/tooltip';
import { Save as SaveMode } from '../modes/index';
diff --git a/modules/ui/undo_redo.js b/modules/ui/undo_redo.js
index 6d0e207cb..a56e76d88 100644
--- a/modules/ui/undo_redo.js
+++ b/modules/ui/undo_redo.js
@@ -1,5 +1,5 @@
import * as d3 from 'd3';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { tooltip } from '../util/tooltip';
import { Icon } from '../svg/index';
diff --git a/modules/ui/zoom.js b/modules/ui/zoom.js
index fd5f511f1..864df3344 100644
--- a/modules/ui/zoom.js
+++ b/modules/ui/zoom.js
@@ -1,6 +1,6 @@
import * as d3 from 'd3';
import _ from 'lodash';
-import { d3keybinding } from '../../js/lib/d3.keybinding.js';
+import { d3keybinding } from '../lib/d3.keybinding.js';
import { t } from '../util/locale';
import { tooltip } from '../util/tooltip';
import { Icon } from '../svg/index';
diff --git a/test/index.html b/test/index.html
index 276ebe5b1..fb2aa929b 100644
--- a/test/index.html
+++ b/test/index.html
@@ -63,8 +63,8 @@
-
-
+
+
diff --git a/test/spec/lib/d3.combobox.js b/test/spec/lib/d3.combobox.js
index 9b4011643..57f4ebbb5 100644
--- a/test/spec/lib/d3.combobox.js
+++ b/test/spec/lib/d3.combobox.js
@@ -8,7 +8,7 @@ describe('d3.combobox', function() {
];
function simulateKeypress(key) {
- var keyCode = d3.keybinding.keyCodes[key],
+ var keyCode = iD.lib.d3keybinding.keyCodes[key],
value = input.property('value'),
start = input.property('selectionStart'),
finis = input.property('selectionEnd');
@@ -61,7 +61,7 @@ describe('d3.combobox', function() {
body = d3.select('body');
content = body.append('div');
input = content.append('input');
- combobox = d3.combobox();
+ combobox = iD.lib.d3combobox();
});
afterEach(function() {
@@ -85,8 +85,8 @@ describe('d3.combobox', function() {
input.property('value', 'b').call(combobox.data(data));
input.node().focus();
expect(body.selectAll('.combobox-option').size()).to.equal(2);
- expect(body.selectAll('.combobox-option')[0][0].text).to.equal('bar');
- expect(body.selectAll('.combobox-option')[0][1].text).to.equal('Baz');
+ expect(body.selectAll('.combobox-option').nodes()[0].text).to.equal('bar');
+ expect(body.selectAll('.combobox-option').nodes()[1].text).to.equal('Baz');
});
it('shows no menu on focus if it would contain only one item', function() {
diff --git a/test/spec/lib/d3.keybinding.js b/test/spec/lib/d3.keybinding.js
index cb96b946c..79a43a225 100644
--- a/test/spec/lib/d3.keybinding.js
+++ b/test/spec/lib/d3.keybinding.js
@@ -2,7 +2,7 @@ describe('d3.keybinding', function() {
var keybinding, spy, input;
beforeEach(function () {
- keybinding = d3.keybinding('keybinding-test');
+ keybinding = iD.lib.d3keybinding('keybinding-test');
spy = sinon.spy();
input = d3.select('body')
.append('input');