Source: overlays/overlay.js

let ol = require('openlayers');
let AbstractOverlay = require('./abstractOverlay');
let Guid = require('./../math/guid');

/**
 * Класс Overlay реализует добавление произвольных элементов DOM в заданные координаты
 */
class Overlay extends AbstractOverlay {
    constructor(params) {
        super(params);
        this.create(params);
    }

    create() {
        let self = this;
        let params = self.params;
        let options = {};

        options.id = params.id || Guid.createGUID();

        let element = document.getElementById(params.element);
        if (!element) element = getDomElement(options.id);

        options.element = element;
        options.offset = params.offset || [0, 0];

        let position = params.position;
        if (params.transform) position = ol.proj.transform(position, params.transform.source, params.transform.destination);

        options.position = position;
        options.positioning = params.positioning || "top-left";
        options.stopEvent = params.stopEvent || false;
        options.insertFirst = params.insertFirst || true;

        options.autoPan = params.autoPan || false;
        options.autoPanAnimation = params.autoPanAnimation;
        options.autoPanMargin = params.autoPanMargin || 20;

        let overlay = new ol.Overlay(options);
        self.overlay = overlay;
        self.id = options.id;
    }

    /**
     * Установить html содержимое оверлея
     * @param html
     */
    setHtml(html) {
        let self = this;
        let overlay = self.getOverlay();
        let element = overlay.getElement();
        element.innerHTML = html;
    }

    getOverlay() {
        return this.overlay;
    }

    getId() {
        return this.id;
    }
}

function getDomElement(guid) {
    let element = document.createElement('div');
    element.setAttribute("id", guid);
    document.body.appendChild(element);
    return element;
}

module.exports = Overlay;