import LRU from '../../core/LRU.js'; 
 | 
import { platformApi } from '../../core/platform.js'; 
 | 
var globalImageCache = new LRU(50); 
 | 
export function findExistImage(newImageOrSrc) { 
 | 
    if (typeof newImageOrSrc === 'string') { 
 | 
        var cachedImgObj = globalImageCache.get(newImageOrSrc); 
 | 
        return cachedImgObj && cachedImgObj.image; 
 | 
    } 
 | 
    else { 
 | 
        return newImageOrSrc; 
 | 
    } 
 | 
} 
 | 
export function createOrUpdateImage(newImageOrSrc, image, hostEl, onload, cbPayload) { 
 | 
    if (!newImageOrSrc) { 
 | 
        return image; 
 | 
    } 
 | 
    else if (typeof newImageOrSrc === 'string') { 
 | 
        if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) { 
 | 
            return image; 
 | 
        } 
 | 
        var cachedImgObj = globalImageCache.get(newImageOrSrc); 
 | 
        var pendingWrap = { hostEl: hostEl, cb: onload, cbPayload: cbPayload }; 
 | 
        if (cachedImgObj) { 
 | 
            image = cachedImgObj.image; 
 | 
            !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); 
 | 
        } 
 | 
        else { 
 | 
            image = platformApi.loadImage(newImageOrSrc, imageOnLoad, imageOnLoad); 
 | 
            image.__zrImageSrc = newImageOrSrc; 
 | 
            globalImageCache.put(newImageOrSrc, image.__cachedImgObj = { 
 | 
                image: image, 
 | 
                pending: [pendingWrap] 
 | 
            }); 
 | 
        } 
 | 
        return image; 
 | 
    } 
 | 
    else { 
 | 
        return newImageOrSrc; 
 | 
    } 
 | 
} 
 | 
function imageOnLoad() { 
 | 
    var cachedImgObj = this.__cachedImgObj; 
 | 
    this.onload = this.onerror = this.__cachedImgObj = null; 
 | 
    for (var i = 0; i < cachedImgObj.pending.length; i++) { 
 | 
        var pendingWrap = cachedImgObj.pending[i]; 
 | 
        var cb = pendingWrap.cb; 
 | 
        cb && cb(this, pendingWrap.cbPayload); 
 | 
        pendingWrap.hostEl.dirty(); 
 | 
    } 
 | 
    cachedImgObj.pending.length = 0; 
 | 
} 
 | 
export function isImageReady(image) { 
 | 
    return image && image.width && image.height; 
 | 
} 
 |