| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | import { __extends } from "tslib";import Definable from './Definable.js';import * as zrUtil from '../../core/util.js';import { path } from '../graphic.js';import { isClipPathChanged } from '../../canvas/helper.js';import { getClipPathsKey, getIdURL } from '../../svg/helper.js';import { createElement } from '../../svg/core.js';export function hasClipPath(displayable) {    var clipPaths = displayable.__clipPaths;    return clipPaths && clipPaths.length > 0;}var ClippathManager = (function (_super) {    __extends(ClippathManager, _super);    function ClippathManager(zrId, svgRoot) {        var _this = _super.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__') || this;        _this._refGroups = {};        _this._keyDuplicateCount = {};        return _this;    }    ClippathManager.prototype.markAllUnused = function () {        _super.prototype.markAllUnused.call(this);        var refGroups = this._refGroups;        for (var key in refGroups) {            if (refGroups.hasOwnProperty(key)) {                this.markDomUnused(refGroups[key]);            }        }        this._keyDuplicateCount = {};    };    ClippathManager.prototype._getClipPathGroup = function (displayable, prevDisplayable) {        if (!hasClipPath(displayable)) {            return;        }        var clipPaths = displayable.__clipPaths;        var keyDuplicateCount = this._keyDuplicateCount;        var clipPathKey = getClipPathsKey(clipPaths);        if (isClipPathChanged(clipPaths, prevDisplayable && prevDisplayable.__clipPaths)) {            keyDuplicateCount[clipPathKey] = keyDuplicateCount[clipPathKey] || 0;            keyDuplicateCount[clipPathKey] && (clipPathKey += '-' + keyDuplicateCount[clipPathKey]);            keyDuplicateCount[clipPathKey]++;        }        return this._refGroups[clipPathKey]            || (this._refGroups[clipPathKey] = createElement('g'));    };    ClippathManager.prototype.update = function (displayable, prevDisplayable) {        var clipGroup = this._getClipPathGroup(displayable, prevDisplayable);        if (clipGroup) {            this.markDomUsed(clipGroup);            this.updateDom(clipGroup, displayable.__clipPaths);        }        return clipGroup;    };    ;    ClippathManager.prototype.updateDom = function (parentEl, clipPaths) {        if (clipPaths && clipPaths.length > 0) {            var defs = this.getDefs(true);            var clipPath = clipPaths[0];            var clipPathEl = void 0;            var id = void 0;            if (clipPath._dom) {                id = clipPath._dom.getAttribute('id');                clipPathEl = clipPath._dom;                if (!defs.contains(clipPathEl)) {                    defs.appendChild(clipPathEl);                }            }            else {                id = 'zr' + this._zrId + '-clip-' + this.nextId;                ++this.nextId;                clipPathEl = createElement('clipPath');                clipPathEl.setAttribute('id', id);                defs.appendChild(clipPathEl);                clipPath._dom = clipPathEl;            }            path.brush(clipPath);            var pathEl = this.getSvgElement(clipPath);            clipPathEl.innerHTML = '';            clipPathEl.appendChild(pathEl);            parentEl.setAttribute('clip-path', getIdURL(id));            if (clipPaths.length > 1) {                this.updateDom(clipPathEl, clipPaths.slice(1));            }        }        else {            if (parentEl) {                parentEl.setAttribute('clip-path', 'none');            }        }    };    ;    ClippathManager.prototype.markUsed = function (displayable) {        var _this = this;        if (displayable.__clipPaths) {            zrUtil.each(displayable.__clipPaths, function (clipPath) {                if (clipPath._dom) {                    _super.prototype.markDomUsed.call(_this, clipPath._dom);                }            });        }    };    ;    ClippathManager.prototype.removeUnused = function () {        _super.prototype.removeUnused.call(this);        var newRefGroupsMap = {};        var refGroups = this._refGroups;        for (var key in refGroups) {            if (refGroups.hasOwnProperty(key)) {                var group = refGroups[key];                if (!this.isDomUnused(group)) {                    newRefGroupsMap[key] = group;                }                else if (group.parentNode) {                    group.parentNode.removeChild(group);                }            }        }        this._refGroups = newRefGroupsMap;    };    return ClippathManager;}(Definable));export default ClippathManager;
 |