UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

317 lines (310 loc) 10.9 kB
import { EventEmitter, Component, ElementRef, Inject, Input, Output, NgModule } from '@angular/core'; import { DOCUMENT, CommonModule } from '@angular/common'; import { ButtonModule } from '@duoduo-oba/ng-devui/button'; import { __awaiter } from 'tslib'; /** * @fileoverview added by tsickle * Generated from: fullscreen.config.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ const DEFAULT_MODE = 'immersive'; /** @type {?} */ const DEFAULT_ZINDEX = 10; /** @type {?} */ const ESC_KEYCODE = 27; /** * @fileoverview added by tsickle * Generated from: fullscreen.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class FullscreenComponent { /** * @param {?} elementRef * @param {?} doc */ constructor(elementRef, doc) { this.elementRef = elementRef; this.doc = doc; this.isFullscreen = false; this.mode = DEFAULT_MODE; this.zIndex = DEFAULT_ZINDEX; this.fullscreenLaunch = new EventEmitter(); this.onFullScreenChange = (/** * @param {?} event * @return {?} */ (event) => { if (this.currentTarget) { /** @type {?} */ const targetElement = this.currentTarget; if (this.doc.fullscreenElement) { // 进入全屏 this.launchNormalFullscreen(targetElement); } else { // 退出全屏 this.currentTarget = null; this.exitNormalFullscreen(targetElement); } // F11退出全屏时,需要将全屏状态传出去 /** @type {?} */ const isFullscreen = !!this.doc.fullscreenElement; this.fullscreenLaunch.emit({ isFullscreen }); this.isFullscreen = isFullscreen; } }); this.handleFullscreen = (/** * @return {?} */ () => __awaiter(this, void 0, void 0, function* () { /** @type {?} */ const targetElement = this.elementRef.nativeElement.querySelector('[fullscreen-target]'); /** @type {?} */ let isFullscreen; if (this.mode === 'normal') { /** @type {?} */ const fullscreen = targetElement.classList.contains('fullscreen'); if (!fullscreen) { // 进入全屏 this.launchNormalFullscreen(targetElement); isFullscreen = true; } else { // 退出全屏 this.exitNormalFullscreen(targetElement); isFullscreen = false; } } else { this.currentTarget = targetElement; if (this.doc.fullscreenElement) { isFullscreen = yield this.exitImmersiveFullScreen(this.doc); } else { isFullscreen = yield this.launchImmersiveFullScreen(this.doc.documentElement); } } this.isFullscreen = isFullscreen; this.fullscreenLaunch.emit({ isFullscreen }); })); this.handleKeyDown = (/** * @param {?} event * @return {?} */ (event) => { if (event.keyCode === ESC_KEYCODE) { // 按ESC键退出全屏 if (this.isFullscreen) { /** @type {?} */ const targetElement = this.elementRef.nativeElement.querySelector('[fullscreen-target]'); if (this.mode === 'normal') { this.exitNormalFullscreen(targetElement); } else { if (this.doc.fullscreenElement) { this.exitImmersiveFullScreen(this.doc); } } this.fullscreenLaunch.emit({ isFullscreen: false }); this.isFullscreen = false; } } }); } /** * @return {?} */ ngOnInit() { document.addEventListener('fullscreenchange', this.onFullScreenChange); document.addEventListener('keydown', this.handleKeyDown); /** @type {?} */ const btnLaunch = this.elementRef.nativeElement.querySelector('[fullscreen-launch]'); if (btnLaunch) { btnLaunch.addEventListener('click', this.handleFullscreen); } } /** * @private * @param {?} targetElement * @return {?} */ launchNormalFullscreen(targetElement) { targetElement.classList.add('fullscreen'); if (this.zIndex) { targetElement.setAttribute('style', `z-index: ${this.zIndex}`); } } /** * @private * @param {?} targetElement * @return {?} */ exitNormalFullscreen(targetElement) { targetElement.classList.remove('fullscreen'); targetElement.style.zIndex = null; } /** * @private * @param {?} docElement * @return {?} */ launchImmersiveFullScreen(docElement) { return __awaiter(this, void 0, void 0, function* () { /** @type {?} */ let fullscreenLaunch; if (docElement.requestFullscreen) { fullscreenLaunch = docElement.requestFullscreen(); } else if (docElement.mozRequestFullScreen) { fullscreenLaunch = docElement.mozRequestFullScreen(); } else if (docElement.webkitRequestFullScreen) { fullscreenLaunch = docElement.webkitRequestFullScreen(); } else if (docElement.msRequestFullscreen) { fullscreenLaunch = docElement.msRequestFullscreen(); } return yield fullscreenLaunch.then((/** * @return {?} */ () => !!this.doc.fullscreenElement)); }); } /** * @private * @param {?} doc * @return {?} */ exitImmersiveFullScreen(doc) { return __awaiter(this, void 0, void 0, function* () { /** @type {?} */ let fullscreenExit; if (doc.exitFullscreen) { fullscreenExit = doc.exitFullscreen(); } else if (doc.mozCancelFullScreen) { fullscreenExit = doc.mozCancelFullScreen(); } else if (doc.webkitCancelFullScreen) { fullscreenExit = doc.webkitCancelFullScreen(); } else if (doc.msExitFullscreen) { fullscreenExit = doc.msExitFullscreen(); } return yield fullscreenExit.then((/** * @return {?} */ () => !!this.doc.fullscreenElement)); }); } /** * @return {?} */ ngOnDestroy() { document.removeEventListener('fullscreenchange', this.onFullScreenChange); document.removeEventListener('keydown', this.handleKeyDown); /** @type {?} */ const btnLaunch = this.elementRef.nativeElement.querySelector('[fullscreen-launch]'); if (btnLaunch) { btnLaunch.removeEventListener('click', this.handleFullscreen); } } } FullscreenComponent.decorators = [ { type: Component, args: [{ selector: 'd-fullscreen', template: "<div class=\"fullscreen-container\">\r\n <ng-content select=\"[fullscreen-launch]\"></ng-content>\r\n <ng-content select=\"[fullscreen-target]\"></ng-content>\r\n</div>\r\n", styles: [":host ::ng-deep .fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10;overflow:auto;background-color:#fff}"] }] } ]; /** @nocollapse */ FullscreenComponent.ctorParameters = () => [ { type: ElementRef }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; FullscreenComponent.propDecorators = { mode: [{ type: Input }], zIndex: [{ type: Input }], target: [{ type: Input }], fullscreenLaunch: [{ type: Output }] }; if (false) { /** * @type {?} * @private */ FullscreenComponent.prototype.currentTarget; /** * @type {?} * @private */ FullscreenComponent.prototype.isFullscreen; /** @type {?} */ FullscreenComponent.prototype.mode; /** @type {?} */ FullscreenComponent.prototype.zIndex; /** @type {?} */ FullscreenComponent.prototype.target; /** @type {?} */ FullscreenComponent.prototype.fullscreenLaunch; /** * @type {?} * @private */ FullscreenComponent.prototype.onFullScreenChange; /** * @type {?} * @private */ FullscreenComponent.prototype.handleFullscreen; /** * @type {?} * @private */ FullscreenComponent.prototype.handleKeyDown; /** * @type {?} * @private */ FullscreenComponent.prototype.elementRef; /** * @type {?} * @private */ FullscreenComponent.prototype.doc; } /** * @fileoverview added by tsickle * Generated from: fullscreen.module.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class FullscreenModule { } FullscreenModule.decorators = [ { type: NgModule, args: [{ imports: [ CommonModule, ButtonModule ], exports: [ FullscreenComponent ], declarations: [ FullscreenComponent ] },] } ]; /** * @fileoverview added by tsickle * Generated from: public-api.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * Generated from: ng-devui-fullscreen.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { FullscreenModule, FullscreenComponent as ɵa }; //# sourceMappingURL=ng-devui-fullscreen.js.map