@raphy/ngx-equalizer
Version:
A library to equalize height and width of elements with Angular4+
304 lines (291 loc) • 21.6 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common')) :
typeof define === 'function' && define.amd ? define('@raphy/ngx-equalizer', ['exports', '@angular/core', '@angular/common'], factory) :
(factory((global.raphy = global.raphy || {}, global.raphy['ngx-equalizer'] = {}),global.ng.core,global.ng.common));
}(this, (function (exports,core,common) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var EqualizerService = (function () {
function EqualizerService() {
}
/**
* @param {?} renderer
* @param {?} elementRefs
* @param {?=} params
* @return {?}
*/
EqualizerService.prototype.equalize = /**
* @param {?} renderer
* @param {?} elementRefs
* @param {?=} params
* @return {?}
*/
function (renderer, elementRefs, params) {
if (params === void 0) {
params = { property: 'height', reset: true };
}
var /** @type {?} */ maxValue = 0;
elementRefs.map(function (elementRef) {
if (params.reset) {
renderer.setStyle(elementRef.nativeElement, params.property, 'initial');
}
var /** @type {?} */ value = elementRef.nativeElement['offset' + params.property[0].toUpperCase() + params.property.slice(1)];
maxValue = value > maxValue ? value : maxValue;
});
elementRefs.map(function (elementRef) {
renderer.setStyle(elementRef.nativeElement, params.property, maxValue + 'px');
});
};
EqualizerService.decorators = [
{ type: core.Injectable },
];
return EqualizerService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var EqualizerWatcherDirective = (function () {
function EqualizerWatcherDirective(_elementRef) {
this._elementRef = _elementRef;
}
Object.defineProperty(EqualizerWatcherDirective.prototype, "elementRef", {
get: /**
* @return {?}
*/ function () {
return this._elementRef;
},
enumerable: true,
configurable: true
});
Object.defineProperty(EqualizerWatcherDirective.prototype, "id", {
get: /**
* @return {?}
*/ function () {
return this._id;
},
set: /**
* @param {?} value
* @return {?}
*/ function (value) {
this._id = value;
},
enumerable: true,
configurable: true
});
EqualizerWatcherDirective.decorators = [
{ type: core.Directive, args: [{
selector: '[equalizerWatcher]'
},] },
];
/** @nocollapse */
EqualizerWatcherDirective.ctorParameters = function () {
return [
{ type: core.ElementRef }
];
};
EqualizerWatcherDirective.propDecorators = {
_id: [{ type: core.Input, args: ['equalizerWatcher',] }]
};
return EqualizerWatcherDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var EqualizerDirective = (function () {
function EqualizerDirective(_elementRef, _renderer, _equalizerService) {
this._elementRef = _elementRef;
this._renderer = _renderer;
this._equalizerService = _equalizerService;
this._params = 'height';
this._watchers = new core.QueryList();
}
Object.defineProperty(EqualizerDirective.prototype, "params", {
get: /**
* @return {?}
*/ function () {
return this._params;
},
set: /**
* @param {?} value
* @return {?}
*/ function (value) {
this._params = value;
this.equalize();
},
enumerable: true,
configurable: true
});
Object.defineProperty(EqualizerDirective.prototype, "elementRef", {
get: /**
* @return {?}
*/ function () {
return this._elementRef;
},
enumerable: true,
configurable: true
});
Object.defineProperty(EqualizerDirective.prototype, "id", {
get: /**
* @return {?}
*/ function () {
return this._id;
},
set: /**
* @param {?} value
* @return {?}
*/ function (value) {
this._id = value;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
EqualizerDirective.prototype.ngAfterViewChecked = /**
* @return {?}
*/
function () {
this.equalize();
};
/**
* @return {?}
*/
EqualizerDirective.prototype._onResize = /**
* @return {?}
*/
function () {
this.equalize();
};
/**
* @return {?}
*/
EqualizerDirective.prototype.equalize = /**
* @return {?}
*/
function () {
var _this = this;
if (!this._params) {
this._params = 'height';
}
var /** @type {?} */ params = Object.assign({ property: 'height', reset: true }, typeof this._params === 'string' ? { property: this._params } : this._params);
var /** @type {?} */ watchers = this._watchers.filter(function (watcher) {
console.log('ID matching', watcher.id, _this.id);
if (watcher.id || _this.id) {
return watcher.id === _this.id;
}
return watcher.elementRef.nativeElement !== _this._elementRef.nativeElement;
}).map(function (watcher) { return watcher.elementRef; });
this._equalizerService.equalize(this._renderer, watchers, params);
};
EqualizerDirective.decorators = [
{ type: core.Directive, args: [{
selector: '[equalizer]',
exportAs: 'equalizer'
},] },
];
/** @nocollapse */
EqualizerDirective.ctorParameters = function () {
return [
{ type: core.ElementRef },
{ type: core.Renderer2 },
{ type: EqualizerService }
];
};
EqualizerDirective.propDecorators = {
_params: [{ type: core.Input, args: ['equalizer',] }],
_id: [{ type: core.Input, args: ['equalizerId',] }],
_watchers: [{ type: core.ContentChildren, args: [EqualizerWatcherDirective, { read: EqualizerWatcherDirective },] }],
_onResize: [{ type: core.HostListener, args: ['window:resize',] }]
};
return EqualizerDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var EqualizerModule = (function () {
function EqualizerModule() {
}
/**
* @return {?}
*/
EqualizerModule.forRoot = /**
* @return {?}
*/
function () {
return {
ngModule: EqualizerModule,
providers: [
EqualizerService,
]
};
};
/**
* @return {?}
*/
EqualizerModule.forChild = /**
* @return {?}
*/
function () {
return {
ngModule: EqualizerModule,
providers: [
EqualizerService
]
};
};
EqualizerModule.decorators = [
{ type: core.NgModule, args: [{
imports: [
common.CommonModule,
],
exports: [
EqualizerDirective,
EqualizerWatcherDirective,
],
declarations: [
EqualizerDirective,
EqualizerWatcherDirective,
],
providers: [
EqualizerService,
],
},] },
];
return EqualizerModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
exports.EqualizerDirective = EqualizerDirective;
exports.EqualizerWatcherDirective = EqualizerWatcherDirective;
exports.EqualizerService = EqualizerService;
exports.EqualizerModule = EqualizerModule;
exports.ɵa = EqualizerDirective;
exports.ɵb = EqualizerWatcherDirective;
exports.ɵc = EqualizerService;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaHktbmd4LWVxdWFsaXplci51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL0ByYXBoeS9uZ3gtZXF1YWxpemVyL2xpYi9zZXJ2aWNlcy9lcXVhbGl6ZXIuc2VydmljZS50cyIsIm5nOi8vQHJhcGh5L25neC1lcXVhbGl6ZXIvbGliL2RpcmVjdGl2ZXMvZXF1YWxpemVyLXdhdGNoZXIuZGlyZWN0aXZlLnRzIiwibmc6Ly9AcmFwaHkvbmd4LWVxdWFsaXplci9saWIvZGlyZWN0aXZlcy9lcXVhbGl6ZXIuZGlyZWN0aXZlLnRzIiwibmc6Ly9AcmFwaHkvbmd4LWVxdWFsaXplci9saWIvZXF1YWxpemVyLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRXF1YWxpemVQYXJhbXMgfSBmcm9tICcuLi9lcXVhbGl6ZS1wYXJhbXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXF1YWxpemVyU2VydmljZSB7XG4gICAgcHVibGljIGVxdWFsaXplKFxuICAgICAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBlbGVtZW50UmVmczogRWxlbWVudFJlZltdLFxuICAgICAgICBwYXJhbXM6IEVxdWFsaXplUGFyYW1zID0ge3Byb3BlcnR5OiAnaGVpZ2h0JywgcmVzZXQ6IHRydWV9XG4gICAgKSB7XG5cbiAgICAgICAgbGV0IG1heFZhbHVlOiBudW1iZXIgPSAwO1xuXG4gICAgICAgIGVsZW1lbnRSZWZzLm1hcChcbiAgICAgICAgICAgIChlbGVtZW50UmVmOiBFbGVtZW50UmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXNldCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHBhcmFtcy5wcm9wZXJ0eSwgJ2luaXRpYWwnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZTogbnVtYmVyID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50WydvZmZzZXQnICsgcGFyYW1zLnByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwYXJhbXMucHJvcGVydHkuc2xpY2UoMSldO1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gdmFsdWUgPiBtYXhWYWx1ZSA/IHZhbHVlIDogbWF4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgZWxlbWVudFJlZnMubWFwKFxuICAgICAgICAgICAgKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpID0+IHtcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHBhcmFtcy5wcm9wZXJ0eSwgbWF4VmFsdWUgKyAncHgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2VxdWFsaXplcldhdGNoZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlIHtcbiAgICBASW5wdXQoJ2VxdWFsaXplcldhdGNoZXInKVxuICAgIHByaXZhdGUgX2lkOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICBnZXQgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWY7XG4gICAgfVxuXG4gICAgZ2V0IGlkKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG5cbiAgICBzZXQgaWQodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEVxdWFsaXplUGFyYW1zIH0gZnJvbSAnLi4vZXF1YWxpemUtcGFyYW1zJztcbmltcG9ydCB7IEVxdWFsaXplclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbmRleCc7XG5pbXBvcnQgeyBFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9lcXVhbGl6ZXItd2F0Y2hlci5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2VxdWFsaXplcl0nLFxuICAgIGV4cG9ydEFzOiAnZXF1YWxpemVyJ1xufSlcbmV4cG9ydCBjbGFzcyBFcXVhbGl6ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBASW5wdXQoJ2VxdWFsaXplcicpXG4gICAgcHJpdmF0ZSBfcGFyYW1zOiAnaGVpZ2h0JyB8ICd3aWR0aCcgfCBFcXVhbGl6ZVBhcmFtcyA9ICdoZWlnaHQnO1xuXG4gICAgQElucHV0KCdlcXVhbGl6ZXJJZCcpXG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IG51bWJlcjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oRXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZSwge3JlYWQ6IEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmV9KVxuICAgIHByaXZhdGUgX3dhdGNoZXJzOiBRdWVyeUxpc3Q8RXF1YWxpemVyV2F0Y2hlckRpcmVjdGl2ZT4gPSBuZXcgUXVlcnlMaXN0PEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmU+KCk7XG5cbiAgICBnZXQgcGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xuICAgIH1cblxuICAgIHNldCBwYXJhbXModmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5lcXVhbGl6ZSgpO1xuICAgIH1cblxuICAgIGdldCBlbGVtZW50UmVmKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZjtcbiAgICB9XG5cbiAgICBnZXQgaWQoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX2VxdWFsaXplclNlcnZpY2U6IEVxdWFsaXplclNlcnZpY2VcbiAgICApIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVxdWFsaXplKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gICAgcHJpdmF0ZSBfb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXF1YWxpemUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXF1YWxpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJhbXMgPSAnaGVpZ2h0JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtczogRXF1YWxpemVQYXJhbXMgPSBPYmplY3QuYXNzaWduKHtwcm9wZXJ0eTogJ2hlaWdodCcsIHJlc2V0OiB0cnVlfSwgdHlwZW9mIHRoaXMuX3BhcmFtcyA9PT0gJ3N0cmluZycgPyB7cHJvcGVydHk6IHRoaXMuX3BhcmFtc30gOiB0aGlzLl9wYXJhbXMpO1xuICAgICAgICBjb25zdCB3YXRjaGVyczogRWxlbWVudFJlZltdID0gdGhpcy5fd2F0Y2hlcnMuZmlsdGVyKCh3YXRjaGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSUQgbWF0Y2hpbmcnLCB3YXRjaGVyLmlkLCB0aGlzLmlkKTtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyLmlkIHx8IHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2F0Y2hlci5pZCA9PT0gdGhpcy5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHdhdGNoZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH0pLm1hcCgod2F0Y2hlcikgPT4gd2F0Y2hlci5lbGVtZW50UmVmKTtcblxuICAgICAgICB0aGlzLl9lcXVhbGl6ZXJTZXJ2aWNlLmVxdWFsaXplKFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIsXG4gICAgICAgICAgICB3YXRjaGVycyxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFcXVhbGl6ZXJEaXJlY3RpdmUsIEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRXF1YWxpemVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBFcXVhbGl6ZXJEaXJlY3RpdmUsXG4gICAgICAgIEVxdWFsaXplcldhdGNoZXJEaXJlY3RpdmUsXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgRXF1YWxpemVyRGlyZWN0aXZlLFxuICAgICAgICBFcXVhbGl6ZXJXYXRjaGVyRGlyZWN0aXZlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEVxdWFsaXplclNlcnZpY2UsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRXF1YWxpemVyTW9kdWxlIHtcbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogRXF1YWxpemVyTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgRXF1YWxpemVyU2VydmljZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZvckNoaWxkKCk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IEVxdWFsaXplck1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIEVxdWFsaXplclNlcnZpY2VcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiSW5qZWN0YWJsZSIsIkRpcmVjdGl2ZSIsIkVsZW1lbnRSZWYiLCJJbnB1dCIsIlF1ZXJ5TGlzdCIsIlJlbmRlcmVyMiIsIkNvbnRlbnRDaGlsZHJlbiIsIkhvc3RMaXN0ZW5lciIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FB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