import { __extends } from "tslib"; 
 | 
import Definable from './Definable.js'; 
 | 
import * as zrUtil from '../../core/util.js'; 
 | 
import { createOrUpdateImage } from '../../graphic/helper/image.js'; 
 | 
import WeakMap from '../../core/WeakMap.js'; 
 | 
import { getIdURL, isPattern, isSVGPattern } from '../../svg/helper.js'; 
 | 
import { createElement } from '../../svg/core.js'; 
 | 
var patternDomMap = new WeakMap(); 
 | 
var PatternManager = (function (_super) { 
 | 
    __extends(PatternManager, _super); 
 | 
    function PatternManager(zrId, svgRoot) { 
 | 
        return _super.call(this, zrId, svgRoot, ['pattern'], '__pattern_in_use__') || this; 
 | 
    } 
 | 
    PatternManager.prototype.addWithoutUpdate = function (svgElement, displayable) { 
 | 
        if (displayable && displayable.style) { 
 | 
            var that_1 = this; 
 | 
            zrUtil.each(['fill', 'stroke'], function (fillOrStroke) { 
 | 
                var pattern = displayable.style[fillOrStroke]; 
 | 
                if (isPattern(pattern)) { 
 | 
                    var defs = that_1.getDefs(true); 
 | 
                    var dom = patternDomMap.get(pattern); 
 | 
                    if (dom) { 
 | 
                        if (!defs.contains(dom)) { 
 | 
                            that_1.addDom(dom); 
 | 
                        } 
 | 
                    } 
 | 
                    else { 
 | 
                        dom = that_1.add(pattern); 
 | 
                    } 
 | 
                    that_1.markUsed(displayable); 
 | 
                    svgElement.setAttribute(fillOrStroke, getIdURL(dom.getAttribute('id'))); 
 | 
                } 
 | 
            }); 
 | 
        } 
 | 
    }; 
 | 
    PatternManager.prototype.add = function (pattern) { 
 | 
        if (!isPattern(pattern)) { 
 | 
            return; 
 | 
        } 
 | 
        var dom = createElement('pattern'); 
 | 
        pattern.id = pattern.id == null ? this.nextId++ : pattern.id; 
 | 
        dom.setAttribute('id', 'zr' + this._zrId 
 | 
            + '-pattern-' + pattern.id); 
 | 
        dom.setAttribute('patternUnits', 'userSpaceOnUse'); 
 | 
        this.updateDom(pattern, dom); 
 | 
        this.addDom(dom); 
 | 
        return dom; 
 | 
    }; 
 | 
    PatternManager.prototype.update = function (pattern) { 
 | 
        if (!isPattern(pattern)) { 
 | 
            return; 
 | 
        } 
 | 
        var that = this; 
 | 
        this.doUpdate(pattern, function () { 
 | 
            var dom = patternDomMap.get(pattern); 
 | 
            that.updateDom(pattern, dom); 
 | 
        }); 
 | 
    }; 
 | 
    PatternManager.prototype.updateDom = function (pattern, patternDom) { 
 | 
        if (isSVGPattern(pattern)) { 
 | 
        } 
 | 
        else { 
 | 
            var img = void 0; 
 | 
            var prevImage = patternDom.getElementsByTagName('image'); 
 | 
            if (prevImage.length) { 
 | 
                if (pattern.image) { 
 | 
                    img = prevImage[0]; 
 | 
                } 
 | 
                else { 
 | 
                    patternDom.removeChild(prevImage[0]); 
 | 
                    return; 
 | 
                } 
 | 
            } 
 | 
            else if (pattern.image) { 
 | 
                img = createElement('image'); 
 | 
            } 
 | 
            if (img) { 
 | 
                var imageSrc = void 0; 
 | 
                var patternImage = pattern.image; 
 | 
                if (typeof patternImage === 'string') { 
 | 
                    imageSrc = patternImage; 
 | 
                } 
 | 
                else if (patternImage instanceof HTMLImageElement) { 
 | 
                    imageSrc = patternImage.src; 
 | 
                } 
 | 
                else if (patternImage instanceof HTMLCanvasElement) { 
 | 
                    imageSrc = patternImage.toDataURL(); 
 | 
                } 
 | 
                if (imageSrc) { 
 | 
                    img.setAttribute('href', imageSrc); 
 | 
                    var hostEl = { 
 | 
                        dirty: function () { } 
 | 
                    }; 
 | 
                    var updateSize = function (img) { 
 | 
                        patternDom.setAttribute('width', img.width); 
 | 
                        patternDom.setAttribute('height', img.height); 
 | 
                    }; 
 | 
                    var createdImage = createOrUpdateImage(imageSrc, img, hostEl, updateSize); 
 | 
                    if (createdImage && createdImage.width && createdImage.height) { 
 | 
                        updateSize(createdImage); 
 | 
                    } 
 | 
                    patternDom.appendChild(img); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        var x = pattern.x || 0; 
 | 
        var y = pattern.y || 0; 
 | 
        var rotation = (pattern.rotation || 0) / Math.PI * 180; 
 | 
        var scaleX = pattern.scaleX || 1; 
 | 
        var scaleY = pattern.scaleY || 1; 
 | 
        var transform = "translate(" + x + ", " + y + ") rotate(" + rotation + ") scale(" + scaleX + ", " + scaleY + ")"; 
 | 
        patternDom.setAttribute('patternTransform', transform); 
 | 
        patternDomMap.set(pattern, patternDom); 
 | 
    }; 
 | 
    PatternManager.prototype.markUsed = function (displayable) { 
 | 
        if (displayable.style) { 
 | 
            if (isPattern(displayable.style.fill)) { 
 | 
                _super.prototype.markDomUsed.call(this, patternDomMap.get(displayable.style.fill)); 
 | 
            } 
 | 
            if (isPattern(displayable.style.stroke)) { 
 | 
                _super.prototype.markDomUsed.call(this, patternDomMap.get(displayable.style.stroke)); 
 | 
            } 
 | 
        } 
 | 
    }; 
 | 
    return PatternManager; 
 | 
}(Definable)); 
 | 
export default PatternManager; 
 |