@greg-md/ng-facebook
Version:
Using Facebook SDK with Angular.
136 lines (135 loc) • 9.27 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Directive, Input, ElementRef, Renderer2, InjectionToken, Inject, Optional, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { inViewport } from './dom';
import { FacebookService } from './facebook.service';
export const /** @type {?} */ FB_PARSE_LAZY_LOAD = new InjectionToken('fb_parse_lazy_load');
export class FacebookParseDirective {
/**
* @param {?} elementRef
* @param {?} facebook
* @param {?} renderer
* @param {?} platformId
* @param {?} threshold
*/
constructor(elementRef, facebook, renderer, platformId, threshold) {
this.elementRef = elementRef;
this.facebook = facebook;
this.renderer = renderer;
this.platformId = platformId;
this.threshold = threshold;
}
/**
* @param {?} threshold
* @return {?}
*/
set lazyLoad(threshold) {
this.threshold = threshold;
}
/**
* @return {?}
*/
ngAfterViewInit() {
if (this.threshold === null) {
this.load();
}
else {
this.initListeners();
this.tryLoading();
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.unloadListeners();
}
/**
* @return {?}
*/
initListeners() {
this.scrollUnload = this.renderer.listen('window', 'scroll', () => {
this.tryLoading();
});
this.resizeUnload = this.renderer.listen('window', 'resize', () => {
this.tryLoading();
});
}
/**
* @return {?}
*/
tryLoading() {
if (isPlatformBrowser(this.platformId) && inViewport(this.elementRef.nativeElement, {
threshold: this.threshold,
container: this.container
})) {
this.load();
this.unloadListeners();
}
}
/**
* @return {?}
*/
load() {
this.facebook.parse(this.elementRef.nativeElement).subscribe();
}
/**
* @return {?}
*/
unloadListeners() {
if (this.scrollUnload) {
this.scrollUnload();
}
if (this.resizeUnload) {
this.resizeUnload();
}
}
}
FacebookParseDirective.decorators = [
{ type: Directive, args: [{
selector: '[fbParse]',
},] },
];
/** @nocollapse */
FacebookParseDirective.ctorParameters = () => [
{ type: ElementRef, },
{ type: FacebookService, },
{ type: Renderer2, },
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] },] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [FB_PARSE_LAZY_LOAD,] },] },
];
FacebookParseDirective.propDecorators = {
"lazyLoad": [{ type: Input },],
"container": [{ type: Input },],
};
function FacebookParseDirective_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
FacebookParseDirective.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
FacebookParseDirective.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
FacebookParseDirective.propDecorators;
/** @type {?} */
FacebookParseDirective.prototype.container;
/** @type {?} */
FacebookParseDirective.prototype.scrollUnload;
/** @type {?} */
FacebookParseDirective.prototype.resizeUnload;
/** @type {?} */
FacebookParseDirective.prototype.elementRef;
/** @type {?} */
FacebookParseDirective.prototype.facebook;
/** @type {?} */
FacebookParseDirective.prototype.renderer;
/** @type {?} */
FacebookParseDirective.prototype.platformId;
/** @type {?} */
FacebookParseDirective.prototype.threshold;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdyZWctbWQvbmctZmFjZWJvb2svIiwic291cmNlcyI6WyJsaWIvcGFyc2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWlCLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFDeEYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE1BQU0sQ0FBQyx1QkFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBUyxvQkFBb0IsQ0FBQyxDQUFDO0FBS25GLE1BQU07Ozs7Ozs7O0lBWUosWUFDVSxZQUNBLFVBQ0EsVUFDcUIsWUFDbUI7UUFKeEMsZUFBVSxHQUFWLFVBQVU7UUFDVixhQUFRLEdBQVIsUUFBUTtRQUNSLGFBQVEsR0FBUixRQUFRO1FBQ2EsZUFBVSxHQUFWLFVBQVU7UUFDUyxjQUFTLEdBQVQsU0FBUztLQUUxRDs7Ozs7UUFqQkcsUUFBUSxDQUFDLFNBQWlCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDOzs7OztJQWtCN0IsZUFBZTtRQUNiLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDYjtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXJCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtLQUNGOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztLQUN4Qjs7OztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQixDQUFDLENBQUM7S0FDSjs7OztJQUVELFVBQVU7UUFDUixFQUFFLENBQUMsQ0FDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFO1lBQzlFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FDSCxDQUFDLENBQUMsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVaLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtLQUNGOzs7O0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDaEU7Ozs7SUFFRCxlQUFlO1FBQ2IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0tBQ0Y7OztZQXpFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFdBQVc7YUFDdEI7Ozs7WUFibUIsVUFBVTtZQU9yQixlQUFlO1lBUHVCLFNBQVM7eUNBOEJuRCxNQUFNLFNBQUMsV0FBVzs0Q0FDbEIsUUFBUSxZQUFJLE1BQU0sU0FBQyxrQkFBa0I7Ozt5QkFoQnZDLEtBQUs7MEJBS0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSwgSW5wdXQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIFJlbmRlcmVyMiwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCwgT3B0aW9uYWwsXG4gIFBMQVRGT1JNX0lELCBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IGluVmlld3BvcnQgfSBmcm9tICcuL2RvbSc7XG5cbmltcG9ydCB7IEZhY2Vib29rU2VydmljZSB9IGZyb20gJy4vZmFjZWJvb2suc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBGQl9QQVJTRV9MQVpZX0xPQUQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignZmJfcGFyc2VfbGF6eV9sb2FkJyk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmYlBhcnNlXScsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2Vib29rUGFyc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBzZXQgbGF6eUxvYWQodGhyZXNob2xkOiBudW1iZXIpIHtcbiAgICB0aGlzLnRocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBXaW5kb3c7XG5cbiAgc2Nyb2xsVW5sb2FkOiAoKSA9PiB2b2lkO1xuICByZXNpemVVbmxvYWQ6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgZmFjZWJvb2s6IEZhY2Vib29rU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGQl9QQVJTRV9MQVpZX0xPQUQpIHByaXZhdGUgdGhyZXNob2xkOiBudW1iZXIsXG4gICkge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnRocmVzaG9sZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdExpc3RlbmVycygpO1xuXG4gICAgICB0aGlzLnRyeUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVubG9hZExpc3RlbmVycygpO1xuICB9XG5cbiAgaW5pdExpc3RlbmVycygpIHtcbiAgICB0aGlzLnNjcm9sbFVubG9hZCA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgdGhpcy50cnlMb2FkaW5nKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZVVubG9hZCA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgdGhpcy50cnlMb2FkaW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICB0cnlMb2FkaW5nKCkge1xuICAgIGlmIChcbiAgICAgIGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgaW5WaWV3cG9ydCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudGhyZXNob2xkLFxuICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyXG4gICAgICB9KVxuICAgICkge1xuICAgICAgdGhpcy5sb2FkKCk7XG5cbiAgICAgIHRoaXMudW5sb2FkTGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgbG9hZCgpIHtcbiAgICB0aGlzLmZhY2Vib29rLnBhcnNlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHVubG9hZExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxVbmxvYWQpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVW5sb2FkKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzaXplVW5sb2FkKSB7XG4gICAgICB0aGlzLnJlc2l6ZVVubG9hZCgpO1xuICAgIH1cbiAgfVxufVxuIl19