From 14f580fe30417c3b2bb47aee142c6316327a603a Mon Sep 17 00:00:00 2001 From: Olivier Guyot Date: Mon, 13 May 2019 16:08:24 +0200 Subject: [PATCH] Layer / accepts a custom render function --- src/ol/layer/Layer.js | 11 +++++++++++ test/spec/ol/layer/layer.test.js | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/ol/layer/Layer.js b/src/ol/layer/Layer.js index 1c9f916c47..443daf3e6b 100644 --- a/src/ol/layer/Layer.js +++ b/src/ol/layer/Layer.js @@ -10,6 +10,10 @@ import {assign} from '../obj.js'; import RenderEventType from '../render/EventType.js'; import SourceState from '../source/State.js'; +/** + * @typedef {function(import("../PluggableMap.js").FrameState):HTMLElement} RenderFunction + */ + /** * @typedef {Object} Options @@ -29,6 +33,8 @@ import SourceState from '../source/State.js'; * the source can be set by calling {@link module:ol/layer/Layer#setSource layer.setSource(source)} after * construction. * @property {import("../PluggableMap.js").default} [map] Map. + * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an + * HTML element. Will overwrite the default rendering for the layer. */ @@ -100,6 +106,11 @@ class Layer extends BaseLayer { */ this.renderer_ = null; + // Overwrite default render method with a custom one + if (options.render) { + this.render = options.render; + } + if (options.map) { this.setMap(options.map); } diff --git a/test/spec/ol/layer/layer.test.js b/test/spec/ol/layer/layer.test.js index dba518a47a..010a289687 100644 --- a/test/spec/ol/layer/layer.test.js +++ b/test/spec/ol/layer/layer.test.js @@ -94,6 +94,16 @@ describe('ol.layer.Layer', function() { layer.dispose(); }); + it('accepts a custom render function', function() { + let called = false; + const layer = new Layer({ + render: function() { + called = true; + } + }); + layer.render(); + expect(called).to.eql(true); + }); }); describe('visibleAtResolution', function() {