UNPKG

ng-masonry-layout

Version:

Angular Module for displaying a feed of items in a masonry layout using https://github.com/desandro/masonry

220 lines 15.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, ElementRef, EventEmitter, PLATFORM_ID, Inject } from '@angular/core'; import { isPlatformBrowser } from '@angular/common'; /** @type {?} */ var imagesLoaded; /** @type {?} */ var masonryConstructor; var NgxMasonryComponent = /** @class */ (function () { function NgxMasonryComponent(platformId, _element) { this.platformId = platformId; this._element = _element; this.useImagesLoaded = false; this.updateLayout = false; // Outputs this.layoutComplete = new EventEmitter(); this.removeComplete = new EventEmitter(); } /** * @return {?} */ NgxMasonryComponent.prototype.ngOnInit = /** * @return {?} */ function () { // if (this.useImagesLoaded && imagesLoaded === undefined) { // imagesLoaded = require('imagesloaded'); // } var _this = this; if (isPlatformBrowser(this.platformId) && masonryConstructor === undefined) { masonryConstructor = require('masonry-layout'); } // Create masonry options object if (!this.options) { this.options = {}; } // Set default itemSelector if (!this.options.itemSelector) { this.options.itemSelector = '[ngxMasonryItem], ngxMasonryItem'; } if (isPlatformBrowser(this.platformId)) { // Initialize Masonry this._msnry = new masonryConstructor(this._element.nativeElement, this.options); // Bind to events this._msnry.on('layoutComplete', (/** * @param {?} items * @return {?} */ function (items) { _this.layoutComplete.emit(items); })); this._msnry.on('removeComplete', (/** * @param {?} items * @return {?} */ function (items) { _this.removeComplete.emit(items); })); } }; /** * @param {?} changes * @return {?} */ NgxMasonryComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { // only update layout if it's not the first change if (changes.updateLayout) { if (!changes.updateLayout.firstChange) { this.layout(); } } }; /** * @return {?} */ NgxMasonryComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this._msnry) { this._msnry.destroy(); } }; /** * @return {?} */ NgxMasonryComponent.prototype.layout = /** * @return {?} */ function () { var _this = this; setTimeout((/** * @return {?} */ function () { _this._msnry.layout(); })); }; /** * @return {?} */ NgxMasonryComponent.prototype.reloadItems = /** * @return {?} */ function () { var _this = this; setTimeout((/** * @return {?} */ function () { _this._msnry.reloadItems(); })); }; // public add(element: HTMLElement, prepend: boolean = false) { // public add(element: HTMLElement, prepend: boolean = false) { /** * @param {?} element * @return {?} */ NgxMasonryComponent.prototype.add = // public add(element: HTMLElement, prepend: boolean = false) { /** * @param {?} element * @return {?} */ function (element) { /** @type {?} */ var isFirstItem = false; // Check if first item if (this._msnry.items.length === 0) { isFirstItem = true; } if (this.useImagesLoaded) { // imagesLoaded(element, (instance: any) => { // this._element.nativeElement.appendChild(element); // // Tell Masonry that a child element has been added // this._msnry.appended(element); // // layout if first item // if (isFirstItem) { // this.layout(); // } // }); // this._element.nativeElement.removeChild(element); } else { // Tell Masonry that a child element has been added this._msnry.appended(element); // layout if first item if (isFirstItem) { this.layout(); } } }; /** * @param {?} element * @return {?} */ NgxMasonryComponent.prototype.remove = /** * @param {?} element * @return {?} */ function (element) { // Tell Masonry that a child element has been removed this._msnry.remove(element); // Layout items this.layout(); }; NgxMasonryComponent.decorators = [ { type: Component, args: [{ selector: '[ngx-masonry], ngx-masonry', template: '<ng-content></ng-content>', styles: ["\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t}\n\t"] }] } ]; /** @nocollapse */ NgxMasonryComponent.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, { type: ElementRef } ]; }; NgxMasonryComponent.propDecorators = { options: [{ type: Input }], useImagesLoaded: [{ type: Input }], updateLayout: [{ type: Input }], layoutComplete: [{ type: Output }], removeComplete: [{ type: Output }] }; return NgxMasonryComponent; }()); export { NgxMasonryComponent }; if (false) { /** @type {?} */ NgxMasonryComponent.prototype._msnry; /** @type {?} */ NgxMasonryComponent.prototype.options; /** @type {?} */ NgxMasonryComponent.prototype.useImagesLoaded; /** @type {?} */ NgxMasonryComponent.prototype.updateLayout; /** @type {?} */ NgxMasonryComponent.prototype.layoutComplete; /** @type {?} */ NgxMasonryComponent.prototype.removeComplete; /** * @type {?} * @private */ NgxMasonryComponent.prototype.platformId; /** * @type {?} * @private */ NgxMasonryComponent.prototype._element; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc29ucnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctbWFzb25yeS1sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvbmd4LW1hc29ucnkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUtULEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztJQUdoRCxZQUFpQjs7SUFDakIsa0JBQXVCO0FBSTNCO0lBWUUsNkJBQXlDLFVBQWUsRUFBVSxRQUFvQjtRQUE3QyxlQUFVLEdBQVYsVUFBVSxDQUFLO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQU10RSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUN4QyxpQkFBWSxHQUFZLEtBQUssQ0FBQzs7UUFHN0IsbUJBQWMsR0FBd0IsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNoRSxtQkFBYyxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO0lBWGUsQ0FBQzs7OztJQWExRixzQ0FBUTs7O0lBQVI7UUFDRSw0REFBNEQ7UUFDNUQsNENBQTRDO1FBQzVDLElBQUk7UUFITixpQkErQkM7UUExQkMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFO1lBQzFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQ25CO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM5QixJ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a0NBQ0wsS0FBSzsrQkFDTCxLQUFLO2lDQUdMLE1BQU07aUNBQ04sTUFBTTs7SUF1R1QsMEJBQUM7Q0FBQSxBQTlIRCxJQThIQztTQW5IWSxtQkFBbUI7OztJQUc5QixxQ0FBbUI7O0lBR25CLHNDQUEyQzs7SUFDM0MsOENBQWlEOztJQUNqRCwyQ0FBdUM7O0lBR3ZDLDZDQUEwRTs7SUFDMUUsNkNBQTBFOzs7OztJQVg5RCx5Q0FBNEM7Ozs7O0lBQUUsdUNBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIFBMQVRGT1JNX0lELFxuICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmRlY2xhcmUgdmFyIHJlcXVpcmU6IGFueTtcbmxldCBpbWFnZXNMb2FkZWQ6IGFueTtcbmxldCBtYXNvbnJ5Q29uc3RydWN0b3I6IGFueTtcblxuaW1wb3J0IHsgTmd4TWFzb25yeU9wdGlvbnMgfSBmcm9tICcuL25neC1tYXNvbnJ5LW9wdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbbmd4LW1hc29ucnldLCBuZ3gtbWFzb25yeScsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIHN0eWxlczogW1xuICAgIGBcblx0XHQ6aG9zdCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHR9XG5cdGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXNvbnJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55LCBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmKSB7fVxuXG4gIHB1YmxpYyBfbXNucnk6IGFueTtcblxuICAvLyBJbnB1dHNcbiAgQElucHV0KCkgcHVibGljIG9wdGlvbnM6IE5neE1hc29ucnlPcHRpb25zO1xuICBASW5wdXQoKSBwdWJsaWMgdXNlSW1hZ2VzTG9hZGVkOiBCb29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVwZGF0ZUxheW91dDogQm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE91dHB1dHNcbiAgQE91dHB1dCgpIGxheW91dENvbXBsZXRlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNvbXBsZXRlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBpZiAodGhpcy51c2VJbWFnZXNMb2FkZWQgJiYgaW1hZ2VzTG9hZGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIGltYWdlc0xvYWRlZCA9IHJlcXVpcmUoJ2ltYWdlc2xvYWRlZCcpO1xuICAgIC8vIH1cblxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIG1hc29ucnlDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXNvbnJ5Q29uc3RydWN0b3IgPSByZXF1aXJlKCdtYXNvbnJ5LWxheW91dCcpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBtYXNvbnJ5IG9wdGlvbnMgb2JqZWN0XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGl0ZW1TZWxlY3RvclxuICAgIGlmICghdGhpcy5vcHRpb25zLml0ZW1TZWxlY3Rvcikge1xuICAgICAgdGhpcy5vcHRpb25zLml0ZW1TZWxlY3RvciA9ICdbbmd4TWFzb25yeUl0ZW1dLCBuZ3hNYXNvbnJ5SXRlbSc7XG4gICAgfVxuXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgTWFzb25yeVxuICAgICAgdGhpcy5fbXNucnkgPSBuZXcgbWFzb25yeUNvbnN0cnVjdG9yKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgLy8gQmluZCB0byBldmVudHNcbiAgICAgIHRoaXMuX21zbnJ5Lm9uKCdsYXlvdXRDb21wbGV0ZScsIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubGF5b3V0Q29tcGxldGUuZW1pdChpdGVtcyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX21zbnJ5Lm9uKCdyZW1vdmVDb21wbGV0ZScsIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29tcGxldGUuZW1pdChpdGVtcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gb25seSB1cGRhdGUgbGF5b3V0IGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBjaGFuZ2VcbiAgICBpZiAoY2hhbmdlcy51cGRhdGVMYXlvdXQpIHtcbiAgICAgIGlmICghY2hhbmdlcy51cGRhdGVMYXlvdXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fbXNucnkpIHtcbiAgICAgIHRoaXMuX21zbnJ5LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbGF5b3V0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fbXNucnkubGF5b3V0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkSXRlbXMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9tc25yeS5yZWxvYWRJdGVtcygpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcHVibGljIGFkZChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJlcGVuZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHB1YmxpYyBhZGQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgaXNGaXJzdEl0ZW0gPSBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIGZpcnN0IGl0ZW1cbiAgICBpZiAodGhpcy5fbXNucnkuaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpc0ZpcnN0SXRlbSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlSW1hZ2VzTG9hZGVkKSB7XG4gICAgICAvLyBpbWFnZXNMb2FkZWQoZWxlbWVudCwgKGluc3RhbmNlOiBhbnkpID0+IHtcbiAgICAgIC8vICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAvLyAgIC8vIFRlbGwgTWFzb25yeSB0aGF0IGEgY2hpbGQgZWxlbWVudCBoYXMgYmVlbiBhZGRlZFxuICAgICAgLy8gICB0aGlzLl9tc25yeS5hcHBlbmRlZChlbGVtZW50KTtcblxuICAgICAgLy8gICAvLyBsYXlvdXQgaWYgZmlyc3QgaXRlbVxuICAgICAgLy8gICBpZiAoaXNGaXJzdEl0ZW0pIHtcbiAgICAgIC8vICAgICB0aGlzLmxheW91dCgpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcblxuICAgICAgLy8gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUZWxsIE1hc29ucnkgdGhhdCBhIGNoaWxkIGVsZW1lbnQgaGFzIGJlZW4gYWRkZWRcbiAgICAgIHRoaXMuX21zbnJ5LmFwcGVuZGVkKGVsZW1lbnQpO1xuXG4gICAgICAvLyBsYXlvdXQgaWYgZmlyc3QgaXRlbVxuICAgICAgaWYgKGlzRmlyc3RJdGVtKSB7XG4gICAgICAgIHRoaXMubGF5b3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIC8vIFRlbGwgTWFzb25yeSB0aGF0IGEgY2hpbGQgZWxlbWVudCBoYXMgYmVlbiByZW1vdmVkXG4gICAgdGhpcy5fbXNucnkucmVtb3ZlKGVsZW1lbnQpO1xuXG4gICAgLy8gTGF5b3V0IGl0ZW1zXG4gICAgdGhpcy5sYXlvdXQoKTtcbiAgfVxufVxuIl19