UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

234 lines (233 loc) 16.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter } from '@angular/core'; import { IconHandler } from '../core/util/icon'; var NoticeBarComponent = /** @class */ (function () { function NoticeBarComponent(_iconHandler) { this._iconHandler = _iconHandler; this.isShow = false; this.isStopScroll = false; this.marqueeScroll = 'scrolling'; this.style = {}; this._timer = null; this.marqueeProps = { loop: true, leading: 500, trailing: 8000, fps: 200, style: {} }; this.noticeBarcontent = ''; this.onClick = new EventEmitter(); this._iconHandler.load(); } Object.defineProperty(NoticeBarComponent.prototype, "stopScrolling", { set: /** * @param {?} value * @return {?} */ function (value) { this.isStopScroll = value; if (value) { this.marqueeScroll = 'scrolling-stop'; clearTimeout(this._timer); this._timer = setTimeout(function () { this.marqueeScroll = 'scrolling'; }, 1000); } }, enumerable: true, configurable: true }); Object.defineProperty(NoticeBarComponent.prototype, "mode", { get: /** * @return {?} */ function () { return this._mode; }, set: /** * @param {?} value * @return {?} */ function (value) { this._mode = value; }, enumerable: true, configurable: true }); Object.defineProperty(NoticeBarComponent.prototype, "icon", { get: /** * @return {?} */ function () { return this._icon; }, set: /** * @param {?} value * @return {?} */ function (value) { this._icon = value; }, enumerable: true, configurable: true }); Object.defineProperty(NoticeBarComponent.prototype, "action", { get: /** * @return {?} */ function () { return this._action; }, set: /** * @param {?} value * @return {?} */ function (value) { this._action = value; }, enumerable: true, configurable: true }); /** * @return {?} */ NoticeBarComponent.prototype.click = /** * @return {?} */ function () { this.onClick.emit(this._mode); if (this._mode === 'closable') { this.isShow = false; } }; /** * @return {?} */ NoticeBarComponent.prototype.dataProcess = /** * @return {?} */ function () { this.isShow = true; this.style = { width: '200%' }; if (window.innerWidth < this._width) { /** @type {?} */ var count = this.marqueeProps.loop ? 'infinite' : 1; this.style = { width: this._width * 2 + 'px', 'animation-delay': this.marqueeProps.leading + "ms", 'animation-duration': (1 / this.marqueeProps.fps) * 1000 + "s", 'animation-iteration-count': "" + count }; scroll.call(this); } else { this.marqueeScroll = 'scrolling-stop'; } }; /** * @return {?} */ NoticeBarComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; document.addEventListener('touchstart', function () { _this.marqueeScroll = 'scrolling-stop'; }); document.addEventListener('touchend', function () { _this.marqueeScroll = 'scrolling'; }); this._width = getRectWidth(this.noticeBarcontent); this.dataProcess(); }; NoticeBarComponent.decorators = [ { type: Component, args: [{ selector: 'NoticeBar, nzm-notice-bar', template: "<div role=\"alert\" *ngIf=\"isShow\" class=\"am-notice-bar\" (click)=\"click()\">\n <div *ngIf=\"icon !== null\" class=\"am-notice-bar-icon\">\n <ng-template [ngTemplateOutlet]=\"icon || voice\"></ng-template>\n </div>\n <div class=\"am-notice-bar-content\">\n <div class=\"marquee\">\n <div [ngClass]=\"marqueeScroll\" [ngStyle]=\"style\">\n <span>{{noticeBarcontent}}</span>\n <span>{{noticeBarcontent}}</span>\n </div>\n </div>\n </div>\n <div role=\"button\" *ngIf=\"mode && action !== null\" class=\"am-notice-bar-operation\">\n <ng-template *ngIf=\"mode === 'closable'\" [ngTemplateOutlet]=\"action || cross\"></ng-template>\n <ng-template *ngIf=\"mode === 'link'\" [ngTemplateOutlet]=\"action || right\"></ng-template>\n </div>\n</div>\n\n<ng-template #voice>\n <Icon [type]=\"'voice'\" [size]=\"'xxs'\"></Icon>\n</ng-template>\n<ng-template #cross>\n <Icon [type]=\"'cross'\" [size]=\"'md'\"></Icon>\n</ng-template>\n<ng-template #right>\n <Icon [type]=\"'right'\" [size]=\"'md'\"></Icon>\n</ng-template>\n", providers: [IconHandler] }] } ]; /** @nocollapse */ NoticeBarComponent.ctorParameters = function () { return [ { type: IconHandler } ]; }; NoticeBarComponent.propDecorators = { stopScrolling: [{ type: Input }], mode: [{ type: Input }], icon: [{ type: Input }], action: [{ type: Input }], marqueeProps: [{ type: Input }], noticeBarcontent: [{ type: Input }], onClick: [{ type: Output }] }; return NoticeBarComponent; }()); export { NoticeBarComponent }; if (false) { /** @type {?} */ NoticeBarComponent.prototype.actionDom; /** @type {?} */ NoticeBarComponent.prototype.isShow; /** @type {?} */ NoticeBarComponent.prototype.isStopScroll; /** @type {?} */ NoticeBarComponent.prototype.styleDom; /** @type {?} */ NoticeBarComponent.prototype.rate; /** @type {?} */ NoticeBarComponent.prototype.marqueeScroll; /** @type {?} */ NoticeBarComponent.prototype.style; /** @type {?} */ NoticeBarComponent.prototype._mode; /** @type {?} */ NoticeBarComponent.prototype._icon; /** @type {?} */ NoticeBarComponent.prototype._action; /** @type {?} */ NoticeBarComponent.prototype._timer; /** @type {?} */ NoticeBarComponent.prototype._width; /** @type {?} */ NoticeBarComponent.prototype.marqueeProps; /** @type {?} */ NoticeBarComponent.prototype.noticeBarcontent; /** @type {?} */ NoticeBarComponent.prototype.onClick; /** @type {?} */ NoticeBarComponent.prototype._iconHandler; } /** * @return {?} */ function scroll() { /** @type {?} */ var styleDom = document.getElementById('notice_bar_animation_cls'); if (styleDom) { return; } styleDom = document.createElement('style'); styleDom.setAttribute('id', 'notice_bar_animation_cls'); styleDom.innerHTML = "@-webkit-keyframes noticebarmarquee{ 0% { left: 0px; } 100% { left: -" + this._width + "px; }}"; document.body.appendChild(styleDom); } /** * @param {?} text * @return {?} */ function getRectWidth(text) { /** @type {?} */ var _dom = document.createElement('div'); _dom.innerHTML = text; _dom.style.position = 'absolute'; _dom.style.left = '-9999'; _dom.style.whiteSpace = 'nowrap'; _dom.style.fontSize = '14px'; document.body.appendChild(_dom); /** @type {?} */ var _w = _dom.clientWidth + 20; document.body.removeChild(_dom); return _w; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbIm5vdGljZS1iYXIvbm90aWNlLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztJQTZEOUMsNEJBQW9CLFlBQXlCO1FBQXpCLGlCQUFZLEdBQVosWUFBWSxDQUFhO3NCQW5EcEMsS0FBSzs0QkFDQyxLQUFLOzZCQUdKLFdBQVc7cUJBQ25CLEVBQUU7c0JBSU8sSUFBSTs0QkFvQ04sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0NBRTdELEVBQUU7dUJBRVEsSUFBSSxZQUFZLEVBQUU7UUFHN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUMxQjtJQXpDRCxzQkFDSSw2Q0FBYTs7Ozs7UUFEakIsVUFDa0IsS0FBSztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO2dCQUN0QyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7aUJBQ2xDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDVjtTQUNGOzs7T0FBQTtJQUNELHNCQUNJLG9DQUFJOzs7O1FBRFI7WUFFRSxP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Q0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUN4RCxRQUFRLENBQUMsU0FBUyxHQUFHLDBFQUF3RSxJQUFJLENBQUMsTUFBTSxXQUFRLENBQUM7SUFDakgsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Q0FDckM7Ozs7O0FBRUQsc0JBQXNCLElBQUk7O0lBQ3hCLElBQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUNoQyxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPLEVBQUUsQ0FBQztDQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbkhhbmRsZXIgfSBmcm9tICcuLi9jb3JlL3V0aWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ05vdGljZUJhciwgbnptLW5vdGljZS1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbm90aWNlLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0ljb25IYW5kbGVyXVxufSlcbmV4cG9ydCBjbGFzcyBOb3RpY2VCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBhY3Rpb25Eb206IGFueTtcblxuICBpc1Nob3cgPSBmYWxzZTtcbiAgaXNTdG9wU2Nyb2xsID0gZmFsc2U7XG4gIHN0eWxlRG9tOiBhbnk7XG4gIHJhdGU7XG4gIG1hcnF1ZWVTY3JvbGwgPSAnc2Nyb2xsaW5nJztcbiAgc3R5bGUgPSB7fTtcbiAgcHJpdmF0ZSBfbW9kZTtcbiAgcHJpdmF0ZSBfaWNvbjtcbiAgcHJpdmF0ZSBfYWN0aW9uO1xuICBwcml2YXRlIF90aW1lciA9IG51bGw7XG4gIHByaXZhdGUgX3dpZHRoO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdG9wU2Nyb2xsaW5nKHZhbHVlKSB7XG4gICAgdGhpcy5pc1N0b3BTY3JvbGwgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMubWFycXVlZVNjcm9sbCA9ICdzY3JvbGxpbmctc3RvcCc7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLm1hcnF1ZWVTY3JvbGwgPSAnc2Nyb2xsaW5nJztcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuICBzZXQgbW9kZSh2YWx1ZSkge1xuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5faWNvbjtcbiAgfVxuICBzZXQgaWNvbih2YWx1ZSkge1xuICAgIHRoaXMuX2ljb24gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgYWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb247XG4gIH1cbiAgc2V0IGFjdGlvbih2YWx1ZSkge1xuICAgIHRoaXMuX2FjdGlvbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIG1hcnF1ZWVQcm9wcyA9IHsgbG9vcDogdHJ1ZSwgbGVhZGluZzogNTAwLCB0cmFpbGluZzogODAwMCwgZnBzOiAyMDAsIHN0eWxlOiB7fSB9O1xuICBASW5wdXQoKVxuICBub3RpY2VCYXJjb250ZW50ID0gJyc7XG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9pY29uSGFuZGxlcjogSWNvbkhhbmRsZXIpIHtcbiAgICB0aGlzLl9pY29uSGFuZGxlci5sb2FkKCk7XG4gIH1cblxuICBjbGljaygpIHtcbiAgICB0aGlzLm9uQ2xpY2suZW1pdCh0aGlzLl9tb2RlKTtcbiAgICBpZiAodGhpcy5fbW9kZSA9PT0gJ2Nsb3NhYmxlJykge1xuICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkYXRhUHJvY2VzcygpIHtcbiAgICB0aGlzLmlzU2hvdyA9IHRydWU7XG4gICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgIHdpZHRoOiAnMjAwJSdcbiAgICB9O1xuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IHRoaXMuX3dpZHRoKSB7XG4gICAgICBjb25zdCBjb3VudCA9IHRoaXMubWFycXVlZVByb3BzLmxvb3AgPyAnaW5maW5pdGUnIDogMTtcbiAgICAgIHRoaXMuc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOiB0aGlzLl93aWR0aCAqIDIgKyAncHgnLFxuICAgICAgICAnYW5pbWF0aW9uLWRlbGF5JzogYCR7dGhpcy5tYXJxdWVlUHJvcHMubGVhZGluZ31tc2AsXG4gICAgICAgICdhbmltYXRpb24tZHVyYXRpb24nOiBgJHsoMSAvIHRoaXMubWFycXVlZVByb3BzLmZwcykgKiAxMDAwfXNgLFxuICAgICAgICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCc6IGAke2NvdW50fWBcbiAgICAgIH07XG5cbiAgICAgIHNjcm9sbC5jYWxsKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcnF1ZWVTY3JvbGwgPSAnc2Nyb2xsaW5nLXN0b3AnO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm1hcnF1ZWVTY3JvbGwgPSAnc2Nyb2xsaW5nLXN0b3AnO1xuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm1hcnF1ZWVTY3JvbGwgPSAnc2Nyb2xsaW5nJztcbiAgICB9KTtcbiAgICB0aGlzLl93aWR0aCA9IGdldFJlY3RXaWR0aCh0aGlzLm5vdGljZUJhcmNvbnRlbnQpO1xuICAgIHRoaXMuZGF0YVByb2Nlc3MoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGwoKSB7XG4gIGxldCBzdHlsZURvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub3RpY2VfYmFyX2FuaW1hdGlvbl9jbHMnKTtcbiAgaWYgKHN0eWxlRG9tKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN0eWxlRG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGVEb20uc2V0QXR0cmlidXRlKCdpZCcsICdub3RpY2VfYmFyX2FuaW1hdGlvbl9jbHMnKTtcbiAgc3R5bGVEb20uaW5uZXJIVE1MID0gYEAtd2Via2l0LWtleWZyYW1lcyBub3RpY2ViYXJtYXJxdWVleyAwJSB7IGxlZnQ6IDBweDsgfSAxMDAlIHsgbGVmdDogLSR7dGhpcy5fd2lkdGh9cHg7IH19YDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdHlsZURvbSk7XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RXaWR0aCh0ZXh0KSB7XG4gIGNvbnN0IF9kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgX2RvbS5pbm5lckhUTUwgPSB0ZXh0O1xuICBfZG9tLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgX2RvbS5zdHlsZS5sZWZ0ID0gJy05OTk5JztcbiAgX2RvbS5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7XG4gIF9kb20uc3R5bGUuZm9udFNpemUgPSAnMTRweCc7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX2RvbSk7XG4gIGNvbnN0IF93ID0gX2RvbS5jbGllbnRXaWR0aCArIDIwO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKF9kb20pO1xuICByZXR1cm4gX3c7XG59XG4iXX0=