import {Component, Input, HostBinding, ViewChild, ElementRef} from 'angular2/core';
import {isPresent} from '../../util/util';
import {Platform} from '../../platform/platform';
@Component({
selector: 'ion-img',
template:
'
' +
'
' +
'' +
'
'
})
export class Img {
private _src: string = '';
private _srcA: string = '';
private _srcB: string = '';
private _useA: boolean = true;
private _w: string;
private _h: string;
private _enabled: boolean = true;
constructor(private _elementRef: ElementRef, private _platform: Platform) {}
@ViewChild('imgA') private _imgA: ElementRef;
@ViewChild('imgB') private _imgB: ElementRef;
@Input()
set src(val: string) {
val = (isPresent(val) ? val : '');
if (this._src !== val) {
this._src = val;
this._loaded = false;
this._srcA = this._srcB = '';
this._useA = !this._useA;
this._update();
}
}
private _update() {
if (this._enabled && this.isVisible()) {
if (this._useA) {
this._srcA = this._src;
} else {
this._srcB = this._src;
}
}
}
enable(shouldEnable: boolean) {
this._enabled = shouldEnable;
this._update();
}
isVisible() {
let bounds = this._elementRef.nativeElement.getBoundingClientRect();
return bounds.bottom > 0 && bounds.top < this._platform.height();
}
@HostBinding('class.img-loaded')
private _loaded: boolean = false;
private _onLoad() {
this._loaded = this.isLoaded();
}
isLoaded() {
let imgEle: HTMLImageElement;
if (this._useA && this._imgA) {
imgEle = this._imgA.nativeElement;
} else if (this._imgB) {
imgEle = this._imgB.nativeElement;
}
return (imgEle && imgEle.src !== '' && imgEle.complete);
}
@Input()
set width(val: string | number) {
this._w = (typeof val === 'number') ? val + 'px' : val;
}
@Input()
set height(val: string | number) {
this._h = (typeof val === 'number') ? val + 'px' : val;
}
}