ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
209 lines (208 loc) • 15.4 kB
JavaScript
/**
* @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';
export class NoticeBarComponent {
/**
* @param {?} _iconHandler
*/
constructor(_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();
}
/**
* @param {?} value
* @return {?}
*/
set stopScrolling(value) {
this.isStopScroll = value;
if (value) {
this.marqueeScroll = 'scrolling-stop';
clearTimeout(this._timer);
this._timer = setTimeout(function () {
this.marqueeScroll = 'scrolling';
}, 1000);
}
}
/**
* @return {?}
*/
get mode() {
return this._mode;
}
/**
* @param {?} value
* @return {?}
*/
set mode(value) {
this._mode = value;
}
/**
* @return {?}
*/
get icon() {
return this._icon;
}
/**
* @param {?} value
* @return {?}
*/
set icon(value) {
this._icon = value;
}
/**
* @return {?}
*/
get action() {
return this._action;
}
/**
* @param {?} value
* @return {?}
*/
set action(value) {
this._action = value;
}
/**
* @return {?}
*/
click() {
this.onClick.emit(this._mode);
if (this._mode === 'closable') {
this.isShow = false;
}
}
/**
* @return {?}
*/
dataProcess() {
this.isShow = true;
this.style = {
width: '200%'
};
if (window.innerWidth < this._width) {
/** @type {?} */
const 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 {?}
*/
ngOnInit() {
document.addEventListener('touchstart', () => {
this.marqueeScroll = 'scrolling-stop';
});
document.addEventListener('touchend', () => {
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 = () => [
{ 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 }]
};
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 {?} */
let 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 {?} */
const _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 {?} */
const _w = _dom.clientWidth + 20;
document.body.removeChild(_dom);
return _w;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbIm5vdGljZS1iYXIvbm90aWNlLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBT2hELE1BQU07Ozs7SUFzREosWUFBb0IsWUFBeUI7UUFBekIsaUJBQVksR0FBWixZQUFZLENBQWE7c0JBbkRwQyxLQUFLOzRCQUNDLEtBQUs7NkJBR0osV0FBVztxQkFDbkIsRUFBRTtzQkFJTyxJQUFJOzRCQW9DTixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQ0FFN0QsRUFBRTt1QkFFUSxJQUFJLFlBQVksRUFBRTtRQUc3QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQzFCOzs7OztJQXpDRCxJQUNJLGFBQWEsQ0FBQyxLQUFLO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztZQUN0QyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO2dCQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQzthQUNsQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ1Y7S0FDRjs7OztJQUNELElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtB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QyxZQUFZLENBQUMsSUFBSSxFQUFFLDBCQUEwQixDQUFDLENBQUM7SUFDeEQsUUFBUSxDQUFDLFNBQVMsR0FBRyx3RUFBd0UsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDO0lBQ2pILFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3JDOzs7OztBQUVELHNCQUFzQixJQUFJOztJQUN4QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFDaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxFQUFFLENBQUM7Q0FDWCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb25IYW5kbGVyIH0gZnJvbSAnLi4vY29yZS91dGlsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdOb3RpY2VCYXIsIG56bS1ub3RpY2UtYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vdGljZS1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtJY29uSGFuZGxlcl1cbn0pXG5leHBvcnQgY2xhc3MgTm90aWNlQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgYWN0aW9uRG9tOiBhbnk7XG5cbiAgaXNTaG93ID0gZmFsc2U7XG4gIGlzU3RvcFNjcm9sbCA9IGZhbHNlO1xuICBzdHlsZURvbTogYW55O1xuICByYXRlO1xuICBtYXJxdWVlU2Nyb2xsID0gJ3Njcm9sbGluZyc7XG4gIHN0eWxlID0ge307XG4gIHByaXZhdGUgX21vZGU7XG4gIHByaXZhdGUgX2ljb247XG4gIHByaXZhdGUgX2FjdGlvbjtcbiAgcHJpdmF0ZSBfdGltZXIgPSBudWxsO1xuICBwcml2YXRlIF93aWR0aDtcblxuICBASW5wdXQoKVxuICBzZXQgc3RvcFNjcm9sbGluZyh2YWx1ZSkge1xuICAgIHRoaXMuaXNTdG9wU2Nyb2xsID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm1hcnF1ZWVTY3JvbGwgPSAnc2Nyb2xsaW5nLXN0b3AnO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5tYXJxdWVlU2Nyb2xsID0gJ3Njcm9sbGluZyc7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGU7XG4gIH1cbiAgc2V0IG1vZGUodmFsdWUpIHtcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGljb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb247XG4gIH1cbiAgc2V0IGljb24odmFsdWUpIHtcbiAgICB0aGlzLl9pY29uID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGFjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uO1xuICB9XG4gIHNldCBhY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLl9hY3Rpb24gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBtYXJxdWVlUHJvcHMgPSB7IGxvb3A6IHRydWUsIGxlYWRpbmc6IDUwMCwgdHJhaWxpbmc6IDgwMDAsIGZwczogMjAwLCBzdHlsZToge30gfTtcbiAgQElucHV0KClcbiAgbm90aWNlQmFyY29udGVudCA9ICcnO1xuICBAT3V0cHV0KClcbiAgb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaWNvbkhhbmRsZXI6IEljb25IYW5kbGVyKSB7XG4gICAgdGhpcy5faWNvbkhhbmRsZXIubG9hZCgpO1xuICB9XG5cbiAgY2xpY2soKSB7XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQodGhpcy5fbW9kZSk7XG4gICAgaWYgKHRoaXMuX21vZGUgPT09ICdjbG9zYWJsZScpIHtcbiAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZGF0YVByb2Nlc3MoKSB7XG4gICAgdGhpcy5pc1Nob3cgPSB0cnVlO1xuICAgIHRoaXMuc3R5bGUgPSB7XG4gICAgICB3aWR0aDogJzIwMCUnXG4gICAgfTtcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCB0aGlzLl93aWR0aCkge1xuICAgICAgY29uc3QgY291bnQgPSB0aGlzLm1hcnF1ZWVQcm9wcy5sb29wID8gJ2luZmluaXRlJyA6IDE7XG4gICAgICB0aGlzLnN0eWxlID0ge1xuICAgICAgICB3aWR0aDogdGhpcy5fd2lkdGggKiAyICsgJ3B4JyxcbiAgICAgICAgJ2FuaW1hdGlvbi1kZWxheSc6IGAke3RoaXMubWFycXVlZVByb3BzLmxlYWRpbmd9bXNgLFxuICAgICAgICAnYW5pbWF0aW9uLWR1cmF0aW9uJzogYCR7KDEgLyB0aGlzLm1hcnF1ZWVQcm9wcy5mcHMpICogMTAwMH1zYCxcbiAgICAgICAgJ2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnOiBgJHtjb3VudH1gXG4gICAgICB9O1xuXG4gICAgICBzY3JvbGwuY2FsbCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXJxdWVlU2Nyb2xsID0gJ3Njcm9sbGluZy1zdG9wJztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgKCkgPT4ge1xuICAgICAgdGhpcy5tYXJxdWVlU2Nyb2xsID0gJ3Njcm9sbGluZy1zdG9wJztcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5tYXJxdWVlU2Nyb2xsID0gJ3Njcm9sbGluZyc7XG4gICAgfSk7XG4gICAgdGhpcy5fd2lkdGggPSBnZXRSZWN0V2lkdGgodGhpcy5ub3RpY2VCYXJjb250ZW50KTtcbiAgICB0aGlzLmRhdGFQcm9jZXNzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsKCkge1xuICBsZXQgc3R5bGVEb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm90aWNlX2Jhcl9hbmltYXRpb25fY2xzJyk7XG4gIGlmIChzdHlsZURvbSkge1xuICAgIHJldHVybjtcbiAgfVxuICBzdHlsZURvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlRG9tLnNldEF0dHJpYnV0ZSgnaWQnLCAnbm90aWNlX2Jhcl9hbmltYXRpb25fY2xzJyk7XG4gIHN0eWxlRG9tLmlubmVySFRNTCA9IGBALXdlYmtpdC1rZXlmcmFtZXMgbm90aWNlYmFybWFycXVlZXsgMCUgeyBsZWZ0OiAwcHg7IH0gMTAwJSB7IGxlZnQ6IC0ke3RoaXMuX3dpZHRofXB4OyB9fWA7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVEb20pO1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0V2lkdGgodGV4dCkge1xuICBjb25zdCBfZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIF9kb20uaW5uZXJIVE1MID0gdGV4dDtcbiAgX2RvbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIF9kb20uc3R5bGUubGVmdCA9ICctOTk5OSc7XG4gIF9kb20uc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICBfZG9tLnN0eWxlLmZvbnRTaXplID0gJzE0cHgnO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF9kb20pO1xuICBjb25zdCBfdyA9IF9kb20uY2xpZW50V2lkdGggKyAyMDtcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfZG9tKTtcbiAgcmV0dXJuIF93O1xufVxuIl19