Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
layerSwipe.js 15.10 KiB
/**
 * Created by gavorhes on 6/1/2016.
 */
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var provide_1 = require("../util/provide");
var $ = require("jquery");
var nm = provide_1.default('collections.layerSwipe');
var LayerSwipe = (function () {
    /**
     *
     * @param {ol.Map} map - the map
     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
     */
    function LayerSwipe(map, sliderContent) {
        if (sliderContent === void 0) { sliderContent = ''; }
        var _this = this;
        sliderContent = sliderContent || '';
        /**
         *
         * @type {Array<LayerBase>}
         */
        this.leftLayers = [];
        /**
         *
         * @type {Array<LayerBase>}
         */
        this.rightLayers = [];
        this._percentRight = 50;
        this.offset = null;
        this._map = map;
        this.$mapElement = $(map.getTargetElement());
        this.$mapElement.append("<div class=\"layer-swiper\">" + sliderContent + "</div>");
        this.$swiper = this.$mapElement.find('.layer-swiper');
        this.percentRight = this.percentRight;
        this.dragging = false;
        this.$mapElement.mouseleave(function () {
            _this.dragging = false;
        });
        this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) {
            evt.preventDefault();
        });
        this.$swiper.mousedown(function (evt) {
            _this.dragging = true;
            _this.offset = evt.offsetX;
        });
        $(window).mouseup(function () {
            _this.dragging = false;
        });
        this.$mapElement.mousemove(function (evt) {
            if (_this.dragging) {
                var mapLeft = _this.$mapElement.position().left;
                var mapWidth = _this.$mapElement.width();
                _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth;
            }
        });
    }
    /**
     *
     * @param {LayerBase|*} lyr - layer to be added to left side
     */
    LayerSwipe.prototype.addLeftLayer = function (lyr) {
        var _this = this;
        if (this.leftLayers.indexOf(lyr) != -1) {
            return;
        }
        lyr.olLayer.on('precompose', function (event) {
            var ctx = event['context'];
            var width = ctx.canvas.width * (_this.percentRight / 100);
            ctx.save();
            ctx.beginPath();
            ctx.rect(0, 0, width, ctx.canvas.height);
            ctx.clip();
        });
        lyr.olLayer.on('postcompose', function (event) {
            var ctx = event['context'];
            ctx.restore();
        });
        this.leftLayers.push(lyr);
    };
    /**
     *
     * @param {LayerBase|*} lyr - layer to be added to right side
     */
    LayerSwipe.prototype.addRightLayer = function (lyr) {
        var _this = this;
        if (this.rightLayers.indexOf(lyr) != -1) {
            return;
        }
        lyr.olLayer.on('precompose', function (event) {
            var ctx = event['context'];
            var width = ctx.canvas.width * (_this.percentRight / 100);
            ctx.save();
            ctx.beginPath();
            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
            ctx.clip();
        });
        lyr.olLayer.on('postcompose', function (event) {
            var ctx = event['context'];
            ctx.restore();
        });
        this.rightLayers.push(lyr);
    };
    Object.defineProperty(LayerSwipe.prototype, "percentRight", {
        get: function () {
            return this._percentRight;
        },
        set: function (percent) {
            var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
            if (percent < 0) {
                return;
            }
            else if (maxed && percent > this.percentRight) {
                return;
            }
            this._percentRight = percent;
            this.$swiper.css('left', this._percentRight.toFixed(2) + "%");
            this._map.render();
        },
        enumerable: true,
        configurable: true
    });
    return LayerSwipe;
}());
nm.LayerSwipe = LayerSwipe;
exports.default = LayerSwipe;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJTd2lwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbEhlbHBlcnMvbGF5ZXJTd2lwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRzs7O0FBR0gsMkNBQXNDO0FBR3RDLDBCQUE2QjtBQUU3QixJQUFJLEVBQUUsR0FBRyxpQkFBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFHM0M7SUFTSTs7OztPQUlHO0lBQ0gsb0JBQVksR0FBVyxFQUFFLGFBQTBCO1FBQTFCLDhCQUFBLEVBQUEsa0JBQTBCO1FBQW5ELGlCQXFEQztRQW5ERyxhQUFhLEdBQUcsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUNwQzs7O1dBR0c7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVyQjs7O1dBR0c7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUVuQixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGlDQUE2QixhQUFhLFdBQVEsQ0FBQyxDQUFDO1FBRzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXRDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ3hCLEtBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUMs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TUFBTSxDQUFDO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBSyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBRyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixDQUFDOzs7T0FkQTtJQWVMLGlCQUFDO0FBQUQsQ0FBQyxBQS9JRCxJQStJQztBQUVELEVBQUUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzNCLGtCQUFlLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IGdhdm9yaGVzIG9uIDYvMS8yMDE2LlxyXG4gKi9cclxuXHJcblxyXG5pbXBvcnQgcHJvdmlkZSBmcm9tICcuLi91dGlsL3Byb3ZpZGUnO1xyXG5pbXBvcnQge0xheWVyQmFzZX0gZnJvbSBcIi4uL2xheWVycy9MYXllckJhc2VcIjtcclxuaW1wb3J0IG9sID0gcmVxdWlyZSgnY3VzdG9tLW9sJyk7XHJcbmltcG9ydCAkID0gcmVxdWlyZSgnanF1ZXJ5Jyk7XHJcblxyXG5sZXQgbm0gPSBwcm92aWRlKCdjb2xsZWN0aW9ucy5sYXllclN3aXBlJyk7XHJcblxyXG5cclxuY2xhc3MgTGF5ZXJTd2lwZSB7XHJcbiAgICBsZWZ0TGF5ZXJzOiBBcnJheTxMYXllckJhc2U+O1xyXG4gICAgcmlnaHRMYXllcnM6IEFycmF5PExheWVyQmFzZT47XHJcbiAgICBfcGVyY2VudFJpZ2h0OiBudW1iZXI7XHJcbiAgICBfbWFwOiBvbC5NYXA7XHJcbiAgICAkbWFwRWxlbWVudDogSlF1ZXJ5O1xyXG4gICAgJHN3aXBlcjogSlF1ZXJ5O1xyXG4gICAgZHJhZ2dpbmc6IGJvb2xlYW47XHJcbiAgICBvZmZzZXQ6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2wuTWFwfSBtYXAgLSB0aGUgbWFwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NsaWRlckNvbnRlbnQ9JyddIC0gYWRkaXRpb25hbCBodG1sIHRvIGJlIGFkZGVkIGluc2lkZSB0aGUgc2xpZGVyIGRpdlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihtYXA6IG9sLk1hcCwgc2xpZGVyQ29udGVudDogc3RyaW5nID0gJycpIHtcclxuXHJcbiAgICAgICAgc2xpZGVyQ29udGVudCA9IHNsaWRlckNvbnRlbnQgfHwgJyc7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXk8TGF5ZXJCYXNlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxlZnRMYXllcnMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXk8TGF5ZXJCYXNlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnJpZ2h0TGF5ZXJzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX3BlcmNlbnRSaWdodCA9IDUwO1xyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xyXG4gICAgICAgIHRoaXMuJG1hcEVsZW1lbnQgPSAkKG1hcC5nZXRUYXJnZXRFbGVtZW50KCkpO1xyXG4gICAgICAgIHRoaXMuJG1hcEVsZW1lbnQuYXBwZW5kKGA8ZGl2IGNsYXNzPVwibGF5ZXItc3dpcGVyXCI+JHtzbGlkZXJDb250ZW50fTwvZGl2PmApO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy4kc3dpcGVyID0gdGhpcy4kbWFwRWxlbWVudC5maW5kKCcubGF5ZXItc3dpcGVyJyk7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50UmlnaHQgPSB0aGlzLnBlcmNlbnRSaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLiRtYXBFbGVtZW50Lm1vdXNlbGVhdmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHN3aXBlci5iaW5kKCdtb3VzZXdoZWVsIERPTU1vdXNlU2Nyb2xsJywgZnVuY3Rpb24oZXZ0KXtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHN3aXBlci5tb3VzZWRvd24oKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSBldnQub2Zmc2V0WDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCh3aW5kb3cpLm1vdXNldXAoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuJG1hcEVsZW1lbnQubW91c2Vtb3ZlKChldnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXBMZWZ0ID0gdGhpcy4kbWFwRWxlbWVudC5wb3NpdGlvbigpLmxlZnQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWFwV2lkdGggPSB0aGlzLiRtYXBFbGVtZW50LndpZHRoKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJjZW50UmlnaHQgPSAxMDAgKiAoZXZ0LnBhZ2VYIC0gdGhpcy5vZmZzZXQgLSBtYXBMZWZ0KSAvIG1hcFdpZHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtMYXllckJhc2V8Kn0gbHlyIC0gbGF5ZXIgdG8gYmUgYWRkZWQgdG8gbGVmdCBzaWRlXHJcbiAgICAgKi9cclxuICAgIGFkZExlZnRMYXllcihseXIpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGVmdExheWVycy5pbmRleE9mKGx5cikgIT0gLTEpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBseXIub2xMYXllci5vbigncHJlY29tcG9zZScsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3R4ID0gZXZlbnRbJ2NvbnRleHQnXTtcclxuICAgICAgICAgICAgbGV0IHdpZHRoID0gY3R4LmNhbnZhcy53aWR0aCAqICh0aGlzLnBlcmNlbnRSaWdodCAvIDEwMCk7XHJcblxyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgIGN0eC5yZWN0KDAsIDAsIHdpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgICAgIGN0eC5jbGlwKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGx5ci5vbExheWVyLm9uKCdwb3N0Y29tcG9zZScsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBsZXQgY3R4ID0gZXZlbnRbJ2NvbnRleHQnXTtcclxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGVmdExheWVycy5wdXNoKGx5cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtMYXllckJhc2V8Kn0gbHlyIC0gbGF5ZXIgdG8gYmUgYWRkZWQgdG8gcmlnaHQgc2lkZVxyXG4gICAgICovXHJcbiAgICBhZGRSaWdodExheWVyKGx5cikge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yaWdodExheWVycy5pbmRleE9mKGx5cikgIT0gLTEpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBseXIub2xMYXllci5vbigncHJlY29tcG9zZScsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3R4ID0gZXZlbnRbJ2NvbnRleHQnXTtcclxuICAgICAgICAgICAgbGV0IHdpZHRoID0gY3R4LmNhbnZhcy53aWR0aCAqICh0aGlzLnBlcmNlbnRSaWdodCAvIDEwMCk7XHJcblxyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgIGN0eC5yZWN0KHdpZHRoLCAwLCBjdHguY2FudmFzLndpZHRoIC0gd2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmNsaXAoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbHlyLm9sTGF5ZXIub24oJ3Bvc3Rjb21wb3NlJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGxldCBjdHggPSBldmVudFsnY29udGV4dCddO1xyXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJpZ2h0TGF5ZXJzLnB1c2gobHlyKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGVyY2VudFJpZ2h0KCkgOiBudW1iZXJ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BlcmNlbnRSaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcGVyY2VudFJpZ2h0KHBlcmNlbnQ6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBtYXhlZCA9IHRoaXMuJHN3aXBlci5wb3NpdGlvbigpLmxlZnQgKyB0aGlzLiRzd2lwZXIud2lkdGgoKSA+IHRoaXMuJG1hcEVsZW1lbnQud2lkdGgoKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1heGVkICYmIHBlcmNlbnQgPiB0aGlzLnBlcmNlbnRSaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wZXJjZW50UmlnaHQgPSBwZXJjZW50O1xyXG4gICAgICAgIHRoaXMuJHN3aXBlci5jc3MoJ2xlZnQnLCBgJHt0aGlzLl9wZXJjZW50UmlnaHQudG9GaXhlZCgyKX0lYCk7XHJcbiAgICAgICAgdGhpcy5fbWFwLnJlbmRlcigpO1xyXG4gICAgfVxyXG59XHJcblxyXG5ubS5MYXllclN3aXBlID0gTGF5ZXJTd2lwZTtcclxuZXhwb3J0IGRlZmF1bHQgTGF5ZXJTd2lwZTtcclxuIl19