ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
234 lines (233 loc) • 16.7 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';
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=