mirror of
https://github.com/walkermatt/ol-layerswitcher.git
synced 2026-01-25 14:48:05 +00:00
287 lines
14 KiB
JavaScript
287 lines
14 KiB
JavaScript
describe('groupSelectStyle', function () {
|
|
var map, target;
|
|
|
|
function tileDebugSource() {
|
|
return new ol.source.TileDebug({
|
|
projection: 'EPSG:3857',
|
|
tileGrid: ol.tilegrid.createXYZ({
|
|
maxZoom: 22
|
|
})
|
|
});
|
|
}
|
|
|
|
beforeEach(function () {
|
|
target = document.createElement('div');
|
|
document.body.appendChild(target);
|
|
map = new ol.Map({
|
|
target: target,
|
|
layers: [
|
|
new ol.layer.Group({
|
|
title: 'Base maps',
|
|
layers: [
|
|
new ol.layer.Group({
|
|
title: 'Water color with labels',
|
|
type: 'base',
|
|
combine: true,
|
|
visible: false,
|
|
layers: [
|
|
new ol.layer.Tile({
|
|
source: tileDebugSource()
|
|
}),
|
|
new ol.layer.Tile({
|
|
source: tileDebugSource()
|
|
})
|
|
]
|
|
}),
|
|
new ol.layer.Tile({
|
|
title: 'Water color',
|
|
type: 'base',
|
|
visible: false,
|
|
source: tileDebugSource()
|
|
}),
|
|
new ol.layer.Tile({
|
|
title: 'OSM',
|
|
type: 'base',
|
|
visible: true,
|
|
source: tileDebugSource()
|
|
})
|
|
]
|
|
}),
|
|
new ol.layer.Group({
|
|
title: 'Overlays',
|
|
fold: 'open',
|
|
layers: [
|
|
new ol.layer.Tile({
|
|
title: 'Countries',
|
|
source: tileDebugSource()
|
|
}),
|
|
new ol.layer.Group({
|
|
title: 'Census',
|
|
fold: 'open',
|
|
layers: [
|
|
new ol.layer.Tile({
|
|
title: 'Districts',
|
|
source: tileDebugSource()
|
|
}),
|
|
new ol.layer.Image({
|
|
title: 'Wards',
|
|
source: tileDebugSource()
|
|
})
|
|
]
|
|
})
|
|
]
|
|
})
|
|
]
|
|
});
|
|
});
|
|
|
|
afterEach(function () {
|
|
document.body.removeChild(target);
|
|
map = null;
|
|
target = null;
|
|
});
|
|
|
|
var STATE_ALL_OVERLAYS_VISIBLE = JSON.parse(
|
|
'{"title":"map","visible":true,"layers":[{"title":"Base maps","visible":true,"indeterminate":false,"layers":[{"title":"Water color with labels","visible":false,"indeterminate":false,"layers":[]},{"title":"Water color","visible":false,"indeterminate":false},{"title":"OSM","visible":true,"indeterminate":false}]},{"title":"Overlays","visible":true,"indeterminate":false,"fold":"open","layers":[{"title":"Countries","visible":true,"indeterminate":false},{"title":"Census","visible":true,"indeterminate":false,"fold":"open","layers":[{"title":"Districts","visible":true,"indeterminate":false},{"title":"Wards","visible":true,"indeterminate":false}]}]}]}'
|
|
);
|
|
|
|
var STATE_ALL_OVERLAYS_HIDDEN = JSON.parse(
|
|
'{"title":"map","visible":true,"layers":[{"title":"Base maps","visible":true,"indeterminate":false,"layers":[{"title":"Water color with labels","visible":false,"indeterminate":false,"layers":[]},{"title":"Water color","visible":false,"indeterminate":false},{"title":"OSM","visible":true,"indeterminate":false}]},{"title":"Overlays","visible":false,"indeterminate":false,"fold":"open","layers":[{"title":"Countries","visible":false,"indeterminate":false},{"title":"Census","visible":false,"indeterminate":false,"fold":"open","layers":[{"title":"Districts","visible":false,"indeterminate":false},{"title":"Wards","visible":false,"indeterminate":false}]}]}]}'
|
|
);
|
|
|
|
var STATE_CHILDREN_WARD_OVERLAY_HIDDEN = JSON.parse(
|
|
'{"title":"map","visible":true,"layers":[{"title":"Base maps","visible":true,"indeterminate":false,"layers":[{"title":"Water color with labels","visible":false,"indeterminate":false,"layers":[]},{"title":"Water color","visible":false,"indeterminate":false},{"title":"OSM","visible":true,"indeterminate":false}]},{"title":"Overlays","visible":true,"indeterminate":true,"fold":"open","layers":[{"title":"Countries","visible":true,"indeterminate":false},{"title":"Census","visible":true,"indeterminate":true,"fold":"open","layers":[{"title":"Districts","visible":true,"indeterminate":false},{"title":"Wards","visible":false,"indeterminate":false}]}]}]}'
|
|
);
|
|
|
|
var STATE_CHILDREN_WARD_OVERLAY_VISIBLE = JSON.parse(
|
|
'{"title":"map","visible":true,"layers":[{"title":"Base maps","visible":true,"indeterminate":false,"layers":[{"title":"Water color with labels","visible":false,"indeterminate":false,"layers":[]},{"title":"Water color","visible":false,"indeterminate":false},{"title":"OSM","visible":true,"indeterminate":false}]},{"title":"Overlays","visible":true,"indeterminate":true,"fold":"open","layers":[{"title":"Countries","visible":false,"indeterminate":false},{"title":"Census","visible":true,"indeterminate":true,"fold":"open","layers":[{"title":"Districts","visible":false,"indeterminate":false},{"title":"Wards","visible":true,"indeterminate":false}]}]}]}'
|
|
);
|
|
|
|
var STATE_GROUP_OVERLAYS_HIDDEN = JSON.parse(
|
|
'{"title":"map","visible":true,"layers":[{"title":"Base maps","visible":true,"indeterminate":false,"layers":[{"title":"Water color with labels","visible":false,"indeterminate":false,"layers":[]},{"title":"Water color","visible":false,"indeterminate":false},{"title":"OSM","visible":true,"indeterminate":false}]},{"title":"Overlays","visible":false,"indeterminate":false,"fold":"open","layers":[{"title":"Countries","visible":true,"indeterminate":true},{"title":"Census","visible":true,"indeterminate":true,"fold":"open","layers":[{"title":"Districts","visible":true,"indeterminate":true},{"title":"Wards","visible":true,"indeterminate":true}]}]}]}'
|
|
);
|
|
|
|
var STATE_GROUP_WARD_OVERLAY_HIDDEN = JSON.parse(
|
|
'{"title":"map","visible":true,"layers":[{"title":"Base maps","visible":true,"indeterminate":false,"layers":[{"title":"Water color with labels","visible":false,"indeterminate":false,"layers":[]},{"title":"Water color","visible":false,"indeterminate":false},{"title":"OSM","visible":true,"indeterminate":false}]},{"title":"Overlays","visible":true,"indeterminate":false,"fold":"open","layers":[{"title":"Countries","visible":true,"indeterminate":false},{"title":"Census","visible":true,"indeterminate":false,"fold":"open","layers":[{"title":"Districts","visible":true,"indeterminate":false},{"title":"Wards","visible":false,"indeterminate":false}]}]}]}'
|
|
);
|
|
|
|
var STATE_GROUP_WARD_OVERLAY_VISIBLE = JSON.parse(
|
|
'{"title":"map","visible":true,"layers":[{"title":"Base maps","visible":true,"indeterminate":false,"layers":[{"title":"Water color with labels","visible":false,"indeterminate":false,"layers":[]},{"title":"Water color","visible":false,"indeterminate":false},{"title":"OSM","visible":true,"indeterminate":false}]},{"title":"Overlays","visible":false,"indeterminate":false,"fold":"open","layers":[{"title":"Countries","visible":false,"indeterminate":false},{"title":"Census","visible":false,"indeterminate":false,"fold":"open","layers":[{"title":"Districts","visible":false,"indeterminate":false},{"title":"Wards","visible":true,"indeterminate":true}]}]}]}'
|
|
);
|
|
|
|
var STATE_DOM_GROUP_WARD_OVERLAY_VISIBLE = JSON.parse(
|
|
'[{"title":"Overlays","className":"group layer-switcher-fold layer-switcher-open","checked":false,"indeterminate":false,"type":"checkbox"},{"title":"Census","className":"group layer-switcher-fold layer-switcher-open","checked":false,"indeterminate":false,"type":"checkbox"},{"title":"Wards","className":"layer","checked":true,"indeterminate":true,"type":"checkbox"},{"title":"Districts","className":"layer","checked":false,"indeterminate":false,"type":"checkbox"},{"title":"Countries","className":"layer","checked":false,"indeterminate":false,"type":"checkbox"},{"title":"Base maps","className":"group layer-switcher-base-group"},{"title":"OSM","className":"layer","checked":true,"indeterminate":false,"type":"radio"},{"title":"Water color","className":"layer","checked":false,"indeterminate":false,"type":"radio"},{"title":"Water color with labels","className":"layer","checked":false,"indeterminate":false,"type":"radio"}]'
|
|
);
|
|
|
|
describe('groupSelectStyle none', function () {
|
|
it("Doesn't render group checkboxes", function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'none'
|
|
});
|
|
map.addControl(switcher);
|
|
jQuery('.group:not(.layer-switcher-base-group').each(function (
|
|
idx,
|
|
group
|
|
) {
|
|
expect(includesTag(jQuery(group).children(), 'INPUT')).to.be(false);
|
|
});
|
|
});
|
|
it('Adds a layer-switcher-group-select-style-none class to the control', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'none'
|
|
});
|
|
map.addControl(switcher);
|
|
expect(switcher.element.classList).to.contain(
|
|
'layer-switcher-group-select-style-none'
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('groupSelectStyle children', function () {
|
|
it('Renders group checkboxes', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'children'
|
|
});
|
|
map.addControl(switcher);
|
|
jQuery('.group:not(.layer-switcher-base-group').each(function (
|
|
idx,
|
|
group
|
|
) {
|
|
expect(includesTag(jQuery(group).children(), 'INPUT')).to.be(true);
|
|
});
|
|
});
|
|
it('Hiding group hides children', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'children'
|
|
});
|
|
map.addControl(switcher);
|
|
expectEqual(groupToJson(map), STATE_ALL_OVERLAYS_VISIBLE);
|
|
// Click the Overlays group checkbox
|
|
jQuery('.layer-switcher label:contains("Overlays")')
|
|
.siblings('input')
|
|
.click();
|
|
// All overlay groups and layers are hidden
|
|
expectEqual(groupToJson(map), STATE_ALL_OVERLAYS_HIDDEN);
|
|
});
|
|
it('Hiding child sets indeterminate of parents', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'children'
|
|
});
|
|
map.addControl(switcher);
|
|
expectEqual(groupToJson(map), STATE_ALL_OVERLAYS_VISIBLE);
|
|
// Click the Wards group checkbox
|
|
jQuery('.layer-switcher label:contains("Wards")')
|
|
.siblings('input')
|
|
.click();
|
|
// Ward is hidden, Census is visible but indeterminate, Overlays is visible but indeterminate
|
|
expectEqual(groupToJson(map), STATE_CHILDREN_WARD_OVERLAY_HIDDEN);
|
|
});
|
|
it('Showing child when all overlays are hidden shows parents and sets indeterminate', function () {
|
|
var overlaysGrp = getLayerByTitle(map, 'Overlays');
|
|
overlaysGrp.setVisible(false);
|
|
LayerSwitcher.forEachRecursive(overlaysGrp, function (l, idx, a) {
|
|
l.setVisible(false);
|
|
});
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'children'
|
|
});
|
|
map.addControl(switcher);
|
|
expectEqual(groupToJson(map), STATE_ALL_OVERLAYS_HIDDEN);
|
|
jQuery('.layer-switcher label:contains("Wards")')
|
|
.siblings('input')
|
|
.click();
|
|
expectEqual(groupToJson(map), STATE_CHILDREN_WARD_OVERLAY_VISIBLE);
|
|
});
|
|
it('Adds a layer-switcher-group-select-style-children class to the control', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'children'
|
|
});
|
|
map.addControl(switcher);
|
|
expect(switcher.element.classList).to.contain(
|
|
'layer-switcher-group-select-style-children'
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('groupSelectStyle group', function () {
|
|
it('Renders group checkboxes', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'group'
|
|
});
|
|
map.addControl(switcher);
|
|
jQuery('.group:not(.layer-switcher-base-group').each(function (
|
|
idx,
|
|
group
|
|
) {
|
|
expect(includesTag(jQuery(group).children(), 'INPUT')).to.be(true);
|
|
});
|
|
});
|
|
it('Hiding group does not affect child visibility but sets indeterminate', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'group'
|
|
});
|
|
map.addControl(switcher);
|
|
expectEqual(groupToJson(map), STATE_ALL_OVERLAYS_VISIBLE);
|
|
// Click the Overlays group checkbox
|
|
jQuery('.layer-switcher label:contains("Overlays")')
|
|
.siblings('input')
|
|
.click();
|
|
// All overlay groups and layers are hidden
|
|
expectEqual(groupToJson(map), STATE_GROUP_OVERLAYS_HIDDEN);
|
|
});
|
|
it('Hiding child has no effect on parents', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'group'
|
|
});
|
|
map.addControl(switcher);
|
|
expectEqual(groupToJson(map), STATE_ALL_OVERLAYS_VISIBLE);
|
|
// Click the Wards group checkbox
|
|
jQuery('.layer-switcher label:contains("Wards")')
|
|
.siblings('input')
|
|
.click();
|
|
// Ward is hidden, Census is visible but indeterminate, Overlays is visible but indeterminate
|
|
expectEqual(groupToJson(map), STATE_GROUP_WARD_OVERLAY_HIDDEN);
|
|
});
|
|
it('Showing child when all overlays are hidden makes child indeterminate and does not affect parents', function () {
|
|
var overlaysGrp = getLayerByTitle(map, 'Overlays');
|
|
overlaysGrp.setVisible(false);
|
|
LayerSwitcher.forEachRecursive(overlaysGrp, function (l, idx, a) {
|
|
l.setVisible(false);
|
|
});
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'group'
|
|
});
|
|
map.addControl(switcher);
|
|
expectEqual(groupToJson(map), STATE_ALL_OVERLAYS_HIDDEN);
|
|
jQuery('.layer-switcher label:contains("Wards")')
|
|
.siblings('input')
|
|
.click();
|
|
expectEqual(groupToJson(map), STATE_GROUP_WARD_OVERLAY_VISIBLE);
|
|
expectEqual(
|
|
domToJson(switcher.element),
|
|
STATE_DOM_GROUP_WARD_OVERLAY_VISIBLE
|
|
);
|
|
});
|
|
it('Adds a layer-switcher-group-select-style-group class to the control', function () {
|
|
var switcher = new LayerSwitcher({
|
|
groupSelectStyle: 'group'
|
|
});
|
|
map.addControl(switcher);
|
|
expect(switcher.element.classList).to.contain(
|
|
'layer-switcher-group-select-style-group'
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('getGroupSelectStyle', function () {
|
|
it("Returns provided value if it's valid", function () {
|
|
expect(LayerSwitcher.getGroupSelectStyle('none')).to.be('none');
|
|
expect(LayerSwitcher.getGroupSelectStyle('children')).to.be('children');
|
|
expect(LayerSwitcher.getGroupSelectStyle('group')).to.be('group');
|
|
});
|
|
it('Returns default value if provided value is not valid', function () {
|
|
expect(LayerSwitcher.getGroupSelectStyle('foo')).to.be('children');
|
|
});
|
|
});
|
|
});
|