{"version":3,"sources":["webpack:///./src/$_lazy_route_resource lazy namespace object","webpack:///./src/app/app.component.css","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.ts","webpack:///./src/app/bootstrap/app.module.ts","webpack:///./src/app/bootstrap/app.route.constants.ts","webpack:///./src/app/components/audio/audio.component.css","webpack:///./src/app/components/audio/audio.component.html","webpack:///./src/app/components/audio/audio.component.ts","webpack:///./src/app/components/found-pages/found.pages.component.css","webpack:///./src/app/components/found-pages/found.pages.component.html","webpack:///./src/app/components/found-pages/found.pages.component.ts","webpack:///./src/app/components/page-view/page-view.component.css","webpack:///./src/app/components/page-view/page-view.component.html","webpack:///./src/app/components/page-view/page-view.component.ts","webpack:///./src/app/components/page/page.component.css","webpack:///./src/app/components/page/page.component.html","webpack:///./src/app/components/page/page.component.ts","webpack:///./src/app/components/thumbnail/thumbnail.component.css","webpack:///./src/app/components/thumbnail/thumbnail.component.html","webpack:///./src/app/components/thumbnail/thumbnail.component.ts","webpack:///./src/app/components/thumbnails/thumbnails.component.css","webpack:///./src/app/components/thumbnails/thumbnails.component.html","webpack:///./src/app/components/thumbnails/thumbnails.component.ts","webpack:///./src/app/components/toolbar/toolbar.component.css","webpack:///./src/app/components/toolbar/toolbar.component.html","webpack:///./src/app/components/toolbar/toolbar.component.ts","webpack:///./src/app/components/video/video.component.css","webpack:///./src/app/components/video/video.component.html","webpack:///./src/app/components/video/video.component.ts","webpack:///./src/app/directives/mousewheel.directive.ts","webpack:///./src/app/interceptors/cache/cacheInterceptor.ts","webpack:///./src/app/interceptors/cache/requestCache.ts","webpack:///./src/app/models/audioPlayer.ts","webpack:///./src/app/models/document.ts","webpack:///./src/app/models/page.ts","webpack:///./src/app/services/config.service.ts","webpack:///./src/app/services/document.service.ts","webpack:///./src/app/services/find.service.ts","webpack:///./src/app/services/media.service.ts","webpack:///./src/app/utils/stringUtils.ts","webpack:///./src/environments/environment.ts","webpack:///./src/main.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";","module.exports = \".search-tab {\\r\\n    padding: 1em 0.5em !important;\\r\\n}\\r\\n\\r\\n.page-area {\\r\\n  overflow-x: auto !important;\\r\\n  min-width: 90px;\\r\\n  height: calc(100% - 80px) !important;\\r\\n  order: 2 !important;\\r\\n}\\r\\n\\r\\n.side-panel {\\r\\n    order: 0 !important;\\r\\n}\\r\\n\\r\\n.side-container {\\r\\n    padding-right: 24px;\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    -webkit-transform: translateY(-50%);\\r\\n    transform: translateY(-50%);\\r\\n    z-index: 9999;\\r\\n}\\r\\n\\r\\n.side-button {\\r\\n    width: 12px;\\r\\n    height: 60px;\\r\\n    border: 1px solid #dddddd;\\r\\n    border-radius: 0px 5px 5px 0px;\\r\\n    box-shadow: 2px 0 9px 0px rgba(0,0,0,0.08);\\r\\n    background-color: whitesmoke;\\r\\n    background-image: -webkit-linear-gradient(top, white 1px, #f1f1f1 8px, #f9f9f9 47px, #eaeaea 100%);\\r\\n}\\r\\n\\r\\n.side-button span {\\r\\n    display: block;\\r\\n    height: 100%;\\r\\n    background: url(/content/images/html5client/arrow_right.png) no-repeat center center;\\r\\n}\\r\\n\\r\\n.side-container.open {\\r\\n    margin-left: 154px;\\r\\n}\\r\\n\\r\\n.open span {\\r\\n    background: url(/content/images/html5client/arrow_left.png) no-repeat center center;\\r\\n}\\r\\n\\r\\n.hidden {\\r\\n  display: none;\\r\\n}\\r\\n\\r\\n.page-area .busy{\\r\\n  height: 100%;\\r\\n  width: 100%;\\r\\n}\\r\\n\"","module.exports = \" <div *ngIf=\\\"panelResizeDisabled\\\" (click)=\\\"showPanel()\\\" class=\\\"side-container\\\"  [ngClass]=\\\"{'open': panelVisible}\\\">\\r\\n    <div class=\\\"side-button\\\">\\r\\n        <span></span>\\r\\n    </div>\\r\\n</div>\\r\\n\\r\\n<app-audio *ngIf=\\\"config.documentType == documentTypeEnum.Audio\\\"></app-audio>\\r\\n<app-video *ngIf=\\\"config.documentType == documentTypeEnum.Video\\\"></app-video>\\r\\n<as-split direction=\\\"horizontal\\\" [gutterSize]=\\\"5\\\" [ngClass]=\\\"{'hidden': config.documentType !== documentTypeEnum.Book}\\\" [disabled]=\\\"panelResizeDisabled\\\" unit=\\\"pixel\\\">\\r\\n    <as-split-area [size]=\\\"panelWidth\\\" [visible]=\\\"panelVisible\\\" class=\\\"side-panel\\\">\\r\\n        <accordion [closeOthers]=\\\"true\\\" (window:resize)=\\\"onResize()\\\">\\r\\n            <accordion-group #thumbnails (isOpenChange)=\\\"onOpen()\\\" [isOpen]=\\\"true\\\">\\r\\n                <div accordion-heading style=\\\"white-space: nowrap;\\\">\\r\\n                    <i class=\\\"icon switch\\\"\\r\\n                        [ngClass]=\\\"{'open': thumbnails?.isOpen, 'close': !thumbnails?.isOpen}\\\"></i>\\r\\n                    Наброски\\r\\n                </div>\\r\\n                <app-thumbnails [app]=\\\"this\\\" [thumbnailWidth]=\\\"122\\\" [thumbnailHeight]=\\\"170\\\"></app-thumbnails>\\r\\n            </accordion-group>\\r\\n            <accordion-group #search (isOpenChange)=\\\"onOpen()\\\">\\r\\n                <div accordion-heading style=\\\"white-space: nowrap;\\\">\\r\\n                    <i class=\\\"icon switch\\\"\\r\\n                        [ngClass]=\\\"{'open': search?.isOpen, 'close': !search?.isOpen}\\\"></i>\\r\\n                    Поиск\\r\\n                </div>\\r\\n                <div class=\\\"search-tab\\\">\\r\\n                    <input type=\\\"text\\\" class=\\\"search\\\" (keydown.enter)=\\\"FindText()\\\" name=\\\"query\\\" [(ngModel)]=\\\"query\\\" placeholder=\\\"Поиск...\\\" />\\r\\n                    <input type=\\\"submit\\\" (click)=\\\"FindText()\\\" class=\\\"button search\\\" value=\\\"Найти\\\" />\\r\\n                </div>\\r\\n                <app-found-pages\\r\\n                  [app]=\\\"this\\\"\\r\\n                  [thumbnailWidth]=\\\"122\\\"\\r\\n                  [foundPages]=\\\"foundPages\\\"\\r\\n                  [query]=\\\"query\\\"\\r\\n                  [pageComponent]=\\\"pageComponent\\\"\\r\\n                  [thumbnailHeight]=\\\"170\\\"></app-found-pages>\\r\\n            </accordion-group>\\r\\n        </accordion>\\r\\n    </as-split-area>\\r\\n\\r\\n    <as-split-area size=\\\"*\\\" class=\\\"page-area\\\">\\r\\n      <div class=\\\"busy\\\" #busy></div>\\r\\n        <app-page [app]=\\\"this\\\"></app-page>\\r\\n        <app-toolbar [app]=\\\"this\\\"></app-toolbar>\\r\\n    </as-split-area>\\r\\n</as-split>\\r\\n\"","import { Component, ElementRef, OnInit, ViewChild, ChangeDetectorRef, Renderer2 } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport {ThumbnailsComponent} from './components/thumbnails/thumbnails.component';\r\nimport {PageComponent} from './components/page/page.component';\r\nimport {ToolbarComponent} from './components/toolbar/toolbar.component';\r\nimport {FoundPagesComponent} from './components/found-pages/found.pages.component';\r\nimport {ConfigService, DocumentType} from './services/config.service';\r\nimport {DocumentService} from './services/document.service';\r\nimport {FindService} from './services/find.service';\r\n\r\nimport { Document } from './models/document';\r\nimport {FoundPage} from './models/foundPage';\r\nimport { isUndefined } from \"util\";\r\n\r\n@Component({\r\n    selector: 'app-root',\r\n    templateUrl: './app.component.html',\r\n    styleUrls: ['./app.component.css'],\r\n})\r\nexport class AppComponent implements OnInit {\r\n\r\n    @ViewChild(ThumbnailsComponent) thumbnailsComponent: ThumbnailsComponent;\r\n\r\n    @ViewChild(PageComponent) pageComponent: PageComponent;\r\n\r\n    @ViewChild(ToolbarComponent) toolbarComponent: ToolbarComponent;\r\n\r\n    @ViewChild(FoundPagesComponent) foundPagesComponent: FoundPagesComponent;\r\n\r\n    @ViewChild('busy')\r\n    busy: ElementRef;\r\n\r\n    @ViewChild('search')\r\n    search: ElementRef;\r\n\r\n    public query: string;\r\n    public foundPages: Array<FoundPage>;\r\n\r\n    public documentTypeEnum = DocumentType;\r\n\r\n    public currentPage: number = 1;\r\n\r\n    public panelVisible: boolean;\r\n    public panelResizeDisabled: boolean;\r\n    public panelWidth: number;\r\n    public isMobile: boolean = false;\r\n\r\n    public static TABLET_MAX_WIDTH = 1024;\r\n\r\n    private subscription;\r\n\r\n    constructor(\r\n        private renderer: Renderer2,\r\n        private changeDetectorRef: ChangeDetectorRef,\r\n        private route: ActivatedRoute,\r\n        private elementRef: ElementRef,\r\n        public config: ConfigService,\r\n        private documentService: DocumentService,\r\n        private findService: FindService) {\r\n        const app: any = this.elementRef.nativeElement;\r\n        this.config.documentUrl = app.getAttribute('data-url');\r\n        this.config.title = app.getAttribute('data-title');\r\n        this.config.documentType = app.getAttribute('data-type');\r\n        this.config.copyAllowed = (app.getAttribute('data-copyallowed').toLowerCase() == \"true\");\r\n        this.config.printAllowed = (app.getAttribute('data-printallowed').toLowerCase() == \"true\");\r\n        this.config.downloadAllowed = (app.getAttribute('data-downloadallowed').toLowerCase() == \"true\");\r\n        this.config.hardDownload = (app.getAttribute('data-harddownload').toLowerCase() == \"true\");\r\n        this.config.maxPageScale = app.getAttribute('data-pagemaxscale');\r\n        this.config.isRoom = app.getAttribute('data-isroom') === 'True';\r\n    }\r\n\r\n    ngOnInit() {\r\n        document.getElementById('splash').style.display = 'none';\r\n        if (this.config.documentType === DocumentType.Audio || this.config.documentType === DocumentType.Video) {\r\n            return;\r\n        }\r\n\r\n        this.route.fragment\r\n        .pipe(\r\n            map(fragment => new URLSearchParams(fragment)),\r\n            map(params => ({\r\n              page: parseInt(params.get('page'), 10) || 1\r\n            }))\r\n        )\r\n        .subscribe(res => {\r\n            this.currentPage = res.page;\r\n        });\r\n\r\n        this.thumbnailsComponent.pageComponent = this.pageComponent;\r\n\r\n        this.subscription = this.documentService.getDocument().subscribe(\r\n            (result: Document) => {\r\n                this.toolbarComponent.document = result;\r\n                this.toolbarComponent.page = result.pages[this.currentPage - 1];\r\n                this.toolbarComponent.refreshState();\r\n                this.thumbnailsComponent.document = result;\r\n                this.pageComponent.page = result.pages[this.currentPage - 1];\r\n                this.pageComponent.document = result;\r\n                this.thumbnailsComponent.scrollToPage(this.currentPage - 1);\r\n\r\n                this.renderer.setStyle(this.busy.nativeElement, 'display', 'none');\r\n            }\r\n        );\r\n\r\n        this.isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n        let hideThumbnails = document.documentElement.clientWidth <= 800 || this.isMobile;\r\n        this.panelVisible = !hideThumbnails;\r\n        this.panelResizeDisabled = hideThumbnails;\r\n        this.panelWidth = hideThumbnails? 155 : 170;\r\n\r\n      window.onbeforeunload = () => this.ngOnDestroy();\r\n    }\r\n\r\n    showPanel(visible = !this.panelVisible) {\r\n        if (!this.panelResizeDisabled)\r\n            return;\r\n\r\n        this.panelVisible = visible;\r\n        this.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    FindText() {\r\n        if (document.activeElement instanceof HTMLElement) {\r\n            document.activeElement.blur();\r\n        }\r\n\r\n        // Clear the canvas from previous results\r\n        this.pageComponent.pageView.highlights = null;\r\n        this.pageComponent.pageView.redrawCanvas();\r\n\r\n        if(isUndefined(this.query) || this.query.trim() == '') {\r\n            // Clear search results\r\n            this.foundPagesComponent.groupingFoundPage = [];\r\n            return;\r\n        }\r\n\r\n        let searchTab = this.elementRef.nativeElement.querySelector('.panel-collapse.show');\r\n        this.renderer.addClass(searchTab, \"busy\");\r\n        this.findService.FindText(this.query).subscribe(\r\n            result => {\r\n                this.foundPages = result;\r\n                this.foundPagesComponent.grouping(result);\r\n\r\n                let pageNumber = this.pageComponent.page.number;\r\n                let groupingPages = this.foundPagesComponent.groupingFoundPage;\r\n                this.renderer.removeClass(searchTab, \"busy\");\r\n                if (groupingPages[groupingPages.findIndex(i => i.Page === pageNumber)]) {\r\n                    this.foundPagesComponent.makePageHighlights(pageNumber, this.query);\r\n                }\r\n            },\r\n            error => {\r\n                this.renderer.removeClass(searchTab, \"busy\");\r\n            }\r\n        );\r\n    }\r\n\r\n    onResize() {\r\n        setTimeout(() => {\r\n          this.setThumbnailsPanelStyles();\r\n            }, 10);\r\n    }\r\n\r\n    onOpen() {\r\n        setTimeout(() => {\r\n            this.setThumbnailsPanelStyles();\r\n        }, 10);\r\n    }\r\n\r\n  setThumbnailsPanelStyles(){\r\n    let elem = this.elementRef.nativeElement.querySelector('.panel-collapse.collapse.in.show .panel-body');\r\n    if (elem == null) {\r\n      return;\r\n    }\r\n    let isSearchTab = elem.querySelector('.search-tab') !== null;\r\n    elem.style.height = `${window.innerHeight - elem.offsetTop - 2 - (isSearchTab ? 0 : 42)}px`;\r\n    elem.style.overflow = 'auto';\r\n    this.renderer.setStyle(elem, '-webkit-overflow-scrolling', 'touch');\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n      this.subscription = null;\r\n    }\r\n\r\n    this.thumbnailsComponent.ngOnDestroy();\r\n    this.pageComponent.pageView.ngOnDestroy();\r\n  }\r\n}\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport {BrowserAnimationsModule} from \"@angular/platform-browser/animations\";\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS  } from '@angular/common/http';\r\n\r\nimport { AccordionModule } from 'ngx-bootstrap/accordion';\r\nimport { AngularSplitModule } from 'angular-split';\r\nimport {DialogModule} from \"primeng/dialog\";\r\n\r\nimport { AppComponent } from '../app.component';\r\nimport { ThumbnailsComponent } from '../components/thumbnails/thumbnails.component';\r\nimport { ThumbnailComponent } from '../components/thumbnail/thumbnail.component';\r\nimport { PageViewComponent } from '../components/page-view/page-view.component';\r\nimport { PageComponent } from '../components/page/page.component';\r\nimport { ToolbarComponent } from '../components/toolbar/toolbar.component';\r\n\r\nimport { DocumentService } from '../services/document.service';\r\nimport { FindService } from '../services/find.service';\r\nimport { ConfigService } from '../services/config.service';\r\nimport {FoundPagesComponent} from '../components/found-pages/found.pages.component';\r\n\r\nimport { RequestCache } from '../interceptors/cache/requestCache';\r\nimport { CachingInterceptor } from '../interceptors/cache/cacheInterceptor';\r\nimport { AudioComponent } from '../components/audio/audio.component';\r\nimport { VideoComponent } from '../components/video/video.component';\r\nimport { MediaService } from 'app/services/media.service';\r\n\r\nimport { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to';\r\nimport { MouseWheelDirective } from '../directives/mousewheel.directive';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    AppComponent,\r\n    ThumbnailsComponent,\r\n    ThumbnailComponent,\r\n    PageViewComponent,\r\n    FoundPagesComponent,\r\n    PageComponent,\r\n    ToolbarComponent,\r\n    AudioComponent,\r\n    VideoComponent,\r\n    MouseWheelDirective\r\n  ],\r\n  imports: [\r\n    BrowserModule,\r\n    BrowserAnimationsModule,\r\n    HttpClientModule,\r\n    FormsModule,\r\n    AngularSplitModule,\r\n    DialogModule,\r\n    AccordionModule.forRoot(),\r\n    RouterModule.forRoot([]),\r\n    ScrollToModule.forRoot(),\r\n  ],\r\n  providers: [\r\n    MediaService,\r\n    ConfigService,\r\n    DocumentService,\r\n    FindService,\r\n    RequestCache,\r\n    { provide: HTTP_INTERCEPTORS, useClass: CachingInterceptor, multi: true }\r\n  ],\r\n  bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","\r\nexport const RouteConstants = {\r\n  Document: {\r\n      Sizes: '/page/sizes',\r\n      FindText: '/search/{query}',\r\n      FindTextOnPage: '/page/{page}/search?query={query}',\r\n      GetThumbnail: '/page/{pageNumber}/image/{dpi}',\r\n      GetLinks: '/page/{pageNumber}/links',\r\n      CheckAccess: '/access/{action}?pageNumbers={pageNumbers}',\r\n      Copy: '/copy?pageNumbers={pageNumbers}',\r\n      Print: '/print?pageNumbers={pageNumbers}&dpi={dpi}&format={pageFormat}',\r\n      Download: '/file',\r\n      HardDownload: '/details?download=true',\r\n      Stream: '/stream',\r\n      TrackRegister: '/track/{trackId}/register',\r\n      RegisterOpenEvent: '/open/statistics',\r\n      RegisterDisplayEvent: '/page/{pageNumber}/display/statistics',\r\n      NoCachePostfix: '/statistics'\r\n  }\r\n}\r\n\r\n","module.exports = \"#player {\\r\\n    height: 350px;\\r\\n    position: relative;\\r\\n    margin-top: 30px;\\r\\n}\\r\\n/* Top Info */\\r\\n#title {\\r\\n    position: absolute;\\r\\n    width: 100%;\\r\\n    top: 3%;\\r\\n    line-height: 34px;\\r\\n    height: 34px;\\r\\n    text-align: center;\\r\\n    font-size: 34px;\\r\\n    opacity: 0.9;\\r\\n    font-weight: 300;\\r\\n    color: #fff;\\r\\n    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n    z-index: 999;\\r\\n  }\\r\\n#timer {\\r\\n    position: absolute;\\r\\n    top: 205px;\\r\\n    left: 0;\\r\\n    text-align: left;\\r\\n    font-size: 16px;\\r\\n    font-weight: 300;\\r\\n    color: #375e8c;\\r\\n    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n    z-index: 999;\\r\\n  }\\r\\n#duration {\\r\\n    position: absolute;\\r\\n    top: 205px;\\r\\n    right: 0;\\r\\n    text-align: right;\\r\\n    font-size: 16px;\\r\\n    font-weight: 300;\\r\\n    color: #375e8c;\\r\\n    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n    z-index: 999;\\r\\n  }\\r\\n/* Controls */\\r\\n.controlsOuter {\\r\\n    position: absolute;\\r\\n    width: 100%;\\r\\n    height: 45px;\\r\\n    bottom: 20px;\\r\\n    z-index: 999;\\r\\n  }\\r\\n.controlsInner {\\r\\n    position: absolute;\\r\\n    width: 220px;\\r\\n    height: 50px;\\r\\n    left: 50%;\\r\\n    margin: 0 -110px;\\r\\n  }\\r\\n.btn {\\r\\n    position: absolute;\\r\\n    cursor: pointer;\\r\\n    //opacity: 0.9;\\r\\n    -webkit-filter: drop-shadow(1px 1px 0px rgba(0, 0, 0, 0.59));\\r\\n    filter: drop-shadow(1px 1px 0px rgba(0, 0, 0, 0.59));\\r\\n    -webkit-user-select: none;\\r\\n    -moz-user-select: none;\\r\\n     -ms-user-select: none;\\r\\n         user-select: none;\\r\\n    background-size: contain;\\r\\n  }\\r\\n.btn:hover {\\r\\n    opacity: 1;\\r\\n  }\\r\\n#playBtn {\\r\\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAABGCAYAAACaGVmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QThERThENUFDNkJEMTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QThERThENUJDNkJEMTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBOERFOEQ1OEM2QkQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBOERFOEQ1OUM2QkQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnFM7yIAAAFWSURBVHja7NRJDoMwDEDRcPL2ZoVeLEUtCyoCZPBsf8mS10+Wp5zzK6X0XGdJ0bdpRcnbPgfOESUFzjmKe5wrFLc4NSjucFpQ3OD0oJjHGUExiwOBYg4HEsUMDgaKehxMFLU4FCjqcChR1OBwoIjH4UQRiyMBRRyOJBQxOBJR2HEko7DhaEAhx9GEQoajEQUdRzMKGo4FFHAcSyhgOBZRhnEso3TjeEBpxvGEUo3jEeUWxzPKKU6gFHACpYATKMfegbLDWOcRl/Jr2X7JHI+2gOEZ5RTDI8othieUagwPKM0YllG6MSyiDGNYQgHDsIACjqEZBQ1DIwo6hiYUMgwNKOQYklHYMCSisGNIQhGDIQFFHAYnilgMDhTxGJQoajAoUNRhYKKoxcBAUY8BiWIGAwLFHMYIilmMHhTzGC0objBqUNxhXKG4xSihuMfYo8yB8d9HgAEATyefBJWpw70AAAAASUVORK5CYII=');\\r\\n    background-image: url('/scripts/document/dist/assets/icons/play.png');\\r\\n    width: 44px;\\r\\n    height: 45px;\\r\\n    left: 50%;\\r\\n    opacity: 0.6;\\r\\n    margin: auto -34.5px;\\r\\n  }\\r\\n#pauseBtn {\\r\\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAABGCAYAAACaGVmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MjkzRjNDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MjkzRjRDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBOERFOEQ1Q0M2QkQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTgyOTNGMkM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pne5d1AAAAB8SURBVHja7NCxCQAwAALBuP/QZoEUlinua0G4tD1j83Asv/4GChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFCpRXV4ABAOgpXYTDYwEwAAAAAElFTkSuQmCC');\\r\\n    background-image: url('/scripts/document/dist/assets/icons/pause.png');\\r\\n    width: 45px;\\r\\n    height: 45px;\\r\\n    left: 50%;\\r\\n    opacity: 0.6;\\r\\n    margin: auto -39.5px;\\r\\n  }\\r\\n#prevBtn {\\r\\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MjkzRkJDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MjkzRkNDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTgyOTNGOUM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTgyOTNGQUM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PndeAH8AAACtSURBVHja7NXJCcAgEAVQEevK0lk6M1aW6CGQQBBn+ephBv7F0wNn8Vd7OWCWnOjd2FpzYk7K2cJAxFEA78cwA6I3porohWlCoDEkBArDQmhjRAgtjApCilFFcDEQBAcTUYinKLcJCqFinGEMYxjDgDFpJkzZwDsSRf2mE4ni9gwEJW1gVZTWNKmgtEdbhELtGRYKvfRIqF4buAnV+xxUUaNu0y9q9KH8oG4BBgDjdpk0jMoz1gAAAABJRU5ErkJggg==');\\r\\n    background-image: url('/scripts/document/dist/assets/icons/prev.png');\\r\\n    width: 25px;\\r\\n    height: 25px;\\r\\n    left: 0;\\r\\n    top: 50%;\\r\\n    margin: -17.5px auto;\\r\\n    opacity: 0.6;\\r\\n  }\\r\\n#nextBtn {\\r\\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MjkzRjdDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MjkzRjhDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTgyOTNGNUM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTgyOTNGNkM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiFbkXsAAACvSURBVHja7NZBDoAgDARA9GPiz/yZ8DKsxgMHY1rYBQ5sshdCwiQcWpdSOqWb1BGrSn6RiTJjmKhiDANVjUGiYBgECo6pQdEwJSg6xoJqhtGgVFkeETZBekhjdqZ6g4H5QnXH5Cg/CkadiZmYiZkYdtYGb8QRMDdi144C1jfFd0AG69RG7jNB6nsvV3+IZhgNgo6xIGiYEgQcU4OAYRCIagwSUYxhIMwYJsKEuQQYABTs+qTMuF1rAAAAAElFTkSuQmCC');\\r\\n    background-image: url('/scripts/document/dist/assets/icons/next.png');\\r\\n    width: 25px;\\r\\n    height: 25px;\\r\\n    right: 25px;\\r\\n    top: 50%;\\r\\n    margin: -17.5px auto;\\r\\n    opacity: 0.6;\\r\\n  }\\r\\n#playlistBtn {\\r\\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUVBQzMwNzRDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUVBQzMwNzVDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxRUFDMzA3MkM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxRUFDMzA3M0M3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnWBPa0AAADGSURBVHjaYvz//z/DYAFMDIMIjDpm1DHDwjH/0fDugXAMCxK7AojPAnEHmpo0IFaisTsqIEECLPT+Q4ALlL0bihmQ+LQGYLsYoSXwf2iovAdiYyjbdaCiaQ+S2FkopjtgHK2bCESTC5r4+4GIKuQEjAz2DGQCHhTlDAtaLtoDjSJkoATN7iMzmjrRxO+NljODsZzpwBJNs0bLGShwhToCvWHVQYes7YruGJiFgljKmpEbTa5YKsrRcmbUMaOOGXUMNQBAgAEAm2XFJrn+jrsAAAAASUVORK5CYII=');\\r\\n    width: 35px;\\r\\n    height: 35px;\\r\\n    top: 50%;\\r\\n    left: 3%;\\r\\n    margin: -17.5px auto;\\r\\n  }\\r\\n#playBtn.loading {\\r\\n    transition: -webkit-transform 400ms ease-out;\\r\\n    transition: transform 400ms ease-out;\\r\\n    transition: transform 400ms ease-out, -webkit-transform 400ms ease-out;\\r\\n    -webkit-transform: scale(0.8);\\r\\n            transform: scale(0.8);\\r\\n    opacity: 0.3 !important;\\r\\n  }\\r\\n#volumeBtn {\\r\\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUVBQzMwNzBDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUVBQzMwNzFDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxRUFDMzA2RUM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxRUFDMzA2RkM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtAZ+FgAAAHRSURBVHja7FjRbYMwEIWqC7CCO4IzgjMCHYEV6AjuCHSEMAKMkIwAI5ARXFt9rox1phDA5KMnPSGwOZ4fx/mOVCmVPIu9JE9ke5GRGpejyeQanUapkXlj5lzEIMM1GqjRAyG1eNCLCeAVyDQq9WOdRoHrDeDP7YCM8reGiNQYQER6D6DIGHDc02xFJsfqjF00GDEnRCaBegp+RmMp8oyYERcmAAvMvWl8aLSBuQ2O58D4Ff7eqJiZa4MTF1OYUsZAwF9BKaOw0tsf6pjx+wwVXWU41Pwk1DF2opQRK7+skDIyECMlrv8GfoztwMaW9K7XTqKMujeZV8SQma31eO0iNpkW8L/a3t02Yu7aITL8CDL2S2VE/jqsnnHJ3I8urnpKldhkOEFmdB6TTO7kFveVRScjoExLqBWVTIbsax765RFh7n74GoFMiQefCLXcbWFEhs/MFfeFZGon9fsx1I78PVDPyA3qmXyqnhEzV1lgRT124/rBSq+Dj/Pa7sDUPVesrEGRvUSZMlQ/rSmgCqc7qBZ0B7aQ37RVsb2QJOIp1DcNUDXbg4wFw2qV06j5ZCqQYSE/yYZ1LxVPvjJ86v50p/8ztr96X3JT+v+zKGDfAgwAZkMcn0x+AsMAAAAASUVORK5CYII=');\\r\\n    background-image: url('/scripts/document/dist/assets/icons/volume.png');\\r\\n    width: 35px;\\r\\n    height: 35px;\\r\\n    top: 50%;\\r\\n    right: 3%;\\r\\n    margin: -17.5px auto;\\r\\n  }\\r\\n#volumeBtn.muted {\\r\\n    background-image: url('/scripts/document/dist/assets/icons/volume_muted.png');\\r\\n  }\\r\\n#play {\\r\\n    position: absolute;\\r\\n    left: 42px;\\r\\n    top: -12px;\\r\\n    height: 70px;\\r\\n  }\\r\\n/* Progress */\\r\\n#waveform {\\r\\n    width: 100%;\\r\\n    height: 20px;\\r\\n    position: absolute;\\r\\n    left: 0;\\r\\n    bottom: 75px;\\r\\n    cursor: pointer;\\r\\n    opacity: 0.8;\\r\\n    -webkit-user-select: none;\\r\\n    -moz-user-select: none;\\r\\n     -ms-user-select: none;\\r\\n         user-select: none;\\r\\n    -webkit-transform: translate(0, -50%);\\r\\n            transform: translate(0, -50%);\\r\\n    z-index: 9999;\\r\\n  }\\r\\n#waveform:hover {\\r\\n    opacity: 1;\\r\\n  }\\r\\n#bar {\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 2px;\\r\\n    //background-color: rgba(255, 255, 255, 0.9);\\r\\n    //box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n    opacity: 0.9;\\r\\n  }\\r\\n#progress {\\r\\n    width: 0%;\\r\\n    height: 100%;\\r\\n    background-color: rgba(57, 101, 146, 0.45);\\r\\n    z-index: 2;\\r\\n  }\\r\\n#progressWrapper {\\r\\n    position: absolute;\\r\\n    height: 20px;\\r\\n    width: 100%;\\r\\n    background: silver;\\r\\n    left: 0;\\r\\n    bottom: 85px;\\r\\n  }\\r\\n#loadingProgress {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 0%;\\r\\n    height: 100%;\\r\\n    background-color: rgba(0, 0, 0, 0.1);\\r\\n    z-index: 1;\\r\\n    display: none;\\r\\n  }\\r\\n@-webkit-keyframes sk-scaleout {\\r\\n    0% { -webkit-transform: scale(0) }\\r\\n    100% {\\r\\n      -webkit-transform: scale(1.0);\\r\\n      opacity: 0;\\r\\n    }\\r\\n  }\\r\\n@keyframes sk-scaleout {\\r\\n    0% { \\r\\n      -webkit-transform: scale(0);\\r\\n      transform: scale(0);\\r\\n    } 100% {\\r\\n      -webkit-transform: scale(1.0);\\r\\n      transform: scale(1.0);\\r\\n      opacity: 0;\\r\\n    }\\r\\n  }\\r\\n/* Plylist */\\r\\n#playlist {\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    background-color: rgba(0, 0, 0, 0.5);\\r\\n    display: none;\\r\\n  }\\r\\n#list {\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    justify-content: center;\\r\\n    align-items: center;\\r\\n  }\\r\\n.list-song {\\r\\n    width: 100%;\\r\\n    height: 120px;\\r\\n    font-size: 50px;\\r\\n    line-height: 120px;\\r\\n    text-align: center;\\r\\n    font-weight: bold;\\r\\n    color: #fff;\\r\\n    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n  }\\r\\n.list-song:hover {\\r\\n    background-color: rgba(255, 255, 255, 0.1);\\r\\n    cursor: pointer;\\r\\n  }\\r\\n/* Volume */\\r\\n#volume {\\r\\n    width: 140px;\\r\\n    height: 50px;\\r\\n    position: absolute;\\r\\n    right: 100px;\\r\\n    border: 25px;\\r\\n    touch-action: none;\\r\\n    -webkit-user-select: none;\\r\\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\r\\n    z-index: 9999;\\r\\n    padding: 0 7px;\\r\\n    border-radius: 5px;\\r\\n    bottom: 18px;\\r\\n  }\\r\\n.bar {\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    left: 5%;\\r\\n    margin: -5px auto;\\r\\n    height: 10px;\\r\\n    background-color: rgba(255, 255, 255, 0.9);\\r\\n    box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n  }\\r\\n#barEmpty {\\r\\n    width: 100%;\\r\\n    opacity: 0.5;\\r\\n    box-shadow: none;\\r\\n    cursor: pointer;\\r\\n    background: #545454;\\r\\n    pointer-events: none;\\r\\n  }\\r\\n#barFull {\\r\\n    width: 100%;\\r\\n  }\\r\\n#sliderBtn {\\r\\n    width: 20px;\\r\\n    height: 20px;\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    margin: -10px auto;\\r\\n    background-color: rgba(255, 255, 255);\\r\\n    box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.33);\\r\\n    border-radius: 25px;\\r\\n    cursor: pointer;\\r\\n    pointer-events: none;\\r\\n    border: 1px solid #ccc;\\r\\n  }\\r\\n/* Fade-In */\\r\\n.fadeout {\\r\\n    webkit-animation: fadeout 0.5s;\\r\\n    -webkit-animation: fadeout 0.5s;\\r\\n            animation: fadeout 0.5s;\\r\\n  }\\r\\n.fadein {\\r\\n    webkit-animation: fadein 0.5s;\\r\\n    -webkit-animation: fadein 0.5s;\\r\\n            animation: fadein 0.5s;\\r\\n  }\\r\\n@keyframes fadein {\\r\\n    from { opacity: 0; }\\r\\n    to   { opacity: 1; }\\r\\n  }\\r\\n@-webkit-keyframes fadein {\\r\\n    from { opacity: 0; }\\r\\n    to   { opacity: 1; }\\r\\n  }\\r\\n@keyframes fadeout {\\r\\n    from { opacity: 1; }\\r\\n    to   { opacity: 0; }\\r\\n  }\\r\\n@-webkit-keyframes fadeout {\\r\\n    from { opacity: 1; }\\r\\n    to   { opacity: 0; }\\r\\n  }\\r\\nul.tracks {\\r\\n    padding: 0;\\r\\n}\\r\\n.tracks li {\\r\\n    height: 40px;\\r\\n    line-height: 40px;\\r\\n    background-color: #f8f6f6;\\r\\n    border: 1px solid #eae8e8;\\r\\n    padding: 0 15px;\\r\\n    font-size: 16px;\\r\\n    color: #515151;\\r\\n}\\r\\n.tracks li span.trackId {\\r\\n    margin-right: 10px;\\r\\n}\\r\\n.tracks li span.trackDuration {\\r\\n  float: right;\\r\\n}\\r\\n.tracks li.selected {\\r\\n    background-color: #e4e2e2;\\r\\n    border: 1px solid #dbdada;\\r\\n}\\r\\n.tracks li:hover {\\r\\n    background-color: #e4e2e28c;\\r\\n}\\r\\n#canvas {\\r\\n    position: absolute;\\r\\n    z-index: 2;\\r\\n    width: 100%;\\r\\n    top: -25px;\\r\\n}\\r\\n@-webkit-keyframes spin {\\r\\n  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\\r\\n}\\r\\n@keyframes spin {\\r\\n  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\\r\\n}\\r\\n.stroke-dotted {\\r\\n  opacity: 0;\\r\\n  stroke-dasharray: 5,5;\\r\\n  stroke-width: 0px;\\r\\n  -webkit-transform-origin: 50% 50%;\\r\\n          transform-origin: 50% 50%;\\r\\n  -webkit-animation: spin 4s infinite linear;\\r\\n          animation: spin 4s infinite linear;\\r\\n  transition: opacity 1s ease, \\r\\n              stroke-width 2s ease;\\r\\n}\\r\\n.loading .stroke-dotted {\\r\\n    stroke-width: 2px;\\r\\n    opacity: 0.9;\\r\\n  }\\r\\n#albumTitle {\\r\\n    font-size: 20px;\\r\\n    color: #515151;\\r\\n    margin: 5px 0;\\r\\n    margin-top: 15px;\\r\\n  }\"","module.exports = \"<div id=\\\"main\\\">\\r\\n  <div id=\\\"canvas\\\" style=\\\"height:300px;\\\"></div>\\r\\n  <div id=\\\"player\\\">\\r\\n    <div id=\\\"title\\\">\\r\\n      <span id=\\\"track\\\"></span>\\r\\n      <div id=\\\"timer\\\">{{formatTime(currentStep)}}</div>\\r\\n      <div id=\\\"duration\\\">{{formatTime(duration)}}</div>\\r\\n    </div>\\r\\n\\r\\n    <!-- Controls -->\\r\\n    <div class=\\\"controlsOuter\\\">\\r\\n      <div class=\\\"controlsInner\\\">\\r\\n        <div id=\\\"loading\\\" [ngClass]=\\\"{'loading':showLoadingProgress && playerStatus() != playerStateEnum.Playing}\\\">\\r\\n          <svg version=\\\"1.1\\\" id=\\\"play\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" height=\\\"100px\\\" width=\\\"100px\\\"\\r\\n            viewBox=\\\"0 0 100 100\\\" enable-background=\\\"new 0 0 100 100\\\" xml:space=\\\"preserve\\\">\\r\\n            <path class=\\\"stroke-dotted\\\" fill=\\\"none\\\" stroke=\\\"#9e9e9e\\\"  d=\\\"M49.9,2.5C23.6,2.8,2.1,24.4,2.5,50.4C2.9,76.5,24.7,98,50.3,97.5c26.4-0.6,47.4-21.8,47.2-47.7\\r\\n              C97.3,23.7,75.7,2.3,49.9,2.5\\\"/>\\r\\n          </svg>\\r\\n        </div>\\r\\n        <div class=\\\"btn\\\" id=\\\"playBtn\\\" *ngIf=\\\"playerStatus() != playerStateEnum.Playing\\\" (click)=\\\"play()\\\" [ngClass]=\\\"{'loading':showLoadingProgress}\\\"></div>\\r\\n        <div class=\\\"btn\\\" id=\\\"pauseBtn\\\" *ngIf=\\\"playerStatus() == playerStateEnum.Playing\\\" (click)=\\\"pause()\\\"></div>\\r\\n        <div class=\\\"btn\\\" id=\\\"prevBtn\\\" (click)=\\\"prev()\\\"></div>\\r\\n        <div class=\\\"btn\\\" id=\\\"nextBtn\\\" (click)=\\\"next()\\\"></div>\\r\\n      </div>\\r\\n      <div class=\\\"btn\\\" id=\\\"volumeBtn\\\" [ngClass]=\\\"{'muted': audioPlayer.muted()}\\\" (click)=\\\"toggleMute()\\\"></div>\\r\\n    </div>\\r\\n\\r\\n    <!-- Progress -->\\r\\n    <div id=\\\"waveform\\\" (click)=\\\"seek($event)\\\"></div>\\r\\n    <div id=\\\"bar\\\"></div>\\r\\n    <div id=\\\"progressWrapper\\\">\\r\\n      <div id=\\\"progress\\\" [style.width.%]=\\\"currentProgress\\\"></div>\\r\\n    </div>\\r\\n    <div id=\\\"loadingProgress\\\" [style.width.%]=\\\"loadingProgress\\\"></div>\\r\\n\\r\\n    <!-- Playlist -->\\r\\n    <div id=\\\"playlist\\\">\\r\\n      <div id=\\\"list\\\"></div>\\r\\n    </div>\\r\\n\\r\\n    <!-- Volume -->\\r\\n    <div id=\\\"volume\\\" (mousemove)=\\\"move($event)\\\" (mousedown)=\\\"volumeSliderDown=true\\\" (mouseup)=\\\"volumeSliderDown=false\\\"  (mouseleave)=\\\"volumeSliderDown=false\\\">\\r\\n      <div id=\\\"barFull\\\" class=\\\"bar\\\" (click)=\\\"move($event, true)\\\"></div>\\r\\n      <div id=\\\"barEmpty\\\" class=\\\"bar\\\" [style.width.%]=\\\"volume*100\\\"></div>\\r\\n      <div id=\\\"sliderBtn\\\"></div>\\r\\n    </div>\\r\\n  </div>\\r\\n  <div>\\r\\n    <div id=\\\"albumTitle\\\">{{albumTitle}}</div>\\r\\n    <ul class=\\\"tracks\\\">\\r\\n      <li *ngFor=\\\"let track of tracks; index as i;\\\" [ngClass]=\\\"{'selected': i == currentIndex }\\\" (click)=\\\"play(track)\\\">\\r\\n        <span class=\\\"trackId\\\">{{i+1}}.</span>\\r\\n        <span class=\\\"trackTitle\\\">{{track.title}}</span>\\r\\n        <span class=\\\"trackDuration\\\">{{formatTime(track.duration)}}</span>\\r\\n      </li>\\r\\n    </ul>\\r\\n  </div>\\r\\n</div>\\r\\n\"","import { Component, OnInit } from '@angular/core';\r\n\r\nimport { Howl, Howler } from 'howler';\r\nimport { MediaService } from 'app/services/media.service';\r\nimport { MediaInfo } from 'app/models/media';\r\nimport { HowlAudioPlayer, PlayerState } from 'app/models/audioPlayer';\r\nimport { AnimationMetadataType } from '@angular/animations';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { ConfigService } from 'app/services/config.service';\r\n\r\nvar SiriWave: any;\r\n\r\n@Component({\r\n  selector: 'app-audio',\r\n  templateUrl: './audio.component.html',\r\n  styleUrls: ['./audio.component.css']\r\n})\r\nexport class AudioComponent implements OnInit {\r\n\r\n  private currentIndex: number = 0;\r\n  private showLoadingProgressSubject: Subject<boolean> = new Subject<boolean>();\r\n\r\n  private analyser: any;\r\n  private siriWaveInstance: any;\r\n  private showStartScrobbleTimer = false;\r\n\r\n  public tracks: MediaInfo[];\r\n  public audioPlayer: HowlAudioPlayer = new HowlAudioPlayer();\r\n  public currentStep: number;\r\n  public duration: number;\r\n  public showLoadingProgress: boolean = false;\r\n  public playerStateEnum = PlayerState;\r\n  public loadingProgress: number;\r\n  public currentProgress: number;\r\n  public albumTitle: string = '';\r\n  public volumeSliderDown = false;\r\n  public volume: number;\r\n\r\n  constructor(private audioService: MediaService, private configService: ConfigService) { }\r\n\r\n  ngOnInit() {\r\n    this.albumTitle = this.configService.title;\r\n    this.showStartScrobbleTimer = true;\r\n\r\n    this.showLoadingProgressSubject\r\n    .pipe(debounceTime(200), distinctUntilChanged())\r\n    .subscribe((value) => { this.showLoadingProgress = value; });\r\n\r\n    this.volume = Number.parseFloat(localStorage.getItem('audio:volume')) || 0.5;\r\n    let volumeBar = document.getElementById('barFull');\r\n    let slider = document.getElementById('sliderBtn');\r\n    slider.style.left = (volumeBar.clientWidth * this.volume) + 'px';\r\n    this.audioPlayer.volume(this.volume);\r\n\r\n    this.loadTracks();\r\n  }\r\n\r\n  loadTracks() {\r\n    this.audioService.getTracks().subscribe((result) => {\r\n      this.tracks = result;\r\n      this.audioPlayer.setPlaylist(this.tracks);\r\n      this.onTracksLoaded();\r\n    });\r\n  }\r\n\r\n  onTracksLoaded() {\r\n    this.audioPlayer.onPlay.subscribe((track) => this.onPlay(track));\r\n    this.audioPlayer.onLoadProgress.subscribe((result: [MediaInfo, number]) => { this.loadingProgress = result[1]; });\r\n    this.audioPlayer.onSeek.subscribe((result: [MediaInfo, number]) => this.onSeek());\r\n    this.audioPlayer.onEnd.subscribe(() => { this.showStartScrobbleTimer = true; });\r\n\r\n    this.analyser = Howler.ctx.createAnalyser();\r\n    Howler.masterGain.connect(this.analyser);\r\n\r\n    this.siriWaveInstance = new (<any>window).SiriWave({\r\n      container: document.getElementById('canvas'),\r\n      speed: 0.1,\r\n      amplitude: 0,\r\n      color: '#375e8c'\r\n    });\r\n    this.siriWaveInstance.start();\r\n\r\n    setInterval(() => { this.renderFrame(); }, 100);\r\n    this.audioService.registerOpenEvent();\r\n  }\r\n\r\n  play(track: MediaInfo) {\r\n    this.currentProgress = 0;\r\n    this.showLoadingProgressSubject.next(true);\r\n\r\n    if (track !== undefined) {\r\n      this.currentIndex = this.tracks.indexOf(track);\r\n    }\r\n\r\n    this.audioPlayer.play(this.currentIndex);\r\n    this.loadingProgress = 0;\r\n    Howler.masterGain.connect(this.analyser);\r\n    this.analyser.connect(Howler.ctx.destination);\r\n  }\r\n\r\n  stop() {\r\n    this.currentProgress = 0;\r\n    this.stopScrobbleTimer(true);\r\n    this.audioPlayer.stop();\r\n  }\r\n\r\n  pause() {\r\n    this.stopScrobbleTimer(false);\r\n    this.showStartScrobbleTimer = true;\r\n    this.audioPlayer.pause();\r\n  }\r\n\r\n  prev() {\r\n    this.showLoadingProgressSubject.next(true);\r\n    this.currentProgress = 0;\r\n    this.stopScrobbleTimer(true);\r\n    this.audioPlayer.playPrevious();\r\n  }\r\n\r\n  next() {\r\n    this.showLoadingProgressSubject.next(true);\r\n    this.currentProgress = 0;\r\n    this.stopScrobbleTimer(true);\r\n    this.audioPlayer.playNext();\r\n  }\r\n\r\n  setVolume(value: number) {\r\n    this.audioPlayer.volume(value);\r\n  }\r\n\r\n  toggleMute() {\r\n    this.audioPlayer.mute(!this.audioPlayer.muted());\r\n  }\r\n\r\n  formatTime(secs: number) {\r\n    let minutes = Math.floor(secs / 60) || 0;\r\n    let seconds = (secs - minutes * 60) || 0;\r\n\r\n    return minutes + ':' + (seconds < 10 ? '0' : '') + Math.floor(seconds);\r\n  }\r\n\r\n  onPlay(track: MediaInfo) {\r\n    this.showLoadingProgressSubject.next(false);\r\n    let prevIndex = this.currentIndex;\r\n    this.currentIndex = this.tracks.indexOf(track);\r\n\r\n    if (prevIndex !== this.currentIndex || this.showStartScrobbleTimer) {\r\n      this.startScrobbleTimer();\r\n      this.showStartScrobbleTimer = false;\r\n    }\r\n\r\n    this.duration = this.audioPlayer.duration();\r\n    this.onStep();\r\n  }\r\n\r\n  onSeek() {\r\n    this.onStep();\r\n  }\r\n\r\n  onStep() {\r\n    this.currentStep = this.audioPlayer.seek() || 0;\r\n    this.currentProgress = this.currentStep * 100 / this.audioPlayer.duration();\r\n    if (this.audioPlayer.state() === PlayerState.Playing) {\r\n      requestAnimationFrame(() => { this.onStep(); });\r\n    }\r\n  }\r\n\r\n  playerStatus(): PlayerState {\r\n    if (this.tracks === undefined) {\r\n      return;\r\n    }\r\n    return this.audioPlayer.state();\r\n  }\r\n\r\n  seek(event) {\r\n    let percent = event.offsetX / event.target.clientWidth;\r\n    this.audioPlayer.seek(this.audioPlayer.duration() * percent);\r\n  }\r\n\r\n  move(event, force: boolean = false) {\r\n    if (this.volumeSliderDown || force) {\r\n      let slider = document.getElementById('sliderBtn');\r\n\r\n      if (event.target !== slider) {\r\n        slider.style.left = event.offsetX + 'px';\r\n      }\r\n\r\n      let volume = Math.max(0, event.offsetX / event.target.clientWidth);\r\n\r\n      localStorage.setItem('audio:volume', volume.toString());\r\n      localStorage.setItem('audio:sliderPosition', slider.style.left);\r\n      this.volume = volume;\r\n      this.audioPlayer.volume(volume);\r\n    }\r\n  }\r\n\r\n  scrobbleTimer = null;\r\n  listenDuration = 0;\r\n\r\n  scrobbleTrack() {\r\n    this.audioService.registerTrack(this.tracks[this.currentIndex]);\r\n  }\r\n\r\n  startScrobbleTimer() {\r\n    if (this.scrobbleTimer !== null) {\r\n      return;\r\n    }\r\n    this.scrobbleTimer = setInterval(() => this.listenTick(), 1000);\r\n  }\r\n\r\n  stopScrobbleTimer(clearListenDuration: boolean) {\r\n    clearTimeout(this.scrobbleTimer);\r\n    this.scrobbleTimer = null;\r\n    if (clearListenDuration) {\r\n      this.listenDuration = 0;\r\n    }\r\n  }\r\n\r\n  listenTick() {\r\n    this.listenDuration++;\r\n    if (this.listenDuration >= 5) {\r\n      this.stopScrobbleTimer(true);\r\n      this.scrobbleTrack();\r\n    }\r\n  }\r\n\r\n  bufferLength = 0;\r\n  dataArray;\r\n\r\n  renderFrame() {\r\n    if (this.tracks === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.audioPlayer.state() !== PlayerState.Playing) {\r\n      this.siriWaveInstance.setAmplitude(0.000000001);\r\n      return;\r\n    }\r\n\r\n    if (this.bufferLength === 0) {\r\n      this.bufferLength = this.analyser.frequencyBinCount;\r\n      this.dataArray = new Uint8Array(this.bufferLength);\r\n    }\r\n\r\n    this.analyser.getByteFrequencyData(this.dataArray);\r\n\r\n    let rms = 0;\r\n\r\n    for (let i = 0; i < this.dataArray.length; i++) {\r\n      rms += this.dataArray[i] * this.dataArray[i];\r\n    }\r\n\r\n    rms /= this.dataArray.length;\r\n    rms = Math.sqrt(rms);\r\n\r\n    let dBAmplitude = 0.8 * Math.log10(rms);\r\n    if (dBAmplitude >= 0) {\r\n      this.siriWaveInstance.setAmplitude(Math.min(1.5, dBAmplitude));\r\n    }\r\n  }\r\n}\r\n","module.exports = \".search-result {\\r\\n  margin-left: 0;\\r\\n  margin-bottom: 42px;\\r\\n  clear: both;\\r\\n  padding: 0;\\r\\n  margin-top: 10px;\\r\\n  overflow: visible;\\r\\n  cursor: pointer;\\r\\n}\\r\\n\\r\\nli.page-number {\\r\\n  border-bottom: 1px solid #ccc;\\r\\n  padding-bottom: 2px;\\r\\n  cursor: pointer;\\r\\n}\\r\\n\\r\\nspan.icon.page {\\r\\n  display: block;\\r\\n  background: url(/content/common/images/icon.page.png) no-repeat 0 center;\\r\\n  padding-left: 15px;\\r\\n  margin-left: 5px;\\r\\n  margin-bottom: 0 !important;\\r\\n}\\r\\n\\r\\nul.page-snippets {\\r\\n  list-style-type: none;\\r\\n  padding: 0;\\r\\n  margin: 5px 0 15px 12px;\\r\\n  color: #515151;\\r\\n}\\r\\n\\r\\nul.page-snippets.selected\\r\\n{\\r\\n  background: #dddddd;\\r\\n}\\r\\n\\r\\nul.search-result li span {\\r\\n  display: block;\\r\\n  margin-bottom: 8px;\\r\\n}\\r\\n\\r\\n.message{\\r\\n  text-align: center;\\r\\n}\"","module.exports = \"<div *ngIf=\\\"groupingFoundPage != undefined && groupingFoundPage.length > 0; else elseBlock\\\">\\r\\n    <ul class=\\\"search-result\\\">\\r\\n        <ng-container *ngFor=\\\"let pages of groupingFoundPage\\\">\\r\\n            <li (click)=\\\"showPage(pages.Page)\\\" class=\\\"page-number\\\">\\r\\n                <span class=\\\"icon page\\\">{{pages.Page}}</span></li>\\r\\n            <li>\\r\\n                <ul class=\\\"page-snippets\\\" [ngClass]=\\\"{'selected': pages.Page == app.pageComponent.page.number }\\\">\\r\\n                    <li (click)=\\\"showPage(pages.Page)\\\" *ngFor=\\\"let text of pages.Text\\\"><span [innerHTML]=\\\"text\\\"></span></li>\\r\\n                </ul>\\r\\n            </li>\\r\\n        </ng-container>\\r\\n    </ul>\\r\\n</div>\\r\\n<ng-template #elseBlock>\\r\\n    <div *ngIf=\\\"groupingFoundPage != undefined\\\">\\r\\n    <ul class=\\\"search-result\\\">\\r\\n            <li>\\r\\n                <span class=\\\"message\\\">Ничего не найдено.</span>\\r\\n            </li>\\r\\n    </ul>\\r\\n    </div>\\r\\n</ng-template>\\r\\n\"","import {\r\n  Component, Input, ElementRef, Renderer2, OnInit\r\n} from '@angular/core';\r\nimport { AppComponent } from '../../app.component';\r\nimport {FoundPage} from \"../../models/foundPage\";\r\nimport {PageComponent} from \"../page/page.component\";\r\nimport {DocumentService} from \"../../services/document.service\";\r\nimport {FindService} from \"../../services/find.service\";\r\nimport { isUndefined } from \"util\";\r\n\r\n@Component({\r\n    selector: 'app-found-pages',\r\n    templateUrl: './found.pages.component.html',\r\n    styleUrls: ['./found.pages.component.css'],\r\n})\r\nexport class FoundPagesComponent implements OnInit {\r\n\r\n    @Input() pageComponent: PageComponent;\r\n\r\n    @Input() thumbnailWidth: number = 0;\r\n\r\n    @Input() thumbnailHeight: number = 0;\r\n\r\n    @Input() foundPages: Array<FoundPage>;\r\n\r\n    @Input() app: AppComponent;\r\n\r\n    @Input() query: string;\r\n\r\n    public groupingFoundPage: Array<GroupingFoundPage>;\r\n\r\n    constructor(\r\n        private elementRef: ElementRef,\r\n        private renderer: Renderer2,\r\n        private documentService: DocumentService,\r\n        private findService: FindService\r\n    ) { }\r\n\r\n    ngOnInit() {\r\n    }\r\n\r\n    showPage(pageNumber: number) {\r\n        let page = this.app.thumbnailsComponent.document.pages[pageNumber - 1];\r\n        this.app.thumbnailsComponent.setPage(page);\r\n    }\r\n\r\n    public makePageHighlights(pageNumber, query){\r\n        if(isUndefined(query) || query.trim() == '') return;\r\n\r\n        this.findService.FindTextOnPage(pageNumber, query).subscribe(\r\n            resultHighlights => {\r\n                let pageView = this.pageComponent.pageView;\r\n                pageView.highlights = resultHighlights;\r\n\r\n                if(pageView.loading == false && pageView.error == false){\r\n                    let el = this.pageComponent.pageArea.nativeElement;\r\n                    pageView.drawHighlights(el.scrollLeft, el.scrollTop);\r\n                }\r\n            });\r\n    }\r\n\r\n    public grouping(foundPages: Array<FoundPage>) {\r\n        this.groupingFoundPage = new Array<GroupingFoundPage>();\r\n        for (let page of foundPages) {\r\n            if (this.groupingFoundPage.findIndex(i => i.Page === page.Page) === -1) {\r\n                this.groupingFoundPage.push({Page: page.Page, Text: [page.Text]});\r\n            } else {\r\n                this.groupingFoundPage[this.groupingFoundPage.findIndex(i => i.Page === page.Page)].Text.push(page.Text);\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\nclass GroupingFoundPage {\r\n    public Page: number;\r\n    public Text: Array<string>;\r\n\r\n    constructor() {\r\n      this.Text = new Array;\r\n    }\r\n}\r\n\r\n","module.exports = \".view-wrapper {\\r\\n    box-shadow: black 1px 4px 4px;\\r\\n    border: thin solid #D0D0D0;\\r\\n}\\r\\n\\r\\n.overlay {\\r\\n    height: 100%;\\r\\n    background-color: white;\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.overlay.scroll-animation{\\r\\n    background: repeating-linear-gradient( -45deg, #eeeeee, #cccbcb 5px, #c6c4c4 5px, #fefefe 10px );\\r\\n}\\r\\n\\r\\n:host-context(.loading) .overlay, :host-context(.error) .overlay{\\r\\n    background: transparent;\\r\\n}\\r\\n\\r\\ncanvas{\\r\\n    position: fixed;\\r\\n  z-index: 1;\\r\\n  -webkit-transform:translate3d(0,0,0);\\r\\n}\\r\\n\\r\\n.page-view-links a{\\r\\n  z-index: 2;\\r\\n}\\r\\n\"","module.exports = \"<div class=\\\"view-wrapper free-hand\\\" [ngStyle]=\\\"style\\\">\\r\\n    <div [ngClass]=\\\"{'scroll-animation': needScrollAnimate}\\\" class=\\\"overlay\\\">\\r\\n        <canvas [width]=\\\"0\\\" [height]=\\\"0\\\"\\r\\n                #canvas\\r\\n                mouseWheel\\r\\n                (mouseWheelUp)=\\\"mouseWheelUpHandler($event)\\\"\\r\\n                (mouseWheelDown)=\\\"mouseWheelDownHandler($event)\\\"\\r\\n                [ngStyle]=\\\"canvasStyle\\\"\\r\\n                ></canvas>\\r\\n                <div class=\\\"page-view-links\\\">\\r\\n                <a *ngFor=\\\"let link of links\\\" href=\\\"{{link.href}}\\\" [style.left.px]=\\\"link.x\\\" [style.top.px]=\\\"link.y\\\" [style.width.px]=\\\"link.width\\\" [style.height.px]=\\\"link.height\\\" [ngStyle]=\\\"{position: 'absolute', display: 'inline-block'}\\\" (click)=\\\"handleAnnotationLinkClick($event, link)\\\" ></a>\\r\\n                </div>\\r\\n    </div>\\r\\n</div>\\r\\n\"","import {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ElementRef,\r\n  ViewChild,\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  OnDestroy\r\n} from '@angular/core';\r\nimport { Subscription, EMPTY } from 'rxjs';\r\n\r\nimport { DocumentService } from '../../services/document.service';\r\nimport { ConfigService } from '../../services/config.service';\r\nimport { Page } from '../../models/page';\r\nimport { isUndefined } from 'util';\r\n\r\nimport { PageComponent } from '../page/page.component';\r\n\r\nimport { switchMap } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'app-page-view',\r\n    templateUrl: './page-view.component.html',\r\n    styleUrls: ['./page-view.component.css']\r\n})\r\nexport class PageViewComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n    @Input() page: Page;\r\n\r\n    @Input() pageWidth: number = 0;\r\n\r\n    @Input() pageHeight: number = 0;\r\n\r\n    @Input() width: number = 0;\r\n\r\n    @Input() height: number = 0;\r\n\r\n    @Input() style: any = null;\r\n\r\n    @Input() canvasStyle: any = null;\r\n\r\n    @Input() highlights: any = null;\r\n\r\n    @Input() links: any = null;\r\n\r\n    @Input() scale: number = 1;\r\n\r\n    @Input() scaleType: string = 'fitPage';\r\n\r\n    @Output() scaleChanged = new EventEmitter<number>();\r\n\r\n    @Input() pageComponent: PageComponent;\r\n\r\n    @ViewChild('canvas')\r\n    canvas: ElementRef;\r\n\r\n    public loading: boolean = true;\r\n\r\n    public error: boolean = false;\r\n\r\n    public isInverted: boolean = false;\r\n\r\n    public containerHeight: number = null;\r\n    public containerWidth: number = null;\r\n\r\n    private rotationAngle: number = 0;\r\n\r\n    public containerFlexPadding = 80;\r\n\r\n    private scrollAnimateBound = 5000;\r\n    public needScrollAnimate = false;\r\n    private lastDrawPositions = {\r\n        sx: 0,\r\n        sy: 0\r\n    };\r\n\r\n    private image = null;\r\n\r\n    private imageQueue = new Subject();\r\n\r\n    private defaultScrollDelta: number = 140;\r\n\r\n    private lastRegisteredPageNumber: number = -1;\r\n\r\n    private subscription: Subscription;\r\n\r\n    public scaleList;\r\n\r\n    constructor(\r\n        private elementRef: ElementRef,\r\n        private documentService: DocumentService,\r\n        private configService: ConfigService,\r\n        private changeDetector: ChangeDetectorRef\r\n    ) {\r\n        this.subscription = this.imageQueue.pipe(\r\n            switchMap((param) => this.documentService.getPageImage(param).catch(e => {\r\n                    this.loading = false;\r\n                    this.error = true;\r\n                    return EMPTY;\r\n                })\r\n            )\r\n        ).subscribe(\r\n            (image: HTMLImageElement) => {\r\n                let that = this;\r\n                image.onload = function () {\r\n                    that.image = image.cloneNode(true);\r\n                    that.image.onload = function() {\r\n                        that.redrawCanvas();\r\n                        that.canvas.nativeElement.style.visibility = true;\r\n                        that.loading = false;\r\n                        that.registerDisplayEvent();\r\n                    };\r\n                };\r\n            }\r\n        );\r\n    }\r\n\r\n    ngOnInit() {\r\n        setTimeout (() => {\r\n            // init dragscroll handler if component init after library\r\n            if('dragscroll' in window) {\r\n                window['dragscroll'].reset();\r\n            }\r\n        }, 100);\r\n      this.documentService.registerOpenEvent();\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.height = this.page.height * this.scale * 96 / 72;\r\n        this.width = this.page.width * this.scale * 96 / 72;\r\n\r\n        this.style = { 'width': `${this.width}px`, 'height': `${this.height}px` };\r\n        this.changeDetector.detectChanges();\r\n\r\n        this.setScaleList();\r\n        this.onResize();\r\n    }\r\n\r\n    public getElement() {\r\n        return this.elementRef;\r\n    }\r\n\r\n    public load(): Subscription {\r\n        this.setContainerSize();\r\n        this.setScaleList();\r\n        let calculatedScale = this.calculateScale(this.scaleType);\r\n        this.height = this.page.height * calculatedScale * 96 / 72; // apply scale to wrapper\r\n        this.width = this.page.width * calculatedScale * 96 / 72;\r\n\r\n        let imageHeight = this.height; // sizes for loading image\r\n        let imageWidth = this.width;\r\n\r\n        if (this.rotationAngle % 180 !== 0) { // apply rotation to wrapper\r\n            let temp = this.height;\r\n            this.height = this.width;\r\n            this.width = temp;\r\n        }\r\n\r\n        this.style = { 'width': `${this.width}px`, 'height': `${this.height}px` };\r\n        this.changeDetector.detectChanges();\r\n\r\n        this.setCanvasSize();\r\n        this.checkNeedScrollAnimate();\r\n\r\n        if (this.scale !== calculatedScale) {\r\n            this.setScale(this.scaleType, calculatedScale);\r\n        }\r\n\r\n        if (!this.loading) {\r\n            return null;\r\n        }\r\n\r\n        this.error = false;\r\n        this.loading = true;\r\n\r\n        this.image = null;\r\n\r\n        let pageParams = {\r\n            page: this.page, width: Math.round(imageWidth), height: Math.round(imageHeight)\r\n        };\r\n\r\n        this.imageQueue.next(pageParams);\r\n\r\n        return null;\r\n    }\r\n\r\n    checkNeedScrollAnimate() {\r\n        this.needScrollAnimate = (Math.max(this.width, this.height) > this.scrollAnimateBound);\r\n    }\r\n\r\n    mouseWheelUpHandler(event) {\r\n        if(typeof event.deltaY !== 'undefined'){\r\n            this.pageComponent.pageArea.nativeElement.scrollTop += event.deltaY;\r\n        }else{\r\n            this.pageComponent.pageArea.nativeElement.scrollTop -= this.defaultScrollDelta;\r\n        }\r\n    }\r\n\r\n    mouseWheelDownHandler(event){\r\n        if(typeof event.deltaY !== 'undefined'){\r\n            this.pageComponent.pageArea.nativeElement.scrollTop += event.deltaY;\r\n        }else{\r\n            this.pageComponent.pageArea.nativeElement.scrollTop += this.defaultScrollDelta;\r\n        }\r\n    }\r\n\r\n    public setAnimationStyles(){\r\n        let canvas = this.canvas.nativeElement;\r\n        let el = this.pageComponent.pageArea.nativeElement;\r\n        let sx = el.scrollLeft;\r\n        let sy = el.scrollTop;\r\n\r\n        let x1, x2, y1, y2;\r\n        x2 = y1 = 0;\r\n        x1 = canvas.width;\r\n        y2 = canvas.height;\r\n\r\n        let deltaX = this.lastDrawPositions.sx - sx;\r\n        let deltaY = this.lastDrawPositions.sy - sy;\r\n\r\n        if(deltaX !== 0){\r\n            x2 = - deltaX;\r\n            x1 = canvas.width - deltaX;\r\n        }\r\n        if(deltaY != 0){\r\n            y1 = - deltaY;\r\n            y2 = canvas.height - deltaY;\r\n        }\r\n\r\n        this.canvasStyle = {\r\n            'transform' : `translate(${deltaX}px, ${deltaY}px)`,\r\n            'clip' : `rect(${y1}px, ${x1}px, ${y2}px, ${x2}px)`\r\n        };\r\n        this.changeDetector.detectChanges();\r\n    }\r\n\r\n    public clearAnimationStyles(){\r\n        this.canvasStyle = {};\r\n    }\r\n\r\n    public redrawCanvas(){\r\n        let el = this.pageComponent.pageArea.nativeElement;\r\n        let sx = el.scrollLeft;\r\n        let sy = el.scrollTop;\r\n\r\n        if(this.needScrollAnimate){\r\n            this.lastDrawPositions.sx = sx;\r\n            this.lastDrawPositions.sy = sy;\r\n        }\r\n\r\n        if(this.image == null) return;\r\n\r\n        let canvas = this.canvas.nativeElement;\r\n        let context = canvas.getContext('2d');\r\n        this.clearContext(context);\r\n\r\n        let imageStartX = sx;\r\n        let imageStartY = sy;\r\n        let imageCropWidth = canvas.width;\r\n        let imageCropHeight = canvas.height;\r\n\r\n        if(this.rotationAngle == -180 || this.rotationAngle == 180){\r\n            imageStartX = this.image.width - imageCropWidth - sx;\r\n            imageStartY = this.image.height - imageCropHeight - sy;\r\n        }\r\n\r\n        if(this.rotationAngle == -90 || this.rotationAngle == 270){\r\n            imageStartX = this.image.width - imageCropHeight - sy;\r\n            imageStartY = sx;\r\n            imageCropHeight = canvas.width;\r\n            imageCropWidth = canvas.height;\r\n        }\r\n\r\n        if(this.rotationAngle == 90 || this.rotationAngle == -270){\r\n            imageStartX = sy;\r\n            imageStartY = this.image.height - imageCropWidth - sx;\r\n            imageCropHeight = canvas.width;\r\n            imageCropWidth = canvas.height;\r\n        }\r\n        context.drawImage(this.image, imageStartX, imageStartY, imageCropWidth, imageCropHeight,\r\n                0, 0, imageCropWidth, imageCropHeight);\r\n\r\n        this.drawHighlights(imageStartX, imageStartY);\r\n        this.drawLinks(imageStartX, imageStartY);\r\n\r\n        if (this.isInverted) {\r\n            this.invert();\r\n        }\r\n    }\r\n\r\n    public drawHighlights(sx, sy) {\r\n        let context = this.canvas.nativeElement.getContext('2d');\r\n        let highlights = null, k = null;\r\n        if (!isUndefined(this.highlights) && this.highlights != null) {\r\n            highlights = this.highlights;\r\n\r\n            if (this.rotationAngle % 180 === 0) {\r\n                k = this.height / this.pageHeight;\r\n            } else {\r\n                k = this.height / this.pageWidth;\r\n            }\r\n        }\r\n\r\n        if (!isUndefined(highlights) && highlights != null) {\r\n            context.fillStyle = 'rgba(236,236,99,0.5)';\r\n            for (let i = 0; i < highlights.length; i++) {\r\n                context.fillRect(highlights[i].Left * k - sx, highlights[i].Top * k - sy, highlights[i].Width * k, highlights[i].Height * k);\r\n            }\r\n        }\r\n    }\r\n\r\n    public drawLinks(sx, sy) {\r\n        this.documentService.getPageLinks(this.page).subscribe((links1) => {\r\n            this.links = [];\r\n\r\n            let context = this.canvas.nativeElement.getContext('2d');\r\n            let links = null, k = null;\r\n            if (!isUndefined(this.links) && this.links != null) {\r\n                links = links1;\r\n\r\n                if (this.rotationAngle % 180 === 0) {\r\n                    k = this.height / this.pageHeight;\r\n                } else {\r\n                    k = this.height / this.pageWidth;\r\n                }\r\n            }\r\n\r\n            if (!isUndefined(links) && links != null) {\r\n                for (let i = 0; i < links.length; i++) {\r\n                    let link = {\r\n                        x: links[i].Region.X * k,\r\n                        y: links[i].Region.Y * k,\r\n                        width: links[i].Region.Width * k,\r\n                        height: links[i].Region.Height * k,\r\n                        type: links[i].Type,\r\n                        page: links[i].PageNumber,\r\n                        uri: links[i].Uri,\r\n                        href: links[i].Type == \"URI\" ? links[i].Uri : \"#page=\" + links[i].PageNumber\r\n                    };\r\n\r\n                    if (this.rotationAngle % 180 !== 0) {\r\n                        link.x = links[i].Region.Y * k ;\r\n                        link.y = links[i].Region.X * k;\r\n                        link.width = links[i].Region.Height * k;\r\n                        link.height = links[i].Region.Width * k;\r\n                    }\r\n\r\n                    if (this.rotationAngle === 90) {\r\n                        link.x = this.width - link.x - link.width;\r\n                    }\r\n\r\n                    if (Math.abs(this.rotationAngle) === 180) {\r\n                        link.y = this.height - link.y - link.height;\r\n                    }\r\n\r\n                    this.links.push(link);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    public handleAnnotationLinkClick($event, link) {\r\n      if(link.type !== \"URI\"){\r\n        $event.preventDefault();\r\n        this.pageComponent.app.toolbarComponent.moveToPage(link.page);\r\n      }\r\n    }\r\n\r\n    public rotate(angle: number) {\r\n        this.rotationAngle = angle;\r\n        let canvas = this.canvas.nativeElement;\r\n        let context = canvas.getContext('2d');\r\n        context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n        let tmp = this.height;\r\n        this.height = this.width;\r\n        this.width = tmp;\r\n        this.style = { 'width': `${this.width}px`, 'height': `${this.height}px` };\r\n        this.changeDetector.detectChanges();\r\n\r\n        this.setCanvasSize();\r\n        this.applyContextTransform(context);\r\n        this.redrawCanvas();\r\n    }\r\n\r\n    private applyContextTransform(context){\r\n        let canvas = this.canvas.nativeElement;\r\n        context.translate(canvas.width / 2, canvas.height / 2);\r\n        context.rotate(this.rotationAngle * Math.PI / 180);\r\n        if(this.rotationAngle % 180 !== 0 && this.rotationAngle % 180 !== -0){\r\n            context.translate(-canvas.height / 2, -canvas.width / 2);\r\n        }else{\r\n            context.translate(-canvas.width / 2, -canvas.height / 2);\r\n        }\r\n    }\r\n\r\n    private clearContext(context){\r\n        let canvas = this.canvas.nativeElement;\r\n        if(this.rotationAngle !== 0) context.setTransform(1, 0, 0, 1, 0, 0); // reset matrix for correct clear canvas\r\n        context.clearRect(0, 0, canvas.width, canvas.height);\r\n        if(this.rotationAngle !== 0) this.applyContextTransform(context); // restore matrix\r\n    }\r\n\r\n    public invert() {\r\n        let canvas = this.canvas.nativeElement;\r\n        let context = canvas.getContext('2d');\r\n        let imageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);\r\n        let data = imageData.data;\r\n\r\n        for (let i = 0; i < data.length; i += 4) {\r\n            // red\r\n            data[i] = 255 - data[i];\r\n            // green\r\n            data[i + 1] = 255 - data[i + 1];\r\n            // blue\r\n            data[i + 2] = 255 - data[i + 2];\r\n        }\r\n\r\n        // overwrite original image\r\n        context.putImageData(imageData, 0, 0);\r\n    }\r\n\r\n    private calculateScale(scaleType: string) {\r\n        let result;\r\n        if (scaleType === 'fitPage') {\r\n            let scaleW = this.containerWidth /  ((this.rotationAngle % 180 === 0 ? this.page.width : this.page.height) * 96 / 72);\r\n            let scaleH = this.containerHeight /  ((this.rotationAngle % 180 === 0 ? this.page.height : this.page.width) * 96 / 72);\r\n            result = Math.min(scaleW, scaleH);\r\n        } else if (scaleType === 'fitWidth') {\r\n            result = this.containerWidth /  ((this.rotationAngle % 180 === 0 ? this.page.width : this.page.height) * 96 / 72);\r\n        } else {\r\n          this.scaleList.forEach((scaleElement) => {\r\n                if (this.scale >= scaleElement.value - 0.05 && this.scale <= scaleElement.value + 0.05) {\r\n                    result = scaleElement.value;\r\n                }\r\n            });\r\n            if (result === undefined) {\r\n                result = this.scaleList[0];\r\n            }\r\n        }\r\n\r\n        let max = this.scaleList[this.scaleList.length - 1].value;\r\n        result = result > max ? max : result;\r\n\r\n        let min = this.scaleList[0].value;\r\n        result = result < min ? min : result;\r\n\r\n        return result;\r\n    }\r\n\r\n    public setScale(scaleType: string, scale: number) {\r\n        this.scaleType = scaleType;\r\n        this.scale = scale;\r\n\r\n        this.scaleChanged.emit(this.scale);\r\n\r\n        this.loading = true;\r\n        this.load();\r\n    }\r\n\r\n    public setScaleList(){\r\n      this.scaleList = this.getScaleList();\r\n    }\r\n\r\n    /**\r\n     * Возвращает список доступных масштабов для текущей страницы\r\n     */\r\n    public getScaleList() {\r\n        let result = [];\r\n        let maxScale = this.configService.maxPageScale / 100;\r\n        let scales = [0.25, 0.33, 0.5, 0.66, 0.75, 1, 1.25, 1.5, 2, 3, 4, 5];\r\n        scales.forEach(scaleCurrent => {\r\n            if((maxScale > 0 && scaleCurrent <= maxScale) || maxScale === 0) {\r\n                result.push({'value': scaleCurrent, 'title': Math.floor(scaleCurrent * 100) + '%'});\r\n            }\r\n        });\r\n\r\n        if(result.length == 0 && maxScale > 0) {\r\n            result.push({'value': maxScale, 'title': Math.floor(maxScale * 100) + '%'});\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    onResize() {\r\n\r\n       this.setContainerSize();\r\n\r\n        if (this.scaleType !== 'custom') {\r\n            this.setScale(this.scaleType, this.calculateScale(this.scaleType));\r\n        }else{\r\n            this.setCanvasSize();\r\n            this.redrawCanvas();\r\n        }\r\n    }\r\n\r\n    setContainerSize(){\r\n        let el = document.getElementsByClassName('page-area')[0];\r\n        this.containerHeight = el.clientHeight - this.containerFlexPadding;\r\n        this.containerWidth = el.clientWidth;\r\n    }\r\n\r\n    setCanvasSize(){\r\n        let el = !isUndefined(this.pageComponent.pageArea) ?  this.pageComponent.pageArea.nativeElement : document.getElementsByClassName('dragscroll')[0];\r\n        let displayHeight = el.clientHeight;\r\n        let displayWidth = el.clientWidth;\r\n\r\n        this.canvas.nativeElement.height = Math.min(this.height, displayHeight);\r\n        this.canvas.nativeElement.width = Math.min(this.width, displayWidth);\r\n    }\r\n\r\n    registerDisplayEvent(){\r\n        // register Display event only if page number is changed\r\n        if(this.lastRegisteredPageNumber != this.page.number){\r\n          this.documentService.registerDisplayEvent(this.page.number.toString());\r\n          this.lastRegisteredPageNumber = this.page.number;\r\n        }\r\n    }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n      this.subscription = null;\r\n    }\r\n  }\r\n}\r\n","module.exports = \".outer-container {\\r\\n    display: table;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n}\\r\\n\\r\\n.inner-container {\\r\\n    display: table-cell;\\r\\n    vertical-align: middle;\\r\\n    text-align: center;\\r\\n}\\r\\n\\r\\n.centered-content {\\r\\n    display: inline-block;\\r\\n    text-align: left;\\r\\n}\\r\\n\\r\\n.loading {\\r\\n    background: url(/content/images/html5client/loading.gif) no-repeat center center;\\r\\n}\\r\\n\\r\\n.error {\\r\\n    background: url(/content/images/html5client/error_loading.png) no-repeat center center;\\r\\n}\\r\\n\\r\\n/*\\r\\nbrowsers can't interpret grouped selectors for placeholder pseudoselector\\r\\n*/\\r\\n\\r\\n/* Chrome, Microsoft Edge, Safari */\\r\\n\\r\\ninput#PageNumbersPrint::-webkit-input-placeholder{\\r\\n    color: #aaaaaa;\\r\\n}\\r\\n\\r\\ninput#PageNumbersCopy::-webkit-input-placeholder{\\r\\n    color: #aaaaaa;\\r\\n}\\r\\n\\r\\n/* Internet Explorer*/\\r\\n\\r\\ninput#PageNumbersPrint:-ms-input-placeholder{\\r\\n    color: #aaaaaa;\\r\\n}\\r\\n\\r\\ninput#PageNumbersCopy:-ms-input-placeholder{\\r\\n    color: #aaaaaa;\\r\\n}\\r\\n\\r\\n.dragscroll {\\r\\n    height: 100%;\\r\\n    overflow: auto;\\r\\n}\\r\\n\\r\\n@media only screen and (hover: none)  {\\r\\n    /*.help-container {*/\\r\\n        /*display: none !important;*/\\r\\n    /*}*/\\r\\n}\\r\\n\\r\\n/* Help */\\r\\n\\r\\n.help-container {\\r\\n  display: flex;\\r\\n  flex-direction: column;\\r\\n  align-items: center;\\r\\n  position: absolute;\\r\\n  top: 130px;\\r\\n  right: 2%;\\r\\n  z-index: 2;\\r\\n  background: white;\\r\\n  padding: 3px;\\r\\n  border-radius: 10px;\\r\\n}\\r\\n\\r\\n.help-button {\\r\\n    width: 42px;\\r\\n    height: 42px;\\r\\n    border-radius: 50%;\\r\\n    background: url(/content/images/help_rounded.png) no-repeat center center;\\r\\n    background-size: 36px;\\r\\n    transition: all 0.25s ease-out;\\r\\n}\\r\\n\\r\\n.hide-help {\\r\\n    transition: all 0.25s ease-out;\\r\\n    color: #a4c3de;\\r\\n}\\r\\n\\r\\n.hidden.help-container {\\r\\n  display: none;\\r\\n}\\r\\n\\r\\n.glow .help-button {\\r\\n    width: 60px;\\r\\n    height: 60px;\\r\\n    background-size: 60px;\\r\\n\\t-webkit-animation: glow 800ms ease-out infinite alternate;\\r\\n\\t        animation: glow 800ms ease-out infinite alternate;\\r\\n\\tborder-color: #2978cc;\\r\\n\\tbox-shadow: 0 0 5px rgba(41,120,204,.5), inset 0 0 5px rgba(41,120,204,.1), 0 2px 0 ;\\r\\n\\toutline: none;\\r\\n}\\r\\n\\r\\n@-webkit-keyframes glow {\\r\\n    0% {\\r\\n\\t\\tborder-color: #2978cc ;\\r\\n\\t\\tbox-shadow: 0 0 4px rgba(41,120,204,.5), inset 0 0 2px rgba(41,120,204,.4);\\r\\n    }\\r\\n    100% {\\r\\n\\t\\tborder-color: #2978cc ;\\r\\n\\t\\tbox-shadow: 0 0 16px rgba(41,120,204,1), inset 0 0 2px rgba(41,120,204,.9);\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes glow {\\r\\n    0% {\\r\\n\\t\\tborder-color: #2978cc ;\\r\\n\\t\\tbox-shadow: 0 0 4px rgba(41,120,204,.5), inset 0 0 2px rgba(41,120,204,.4);\\r\\n    }\\r\\n    100% {\\r\\n\\t\\tborder-color: #2978cc ;\\r\\n\\t\\tbox-shadow: 0 0 16px rgba(41,120,204,1), inset 0 0 2px rgba(41,120,204,.9);\\r\\n    }\\r\\n}\\r\\n\\r\\n.glow .hide-help {\\r\\n    background-size: 16px;\\r\\n    margin-top: 10px;\\r\\n}\\r\\n\\r\\n.help-container.mobile-view {\\r\\n  top: 55px;\\r\\n  padding: 9px;\\r\\n}\\r\\n\\r\\n.mobile-view.glow .help-button {\\r\\n  width: 42px;\\r\\n  height: 42px;\\r\\n  background-size: 42px;\\r\\n  -webkit-animation: glowmobile 800ms ease-out infinite alternate;\\r\\n          animation: glowmobile 800ms ease-out infinite alternate;\\r\\n  border-color: #2978cc;\\r\\n  box-shadow: 0 0 2px rgba(41,120,204,.5), inset 0 0 5px rgba(41,120,204,.1), 0 2px 0 ;\\r\\n  outline: none;\\r\\n}\\r\\n\\r\\n@-webkit-keyframes glowmobile {\\r\\n  0% {\\r\\n    border-color: #2978cc ;\\r\\n    box-shadow: 0 0 1px rgba(41,120,204,.5), inset 0 0 2px rgba(41,120,204,.4);\\r\\n  }\\r\\n  100% {\\r\\n    border-color: #2978cc ;\\r\\n    box-shadow: 0 0 5px rgba(41,120,204,1), inset 0 0 2px rgba(41,120,204,.9);\\r\\n  }\\r\\n}\\r\\n\\r\\n@keyframes glowmobile {\\r\\n  0% {\\r\\n    border-color: #2978cc ;\\r\\n    box-shadow: 0 0 1px rgba(41,120,204,.5), inset 0 0 2px rgba(41,120,204,.4);\\r\\n  }\\r\\n  100% {\\r\\n    border-color: #2978cc ;\\r\\n    box-shadow: 0 0 5px rgba(41,120,204,1), inset 0 0 2px rgba(41,120,204,.9);\\r\\n  }\\r\\n}\\r\\n\\r\\n@media only screen and (max-width: 800px) {\\r\\n  .help-container {\\r\\n    top: 55px;\\r\\n    padding: 9px;\\r\\n  }\\r\\n  .dragscroll {\\r\\n    height: calc(100% - 12px);\\r\\n  }\\r\\n  .glow .help-button {\\r\\n    width: 42px;\\r\\n    height: 42px;\\r\\n    background-size: 42px;\\r\\n    -webkit-animation: glowsmallscreen 800ms ease-out infinite alternate;\\r\\n            animation: glowsmallscreen 800ms ease-out infinite alternate;\\r\\n    border-color: #2978cc;\\r\\n    box-shadow: 0 0 2px rgba(41,120,204,.5), inset 0 0 5px rgba(41,120,204,.1), 0 2px 0 ;\\r\\n    outline: none;\\r\\n  }\\r\\n\\r\\n  @-webkit-keyframes glowsmallscreen {\\r\\n    0% {\\r\\n      border-color: #2978cc ;\\r\\n      box-shadow: 0 0 1px rgba(41,120,204,.5), inset 0 0 2px rgba(41,120,204,.4);\\r\\n    }\\r\\n    100% {\\r\\n      border-color: #2978cc ;\\r\\n      box-shadow: 0 0 5px rgba(41,120,204,1), inset 0 0 2px rgba(41,120,204,.9);\\r\\n    }\\r\\n  }\\r\\n\\r\\n  @keyframes glowsmallscreen {\\r\\n    0% {\\r\\n      border-color: #2978cc ;\\r\\n      box-shadow: 0 0 1px rgba(41,120,204,.5), inset 0 0 2px rgba(41,120,204,.4);\\r\\n    }\\r\\n    100% {\\r\\n      border-color: #2978cc ;\\r\\n      box-shadow: 0 0 5px rgba(41,120,204,1), inset 0 0 2px rgba(41,120,204,.9);\\r\\n    }\\r\\n  }\\r\\n}\\r\\n\"","module.exports = \"<div *ngIf=\\\"page\\\" class=\\\"dragscroll\\\" #pageArea\\r\\n     (scroll)=\\\"scrollHandler($event)\\\"\\r\\n     (contextmenu)=\\\"ctxHandler($event)\\\"\\r\\n     [ngClass]=\\\"{'loading': pageView.loading, 'error': pageView.error}\\\">\\r\\n    <div class=\\\"outer-container\\\" #outerContainer>\\r\\n        <div class=\\\"inner-container\\\">\\r\\n            <div class=\\\"centered-content\\\">\\r\\n                <app-page-view #pageView class=\\\"page\\\" [pageComponent]=\\\"this\\\"\\r\\n                               [page]=\\\"page\\\"\\r\\n                               [pageWidth]=\\\"page.width\\\"\\r\\n                               [pageHeight]=\\\"page.height\\\"\\r\\n                               (window:resize)=\\\"onResize($event)\\\"\\r\\n                               mouseWheel\\r\\n                               (mouseWheelUp)=\\\"mouseWheelUpHandler($event)\\\"\\r\\n                               (mouseWheelDown)=\\\"mouseWheelDownHandler($event)\\\"\\r\\n                               [delay]=\\\"'200'\\\"\\r\\n                               >\\r\\n                </app-page-view>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n<div class=\\\"help-container\\\" [ngClass]=\\\"{'glow': helpButtonState === HelpButtonState.Highlighted,\\r\\n'hidden': helpButtonState === HelpButtonState.Hidden,\\r\\n'mobile-view': app.isMobile\\r\\n}\\\">\\r\\n  <a class=\\\"help-button\\\" href=\\\"http://help.vivaldi.ru/user-guide/viewdoc/\\\" target=\\\"_blank\\\"></a>\\r\\n  <div class=\\\"hide-help\\\" (click)=\\\"hideHelpButton()\\\">скрыть</div>\\r\\n</div>\\r\\n<p-dialog header=\\\"Электронное копирование\\\"\\r\\n    [(visible)]=\\\"showCopyDialog\\\"\\r\\n    [blockScroll]=\\\"false\\\"\\r\\n    [contentStyle]=\\\"{'overflow':'visible'}\\\"\\r\\n    [dismissableMask]=\\\"true\\\"\\r\\n    [closeOnEscape]=\\\"true\\\"\\r\\n    [resizable]=\\\"false\\\"\\r\\n    [draggable]=\\\"false\\\"\\r\\n    [closable]=\\\"true\\\"\\r\\n    [modal]=\\\"true\\\"\\r\\n    [minWidth]=\\\"450\\\"\\r\\n    styleClass=\\\"ng-dialog copy-dialog\\\"\\r\\n    >\\r\\n    <form action=\\\"\\\" method=\\\"post\\\">\\r\\n        <div class=\\\"control-group\\\">\\r\\n            <label for=\\\"PageNumbersCopy\\\">Номера страниц</label>:\\r\\n            <div class=\\\"control\\\">\\r\\n                <input autocomplete=\\\"off\\\" id=\\\"PageNumbersCopy\\\" name=\\\"pageNumbers\\\" placeholder=\\\"1-3, 5\\\" type=\\\"text\\\" [(ngModel)]=\\\"pageNumbers\\\" [ngClass]=\\\"{'input-validation-error': copyPageError }\\\">\\r\\n                <span [ngClass]=\\\"{'field-validation-error': copyPageError }\\\" data-valmsg-for=\\\"PageNumbers\\\" data-valmsg-replace=\\\"true\\\">{{copyPageError}}</span>\\r\\n            </div>\\r\\n        </div>\\r\\n    </form>\\r\\n    <p-footer>\\r\\n        <button type=\\\"button\\\" class=\\\"cancel button\\\" pButton (click)=\\\"closeCopyDialog()\\\" label=\\\"Отменить\\\">Отменить</button>\\r\\n        <button type=\\\"button\\\" pButton (click)=\\\"copy()\\\" label=\\\"Скопировать\\\" class=\\\"submit button ui-button-secondary\\\">Скопировать</button>\\r\\n    </p-footer>\\r\\n</p-dialog>\\r\\n<p-dialog header=\\\"Печать\\\"\\r\\n    [(visible)]=\\\"showPrintDialog\\\"\\r\\n    [blockScroll]=\\\"false\\\"\\r\\n    [contentStyle]=\\\"{'overflow':'visible'}\\\"\\r\\n    [dismissableMask]=\\\"true\\\"\\r\\n    [closeOnEscape]=\\\"true\\\"\\r\\n    [resizable]=\\\"false\\\"\\r\\n    [draggable]=\\\"false\\\"\\r\\n    [closable]=\\\"true\\\"\\r\\n    [modal]=\\\"true\\\"\\r\\n    [minWidth]=\\\"450\\\"\\r\\n    styleClass=\\\"ng-dialog print-dialog\\\"\\r\\n    >\\r\\n    <form action=\\\"\\\" method=\\\"post\\\">\\r\\n        <div class=\\\"page-selection-block\\\" *ngIf=\\\"!printInProgress\\\">\\r\\n            <div class=\\\"control-group\\\">\\r\\n                <label for=\\\"PageNumbersPrint\\\">Номера страниц</label>:\\r\\n                <div class=\\\"control\\\">\\r\\n                    <input autocomplete=\\\"off\\\" id=\\\"PageNumbersPrint\\\" name=\\\"pageNumbers\\\" placeholder=\\\"1-3, 5\\\" type=\\\"text\\\" [(ngModel)]=\\\"pageNumbers\\\" [ngClass]=\\\"{'input-validation-error': printPageError }\\\">\\r\\n                    <span [ngClass]=\\\"{'field-validation-error': printPageError }\\\" data-valmsg-for=\\\"PageNumbers\\\" data-valmsg-replace=\\\"true\\\">{{printPageError}}</span>\\r\\n                </div>\\r\\n            </div>\\r\\n            <div class=\\\"control-group\\\">\\r\\n                <label for=\\\"Format\\\">Размер страницы</label><label>:</label>\\r\\n                <div class=\\\"control\\\">\\r\\n                    <select class=\\\"selectBox-print-position selectBox\\\" id=\\\"Format\\\" name=\\\"Format\\\" [(ngModel)]=\\\"printOptions.pageFormat\\\">\\r\\n                        <option *ngFor=\\\"let item of formatSizesNames;\\\" value=\\\"{{ item }}\\\">{{ item }}</option>\\r\\n                    </select>\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"progress-bar-block\\\" *ngIf=\\\"printInProgress\\\">\\r\\n            <label>Подготовка страниц к печати:</label>\\r\\n            <div id=\\\"progressbar\\\" class=\\\"ui-progressbar ui-widget ui-widget-content ui-corner-all\\\" role=\\\"progressbar\\\" aria-valuemin=\\\"0\\\" aria-valuemax=\\\"100\\\" aria-valuenow=\\\"0\\\">\\r\\n                <div class=\\\"progress-label\\\">{{printProgress}}%</div>\\r\\n            <div class=\\\"ui-progressbar-value ui-widget-header ui-corner-left ui-corner-right\\\" [style.width]=\\\"printProgress+'%'\\\" style=\\\"display: block;\\\"></div></div>\\r\\n            <span class=\\\"error field-validation-error\\\" *ngIf=\\\"printPageError\\\" style=\\\"display: none;\\\">{{printPageError}}</span>\\r\\n        </div>\\r\\n\\r\\n    </form>\\r\\n    <p-footer>\\r\\n        <button type=\\\"button\\\" class=\\\"cancel button\\\" pButton (click)=\\\"closePrintDialog()\\\" label=\\\"Отменить\\\">Отменить</button>\\r\\n        <button type=\\\"button\\\" pButton (click)=\\\"print()\\\" label=\\\"Скопировать\\\" class=\\\"submit button ui-button-secondary\\\">Распечатать</button>\\r\\n    </p-footer>\\r\\n</p-dialog>\\r\\n<iframe #copyTargetFrame src=\\\"\\\" style=\\\"display:none;\\\"></iframe>\\r\\n<iframe #downloadTargetFrame src=\\\"\\\" style=\\\"display:none;\\\"></iframe>\\r\\n<iframe #printTargetFrame src=\\\"\\\" frameborder=\\\"0\\\" style=\\\"width: 0; height: 0; border: 0; position: absolute;\\\" class=\\\"print\\\"></iframe>\\r\\n\"","import { Component, NgZone, ViewChild, Input, Output, OnInit, EventEmitter, ElementRef, HostListener } from '@angular/core';\r\n\r\nimport { PageViewComponent } from '../page-view/page-view.component';\r\nimport { ConfigService } from '../../services/config.service';\r\nimport { DocumentService } from '../../services/document.service';\r\n\r\nimport { Page } from '../../models/page';\r\nimport { HelpButtonState } from '../../models/page';\r\nimport { Document } from '../../models/document';\r\n\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport {toRanges} from '../../utils/stringUtils';\r\nimport { DocumentAction } from 'app/models/document';\r\n\r\nimport {AppComponent} from \"../../app.component\";\r\n\r\n@Component({\r\n    selector: 'app-page',\r\n    templateUrl: './page.component.html',\r\n    styleUrls: ['./page.component.css']\r\n})\r\nexport class PageComponent implements OnInit {\r\n\r\n    @Input() app: AppComponent;\r\n\r\n    @ViewChild(PageViewComponent) pageView: PageViewComponent;\r\n\r\n    @Input('page') page: Page;\r\n\r\n    @Input() document: Document;\r\n\r\n    @Output() loaded = new EventEmitter();\r\n\r\n    @ViewChild('pageArea')\r\n    pageArea: ElementRef;\r\n\r\n    @ViewChild('copyTargetFrame')\r\n    copyTargetFrame: ElementRef;\r\n\r\n    @ViewChild('downloadTargetFrame')\r\n    downloadTargetFrame: ElementRef;\r\n\r\n    @ViewChild('printTargetFrame')\r\n    printTargetFrame: ElementRef;\r\n\r\n    public height: number = 0;\r\n\r\n    public outerComponent: any;\r\n\r\n    public showCopyDialog: boolean;\r\n    public copyPageError: string;\r\n\r\n    public showPrintDialog: boolean;\r\n    public printInProgress: boolean;\r\n    public printProgress: number;\r\n    public printPageError: string;\r\n\r\n    public pageNumbers: string = '';\r\n\r\n    public printOptions = {\r\n        dpi: 300,\r\n        pageFormat: 'A4'\r\n    };\r\n\r\n    private formatSizes = {\r\n        A4: { width: 595.28, height: 841.89 },\r\n        A3: { width: 841.89, height: 1190.55 },\r\n        Letter: { width: 612, height: 792 },\r\n        Legal: { width: 612, height: 1008 },\r\n        MonarchEnvelope: { width: 279, height: 540 }\r\n    };\r\n\r\n    public formatSizesNames = Object.keys(this.formatSizes);\r\n\r\n    private pageViewSubscription: Subscription;\r\n\r\n    private lastScrollTime;\r\n    private lastScrollPosition;\r\n\r\n    private scrollTimer: any;\r\n    private scrollTimerDelay: number = 500;\r\n\r\n    private touchStart: any;\r\n    private touchTreshhold: number = 50; //required min distance traveled to be considered swipe\r\n    private allowedTime: number = 500; // maximum time allowed to travel that distance\r\n\r\n    private HelpButtonState = HelpButtonState;\r\n    private helpButtonState: HelpButtonState = HelpButtonState.Highlighted;\r\n\r\n    constructor(\r\n        private zone: NgZone,\r\n        private documentService: DocumentService,\r\n        private configService: ConfigService\r\n    ) { }\r\n\r\n    ngOnInit() {\r\n        this.initHelpButton();\r\n        this.height = (window.screen.availHeight / 100) * 80;\r\n    }\r\n\r\n    public loadPageView(): void {\r\n        if (this.pageView === undefined) {\r\n            return;\r\n        }\r\n\r\n        if (this.pageViewSubscription != null) {\r\n            return;\r\n        }\r\n\r\n        this.pageViewSubscription = this.pageView.load();\r\n\r\n        if (this.pageViewSubscription == null) {\r\n            return;\r\n        }\r\n\r\n        this.pageViewSubscription.add(() => {\r\n            this.pageViewSubscription = null;\r\n        });\r\n\r\n        this.loaded.emit('');\r\n    }\r\n\r\n    download() {\r\n        if (this.configService.hardDownload)\r\n            window.open(this.document.hardDownloadUrl, \"_blank\");\r\n        else\r\n            this.downloadTargetFrame.nativeElement.src = this.document.downloadUrl;\r\n    }\r\n\r\n    copy() {\r\n        if (!this.checkPageNumbers(this.pageNumbers)) {\r\n            this.copyPageError = `Вы должны выбрать страницы в диапазоне 1-${this.document.pages.length}`;\r\n            return;\r\n        }\r\n\r\n        this.documentService.checkAccess(this.pageNumbers, DocumentAction.Copy).subscribe((result) => {\r\n            if (result.Allowed) {\r\n                this.copyPageError = '';\r\n                this.copyTargetFrame.nativeElement.src = this.document.copyUrl.replace('{pageNumbers}', this.pageNumbers);\r\n                this.closeCopyDialog();\r\n            } else {\r\n                let range = toRanges(result.PageStatus.filter((v, i) =>  v.Access === false).map((v, i) => v.Page));\r\n                this.copyPageError = 'У Вас нет прав на электронное копирование. Запрещённые страницы: ' + range.join();\r\n            }\r\n        });\r\n    }\r\n\r\n    openCopyDialog() {\r\n        this.pageNumbers = '';\r\n        this.showCopyDialog = true;\r\n    }\r\n\r\n    closeCopyDialog() {\r\n        this.showCopyDialog = false;\r\n    }\r\n\r\n    print() {\r\n        if (!this.checkPageNumbers(this.pageNumbers)) {\r\n            this.printPageError = `Вы должны выбрать страницы в диапазоне 1-${this.document.pages.length}`;\r\n            return;\r\n        }\r\n\r\n        this.documentService.checkAccess(this.pageNumbers, DocumentAction.Print).subscribe((result) => {\r\n            if (result.Allowed) {\r\n\r\n                let dpi = Math.round((this.formatSizes[this.printOptions.pageFormat]['width'] * this.printOptions.dpi) / this.page.width);\r\n\r\n                this.printPageError = '';\r\n                let printUrl = this.document.printUrl\r\n                    .replace('{pageNumbers}', this.pageNumbers)\r\n                    .replace('{dpi}', dpi.toString())\r\n                    .replace('{pageFormat}', this.printOptions.pageFormat)\r\n                ;\r\n                this.printTargetFrame.nativeElement.src = printUrl;\r\n                this.printInProgress = true;\r\n            } else {\r\n                let range = toRanges(result.PageStatus.filter((v, i) =>  v.Access === false).map((v, i) => v.Page));\r\n                this.printPageError = 'У Вас нет прав на печать документа. Запрещённые страницы: ' + range.join();\r\n            }\r\n        });\r\n    }\r\n\r\n    openPrintDialog() {\r\n        this.printProgress = 0;\r\n        this.printInProgress = false;\r\n        this.showPrintDialog = true;\r\n        this.pageNumbers = '';\r\n        this.printPageError = '';\r\n    }\r\n\r\n    closePrintDialog() {\r\n        this.showPrintDialog = false;\r\n    }\r\n\r\n    @HostListener('window:message', ['$event'])\r\n    onPrintMessage(e) {\r\n        let message = e.data;\r\n        switch (message) {\r\n            case 'error':\r\n                this.printPageError = 'Ошибка. Не удалось подготовить страницы к печати.';\r\n                break;\r\n            case 'print':\r\n                this.printTargetFrame.nativeElement.contentWindow.focus();\r\n                this.printTargetFrame.nativeElement.contentWindow.print();\r\n                this.closePrintDialog();\r\n                break;\r\n            default:\r\n                this.printProgress = Math.min(parseInt(message, 10), 100);\r\n                break;\r\n        }\r\n    }\r\n\r\n    @HostListener('document:click', ['$event'])\r\n    documentClick(event: MouseEvent) {\r\n        if (this.helpButtonState !== HelpButtonState.Hidden) {\r\n            this.minimizeHelpButton();\r\n        }\r\n    }\r\n\r\n    @HostListener('document:keydown', ['$event'])\r\n    documentKeypress(event: MouseEvent) {\r\n        if (this.helpButtonState !== HelpButtonState.Hidden) {\r\n            this.minimizeHelpButton();\r\n        }\r\n    }\r\n\r\n    onResize() {\r\n        this.pageView.onResize();\r\n    }\r\n\r\n    checkPageNumbers(pageNumbers: string): boolean {\r\n        if (!pageNumbers || pageNumbers.length === 0) {\r\n            return false;\r\n        }\r\n\r\n        let valid = true;\r\n        let numPattern = /^[0-9\\-, ]+$/;\r\n        if (!numPattern.test(pageNumbers)) {\r\n            return false;\r\n        }\r\n\r\n        pageNumbers.replace('-', ',').split(',').forEach((v, i) => {\r\n            if (parseInt(v, 10) > this.document.pages.length || parseInt(v, 10) <= 0) {\r\n                valid = false;\r\n            }\r\n        });\r\n\r\n        return valid;\r\n    }\r\n\r\n  @HostListener('touchstart', ['$event'])\r\n  touchStartHandler(event) {\r\n    let pageArea = this.pageArea.nativeElement;\r\n    let canvas = this.pageView.canvas.nativeElement;\r\n    if(pageArea.clientHeight <= canvas.clientHeight) return;\r\n\r\n    let firstTouch = event.touches[0];\r\n    this.touchStart = {\r\n      x: firstTouch.clientX,\r\n      y: firstTouch.clientY,\r\n      time: new Date().getTime()\r\n    };\r\n  }\r\n\r\n  @HostListener('touchend', ['$event'])\r\n  touchEndHandler(event) {\r\n    let pageArea = this.pageArea.nativeElement;\r\n    let canvas = this.pageView.canvas.nativeElement;\r\n    if(pageArea.clientHeight <= canvas.clientHeight) return;\r\n\r\n    let lastTouch = event.changedTouches[event.changedTouches.length-1];\r\n    let value = this.touchStart.y - lastTouch.clientY,\r\n      deltaY = Math.abs(value),\r\n      deltaX = Math.abs(this.touchStart.x - lastTouch.clientX);\r\n    if(deltaY < deltaX || deltaY < this.touchTreshhold) return;\r\n\r\n    let elapsedTime = new Date().getTime() - this.touchStart.time;\r\n    if(elapsedTime > this.allowedTime) return;\r\n\r\n    if(value > 0){\r\n      this.scrollPage(1);\r\n    }else{\r\n      this.scrollPage(-1);\r\n    }\r\n  }\r\n\r\n    @HostListener('scroll', ['$event'])\r\n    scrollHandler(event) {\r\n        let el = this.pageArea.nativeElement;\r\n        if (el.scrollTop == 0 ||\r\n            (el.offsetHeight + el.scrollTop >= el.scrollHeight)){\r\n            this.lastScrollTime = Date.now();\r\n            this.lastScrollPosition = el.scrollTop;\r\n        }\r\n\r\n        if(this.pageView.needScrollAnimate){\r\n            this.pageView.setAnimationStyles();\r\n            window.clearTimeout(this.scrollTimer);\r\n\r\n            this.scrollTimer = setTimeout(() => {\r\n                this.pageView.redrawCanvas();\r\n                this.pageView.clearAnimationStyles();\r\n            }, this.scrollTimerDelay);\r\n        }else{\r\n            this.pageView.redrawCanvas();\r\n        }\r\n    }\r\n\r\n    @HostListener('mousedown', ['$event'])\r\n    mouseDownHandler(event){\r\n        if (document.activeElement instanceof HTMLElement) {\r\n            document.activeElement.blur();\r\n        }\r\n    }\r\n\r\n    mouseWheelUpHandler(event) {\r\n        let el = this.pageArea.nativeElement,\r\n        direction = -1,\r\n        targetNumber = this.page.number - 1 + direction;\r\n\r\n        if( targetNumber < 0 || targetNumber > this.document.pages.length - 1) return;\r\n\r\n        if(this.checkHasScroll(el)){\r\n            if (el.scrollTop == 0 && this.checkCanScroll()) {\r\n                this.scrollPage(direction);\r\n                this.setPageScroll(direction);\r\n            }\r\n        } else {\r\n            this.scrollPage(direction);\r\n        }\r\n    }\r\n\r\n    mouseWheelDownHandler(event) {\r\n        let el = this.pageArea.nativeElement,\r\n        direction = 1,\r\n          targetNumber = this.page.number - 1 + direction;\r\n\r\n      if( targetNumber < 0 || targetNumber > this.document.pages.length - 1) return;\r\n\r\n        if(this.checkHasScroll(el)){\r\n            if ((el.offsetHeight + el.scrollTop >= el.scrollHeight) && this.checkCanScroll()) {\r\n                this.scrollPage(direction);\r\n                this.setPageScroll(direction);\r\n            }\r\n        } else {\r\n            this.scrollPage(direction);\r\n        }\r\n    }\r\n\r\n    checkCanScroll() {\r\n        let currentTime = Date.now();\r\n        let timeDelta = (typeof this.lastScrollTime === 'undefined') ? 0 : currentTime - this.lastScrollTime,\r\n          currentPosition = this.pageArea.nativeElement.scrollTop,\r\n          positionChanged = this.lastScrollPosition != currentPosition;\r\n\r\n        this.lastScrollTime = currentTime;\r\n        this.lastScrollPosition = currentPosition;\r\n\r\n        return timeDelta > 300 && !positionChanged\r\n    }\r\n\r\n    checkHasScroll(object) {\r\n        return object.scrollHeight > object.clientHeight;\r\n    }\r\n\r\n  setPageScroll(direction){\r\n    let page = this.pageArea.nativeElement;\r\n\r\n    if(direction > 0){\r\n      page.scrollTop = 0;\r\n    }else{\r\n      page.scrollTop = page.scrollHeight - page.clientHeight;\r\n    }\r\n  }\r\n\r\n  resetPageScroll(){\r\n    this.pageArea.nativeElement.scrollTop = 0;\r\n    this.pageArea.nativeElement.scrollLeft = 0;\r\n  }\r\n\r\n    scrollPage(direction) {\r\n        this.app.thumbnailsComponent.setPage(this.document.pages[this.page.number - 1 + direction]);\r\n    }\r\n\r\n    initHelpButton() {\r\n        let state: number = +localStorage.getItem('helpState');\r\n\r\n        if (state == null || HelpButtonState[state] == null) {\r\n            this.helpButtonState = HelpButtonState.Highlighted;\r\n            return;\r\n        }\r\n\r\n        this.helpButtonState = state;\r\n    }\r\n\r\n    minimizeHelpButton() {\r\n        this.helpButtonState = HelpButtonState.Visible;\r\n        if (this.configService.isRoom === false) {\r\n            localStorage.setItem('helpState', this.helpButtonState.toString());\r\n        }\r\n    }\r\n\r\n    hideHelpButton() {\r\n        this.helpButtonState = HelpButtonState.Hidden;\r\n        if (!this.configService.isRoom) {\r\n            localStorage.setItem('helpState', this.helpButtonState.toString());\r\n        }\r\n    }\r\n\r\n    ctxHandler(event){\r\n        event.preventDefault();\r\n    }\r\n}\r\n","module.exports = \"div {\\r\\n    background-color: white;\\r\\n}\\r\\n\\r\\n.thumb-wrapper {\\r\\n    box-shadow: black 1px 2px 4px;\\r\\n}\\r\\n\\r\\n.thumb {\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.thumb.highlight {\\r\\n    box-shadow: #2978cc 0px 0px 9px;\\r\\n}\\r\\n\\r\\n.caption {\\r\\n    display: inline-block;\\r\\n    position: absolute;\\r\\n    margin: 0px;\\r\\n    right: 0px;\\r\\n    bottom: 0px;\\r\\n    z-index: 1;\\r\\n\\r\\n    font-size: smaller;\\r\\n    padding-right: 5px;\\r\\n    padding-left: 5px;\\r\\n\\r\\n    background: #eeeeee;\\r\\n    border-radius: 5px 0px 0px 0px;\\r\\n    color: #515151;\\r\\n    font-weight: bold;\\r\\n}\\r\\n\\r\\n.loading {\\r\\n    background: url(/content/images/html5client/loading_small.gif) no-repeat center center;\\r\\n}\\r\\n\\r\\n.error {\\r\\n    background: url(/content/images/html5client/error_loading.png) no-repeat center center;\\r\\n}\\r\\n\"","module.exports = \"<div class=\\\"thumb-wrapper\\\" [ngStyle]=\\\"style\\\" (contextmenu)=\\\"ctxHandler($event)\\\">\\r\\n    <div [ngClass]=\\\"{'loading': loading, 'error': error, 'highlight': selected }\\\" class=\\\"thumb\\\">\\r\\n        <canvas [width]=\\\"width\\\" [height]=\\\"height\\\"></canvas>\\r\\n        <div *ngIf=\\\"showPageNumber\\\" class=\\\"caption\\\">{{page.number}}</div>\\r\\n    </div>\\r\\n</div>\\r\\n\"","import { Component, OnInit, Input, Output, EventEmitter, ElementRef, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { Subscription, EMPTY } from 'rxjs';\r\n\r\nimport { DocumentService } from '../../services/document.service';\r\nimport { Page } from '../../models/page';\r\nimport { isUndefined } from 'util';\r\n\r\n@Component({\r\n    selector: 'app-thumbnail',\r\n    templateUrl: './thumbnail.component.html',\r\n    styleUrls: ['./thumbnail.component.css']\r\n})\r\nexport class ThumbnailComponent implements OnInit, OnChanges {\r\n\r\n    @Input() page: Page;\r\n\r\n    @Input() pageWidth: number = 0;\r\n\r\n    @Input() pageHeight: number = 0;\r\n\r\n    @Input() width: number = 0;\r\n\r\n    @Input() height: number = 0;\r\n\r\n    @Input() showPageNumber: boolean = true;\r\n\r\n    @Input() style: any = null;\r\n\r\n    @Input() highlights: any = null;\r\n\r\n    @Input() scale: number = 1;\r\n\r\n    @Input() scaleType: string = 'fitPage';\r\n\r\n    @Output() scaleChanged = new EventEmitter<number>();\r\n\r\n    public selected: boolean = false;\r\n\r\n    public loading: boolean = true;\r\n\r\n    public error: boolean = false;\r\n\r\n    public mycanvas: any = null;\r\n\r\n    private rotationAngle: number = 0;\r\n\r\n    private image = null;\r\n\r\n    constructor(\r\n        private elementRef: ElementRef,\r\n        private documentService: DocumentService\r\n    ) { }\r\n\r\n    ngOnInit() {\r\n        if (this.height === 0) {\r\n            this.height = this.page.height * this.scale * 96 / 72;\r\n            this.width = this.page.width * this.scale * 96 / 72;\r\n        }\r\n\r\n        if (this.style == null) {\r\n            this.style = { 'width': `${this.width}px`, 'height': `${this.height}px` };\r\n        }\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        if (this.highlights) {\r\n            this.drawHighlights();\r\n        }\r\n    }\r\n\r\n    public getElement() {\r\n        return this.elementRef;\r\n    }\r\n\r\n    public load(): Subscription {\r\n\r\n        if (!this.loading) {\r\n            return null;\r\n        }\r\n\r\n        this.error = false;\r\n        this.loading = true;\r\n\r\n        return this.documentService.getThumbnail(this.page, this.width, this.height)\r\n        .catch(e => {\r\n            this.loading = false;\r\n            this.error = true;\r\n            return EMPTY;\r\n        })\r\n        .subscribe(\r\n            (thumbnail: HTMLImageElement) => {\r\n                this.mycanvas = this.elementRef.nativeElement.getElementsByTagName('canvas')[0];\r\n                this.mycanvas.width = this.width;\r\n                this.mycanvas.height = this.height;\r\n                let that = this;\r\n                let context = this.mycanvas.getContext('2d');\r\n                context.clearRect(0, 0, this.mycanvas.width, this.mycanvas.height);\r\n                let width = this.mycanvas.width;\r\n                let height = this.mycanvas.height;\r\n\r\n                let highlights = null, k = null;\r\n                if (!isUndefined(this.highlights) && this.highlights != null) {\r\n                    highlights = this.highlights;\r\n                    k = this.height / this.pageHeight;\r\n                }\r\n\r\n                thumbnail.onload = function () {\r\n                    that.image = thumbnail.cloneNode(true);\r\n                    that.mycanvas.style.visibility = false;\r\n                    context.drawImage(thumbnail, 0, 0, width, height);\r\n                    if (!isUndefined(highlights) && highlights != null) {\r\n                        context.fillStyle = 'rgba(236,236,99,0.5)';\r\n                        for (let i = 0; i < highlights.length; i++) {\r\n                            context.fillRect(highlights[i].Left * k, highlights[i].Top * k, highlights[i].Width * k, highlights[i].Height * k);\r\n                        }\r\n                    }\r\n\r\n                    that.drawHighlights();\r\n\r\n                    that.mycanvas.style.visibility = true;\r\n                };\r\n                this.loading = false;\r\n            }\r\n        );\r\n    }\r\n\r\n    public drawHighlights() {\r\n        let context = this.mycanvas.getContext('2d');\r\n        let highlights = null, k = null;\r\n        if (!isUndefined(this.highlights) && this.highlights != null) {\r\n            highlights = this.highlights;\r\n\r\n            if (this.rotationAngle % 180 === 0) {\r\n                k = this.height / this.pageHeight;\r\n            } else {\r\n                k = this.height / this.pageWidth;\r\n            }\r\n        }\r\n\r\n        if (!isUndefined(highlights) && highlights != null) {\r\n            context.fillStyle = 'rgba(236,236,99,0.5)';\r\n            for (let i = 0; i < highlights.length; i++) {\r\n                context.fillRect(highlights[i].Left * k, highlights[i].Top * k, highlights[i].Width * k, highlights[i].Height * k);\r\n            }\r\n        }\r\n    }\r\n\r\n    ctxHandler(event){\r\n        event.preventDefault();\r\n    }\r\n}\r\n","module.exports = \":host {\\r\\n  padding-top: 15px;\\r\\n}\\r\\n.thumbnail-container {\\r\\n    display: inline-block; \\r\\n    margin-right: 10px; \\r\\n    margin-bottom: 10px;\\r\\n    vertical-align: top;\\r\\n}\\r\\n.thumbnail-container > .landscape {\\r\\n  margin-top: 13%;\\r\\n}\\r\\n.thumbnail-container > .portrait {\\r\\n  margin-left: 13%;\\r\\n}\"","module.exports = \"\\r\\n<div *ngIf=\\\"document\\\">\\r\\n    <div *ngFor=\\\"let page of document.pages\\\" class=\\\"thumbnail-container\\\"\\r\\n         [ngStyle]=\\\"{'width': thumbnailContainerWidth + 'px',\\r\\n          'height': thumbnailContainerHeight + 'px'}\\\">\\r\\n\\r\\n        <app-thumbnail *ngIf=\\\"page.orientation == PageOrientation.Portrait\\\" class=\\\"portrait\\\"\\r\\n             [page]=\\\"page\\\" [width]=\\\"thumbnailWidth\\\" [height]=\\\"thumbnailHeight\\\" (click)=\\\"selectPage($event, page)\\\"></app-thumbnail>\\r\\n\\r\\n        <app-thumbnail *ngIf=\\\"page.orientation == PageOrientation.Landscape\\\" class=\\\"landscape\\\"\\r\\n             [page]=\\\"page\\\" [width]=\\\"thumbnailHeight\\\" [height]=\\\"thumbnailWidth\\\" (click)=\\\"selectPage($event, page)\\\"></app-thumbnail>\\r\\n    </div>\\r\\n</div>\\r\\n\"","import {\r\n  Component, Input,\r\n  ViewChildren, QueryList,\r\n  NgZone, ElementRef, Renderer2,\r\n  OnDestroy, AfterViewInit, AfterViewChecked\r\n} from '@angular/core';\r\n\r\nimport { Location } from \"@angular/common\";\r\n\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { AppComponent } from '../../app.component';\r\nimport { PageComponent } from '../page/page.component';\r\nimport { ThumbnailComponent } from '../thumbnail/thumbnail.component';\r\n\r\nimport { Document } from '../../models/document';\r\nimport { Page, PageOrientation } from '../../models/page';\r\n\r\nimport { ScrollToService, ScrollToConfigOptions } from '@nicky-lenaers/ngx-scroll-to';\r\n\r\ninterface ViewThumbnails {\r\n    top: number;\r\n    bottom: number;\r\n}\r\n\r\n@Component({\r\n    selector: 'app-thumbnails',\r\n    templateUrl: './thumbnails.component.html',\r\n    styleUrls: ['./thumbnails.component.css'],\r\n})\r\nexport class ThumbnailsComponent implements OnDestroy, AfterViewInit, AfterViewChecked {\r\n\r\n    @Input() app: AppComponent;\r\n\r\n    @Input() thumbnailWidth: number = 0;\r\n\r\n    @Input() thumbnailHeight: number = 0;\r\n\r\n    @Input() document: Document;\r\n\r\n    @Input() pageComponent: PageComponent;\r\n\r\n    @ViewChildren(ThumbnailComponent) thumbnails: QueryList<ThumbnailComponent>;\r\n\r\n    PageOrientation: typeof PageOrientation = PageOrientation;\r\n\r\n    private listenThumbnailsScroll: Function;\r\n\r\n    private listenDocumentResize: Function;\r\n\r\n    private thumbnailSubscriptions: Map<number, Subscription> = new Map<number, Subscription>();\r\n\r\n    private loadThumbnailsTimerId: any;\r\n\r\n    private maxThumbnailSubscriptions: number = 2;\r\n\r\n    private executingThumbnailSubscriptions: number = 0;\r\n\r\n    constructor(\r\n        private location: Location,\r\n        private zone: NgZone,\r\n        private elementRef: ElementRef,\r\n        private renderer: Renderer2,\r\n        private scrollToService: ScrollToService\r\n    ) { }\r\n\r\n    ngOnDestroy() {\r\n        this.listenDocumentResize();\r\n\r\n        if (this.listenThumbnailsScroll != null) {\r\n            this.listenThumbnailsScroll();\r\n        }\r\n\r\n      this.thumbnailSubscriptions.forEach((subscription, key) => {\r\n        if (subscription) {\r\n          subscription.unsubscribe();\r\n          subscription = null;\r\n        }\r\n      });\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        // bind scroll and resize events\r\n\r\n        this.listenDocumentResize = this.renderer.listen('window', 'resize', (event) => {\r\n            this.loadThumbnails();\r\n            return false;\r\n        });\r\n\r\n        // find scrollable area\r\n\r\n      let el = this.elementRef.nativeElement.closest('.panel-collapse.collapse.in.show .panel-body');\r\n\r\n      this.listenThumbnailsScroll = this.renderer.listen(el, 'scroll', (event) => {\r\n        return false;\r\n      });\r\n\r\n      this.listenThumbnailsScroll = this.renderer.listen('window', 'scroll', (event) => {\r\n        return false;\r\n      });\r\n    }\r\n\r\n    ngAfterViewChecked() {\r\n        this.zone.runOutsideAngular(() => {\r\n            try {\r\n                this.loadThumbnails();\r\n                setTimeout(() => {\r\n                    this.updateSelectedThumbnail();\r\n                });\r\n            } catch (err) {\r\n                console.error(err);\r\n            }\r\n        });\r\n    }\r\n\r\n    get thumbnailContainerWidth(): number {\r\n        if (this.document.hasLandscapePage && this.document.hasPortraitPage) {\r\n            return Math.max(this.thumbnailWidth, this.thumbnailHeight);\r\n        }\r\n\r\n        return this.thumbnailWidth;\r\n    }\r\n\r\n    get thumbnailContainerHeight(): number {\r\n        if (this.document.hasLandscapePage && this.document.hasPortraitPage) {\r\n            return Math.max(this.thumbnailWidth, this.thumbnailHeight);\r\n        }\r\n\r\n        return this.thumbnailHeight;\r\n    }\r\n\r\n    private calcViewThumbnails(): ViewThumbnails {\r\n        let br: ClientRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n\r\n        if (br.width === 0 && br.height === 0) {\r\n            return;\r\n        }\r\n\r\n        let viewHeight: number = Math.max(0,\r\n            br.top > 0 ? window.innerHeight - br.top : (br.bottom < window.innerHeight ? br.bottom : window.innerHeight));\r\n\r\n        if (viewHeight === 0) {\r\n            return;\r\n        }\r\n\r\n        let marginRight: number = 10;\r\n        let marginBottom: number = 10;\r\n\r\n        let viewThumbnailsWidth: number = Math.floor(br.width / Math.max(1, this.thumbnailContainerWidth + marginRight)) || 1;\r\n        let viewThumbnailsHeight: number = Math.round(viewHeight / Math.max(1, this.thumbnailContainerHeight + marginBottom));\r\n        let viewThumbnails: number = viewThumbnailsWidth * viewThumbnailsHeight;\r\n\r\n        let skipThumbnailsWidth: number = viewThumbnailsWidth;\r\n        let skipThumbnailsHeight: number = 0;\r\n\r\n        if (br.top < 0) {\r\n            skipThumbnailsHeight = Math.round(Math.abs(br.top) / Math.max(1, this.thumbnailContainerHeight + marginBottom));\r\n        }\r\n\r\n        let skipThumbnails: number = skipThumbnailsWidth * skipThumbnailsHeight;\r\n\r\n        return {\r\n            top: skipThumbnails + 1,\r\n            bottom: skipThumbnails + viewThumbnails < this.document.pages.length ?\r\n                skipThumbnails + viewThumbnails : this.document.pages.length\r\n        };\r\n    }\r\n\r\n    private loadThumbnails(): void {\r\n        if (this.document == null) {\r\n            return;\r\n        }\r\n\r\n        let viewThumbnails = this.calcViewThumbnails();\r\n\r\n        if (viewThumbnails === undefined) {\r\n            return;\r\n        }\r\n\r\n        // unsubscribe obsolete requests\r\n\r\n        this.thumbnailSubscriptions.forEach((subscription, key) => {\r\n            if (subscription.closed) {\r\n                return;\r\n            }\r\n\r\n            if (key < viewThumbnails.top || viewThumbnails.bottom < key) {\r\n                subscription.unsubscribe();\r\n            }\r\n        });\r\n\r\n        // subscribe unloaded thumbnails\r\n\r\n        if (this.loadThumbnailsTimerId > 0) {\r\n            clearTimeout(this.loadThumbnailsTimerId);\r\n        }\r\n\r\n        this.loadThumbnailsTimerId = setTimeout(() => {\r\n            this.thumbnailSubscriptions.forEach((subscription, key) => {\r\n                if (subscription.closed) { this.thumbnailSubscriptions.delete(key); }\r\n            });\r\n\r\n            this.subscribeThumbnails(viewThumbnails);\r\n        }, 1000);\r\n    }\r\n\r\n    private subscribeThumbnails(viewThumbnails: ViewThumbnails): void {\r\n        let thumbnails: ThumbnailComponent[] = this.thumbnails.toArray();\r\n        for (let i = viewThumbnails.top - 1; i <= viewThumbnails.bottom - 1; i++) {\r\n            let thumbnail: ThumbnailComponent = thumbnails[i];\r\n\r\n            if (thumbnail.loading === false) { continue; }\r\n\r\n            if (this.thumbnailSubscriptions.has(i)) { continue; }\r\n\r\n            // check subscription queue\r\n\r\n            if (this.maxThumbnailSubscriptions > 0 && this.executingThumbnailSubscriptions >= this.maxThumbnailSubscriptions) { break; }\r\n\r\n            this.executingThumbnailSubscriptions++;\r\n\r\n            // add subscription to queue\r\n\r\n            let subscription: Subscription = thumbnail.load();\r\n\r\n            subscription.add(() => {\r\n                this.executingThumbnailSubscriptions--;\r\n                this.subscribeThumbnails(viewThumbnails);\r\n            });\r\n\r\n            this.thumbnailSubscriptions.set(i, subscription);\r\n        }\r\n    }\r\n\r\n    selectPage($event: MouseEvent, page: Page) {\r\n        $event.preventDefault();\r\n        this.setPage(page);\r\n    }\r\n\r\n    public setPage(page: Page) {\r\n        if (this.pageComponent.page.number === page.number) {\r\n            return;\r\n        }\r\n\r\n        this.app.showPanel(false);\r\n        this.location.go(\"/\", \"#page=\" + page.number);\r\n        this.pageComponent.page = page;\r\n        this.pageComponent.pageView.page = page;\r\n        this.pageComponent.pageView.loading = true;\r\n        this.pageComponent.pageView.links = null;\r\n        this.app.pageComponent.resetPageScroll();\r\n        this.pageComponent.loadPageView();\r\n        this.updateSelectedThumbnail();\r\n        this.scrollToPage(page.number - 1);\r\n\r\n        this.pageComponent.pageView.highlights = null;\r\n        let el = this.pageComponent.pageArea.nativeElement;\r\n        this.pageComponent.pageView.drawHighlights(el.scrollLeft, el.scrollTop);\r\n        this.app.foundPagesComponent.makePageHighlights(page.number, this.app.query);\r\n\r\n        this.app.toolbarComponent.refreshCurrentPage(page.number);\r\n    }\r\n\r\n    public scrollToPage(pageNumber: number) {\r\n        let element = this.thumbnails.toArray()[pageNumber];\r\n        if (element === undefined) {\r\n            setTimeout(() => { this.scrollToPage(pageNumber); }, 100);\r\n            return;\r\n        }\r\n\r\n        const config: ScrollToConfigOptions = {\r\n            target: element.getElement(),\r\n            duration: 0,\r\n            offset: -40\r\n          };\r\n\r\n        this.scrollToService.scrollTo(config);\r\n\r\n        (<HTMLElement>element.getElement().nativeElement).scrollTo();\r\n    }\r\n\r\n    private updateSelectedThumbnail() {\r\n        this.thumbnails.forEach(thumbnail => {\r\n            thumbnail.selected = thumbnail.page.number === this.pageComponent.page.number;\r\n        });\r\n    }\r\n}\r\n","module.exports = \"#ToolPanel {\\r\\n    margin: 0 !important;\\r\\n    display: inline-flex;\\r\\n}\\r\\n\\r\\n.block-2 {\\r\\n    margin-left: 20px;\\r\\n    margin-right: 20px;\\r\\n}\\r\\n\\r\\n.navigation {\\r\\n    width: 280px;\\r\\n    margin-left: 20px;\\r\\n    margin-right: 20px;\\r\\n}\\r\\n\\r\\n.scale {\\r\\n    width: 200px;\\r\\n}\\r\\n\\r\\n.page {\\r\\n    margin-right: 5px;\\r\\n}\\r\\n\\r\\n.document {\\r\\n    margin-left: 5px;\\r\\n}\\r\\n\\r\\n.expand-panel {\\r\\n    display: none !important;\\r\\n    position: fixed;\\r\\n    right: 12px;\\r\\n}\\r\\n\\r\\n.desktop-panel {\\r\\n    display: inline-flex;\\r\\n}\\r\\n\\r\\n.mobile-panel {\\r\\n    display: none;\\r\\n    margin-bottom: 8px;\\r\\n}\\r\\n\\r\\n.client-toolbar-wrapper {\\r\\n    left: 50%;\\r\\n    -webkit-transform: translate(-50%, 0);\\r\\n            transform: translate(-50%, 0);\\r\\n    margin: 50px 50px 0px 50px;\\r\\n  -webkit-transform:translate3d(-50%,0,100px);\\r\\n}\\r\\n\\r\\n.client-toolbar-wrapper {\\r\\n    transition: opacity 0.4s ease-out;\\r\\n    opacity: 0;\\r\\n}\\r\\n\\r\\n.client-toolbar-wrapper:hover {\\r\\n    opacity: 1;\\r\\n}\\r\\n\\r\\n/* Mobile larger then 800 */\\r\\n\\r\\n.client-toolbar-wrapper.mobile-view {\\r\\n    margin: 0px;\\r\\n    bottom: 0;\\r\\n    width: 100%;\\r\\n    position: absolute;\\r\\n    opacity: 1;\\r\\n}\\r\\n\\r\\n.client-toolbar-wrapper.mobile-view #ToolPanel {\\r\\n      width: 100%;\\r\\n      padding: 8px 0px 8px 0px !important;\\r\\n      display: inherit;\\r\\n      box-sizing: border-box;\\r\\n  }\\r\\n\\r\\n.client-toolbar-wrapper.mobile-view .menu {\\r\\n      display: initial !important;\\r\\n  }\\r\\n\\r\\n.client-toolbar-wrapper.mobile-view .navigation {\\r\\n      margin-left: 0px;\\r\\n      width: 100%;\\r\\n  }\\r\\n\\r\\n/* Small screen */\\r\\n\\r\\n@media only screen and (max-width: 800px) {\\r\\n  .client-toolbar-wrapper {\\r\\n    margin: 0px;\\r\\n    bottom: 0;\\r\\n    width: 100%;\\r\\n    position: absolute;\\r\\n    opacity: 1;\\r\\n  }\\r\\n\\r\\n  #ToolPanel {\\r\\n    width: 100%;\\r\\n    padding: 8px 0px 8px 0px !important;\\r\\n    display: inherit;\\r\\n  }\\r\\n\\r\\n  .menu {\\r\\n    display: initial !important;\\r\\n  }\\r\\n\\r\\n  .navigation {\\r\\n    margin-left: 0px;\\r\\n    width: 100%;\\r\\n  }\\r\\n  .client-toolbar-wrapper{\\r\\n    margin: 0 !important;\\r\\n  }\\r\\n    .client-toolbar {\\r\\n        display: -ms-inline-grid !important;\\r\\n        display: inline-grid !important;\\r\\n    }\\r\\n\\r\\n    .scale {\\r\\n        width: 200px;\\r\\n    }\\r\\n\\r\\n    .mobile-panel {\\r\\n        display: inline-flex;\\r\\n        padding-top: 6px;\\r\\n        justify-content: center;\\r\\n    }\\r\\n\\r\\n    .expand-panel {\\r\\n        display: inline-block !important;\\r\\n    }\\r\\n\\r\\n    .desktop-panel {\\r\\n        display: none !important;\\r\\n    }\\r\\n\\r\\n    .collapsed {\\r\\n        display: none !important;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media only screen and (max-width: 440px) {\\r\\n    .client-toolbar {\\r\\n        display: -ms-inline-grid;\\r\\n        display: inline-grid;\\r\\n    }\\r\\n\\r\\n    .mobile-panel {\\r\\n        display: block;\\r\\n    }\\r\\n\\r\\n    .scale {\\r\\n        width: 100%;\\r\\n        padding: 6px 0;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media only screen and (max-width: 380px) {\\r\\n    .expand-panel {\\r\\n        position: initial;\\r\\n    }\\r\\n}\\r\\n\"","module.exports = \"<div class=\\\"client-toolbar-wrapper\\\" *ngIf=\\\"document\\\" [ngClass]=\\\"{'mobile-view': app.isMobile}\\\">\\r\\n    <div id=\\\"ToolPanel\\\" class=\\\"client-toolbar\\\">\\r\\n        <div class=\\\"block-1 mobile-panel\\\" [ngClass]=\\\"{'collapsed': !panelExpanded}\\\">\\r\\n                <div class=\\\"scale menu\\\">\\r\\n                    <span class=\\\"tool-button full-height\\\" title=\\\"Установить масштаб 'Страница целиком'\\\" (click)=\\\"setPageScale('fitPage')\\\"></span>\\r\\n                    <span class=\\\"tool-button full-width\\\" title=\\\"Установить масштаб 'По ширине страницы'\\\" (click)=\\\"setPageScale('fitWidth')\\\"></span>\\r\\n                    <span class=\\\"tool-button zoom-out\\\" title=\\\"Уменьшить масштаб\\\" (click)=\\\"zoomOut()\\\"></span>\\r\\n                    <select id=\\\"ScaleComboBoxMobile\\\" #scaleBoxMobile (change)=\\\"setPageScale('custom', stringValToFloat(scaleBoxMobile.value))\\\">\\r\\n                        <option *ngFor= \\\"let scale of app.pageComponent.pageView.scaleList\\\" value=\\\"{{scale.value}}\\\" [selected]=\\\"currentScale == scale.value\\\">{{scale.title}}</option>\\r\\n                    </select>\\r\\n                    <span class=\\\"tool-button zoom-in\\\" title=\\\"Увеличить масштаб\\\" (click)=\\\"zoomIn()\\\"></span>\\r\\n                </div>\\r\\n\\r\\n                <div class=\\\"block-2\\\">\\r\\n                    <div class=\\\"page menu\\\">\\r\\n                        <span class=\\\"tool-button rotate-left\\\" title=\\\"Повернуть против часовой стрелки\\\" (click)=\\\"rotatePage(-90)\\\"></span>\\r\\n                        <span class=\\\"tool-button invert-page\\\" title=\\\"Инвертировать цвета\\\" (click)=\\\"invertPage()\\\"></span>\\r\\n                        <span class=\\\"tool-button rotate-right\\\" title=\\\"Повернуть по часовой стрелке\\\" (click)=\\\"rotatePage(90)\\\"></span>\\r\\n                    </div>\\r\\n\\r\\n                    <div class=\\\"document menu\\\">\\r\\n                        <span class=\\\"tool-button print\\\" (click)=\\\"print()\\\" title=\\\"Распечатать\\\" *ngIf=\\\"config.printAllowed\\\"></span>\\r\\n                        <span class=\\\"tool-button copy\\\" (click)=\\\"copy()\\\" title=\\\"Скопировать\\\" *ngIf=\\\"config.copyAllowed\\\"></span>\\r\\n                        <span class=\\\"tool-button download\\\" (click)=\\\"download()\\\" title=\\\"Скачать\\\" *ngIf=\\\"config.downloadAllowed\\\"></span>\\r\\n                    </div>\\r\\n                </div>\\r\\n            </div>\\r\\n\\r\\n        <div class=\\\"navigation menu\\\">\\r\\n            <span class=\\\"tool-button first-page\\\" title=\\\"Первая страница\\\" (click)=\\\"moveToPage(1)\\\"></span>\\r\\n            <span class=\\\"tool-button previous-page\\\" title=\\\"Предыдущая страница\\\" (click)=\\\"previousPage()\\\"></span>\\r\\n            <input id=\\\"PageNumber\\\" #PageNumber type=\\\"text\\\" size=\\\"2\\\" value=\\\"{{currentPage}}\\\"\\r\\n                    (keypress)=\\\"pageInputInput($event)\\\"\\r\\n                    (change)=\\\"pageInputChanged()\\\"\\r\\n                    (focus)=\\\"pageNumberOnFocus()\\\"\\r\\n                    (focusout)=\\\"pageNumberOnFocusOut()\\\"\\r\\n                    (keyup.enter)=\\\"pageInputOnEnter()\\\"\\r\\n            />\\r\\n            <input id=\\\"PageCountInput\\\" type=\\\"hidden\\\" value=\\\"{{pagesCount}}\\\" />\\r\\n            <span class=\\\"tool-button next-page\\\" title=\\\"Следующая страница\\\" (click)=\\\"nextPage()\\\"></span>\\r\\n            <span class=\\\"tool-button last-page\\\" title=\\\"Последняя страница\\\" (click)=\\\"moveToPage(pagesCount)\\\"></span>\\r\\n            <span class=\\\"tool-button expand-panel\\\" title=\\\"Свернуть/развернуть панель\\\" (click)=\\\"expandPanel()\\\"></span>\\r\\n        </div>\\r\\n\\r\\n        <div class=\\\"block-1 desktop-panel\\\">\\r\\n            <div class=\\\"scale menu\\\">\\r\\n                <span class=\\\"tool-button full-height\\\" title=\\\"Установить масштаб 'Страница целиком'\\\" (click)=\\\"setPageScale('fitPage')\\\"></span>\\r\\n                <span class=\\\"tool-button full-width\\\" title=\\\"Установить масштаб 'По ширине страницы'\\\" (click)=\\\"setPageScale('fitWidth')\\\"></span>\\r\\n                <span class=\\\"tool-button zoom-out\\\" title=\\\"Уменьшить масштаб\\\" (click)=\\\"zoomOut()\\\"></span>\\r\\n                <select id=\\\"ScaleComboBox\\\" #scaleBox (change)=\\\"setPageScale('custom', stringValToFloat(scaleBox.value))\\\">\\r\\n                    <option *ngFor= \\\"let scale of app.pageComponent.pageView.scaleList\\\" value=\\\"{{scale.value}}\\\" [selected]=\\\"currentScale == scale.value\\\">{{scale.title}}</option>\\r\\n                </select>\\r\\n                <span class=\\\"tool-button zoom-in\\\" title=\\\"Увеличить масштаб\\\" (click)=\\\"zoomIn()\\\"></span>\\r\\n            </div>\\r\\n\\r\\n            <div class=\\\"block-2\\\">\\r\\n                <div class=\\\"page menu\\\">\\r\\n                    <span class=\\\"tool-button rotate-left\\\" title=\\\"Повернуть против часовой стрелки\\\" (click)=\\\"rotatePage(-90)\\\"></span>\\r\\n                    <span class=\\\"tool-button invert-page\\\" title=\\\"Инвертировать цвета\\\" (click)=\\\"invertPage()\\\"></span>\\r\\n                    <span class=\\\"tool-button rotate-right\\\" title=\\\"Повернуть по часовой стрелке\\\" (click)=\\\"rotatePage(90)\\\"></span>\\r\\n                </div>\\r\\n\\r\\n                <div class=\\\"document menu\\\">\\r\\n                    <span class=\\\"tool-button print\\\" (click)=\\\"print()\\\" title=\\\"Распечатать\\\" *ngIf=\\\"config.printAllowed\\\"></span>\\r\\n                    <span class=\\\"tool-button copy\\\" (click)=\\\"copy()\\\" title=\\\"Скопировать\\\" *ngIf=\\\"config.copyAllowed\\\"></span>\\r\\n                    <span class=\\\"tool-button download\\\" (click)=\\\"download()\\\" title=\\\"Скачать\\\" *ngIf=\\\"config.downloadAllowed\\\"></span>\\r\\n                </div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n\"","import {\r\n  Component, NgZone, ViewChild, Input, OnInit, OnChanges, AfterViewInit, AfterViewChecked, SimpleChanges, ElementRef,\r\n  ChangeDetectorRef, HostListener\r\n} from '@angular/core';\r\n\r\nimport { AppComponent } from '../../app.component';\r\n\r\nimport { Page } from '../../models/page';\r\nimport { Document } from '../../models/document';\r\n\r\nimport { ConfigService } from 'app/services/config.service';\r\nimport { isUndefined } from \"util\";\r\n\r\n@Component({\r\n    selector: 'app-toolbar',\r\n    templateUrl: './toolbar.component.html',\r\n    styleUrls: ['./toolbar.component.css']\r\n})\r\nexport class ToolbarComponent implements OnInit, OnChanges, AfterViewChecked, AfterViewInit {\r\n\r\n    @Input() page: Page;\r\n\r\n    @Input() document: Document;\r\n\r\n    @Input() app: AppComponent;\r\n\r\n    @ViewChild('PageNumber') pageNumberInput: ElementRef;\r\n\r\n    public currentPage: number = 1;\r\n    public currentScale;\r\n    public currentScaleType: string;\r\n    public pagesCount: number = 0;\r\n    public rotationAngle: number = 0;\r\n    public panelExpanded: boolean = false;\r\n\r\n    constructor(private zone: NgZone, private config: ConfigService, private changeDetector: ChangeDetectorRef) {\r\n    }\r\n\r\n    ngOnInit() {\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.app.pageComponent.loaded.subscribe(() => {\r\n            this.currentScale = this.app.pageComponent.pageView.scale;\r\n            this.app.pageComponent.pageView.scaleChanged.subscribe((value) => {\r\n                this.scaleInScaleList(value);\r\n            });\r\n            this.pageNumberOnFocusOut();\r\n        });\r\n\r\n        setTimeout(() => {\r\n            this.refreshCurrentPage(this.app.currentPage);\r\n        }, 1000);\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges) {\r\n    }\r\n\r\n    ngAfterViewChecked() {\r\n        if (this.app.pageComponent.pageView) {\r\n            this.scaleInScaleList(this.app.pageComponent.pageView.scale);\r\n        }\r\n    }\r\n\r\n    public refreshState() {\r\n        this.pagesCount = this.document.pages.length;\r\n    }\r\n\r\n    public previousPage() {\r\n        if (this.currentPage <= 1) {\r\n            return;\r\n        }\r\n\r\n        this.currentPage--;\r\n        this.moveToPage(this.currentPage);\r\n    }\r\n\r\n    public nextPage() {\r\n        if (this.currentPage >= this.pagesCount) {\r\n            return;\r\n        }\r\n\r\n        this.currentPage++;\r\n        this.moveToPage(this.currentPage);\r\n    }\r\n\r\n    public moveToPage(pageNumber: number) {\r\n        this.currentPage = pageNumber;\r\n        this.app.pageComponent.resetPageScroll();\r\n        this.app.thumbnailsComponent.setPage(this.document.pages[this.currentPage - 1]);\r\n        this.refreshCurrentPage(pageNumber);\r\n    }\r\n\r\n    public expandPanel(expand: boolean = !this.panelExpanded) {\r\n        this.panelExpanded = expand;\r\n    }\r\n\r\n    public refreshCurrentPage(pageNumber: number) {\r\n        this.currentPage = pageNumber;\r\n        setTimeout(() => {\r\n            this.pageNumberInput.nativeElement.dispatchEvent(new Event('focusout'));\r\n        }, 1);\r\n    }\r\n\r\n    public rotatePage(angle: number) {\r\n        this.rotationAngle += angle;\r\n        if (this.rotationAngle >= 360) {\r\n            this.rotationAngle -= 360;\r\n        }\r\n\r\n        if (this.rotationAngle <= -360) {\r\n            this.rotationAngle += 360;\r\n        }\r\n        this.app.pageComponent.pageView.rotate(this.rotationAngle);\r\n    }\r\n\r\n    public invertPage() {\r\n        this.app.pageComponent.pageView.isInverted = !this.app.pageComponent.pageView.isInverted;\r\n        this.app.pageComponent.pageView.invert();\r\n    }\r\n\r\n    public setPageScale(scaleType: string, scale: number) {\r\n        this.currentScaleType = scaleType;\r\n        this.app.pageComponent.resetPageScroll();\r\n        this.app.pageComponent.pageView.setScale(scaleType, scale);\r\n    }\r\n\r\n    public zoomIn() {\r\n        let nextScale = this.getNeighourScales()[1];\r\n        if (this.currentScale !== nextScale) {\r\n            this.setPageScale('custom', nextScale);\r\n        }\r\n    }\r\n\r\n    public zoomOut() {\r\n        let previousScale = this.getNeighourScales()[0];\r\n        if (this.currentScale !== previousScale) {\r\n            this.setPageScale('custom', previousScale);\r\n        }\r\n    }\r\n\r\n    private getNeighourScales() {\r\n        let previousScale = this.currentScale;\r\n        let nextScale = this.currentScale;\r\n        let scaleList = this.app.pageComponent.pageView.scaleList;\r\n        let currentScaleIndex = scaleList.map(item => item.value).indexOf(this.currentScale);\r\n\r\n        // если масштаб выбран не из списка\r\n        if (currentScaleIndex === -1) {\r\n            previousScale = 0;\r\n            nextScale = 0;\r\n\r\n            let prevScales = scaleList.filter(x => x.value < this.currentScale).reverse();\r\n            let nextScales = scaleList.filter(x => x.value > this.currentScale);\r\n            nextScale = nextScales.length > 0 ? nextScales[0].value : this.currentScale;\r\n            previousScale = prevScales.length > 0 ? prevScales[0].value : this.currentScale;\r\n            return [previousScale, nextScale];\r\n        }\r\n\r\n        if (currentScaleIndex > 0) {\r\n            previousScale = scaleList[currentScaleIndex - 1].value;\r\n        }\r\n\r\n        if (currentScaleIndex !== scaleList.length - 1) {\r\n            nextScale = scaleList[currentScaleIndex + 1].value;\r\n        }\r\n        return [previousScale, nextScale];\r\n    }\r\n\r\n    public scaleInScaleList(value) {\r\n        this.currentScale = value;\r\n        let scaleList = this.app.pageComponent.pageView.scaleList.sort();\r\n        if (!scaleList) {\r\n            return;\r\n        }\r\n\r\n        if (value <= scaleList[0].value) {\r\n            this.currentScale = scaleList[0].value;\r\n        } else if (value >= scaleList[scaleList.length - 1].value) {\r\n            this.currentScale = scaleList[scaleList.length - 1].value;\r\n        } else {\r\n            for(let i = 0; i < scaleList.length - 2; i++) {\r\n                if (value > scaleList[i].value) {\r\n                    if (value < (scaleList[i].value + scaleList[i + 1].value) / 2.) {\r\n                        this.currentScale = scaleList[i].value;\r\n                    } else {\r\n                        this.currentScale = scaleList[i + 1].value;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        this.changeDetector.detectChanges();\r\n    }\r\n\r\n    public copy() {\r\n        this.app.pageComponent.openCopyDialog();\r\n    }\r\n\r\n    public print() {\r\n        this.app.pageComponent.openPrintDialog();\r\n    }\r\n\r\n    public download() {\r\n        this.app.pageComponent.download();\r\n    }\r\n\r\n    pageNumberOnFocus() {\r\n        this.pageNumberInput.nativeElement.value = this.currentPage.toString();\r\n        this.pageNumberInput.nativeElement.placeholder = '';\r\n    }\r\n\r\n    pageNumberOnFocusOut() {\r\n        this.pageNumberInput.nativeElement.value = '';\r\n        this.pageNumberInput.nativeElement.placeholder = `${this.currentPage} из ${this.pagesCount}`;\r\n    }\r\n\r\n    pageInputChanged() {\r\n        let pageNumber = Math.abs(parseInt(this.pageNumberInput.nativeElement.value, 10)) || 1;\r\n        if (pageNumber < 1 || pageNumber > this.pagesCount) {\r\n            return;\r\n        }\r\n        this.currentPage = pageNumber;\r\n        this.moveToPage(this.currentPage);\r\n    }\r\n\r\n    pageInputOnEnter(){\r\n        this.pageInputChanged();\r\n        this.pageNumberInput.nativeElement.blur();\r\n    }\r\n\r\n    pageInputInput($event) {\r\n        let rx = new RegExp(/^\\d+$/);\r\n        if (!rx.test(this.pageNumberInput.nativeElement.value + $event.key)) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    formatScale(scale: number) {\r\n        if (scale !== undefined) {\r\n            return Math.floor(scale * 100) + '%';\r\n        }\r\n    }\r\n\r\n    stringValToFloat(string){\r\n        return parseFloat(string);\r\n    }\r\n\r\n  @HostListener('mousemove', ['$event'])\r\n  mousemoveHandler(event){\r\n      //fix scroll bug when toolbar collapses on mobile\r\n    event.stopPropagation();\r\n  }\r\n}\r\n","module.exports = \".video-wrapper{\\r\\n    position: relative;\\r\\n    height: 100%;\\r\\n}\\r\\nvideo{\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    outline: none;\\r\\n}\\r\\n.video-container{\\r\\n  position: relative;\\r\\n  height: calc(100% - 205px);\\r\\n}\\r\\n.video-controls{\\r\\n  height: 125px;\\r\\n  position: relative;\\r\\n  margin: 0 31px;\\r\\n}\\r\\n.cannotPlay{\\r\\n  display: flex;\\r\\n  justify-content: center;\\r\\n  align-items: center;\\r\\n  height: inherit;\\r\\n}\\r\\n/* Controls */\\r\\n.controlsOuter {\\r\\n  position: absolute;\\r\\n  width: 100%;\\r\\n  height: 45px;\\r\\n  bottom: 20px;\\r\\n  z-index: 999;\\r\\n}\\r\\n.controlsInner {\\r\\n  position: absolute;\\r\\n  width: 220px;\\r\\n  height: 50px;\\r\\n  left: 50%;\\r\\n  margin: 0 -110px;\\r\\n}\\r\\n.btn {\\r\\n  position: absolute;\\r\\n  cursor: pointer;\\r\\n  /*opacity: 0.9;*/\\r\\n  -webkit-filter: drop-shadow(1px 1px 0px rgba(0, 0, 0, 0.59));\\r\\n  filter: drop-shadow(1px 1px 0px rgba(0, 0, 0, 0.59));\\r\\n  -webkit-user-select: none;\\r\\n  -moz-user-select: none;\\r\\n   -ms-user-select: none;\\r\\n       user-select: none;\\r\\n  background-size: contain;\\r\\n}\\r\\n.btn:hover {\\r\\n  opacity: 1;\\r\\n}\\r\\n#playBtn {\\r\\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAABGCAYAAACaGVmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QThERThENUFDNkJEMTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QThERThENUJDNkJEMTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBOERFOEQ1OEM2QkQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBOERFOEQ1OUM2QkQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnFM7yIAAAFWSURBVHja7NRJDoMwDEDRcPL2ZoVeLEUtCyoCZPBsf8mS10+Wp5zzK6X0XGdJ0bdpRcnbPgfOESUFzjmKe5wrFLc4NSjucFpQ3OD0oJjHGUExiwOBYg4HEsUMDgaKehxMFLU4FCjqcChR1OBwoIjH4UQRiyMBRRyOJBQxOBJR2HEko7DhaEAhx9GEQoajEQUdRzMKGo4FFHAcSyhgOBZRhnEso3TjeEBpxvGEUo3jEeUWxzPKKU6gFHACpYATKMfegbLDWOcRl/Jr2X7JHI+2gOEZ5RTDI8othieUagwPKM0YllG6MSyiDGNYQgHDsIACjqEZBQ1DIwo6hiYUMgwNKOQYklHYMCSisGNIQhGDIQFFHAYnilgMDhTxGJQoajAoUNRhYKKoxcBAUY8BiWIGAwLFHMYIilmMHhTzGC0objBqUNxhXKG4xSihuMfYo8yB8d9HgAEATyefBJWpw70AAAAASUVORK5CYII=');\\r\\n  background-image: url('/scripts/document/dist/assets/icons/play.png');\\r\\n  width: 44px;\\r\\n  height: 45px;\\r\\n  left: 50%;\\r\\n  opacity: 0.6;\\r\\n  margin: auto -35.5px;\\r\\n}\\r\\n#pauseBtn {\\r\\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAABGCAYAAACaGVmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MjkzRjNDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MjkzRjRDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBOERFOEQ1Q0M2QkQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTgyOTNGMkM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pne5d1AAAAB8SURBVHja7NCxCQAwAALBuP/QZoEUlinua0G4tD1j83Asv/4GChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFCpRXV4ABAOgpXYTDYwEwAAAAAElFTkSuQmCC');\\r\\n  background-image: url('/scripts/document/dist/assets/icons/pause.png');\\r\\n  width: 45px;\\r\\n  height: 45px;\\r\\n  left: 50%;\\r\\n  opacity: 0.6;\\r\\n  margin: auto -41.5px;\\r\\n}\\r\\n#fullscreenBtn{\\r\\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAABGCAYAAACaGVmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MjkzRjNDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MjkzRjRDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBOERFOEQ1Q0M2QkQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTgyOTNGMkM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pne5d1AAAAB8SURBVHja7NCxCQAwAALBuP/QZoEUlinua0G4tD1j83Asv/4GChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFCpRXV4ABAOgpXYTDYwEwAAAAAElFTkSuQmCC');\\r\\n  background-image: url('/scripts/document/dist/assets/icons/fullscreen.png');\\r\\n  width: 27px;\\r\\n  height: 27px;\\r\\n  top: 50%;\\r\\n  right: 0;\\r\\n  margin: -13.5px auto;\\r\\n  -webkit-filter: none;\\r\\n  filter: none;\\r\\n}\\r\\n#playBtn.loading {\\r\\n  transition: -webkit-transform 400ms ease-out;\\r\\n  transition: transform 400ms ease-out;\\r\\n  transition: transform 400ms ease-out, -webkit-transform 400ms ease-out;\\r\\n  -webkit-transform: scale(0.8);\\r\\n          transform: scale(0.8);\\r\\n  opacity: 0.3 !important;\\r\\n}\\r\\n@-webkit-keyframes spin {\\r\\n  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\\r\\n}\\r\\n@keyframes spin {\\r\\n  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\\r\\n}\\r\\n.loading .stroke-dotted {\\r\\n  stroke-width: 2px;\\r\\n  opacity: 0.9;\\r\\n}\\r\\n.stroke-dotted {\\r\\n  opacity: 0;\\r\\n  stroke-dasharray: 5,5;\\r\\n  stroke-width: 0px;\\r\\n  -webkit-transform-origin: 50% 50%;\\r\\n          transform-origin: 50% 50%;\\r\\n  -webkit-animation: spin 4s infinite linear;\\r\\n          animation: spin 4s infinite linear;\\r\\n  transition: opacity 1s ease,\\r\\n              stroke-width 2s ease;\\r\\n}\\r\\n#play {\\r\\n  position: absolute;\\r\\n  left: 42px;\\r\\n  top: -12px;\\r\\n  height: 70px;\\r\\n}\\r\\n#volumeBtn {\\r\\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUVBQzMwNzBDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUVBQzMwNzFDNzI0MTFFNTk2RTBDMTRBMkYyNjVGMzQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxRUFDMzA2RUM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxRUFDMzA2RkM3MjQxMUU1OTZFMEMxNEEyRjI2NUYzNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtAZ+FgAAAHRSURBVHja7FjRbYMwEIWqC7CCO4IzgjMCHYEV6AjuCHSEMAKMkIwAI5ARXFt9rox1phDA5KMnPSGwOZ4fx/mOVCmVPIu9JE9ke5GRGpejyeQanUapkXlj5lzEIMM1GqjRAyG1eNCLCeAVyDQq9WOdRoHrDeDP7YCM8reGiNQYQER6D6DIGHDc02xFJsfqjF00GDEnRCaBegp+RmMp8oyYERcmAAvMvWl8aLSBuQ2O58D4Ff7eqJiZa4MTF1OYUsZAwF9BKaOw0tsf6pjx+wwVXWU41Pwk1DF2opQRK7+skDIyECMlrv8GfoztwMaW9K7XTqKMujeZV8SQma31eO0iNpkW8L/a3t02Yu7aITL8CDL2S2VE/jqsnnHJ3I8urnpKldhkOEFmdB6TTO7kFveVRScjoExLqBWVTIbsax765RFh7n74GoFMiQefCLXcbWFEhs/MFfeFZGon9fsx1I78PVDPyA3qmXyqnhEzV1lgRT124/rBSq+Dj/Pa7sDUPVesrEGRvUSZMlQ/rSmgCqc7qBZ0B7aQ37RVsb2QJOIp1DcNUDXbg4wFw2qV06j5ZCqQYSE/yYZ1LxVPvjJ86v50p/8ztr96X3JT+v+zKGDfAgwAZkMcn0x+AsMAAAAASUVORK5CYII=');\\r\\n  background-image: url('/scripts/document/dist/assets/icons/volume.png');\\r\\n  width: 35px;\\r\\n  height: 35px;\\r\\n  top: 50%;\\r\\n  right: 55px;\\r\\n  margin: -17.5px auto;\\r\\n}\\r\\n#volumeBtn.muted {\\r\\n  background-image: url('/scripts/document/dist/assets/icons/volume_muted.png');\\r\\n}\\r\\n#play {\\r\\n  position: absolute;\\r\\n  left: 42px;\\r\\n  top: -12px;\\r\\n  height: 70px;\\r\\n}\\r\\n/* Volume */\\r\\n#volume {\\r\\n  width: 140px;\\r\\n  height: 50px;\\r\\n  position: absolute;\\r\\n  right: 105px;\\r\\n  border: 25px;\\r\\n  touch-action: none;\\r\\n  -webkit-user-select: none;\\r\\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\r\\n  z-index: 9999;\\r\\n  padding: 0 7px;\\r\\n  border-radius: 5px;\\r\\n  bottom: 18px;\\r\\n  margin-right: 15px;\\r\\n}\\r\\n.bar {\\r\\n  position: absolute;\\r\\n  top: 50%;\\r\\n  left: 5%;\\r\\n  margin: -5px auto;\\r\\n  height: 10px;\\r\\n  background-color: rgba(255, 255, 255, 0.9);\\r\\n  box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n}\\r\\n#barEmpty {\\r\\n  width: 100%;\\r\\n  opacity: 0.5;\\r\\n  box-shadow: none;\\r\\n  cursor: pointer;\\r\\n  background: #545454;\\r\\n  pointer-events: none;\\r\\n}\\r\\n#barFull {\\r\\n  width: 100%;\\r\\n}\\r\\n#sliderBtn {\\r\\n  width: 20px;\\r\\n  height: 20px;\\r\\n  position: absolute;\\r\\n  top: 50%;\\r\\n  margin: -10px auto;\\r\\n  background-color: rgb(255, 255, 255);\\r\\n  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.33);\\r\\n  border-radius: 25px;\\r\\n  cursor: pointer;\\r\\n  pointer-events: none;\\r\\n  border: 1px solid #ccc;\\r\\n}\\r\\n/* Progress */\\r\\n#timer,#duration{\\r\\n  position: absolute;\\r\\n  text-align: left;\\r\\n  font-size: 16px;\\r\\n  font-weight: 300;\\r\\n  color: #375e8c;\\r\\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);\\r\\n  z-index: 999;\\r\\n}\\r\\n#timer{\\r\\n  left: 0;\\r\\n}\\r\\n#duration{\\r\\n  right: 0;\\r\\n}\\r\\n#bar {\\r\\n  position: absolute;\\r\\n  top: 50%;\\r\\n  left: 0;\\r\\n  width: 100%;\\r\\n  height: 2px;\\r\\n/*background-color: rgba(255, 255, 255, 0.9);*/\\r\\n/*box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.33);*/\\r\\n  opacity: 0.9;\\r\\n}\\r\\n#progress {\\r\\n  width: 0%;\\r\\n  height: 100%;\\r\\n  background-color: rgba(57, 101, 146, 0.45);\\r\\n  z-index: 2;\\r\\n}\\r\\n#progressWrapper {\\r\\n  position: absolute;\\r\\n  height: 20px;\\r\\n  width: 100%;\\r\\n  background: silver;\\r\\n  left: 0;\\r\\n  bottom: 85px;\\r\\n  cursor: pointer;\\r\\n}\\r\\n#loadingProgress {\\r\\n  position: absolute;\\r\\n  top: 0;\\r\\n  left: 0;\\r\\n  width: 0%;\\r\\n  height: 100%;\\r\\n  background-color: rgba(0, 0, 0, 0.1);\\r\\n  z-index: 1;\\r\\n}\\r\\n@-webkit-keyframes sk-scaleout {\\r\\n  0% { -webkit-transform: scale(0) }\\r\\n  100% {\\r\\n    -webkit-transform: scale(1.0);\\r\\n    opacity: 0;\\r\\n  }\\r\\n}\\r\\n@keyframes sk-scaleout {\\r\\n  0% {\\r\\n    -webkit-transform: scale(0);\\r\\n    transform: scale(0);\\r\\n  } 100% {\\r\\n      -webkit-transform: scale(1.0);\\r\\n      transform: scale(1.0);\\r\\n      opacity: 0;\\r\\n    }\\r\\n}\\r\\n@media (max-width: 768px){\\r\\n  #playBtn{\\r\\n    margin: 0;\\r\\n    left: 0;\\r\\n  }\\r\\n  .controlsInner{\\r\\n    width: 50px;\\r\\n    left: 0;\\r\\n    margin: 0;\\r\\n  }\\r\\n}\\r\\n@media (max-width: 410px){\\r\\n  #fullscreenBtn{\\r\\n    margin: -9.5px auto;\\r\\n    width: 20px;\\r\\n    height: 20px;\\r\\n  }\\r\\n  #volumeBtn{\\r\\n    margin: -13.5px auto;\\r\\n    width: 26px;\\r\\n    height: 26px;\\r\\n    right: 30px;\\r\\n  }\\r\\n  #volume{\\r\\n    width: 105px;\\r\\n    right: 60px;\\r\\n  }\\r\\n  #playBtn{\\r\\n    margin: 6px 0;\\r\\n    width: 30px;\\r\\n    height: 31px;\\r\\n  }\\r\\n}\\r\\n\"","module.exports = \"<div class=\\\"video-container\\\">\\r\\n<div class=\\\"video-wrapper\\\">\\r\\n  <div *ngIf=\\\"!canPlayType\\\" class=\\\"cannotPlay\\\">\\r\\n    <p>Ваш браузер не поддерживает данный формат видео</p>\\r\\n  </div>\\r\\n    <video #video (contextmenu)=\\\"ctxHandler($event)\\\" *ngIf=\\\"canPlayType\\\"\\r\\n           disablePictureInPicture\\r\\n           controlsList=\\\"nodownload\\\">\\r\\n        <source src=\\\"\\\" [attr.type]=\\\"videoType\\\">\\r\\n        Ваш браузер не поддерживает HTML5 видео\\r\\n    </video>\\r\\n</div>\\r\\n  <div class=\\\"video-controls\\\">\\r\\n    <!-- Controls -->\\r\\n    <div class=\\\"controlsOuter\\\">\\r\\n      <div class=\\\"controlsInner\\\">\\r\\n        <div id=\\\"loading\\\" [ngClass]=\\\"{'loading':showLoadingProgress}\\\">\\r\\n          <svg version=\\\"1.1\\\" id=\\\"play\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" height=\\\"100px\\\" width=\\\"100px\\\"\\r\\n            viewBox=\\\"0 0 100 100\\\" enable-background=\\\"new 0 0 100 100\\\" xml:space=\\\"preserve\\\">\\r\\n            <path class=\\\"stroke-dotted\\\" fill=\\\"none\\\" stroke=\\\"#9e9e9e\\\"  d=\\\"M49.9,2.5C23.6,2.8,2.1,24.4,2.5,50.4C2.9,76.5,24.7,98,50.3,97.5c26.4-0.6,47.4-21.8,47.2-47.7\\r\\n              C97.3,23.7,75.7,2.3,49.9,2.5\\\"/>\\r\\n          </svg>\\r\\n        </div>\\r\\n        <div class=\\\"btn\\\" id=\\\"playBtn\\\" *ngIf=\\\"isPaused\\\" (click)=\\\"play()\\\"></div>\\r\\n        <div class=\\\"btn\\\" id=\\\"pauseBtn\\\" *ngIf=\\\"!isPaused\\\" (click)=\\\"pause()\\\"></div>\\r\\n      </div>\\r\\n      <div class=\\\"btn\\\" id=\\\"volumeBtn\\\" [ngClass]=\\\"{'muted': isMuted}\\\" (click)=\\\"toggleMute()\\\"></div>\\r\\n      <div class=\\\"btn\\\" id=\\\"fullscreenBtn\\\" *ngIf=\\\"isFullscreenEnabled\\\" (click)=\\\"callFullScreen()\\\"></div>\\r\\n    </div>\\r\\n    <!-- Progress -->\\r\\n    <div id=\\\"timer\\\">{{formatTime(videoCurrentTime)}}</div>\\r\\n    <div id=\\\"duration\\\">{{formatTime(videoDuration)}}</div>\\r\\n    <div #progress id=\\\"progressWrapper\\\" (click)=\\\"seek($event)\\\">\\r\\n      <div id=\\\"progress\\\" [style.width.%]=\\\"seekValue\\\"></div>\\r\\n      <div id=\\\"loadingProgress\\\" [style.width.%]=\\\"loadValue\\\"></div>\\r\\n    </div>\\r\\n\\r\\n    <!-- Volume -->\\r\\n    <div id=\\\"volume\\\" (mousemove)=\\\"volumeMove($event)\\\" (mousedown)=\\\"volumeSliderDown=true\\\" (mouseup)=\\\"volumeSliderDown=false\\\" (mouseleave)=\\\"volumeSliderDown=false\\\">\\r\\n      <div id=\\\"barFull\\\" #barFull class=\\\"bar\\\" (click)=\\\"volumeMove($event, true)\\\"></div>\\r\\n      <div id=\\\"barEmpty\\\" class=\\\"bar\\\" [style.width.%]=\\\"volume*100\\\"></div>\\r\\n      <div id=\\\"sliderBtn\\\" #sliderBtn></div>\\r\\n    </div>\\r\\n  </div>\\r\\n</div>\\r\\n\"","import {\r\n  Component,\r\n  OnInit,\r\n  ViewChild,\r\n  ElementRef,\r\n  AfterViewInit,\r\n  Renderer2,\r\n  OnDestroy\r\n} from '@angular/core';\r\nimport { MediaService } from 'app/services/media.service';\r\nimport { ConfigService } from 'app/services/config.service';\r\nimport { MediaInfo } from \"../../models/media\";\r\n\r\n\r\n@Component({\r\n  selector: 'app-video',\r\n  templateUrl: './video.component.html',\r\n  styleUrls: ['./video.component.css']\r\n})\r\nexport class VideoComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n  @ViewChild('video') videoElement: ElementRef;\r\n  @ViewChild('progress') progressWrapperElement: ElementRef;\r\n  @ViewChild('sliderBtn') sliderBtnElement: ElementRef;\r\n  @ViewChild('barFull') barFullElement: ElementRef;\r\n\r\n  public videoInfo: MediaInfo;\r\n\r\n  private timerId: any;\r\n  private seconds: number = 0;\r\n  private needRegister: boolean = true;\r\n\r\n  private videoListeners: Map<string, Function> = new Map();\r\n  private videoStatisticListeners: Map<string, Function> = new Map();\r\n\r\n  public isPaused: boolean = true;\r\n  public isMuted: boolean = false;\r\n  public seekValue: number = 0;\r\n  public loadValue: number = 0;\r\n  public volumeSliderDown:boolean = false;\r\n  public volume: number;\r\n  public showLoadingProgress:boolean = true;\r\n  public isFullscreenEnabled:boolean;\r\n\r\n  public canPlayType:boolean = true;\r\n  public videoType:string = 'video/';\r\n  public videoDuration:number;\r\n  public videoCurrentTime:number = 0;\r\n\r\n  constructor(\r\n      private renderer: Renderer2,\r\n      private videoService: MediaService,\r\n      private config: ConfigService\r\n  ) { }\r\n\r\n  ngOnInit() {\r\n    this.loadVideoInfo();\r\n    this.volume = Number.parseFloat(localStorage.getItem('video:volume')) || 0.5;\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.isFullscreenEnabled = document.fullscreenEnabled || document.fullscreenElement !== null;\r\n\r\n    this.renderer.setStyle(this.sliderBtnElement.nativeElement,\r\n      'left', this.barFullElement.nativeElement.clientWidth * this.volume + 'px');\r\n    this.videoElement.nativeElement.volume = this.volume;\r\n  }\r\n\r\n  loadVideoInfo(){\r\n      this.videoService.getTracks().subscribe((result) => {\r\n          this.videoInfo = result[0];\r\n          this.videoDuration = this.videoInfo.duration;\r\n\r\n          this.videoType += this.videoInfo.format;\r\n          let video = this.videoElement.nativeElement;\r\n\r\n          if(video.canPlayType(this.videoType) === \"\"){\r\n            this.canPlayType = false;\r\n            this.showLoadingProgress = false;\r\n            return;\r\n          }\r\n\r\n          this.setVideoListeners();\r\n          this.renderer.setAttribute(video.children[0], \"src\", this.videoInfo.url);\r\n          video.load();\r\n      });\r\n\r\n      this.videoService.registerOpenEvent();\r\n  }\r\n\r\n  ngOnDestroy(){\r\n      this.disposeVideoListeners();\r\n\r\n      this.clearTimer();\r\n  }\r\n\r\n  setTimer(){\r\n          this.timerId = setInterval(() => {\r\n            this.seconds++;\r\n            this.checkPlayed();\r\n      }, 1000);\r\n  }\r\n\r\n  clearTimer(){\r\n      if (this.timerId) {\r\n          clearInterval(this.timerId);\r\n      }\r\n  }\r\n\r\n  checkPlayed(){\r\n      if(this.seconds >= 5){\r\n        this.needRegister = false;\r\n        clearInterval(this.timerId);\r\n\r\n        this.videoService.registerTrack(this.videoInfo);\r\n        this.disposeVideoListeners(true);\r\n      }\r\n  }\r\n\r\n  setVideoListeners(){\r\n    let video = this.videoElement.nativeElement;\r\n\r\n    this.videoStatisticListeners.set('play', this.renderer.listen(video, 'play', (event) => {\r\n        if(this.needRegister) this.setTimer();\r\n    }));\r\n    this.videoStatisticListeners.set('pause', this.renderer.listen(video, 'pause', (event) => {\r\n        this.clearTimer();\r\n    }));\r\n\r\n    this.videoListeners.set('play', this.renderer.listen(video, 'play', (event) => {\r\n      this.isPaused = false;\r\n    }));\r\n    this.videoListeners.set('loadeddata', this.renderer.listen(video, 'loadeddata', (event) => {\r\n      this.showLoadingProgress = false;\r\n    }));\r\n    this.videoListeners.set('volumechange', this.renderer.listen(video, 'volumechange', (event) => {\r\n      this.setVolume(video);\r\n    }));\r\n    this.videoListeners.set('pause', this.renderer.listen(video, 'pause', (event) => {\r\n      this.isPaused = true;\r\n    }));\r\n    this.videoListeners.set('timeupdate', this.renderer.listen(video, 'timeupdate', (event) => {\r\n      let currentTime = video.currentTime;\r\n      this.setProgress(video, currentTime);\r\n      this.showLoadingProgress = false;\r\n    }));\r\n    this.videoListeners.set('progress', this.renderer.listen(video, 'progress', (event) => {\r\n      this.setLoadValue(video);\r\n    }));\r\n    this.videoListeners.set('abort', this.renderer.listen(video, 'abort', (event) => {\r\n      this.setLoadValue(video);\r\n    }));\r\n    this.videoListeners.set('canplaythrough', this.renderer.listen(video, 'canplaythrough', (event) => {\r\n      this.setLoadValue(video);\r\n    }));\r\n    this.videoListeners.set('waiting', this.renderer.listen(video, 'waiting', (event) => {\r\n      this.showLoadingProgress = true;\r\n    }));\r\n    this.videoListeners.set('playing', this.renderer.listen(video, 'playing', (event) => {\r\n      this.showLoadingProgress = false;\r\n      this.setLoadValue(video);\r\n    }));\r\n  }\r\n\r\n  setLoadValue(video){\r\n\r\n      let range = 0;\r\n      let bf = video.buffered;\r\n      let lastBufferIndex = bf.length - 1;\r\n      let time = video.currentTime;\r\n\r\n      if(video.readyState === 4 && bf.length > 0){\r\n        if(time >= bf.start(lastBufferIndex)){\r\n          range = lastBufferIndex;\r\n        }else{\r\n          // Get last buffer\r\n          while(range < lastBufferIndex && !(bf.start(range) <= time && time <= bf.end(range))) {\r\n            range += 1;\r\n          }\r\n        }\r\n          this.loadValue = bf.end(range) * 100 / video.duration;\r\n        }\r\n  }\r\n\r\n  setProgress(video, progress){\r\n    this.seekValue = (100 / video.duration) * progress;\r\n    this.videoCurrentTime = progress;\r\n  }\r\n\r\n  setVolume(video){\r\n    this.isMuted = video.muted;\r\n    this.volume = video.volume;\r\n\r\n    this.renderer.setStyle(this.sliderBtnElement.nativeElement,\r\n      'left', this.barFullElement.nativeElement.clientWidth * video.volume + 'px');\r\n\r\n    localStorage.setItem('video:volume', video.volume.toString());\r\n  }\r\n\r\n  seek(event){\r\n    if(!this.canPlayType) return;\r\n\r\n    this.showLoadingProgress = true;\r\n    let progressWrapper = this.progressWrapperElement.nativeElement;\r\n    let x = (event.pageX - progressWrapper.offsetParent.offsetLeft) / progressWrapper.offsetWidth;\r\n    let video = this.videoElement.nativeElement;\r\n    // Update the video time\r\n    video.currentTime = video.duration * x;\r\n    this.setProgress(video, video.currentTime);\r\n  }\r\n\r\n  toggleMute(){\r\n    if(!this.canPlayType) return;\r\n\r\n    let video = this.videoElement.nativeElement;\r\n    video.muted = !video.muted;\r\n    this.isMuted = video.muted;\r\n  }\r\n\r\n  callFullScreen(){\r\n    if(!this.canPlayType) return;\r\n\r\n    let video = this.videoElement.nativeElement;\r\n    if (video.requestFullscreen) {\r\n      video.requestFullscreen();\r\n    } else if (video.mozRequestFullScreen) {\r\n      video.mozRequestFullScreen(); // Firefox\r\n    } else if (video.webkitRequestFullscreen) {\r\n      video.webkitRequestFullscreen(); // Chrome and Safari\r\n    }\r\n  }\r\n\r\n  disposeVideoListeners(statisticOnly: boolean = false){\r\n    this.videoStatisticListeners.forEach(value => value());\r\n    if(statisticOnly) return;\r\n\r\n    this.videoListeners.forEach(value => value());\r\n  }\r\n\r\n  play(){\r\n    if(!this.canPlayType) return;\r\n\r\n    this.videoElement.nativeElement.play();\r\n  }\r\n\r\n  pause(){\r\n    if(!this.canPlayType) return;\r\n\r\n    this.videoElement.nativeElement.pause();\r\n  }\r\n\r\n  volumeMove(event, force: boolean = false){\r\n    if(!this.canPlayType) return;\r\n\r\n    if (this.volumeSliderDown || force) {\r\n\r\n      let volume = Math.max(0, event.offsetX / event.target.clientWidth);\r\n      this.videoElement.nativeElement.volume = volume;\r\n    }\r\n  }\r\n\r\n  ctxHandler(event){\r\n    event.preventDefault();\r\n  }\r\n\r\n  formatTime(secs: number) {\r\n    let minutes = Math.floor(secs / 60) || 0;\r\n    let seconds = (secs - minutes * 60) || 0;\r\n\r\n    return minutes + ':' + (seconds < 10 ? '0' : '') + Math.floor(seconds);\r\n  }\r\n}\r\n","import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[mouseWheel]'\r\n})\r\nexport class MouseWheelDirective {\r\n\r\n    @Input() delay;\r\n\r\n    @Output() mouseWheelUp = new EventEmitter();\r\n\r\n    @Output() mouseWheelDown = new EventEmitter();\r\n\r\n    private lastScrollTime;\r\n\r\n    @HostListener('mousewheel', ['$event']) onMouseWheelChrome(event: any) {\r\n        this.mouseWheelFunc(event);\r\n    }\r\n\r\n    @HostListener('DOMMouseScroll', ['$event']) onMouseWheelFirefox(event: any) {\r\n        this.mouseWheelFunc(event);\r\n    }\r\n\r\n    @HostListener('onmousewheel', ['$event']) onMouseWheelIE(event: any) {\r\n        this.mouseWheelFunc(event);\r\n    }\r\n\r\n    mouseWheelFunc(event: any) {\r\n        event = window.event || event; // old IE support\r\n\r\n        let delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));\r\n\r\n        if(typeof this.delay !=='undefined'){\r\n            let currentTime = Date.now();\r\n            let timeDelta = (typeof this.lastScrollTime === 'undefined') ? this.delay : currentTime - this.lastScrollTime;\r\n\r\n            this.lastScrollTime = currentTime;\r\n\r\n            if (timeDelta < this.delay) return;\r\n        }\r\n\r\n        if (delta > 0) {\r\n            this.mouseWheelUp.emit(event);\r\n        } else if (delta < 0) {\r\n            this.mouseWheelDown.emit(event);\r\n        }\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpRequest, HttpResponse, HttpInterceptor, HttpHandler } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs/Observable';\r\nimport { tap } from 'rxjs/operators';\r\nimport 'rxjs/add/observable/of';\r\n\r\nimport { RequestCache } from './requestCache';\r\n\r\n@Injectable()\r\nexport class CachingInterceptor implements HttpInterceptor {\r\n  constructor(private cache: RequestCache) {}\r\n\r\n  intercept(req: HttpRequest<any>, next: HttpHandler) {\r\n    const cachedResponse = this.cache.get(req);\r\n    return cachedResponse ? Observable.of(cachedResponse) : this.sendRequest(req, next, this.cache);\r\n  }\r\n\r\n  sendRequest(\r\n    req: HttpRequest<any>,\r\n    next: HttpHandler,\r\n    cache: RequestCache): Observable<HttpEvent<any>> {\r\n    return next.handle(req).pipe(\r\n      tap(event => {\r\n        if (event instanceof HttpResponse) {\r\n          cache.put(req, event);\r\n        }\r\n      })\r\n    );\r\n  }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport {RouteConstants} from '../../bootstrap/app.route.constants';\r\n\r\nconst maxAge = 30000;\r\n@Injectable()\r\nexport class RequestCache  {\r\n\r\n  cache = new Map();\r\n\r\n  get(req: HttpRequest<any>): HttpResponse<any> | undefined {\r\n    if(req.urlWithParams.endsWith(RouteConstants.Document.NoCachePostfix)) return undefined;\r\n\r\n    const url = req.urlWithParams;\r\n    const cached = this.cache.get(url);\r\n\r\n    if (!cached) {\r\n      return undefined;\r\n    }\r\n\r\n    const isExpired = cached.lastRead < (Date.now() - maxAge);\r\n    const expired = isExpired ? 'expired ' : '';\r\n    return cached.response;\r\n  }\r\n\r\n  put(req: HttpRequest<any>, response: HttpResponse<any>): void {\r\n    if(req.urlWithParams.endsWith(RouteConstants.Document.NoCachePostfix)) return;\r\n\r\n    const url = req.url;\r\n    const entry = { url, response, lastRead: Date.now() };\r\n    this.cache.set(url, entry);\r\n\r\n    const expired = Date.now() - maxAge;\r\n    this.cache.forEach(expiredEntry => {\r\n      if (expiredEntry.lastRead < expired) {\r\n        this.cache.delete(expiredEntry.url);\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Howl, Howler } from 'howler';\r\nimport { MediaInfo } from './media';\r\nimport { EventEmitter } from '@angular/core';\r\n\r\nexport enum PlayerState {\r\n    Unloaded = 1,\r\n    Ready = 2,\r\n    Playing = 3,\r\n    Paused = 4,\r\n    Unknown = 5,\r\n}\r\n\r\nexport class HowlAudioPlayer {\r\n    private playlist: Howl[];\r\n    private tracks: MediaInfo[];\r\n    private currentTrackIndex: number = 0;\r\n\r\n    private isPaused: boolean = false;\r\n\r\n    public onLoad: EventEmitter<MediaInfo> = new EventEmitter<MediaInfo>();\r\n    public onPlay: EventEmitter<MediaInfo> = new EventEmitter<MediaInfo>();\r\n    public onTrackChange: EventEmitter<MediaInfo> = new EventEmitter<MediaInfo>();\r\n    public onLoadProgress: EventEmitter<[MediaInfo, number]> = new EventEmitter<[MediaInfo, number]>();\r\n    public onSeek: EventEmitter<[MediaInfo, number]> = new EventEmitter<[MediaInfo, number]>();\r\n    public onEnd: EventEmitter<MediaInfo> = new EventEmitter<MediaInfo>();\r\n\r\n    public play(index: number) {\r\n        if (index !== this.currentTrackIndex) {\r\n            this.stop();\r\n            this.currentTrackIndex = index;\r\n        }\r\n\r\n        if (this.playlist[index || this.currentTrackIndex].playing()) {\r\n            return;\r\n        }\r\n\r\n        let track = this.playlist[index || this.currentTrackIndex];\r\n        (<any>window).track = track;\r\n\r\n        if (track.state() === 'unloaded') {\r\n            track.load();\r\n            this.handleLoad(track);\r\n        }\r\n\r\n        track.play();\r\n        this.isPaused = false;\r\n    }\r\n\r\n    public playNext() {\r\n        if (this.playlist.length === this.currentTrackIndex + 1) {\r\n            this.play(0);\r\n            return;\r\n        }\r\n\r\n        this.play(this.currentTrackIndex + 1);\r\n\r\n    }\r\n\r\n    public playPrevious() {\r\n        if (this.currentTrackIndex - 1 < 0) {\r\n            this.play(this.playlist.length - 1);\r\n            return;\r\n        }\r\n\r\n        this.play(this.currentTrackIndex - 1);\r\n    }\r\n\r\n    public pause() {\r\n        this.currentHowlSound().pause();\r\n        this.isPaused = true;\r\n    }\r\n\r\n    public stop() {\r\n        this.currentHowlSound().stop();\r\n        this.isPaused = false;\r\n    }\r\n\r\n    public duration(): number {\r\n        return this.currentHowlSound().duration();\r\n    }\r\n\r\n    public seek(value?: number): number {\r\n        if (value) {\r\n            return this.currentHowlSound().seek(value);\r\n        }\r\n\r\n        return this.currentHowlSound().seek();\r\n    }\r\n\r\n    public mute(muted: boolean) {\r\n        Howler.mute(muted);\r\n    }\r\n\r\n    public volume(value: number): number {\r\n        if (value !== undefined) {\r\n            Howler.volume(value);\r\n        }\r\n\r\n        return Howler.volume();\r\n    }\r\n\r\n    public muted(): boolean {\r\n        return Howler._muted;\r\n    }\r\n\r\n    public state(): PlayerState {\r\n        let howlSoundStatus = this.currentHowlSound().state();\r\n\r\n        if (howlSoundStatus === 'unloaded') {\r\n            return PlayerState.Unloaded;\r\n        } else if (this.currentHowlSound().playing()) {\r\n            return PlayerState.Playing;\r\n        } else if (this.isPaused) {\r\n            return PlayerState.Paused;\r\n        } else if (howlSoundStatus === 'loaded') {\r\n            return PlayerState.Ready;\r\n        }\r\n\r\n        return PlayerState.Unknown;\r\n    }\r\n\r\n    public setPlaylist(tracks: MediaInfo[]) {\r\n        this.tracks = tracks;\r\n        this.playlist = [];\r\n        tracks.forEach((track, index) => {\r\n            this.playlist.push(new Howl({\r\n                src: [track.url],\r\n                format: [track.format],\r\n                preload: false,\r\n                html5: true,\r\n                onload: () => this.onHowlLoad(),\r\n                onplay: () => this.onHowlPlay(track, index),\r\n                onseek: () => this.onSeek.emit([this.tracks[this.currentTrackIndex], this.currentHowlSound().seek()]),\r\n                onend: () => this.onHowlEnd()\r\n            }));\r\n        });\r\n    }\r\n\r\n    private currentHowlSound(): Howl {\r\n        return this.playlist[this.currentTrackIndex];\r\n    }\r\n\r\n    private onHowlLoad() {\r\n        this.onLoad.emit(this.tracks[this.currentTrackIndex]);\r\n    }\r\n\r\n    private onHowlPlay(track: MediaInfo, indexInPlaylist: number) {\r\n        if (track.id !== this.tracks[this.currentTrackIndex].id) {\r\n            this.playlist[indexInPlaylist].stop();\r\n        }\r\n        this.onPlay.emit(this.tracks[this.currentTrackIndex]);\r\n    }\r\n\r\n    private onHowlEnd() {\r\n        this.onEnd.emit(this.tracks[this.currentTrackIndex]);\r\n        this.playNext();\r\n    }\r\n\r\n    private handleLoad(howlSound: Howl) {\r\n        const node: HTMLAudioElement = (howlSound as any)._sounds[0]._node;\r\n        node.addEventListener('progress', () => {\r\n          const duration = howlSound.duration();\r\n          if (duration > 0) {\r\n            for (let i = 0; i < node.buffered.length; i++) {\r\n              if (node.buffered.start(node.buffered.length - 1 - i) < node.currentTime) {\r\n                const bufferProgress = (node.buffered.end(node.buffered.length - 1 - i) / duration) * 100;\r\n                this.onLoadProgress.emit([this.tracks[this.currentTrackIndex], Math.ceil(bufferProgress)]);\r\n                break;\r\n              }\r\n            }\r\n          }\r\n        });\r\n      }\r\n}\r\n","import { Page, PageOrientation } from './page';\r\n\r\nexport class Document {\r\n    public url: string;\r\n    public copyUrl: string;\r\n    public downloadUrl: string;\r\n    public hardDownloadUrl: string;\r\n    public printUrl: string;\r\n    public pages: Array<Page> = new Array<Page>();\r\n\r\n    private _hasLandscapePage: boolean = null;\r\n    private _hasPortraitPage: boolean = null;\r\n\r\n    get hasLandscapePage(): boolean {\r\n        if (this._hasLandscapePage != null) {\r\n            return this._hasLandscapePage;\r\n        }\r\n        this._hasLandscapePage = false;\r\n\r\n        for (let page of this.pages) {\r\n            if (page.orientation === PageOrientation.Landscape) {\r\n                this._hasLandscapePage = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return this._hasLandscapePage;\r\n    }\r\n\r\n    get hasPortraitPage(): boolean {\r\n        if (this._hasPortraitPage != null) {\r\n            return this._hasPortraitPage;\r\n        }\r\n        this._hasPortraitPage = false;\r\n\r\n        for (let page of this.pages) {\r\n            if (page.orientation === PageOrientation.Portrait) {\r\n                this._hasPortraitPage = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return this._hasPortraitPage;\r\n    }\r\n\r\n    // todo localize strings\r\n    public webClient_Messages_Error = 'Ошибка';\r\n    public webClient_Messages_Loading = 'Загрузка';\r\n    public webClient_Messages_AccessDenied = 'Доступ запрещён';\r\n    public webClient_Messages_RasterizationTimeout = 'Ошибка обработки страницы';\r\n}\r\n\r\nexport class CheckAccessResult {\r\n    public Allowed: boolean;\r\n    public PageStatus: Array<CheckAccessPageStatus> = new Array<CheckAccessPageStatus>();\r\n}\r\n\r\nexport class CheckAccessPageStatus {\r\n    public Page: number;\r\n    public Access: boolean;\r\n}\r\n\r\nexport enum DocumentAction {\r\n    Print = 'print',\r\n    Copy = 'copy'\r\n}\r\n","export enum PageOrientation {\r\n    Portrait = 1,\r\n    Landscape,\r\n}\r\n\r\nexport class Page {\r\n    public number: number;\r\n    public width: number;\r\n    public height: number;\r\n\r\n    get orientation(): PageOrientation {\r\n        return this.height > this.width ? PageOrientation.Portrait : PageOrientation.Landscape;\r\n    }\r\n}\r\n\r\nexport enum HelpButtonState {\r\n    Highlighted,\r\n    Visible,\r\n    Hidden\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class ConfigService {\r\n\r\n    public documentUrl: string;\r\n\r\n    public title: string;\r\n\r\n    public documentType: DocumentType;\r\n\r\n    public copyAllowed: boolean;\r\n    public printAllowed: boolean;\r\n    public downloadAllowed: boolean;\r\n    public hardDownload: boolean;\r\n    public maxPageScale: number;\r\n    public isRoom: boolean;\r\n\r\n    constructor() { }\r\n}\r\n\r\nexport enum DocumentType {\r\n    Book = 'Book',\r\n    Audio = 'Audio',\r\n    Video = 'Video'\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport 'rxjs/add/operator/catch';\r\n\r\nimport { ConfigService } from './config.service';\r\nimport { Document, CheckAccessResult, DocumentAction } from '../models/document';\r\nimport { Page } from '../models/page';\r\nimport {RouteConstants} from '../bootstrap/app.route.constants';\r\nimport {isUndefined} from 'util';\r\n\r\n@Injectable()\r\nexport class DocumentService {\r\n\r\n    constructor(\r\n        private http: HttpClient,\r\n        private config: ConfigService\r\n    ) { }\r\n\r\n    getDocument(numbers?: Array<number>): Observable<Document> {\r\n        return this.http.get(this.config.documentUrl + RouteConstants.Document.Sizes\r\n          + (!isUndefined(numbers) ? '/' + numbers.toLocaleString() : '')\r\n        ).pipe(\r\n            map((res: any[]) => {\r\n                let doc = new Document();\r\n                doc.url = this.config.documentUrl;\r\n                doc.copyUrl = `${doc.url}${RouteConstants.Document.Copy}`;\r\n                doc.printUrl = `${doc.url}${RouteConstants.Document.Print}`;\r\n                doc.downloadUrl = `${doc.url}${RouteConstants.Document.Download}`;\r\n                doc.hardDownloadUrl = `${doc.url}${RouteConstants.Document.HardDownload}`;\r\n\r\n               for (let i=0; i<res.length; i++) {\r\n                    let p = res[i];\r\n                    let page: Page = new Page();\r\n\r\n                    page.number = p.Page;\r\n                    page.width = p.Size.Width;\r\n                    page.height = p.Size.Height;\r\n\r\n                    doc.pages.push(page);\r\n               }\r\n\r\n                return doc;\r\n            })\r\n        );\r\n    }\r\n\r\n    getThumbnail(page: Page, width: number, height: number): Observable<HTMLImageElement> {\r\n        let headers = new HttpHeaders({\r\n            'X-Viva-Client': 'Web/2.0',\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        });\r\n\r\n        let dpi = Math.round(width / page.width * 72);\r\n\r\n        return this.http\r\n            .get(this.config.documentUrl + RouteConstants.Document.GetThumbnail\r\n                    .replace('{pageNumber}', page.number.toString())\r\n                    .replace('{dpi}', dpi.toString()), {\r\n              withCredentials: true,\r\n              headers: headers,\r\n              responseType: 'blob'\r\n            }).pipe(\r\n                map((res: Response) => {\r\n                    let thumbnail = new Image(width, height);\r\n                    thumbnail.src = URL.createObjectURL(res);\r\n                    return thumbnail;\r\n                })\r\n            );\r\n    }\r\n\r\n    getPageImage(param: any): Observable<HTMLImageElement> {\r\n        let headers = new HttpHeaders({\r\n            'X-Viva-Client': 'Web/2.0',\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        });\r\n\r\n        let dpi = Math.round(param.width / param.page.width * 72);\r\n\r\n        return this.http\r\n            .get(this.config.documentUrl + RouteConstants.Document.GetThumbnail\r\n                .replace('{pageNumber}', param.page.number.toString())\r\n                .replace('{dpi}', dpi.toString()), {\r\n                withCredentials: true,\r\n                headers: headers,\r\n                responseType: 'blob'\r\n            }).pipe(\r\n                map((res: Response) => {\r\n                    let image = new Image(param.width, param.height);\r\n                    image.src = URL.createObjectURL(res);\r\n                    return image;\r\n                })\r\n            );\r\n    }\r\n\r\n    getPageLinks(page: Page): Observable<any> {\r\n        let headers = new HttpHeaders({\r\n            'X-Viva-Client': 'Web/2.0',\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        });\r\n\r\n        return this.http\r\n            .get(this.config.documentUrl + RouteConstants.Document.GetLinks\r\n              .replace('{pageNumber}', page.number.toString())).pipe(\r\n              map((res: Response) => {\r\n                return res;\r\n              })\r\n            );\r\n    }\r\n\r\n    checkAccess(pageNumbers: string, action: DocumentAction): Observable<CheckAccessResult> {\r\n        let headers = new HttpHeaders({\r\n            'X-Viva-Client': 'Web/2.0',\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        });\r\n\r\n        return this.http.get<CheckAccessResult>(this.config.documentUrl + RouteConstants.Document.CheckAccess\r\n            .replace('{action}', action)\r\n            .replace('{pageNumbers}', pageNumbers),\r\n        {withCredentials: true, headers: headers}\r\n        )\r\n        ;\r\n    }\r\n\r\n  registerDisplayEvent(pageNumber: string) {\r\n    let headers = new HttpHeaders({\r\n      'X-Viva-Client': 'Web/2.0',\r\n      'X-Requested-With': 'XMLHttpRequest'\r\n    });\r\n\r\n    this.http.post(this.config.documentUrl + RouteConstants.Document.RegisterDisplayEvent.replace('{pageNumber}', pageNumber)\r\n      , null, { headers: headers }).subscribe();\r\n  }\r\n\r\n  registerOpenEvent() {\r\n    let headers = new HttpHeaders({\r\n      'X-Viva-Client': 'Web/2.0',\r\n      'X-Requested-With': 'XMLHttpRequest'\r\n    });\r\n\r\n    this.http.post(this.config.documentUrl + RouteConstants.Document.RegisterOpenEvent, null, { headers: headers }).subscribe();\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { ConfigService } from './config.service';\r\nimport {RouteConstants} from \"../bootstrap/app.route.constants\";\r\n\r\n@Injectable()\r\nexport class FindService {\r\n\r\n    constructor(\r\n        private http: HttpClient,\r\n        private config: ConfigService\r\n    ) { }\r\n\r\n    FindText(query: string): Observable<any> {\r\n        return this.http\r\n            .get(this.config.documentUrl + RouteConstants.Document.FindText\r\n              .replace('{query}', query)).pipe(\r\n              map((res: Response) => {\r\n                return res;\r\n              })\r\n            );\r\n    }\r\n\r\n    FindTextOnPage(page: number, query: string): Observable<any> {\r\n        return this.http\r\n            .get(this.config.documentUrl + RouteConstants.Document.FindTextOnPage\r\n              .replace('{page}', page.toString())\r\n              .replace('{query}', query)).pipe(\r\n              map((res: Response) => {\r\n                return res;\r\n              })\r\n            );\r\n    }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport 'rxjs/add/operator/catch';\r\n\r\nimport { ConfigService } from './config.service';\r\n\r\nimport {RouteConstants} from '../bootstrap/app.route.constants';\r\nimport { MediaInfo } from 'app/models/media';\r\n\r\n@Injectable()\r\nexport class MediaService {\r\n\r\n    public documentUrl: string;\r\n\r\n    constructor(\r\n        private http: HttpClient,\r\n        private config: ConfigService\r\n    ) { }\r\n\r\n    getTracks(): Observable<MediaInfo[]> {\r\n        let headers = new HttpHeaders({\r\n            'X-Viva-Client': 'Web/2.0',\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        });\r\n\r\n        return this.http.get<MediaInfo[]>(this.config.documentUrl + RouteConstants.Document.Stream, {withCredentials: true, headers: headers});\r\n    }\r\n\r\n    registerTrack(media: MediaInfo) {\r\n        let headers = new HttpHeaders({\r\n            'X-Viva-Client': 'Web/2.0',\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        });\r\n\r\n        this.http.post(this.config.documentUrl + RouteConstants.Document.TrackRegister.replace('{trackId}', media.id)\r\n        , null, { headers: headers }).subscribe();\r\n    }\r\n\r\n    registerOpenEvent() {\r\n        let headers = new HttpHeaders({\r\n            'X-Viva-Client': 'Web/2.0',\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        });\r\n\r\n        this.http.post(this.config.documentUrl + RouteConstants.Document.RegisterOpenEvent, null, { headers: headers }).subscribe();\r\n    }\r\n\r\n}\r\n","export function toRanges(values: number[], separator = '\\u2013'): string[] {\r\n    return values\r\n      .slice()\r\n      .sort((p, q) => p - q)\r\n      .reduce((acc, cur, idx, src) => {\r\n          if ((idx > 0) && ((cur - src[idx - 1]) === 1)) {\r\n            acc[acc.length - 1][1] = cur;\r\n          } else {\r\n              acc.push([cur]);\r\n          }\r\n          return acc;\r\n        }, [])\r\n      .map(range => range.join(separator));\r\n}\r\n","// The file contents for the current environment will overwrite these during build.\r\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\r\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\r\n// The list of which env maps to which file can be found in `.angular-cli.json`.\r\n\r\nexport const environment = {\r\n  production: false\r\n};\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/bootstrap/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n  enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n  .catch(err => console.log(err));\r\n"],"sourceRoot":""}