1this.BX=this.BX||{};this.BX.UI=this.BX.UI||{};(function(e,t,i){"use strict";const n=t.Reflection.namespace("BX.Promise");const s=1;class r{constructor(e){e=e||{};this.pdf=e.pdf;this.iframe=null;this.documentOverview={}}init(){if(this.documentOverview){return Promise.resolve(this.documentOverview)}return new Promise((e=>{this.pdf.getPage(1).then((t=>{const i=t.getViewport({scale:s});this.documentOverview={width:i.width,height:i.height,rotation:i.rotation};e(this.documentOverview)}))}))}prepare(e){e=e||{};const i=this.pdf.numPages;let s=-1;const r=new n;let o=null;if(t.Type.isFunction(e.onProgress)){o=e.onProgress}this.frame=this.createIframe();const a=()=>{if(++s>=i){console.log("finish",this.frame.contentWindow.document);setTimeout((()=>{r.fulfill()}),1e3);return}this.renderPage(s+1).then((()=>{if(o){o(s+1,i)}a()}))};a();return r}renderPage(e){return this.pdf.getPage(e).then((e=>{const t=document.createElement("canvas");const i=e.getViewport({scale:s});const n=150;const r=n/72;t.width=Math.floor(i.width*r);t.height=Math.floor(i.height*r);const o=96/72;const a=`${Math.floor(i.width*o)}px`;const l=`${Math.floor(i.height*o)}px`;const c=t.getContext("2d");c.save();c.fillStyle="rgb(255, 255, 255)";c.fillRect(0,0,t.width,t.height);c.restore();const h={canvasContext:c,transform:[r,0,0,r,0,0],viewport:e.getViewport({scale:s,rotation:i.rotation}),intent:"print"};return e.render(h).promise.then((()=>({scratchCanvas:t,width:a,height:l})))})).then((e=>{const t=document.createElement("img");t.style.width=e.width;t.style.height=e.height;const i=e.scratchCanvas;if("toBlob"in i&&!this.disableCreateObjectURL){i.toBlob((e=>{t.src=URL.createObjectURL(e)}))}else{t.src=i.toDataURL()}const n=document.createElement("div");n.appendChild(t);this.frame.contentWindow.document.body.appendChild(n)}))}destroy(){if(this.frame){t.Dom.remove(this.frame)}}createIframe(){const e=document.createElement("iframe");e.src="about:blank";e.name="document-print-frame";e.style.display="none";document.body.appendChild(e);const t=e.contentWindow;const i=t.document;i.open();i.write("<html><head>");const n=this.getDocumentOverview();let s="<style>";s+="html, body { background: #fff !important; height: 100%; }";s+="@supports ((size:A4) and (size:1pt 1pt)) {"+`@page { size: ${n.width}pt ${n.height}pt;}`+"}";s+="#ad{ display:none;}";s+="#leftbar{ display:none;}";s+="</style>";i.write(s);i.write("</head><body>");i.write("</body></html>");i.close();return e}performPrint(){this.frame.contentWindow.focus();this.frame.contentWindow.print()}getDocumentOverview(){return this.documentOverview}}const o=t.Reflection.namespace("BX.UI.Viewer.Item");const a=t.Reflection.namespace("BX.util");const l=t.Reflection.namespace("BX.Promise");const c=1.4;const h=.5;const d=3;const u=3;class g extends o{static#e=null;#t=1;#i=null;#n=null;#s=null;pdfPages={};scale=c;pdfRenderedPages={};lastRenderedPdfPage=0;extraActions=null;disableAnnotationLayer=true;constructor(e){super(e);e=e||{};this.scale=e.scale||c}setPropertiesByNode(e){super.setPropertiesByNode(e);this.disableAnnotationLayer=e.dataset.hasOwnProperty("disableAnnotationLayer")?true:this.disableAnnotationLayer}applyReloadOptions(e){this.controller.unsetCachedData(this.src)}listContainerModifiers(){const e=["ui-viewer-document"];if(this.controller.stretch){e.push("--stretch")}return e}setSrc(e){this.src=e;this._pdfSrc=null;return this.#r()}setPdfSource(e){this._pdfSrc=e;return this.#r()}#r(){this.pdfRenderedPages={};this.lastRenderedPdfPage=null;this.pdfDocument=null;this.pdfPages={};this.#i=null;this.setPageNumber(1);if(this.printer){this.hidePrintProgress();this.printer.destroy()}}loadLibrary(){if(g.#e!==null){return g.#e}g.#e=new Promise(((e,i)=>{t.Runtime.loadExtension("ui.pdfjs").then((()=>
1{if(!BX.UI.Pdfjs.GlobalWorkerOptions.workerSrc){BX.UI.Pdfjs.GlobalWorkerOptions.workerSrc="/bitrix/js/ui/pdfjs/dist/pdfjs.worker.bundle.js"}g.#e=null;e()})).catch(i)}));return g.#e}loadData(){const e=new l;if(this._pdfSrc){this.loadLibrary().then((()=>{e.fulfill(this)})).catch((e=>{console.error("Load pdf library error",e)}));return e}console.log("loadData pdf");const i=t.ajax.promise({url:t.Uri.addParam(this.src,{ts:"bxviewer"}),method:"GET",dataType:"json",headers:[{name:"BX-Viewer-src",value:this.src},{name:"BX-Viewer",value:"document"}]});i.then((i=>{if(!i||!i.data){this.isTransforming=false;e.reject({item:this,message:t.Loc.getMessage("JS_UI_VIEWER_ITEM_TRANSFORMATION_ERROR_1").replace("#DOWNLOAD_LINK#",this.getSrc()),type:"error"});return e}if(i.data.hasOwnProperty("pullTag")){if(!this.isTransforming){this.transformationPromise=e;this.registerTransformationHandler(i.data.pullTag)}this.isTransforming=true}if(i.data.data&&i.data.data.src){this.isTransforming=false;this._pdfSrc=i.data.data.src;this.loadLibrary().then((()=>{e.fulfill(this)}))}}));return e}render(){this.controller.showLoading();this.contentNode=t.Tag.render`<div class="ui-viewer-item-document-content" style="--scale-factor: ${this.scale};" tabindex="2208"></div>`;t.Event.bind(this.contentNode,"scroll",t.Runtime.throttle(this.handleScrollDocument.bind(this),100));return this.contentNode}getNakedActions(){const e=super.getNakedActions();return this.insertPrintBeforeInfo(e)}insertPrintBeforeInfo(e){e=e||[];let t=null;for(const[i,n]of e.entries()){if(n.type==="info"){t=i}}const i={type:"print",action:this.print.bind(this)};if(t===null){e.push(i)}else{e=a.insertIntoArray(e,t,i)}return e}renderExtraActions(){if(this.extraActions===null){this.extraActions=t.Tag.render` 2 <div class="ui-viewer-extra-actions"> 3 <div 4 class="ui-viewer-action-btn" 5 onclick="${this.zoomOut.bind(this)}" 6 title="${t.Text.encode(t.Loc.getMessage("JS_UI_VIEWER_SINGLE_DOCUMENT_SCALE_ZOOM_OUT"))}" 7 > 8 <div class="ui-icon-set --zoom-out ui-viewer-action-btn-icon"></div> 9 </div> 10 <div 11 class="ui-viewer-action-btn" 12 onclick="${this.zoomIn.bind(this)}" 13 title="${t.Text.encode(t.Loc.getMessage("JS_UI_VIEWER_SINGLE_DOCUMENT_SCALE_ZOOM_IN"))}" 14 > 15 <div class="ui-icon-set --zoom-in ui-viewer-action-btn-icon"></div> 16 </div> 17 <div 18 class="ui-viewer-action-btn" 19 onclick="${this.print.bind(this)}" 20 title="${t.Text.encode(t.Loc.getMessage("JS_UI_VIEWER_ITEM_ACTION_PRINT"))}" 21 > 22 <div class="ui-icon-set --print-1 ui-viewer-action-btn-icon"></div> 23 </div> 24 </div> 25 `}return this.extraActions}zoomIn(){const e=Math.min(d,Math.max(h,this.scale*1.1));void this.updateScale(e).then((()=>{this.controller.adjustControlsSize(this.getContentWidth())}))}zoomOut(){const e=Math.min(d,Math.max(h,this.scale*.9));void this.updateScale(e).then((()=>{this.controller.adjustControlsSize(this.getContentWidth())}))}getFirstDocumentPageHeight(){if(this.#i){return Promise.resolve(this.#i)}return new Promise((e=>{this.getDocumentPage(this.pdfDocument,1).then((t=>{const i=this.#o(t);this.#i=i.height;e(this.#i)}))}))}handleScrollDocument(e){console.log("handleScrollDocument");this.getFirstDocumentPageHeight().then((e=>{console.log("handleScrollDocument height getFirstDocumentPageHeight",e);const t=this.contentNode.scrollHeight-this.contentNode.scrollTop-this.contentNode.clientHeight;if(t<e*u&&this.pdfDocument.numPages>this.lastRenderedPdfPage){for(let e=this.lastRenderedPdfPage+1;e<=Math.min(this.pdfDocument.numPages,this.lastRenderedPdfPage+u);e++){this.renderDocumentPage(this.pdfDocument,e)}}this.setPageNumber(this.contentNode.scrollTop/e+1)}))}loadDocument(){if(this.pdfDocument){return Promise.resolve(this.pdfDocument)}if(this.#n){return this.#n}this.#n=new Promise((e=>{this.loadData().then((()=>{BX.UI.Pdfjs.getDocument(this._pdfSrc).promise.then((t=>{this.pdfDocument=t;this.#n=null;e(this.pdfDocument)}))}))}));return this.#n}getDocumentPage(e,t){if(this.pdfPages[t]){return Promise.resolve(this.pdfPages[t])}return new Promise((i=>{e.getPage(t).then((e=>{this.pdfPages[t]=e;i(this.pdfPages[t])}))}))}renderDocumentPage(e,i){console.log("renderDocumentPage",i);const n=this.pdfRenderedPages[i];if(n instanceof Promise){return n}if(n){return Promise.resolve(n)}this.pdfRenderedPages[i]=new Promise((n=>{this.getDocumentPage(e,i).then((s=>{const r=this.createCanvasPage();const o=this.#o(s);r.height=o.height;r.width=o.width;const a=s.render({canvasContext:r.getContext("2d"),viewport:o});if(!this.disableAnnotationLayer){a.promise.then((()=>{const i=t.Dom.create("div",{props:{className:"ui-viewer-pdf-annotation-layer"}});t.Dom.insertAfter(i,r);return this.#a(s,r,i,e)}))}a.promise.then((()=>{const e=t.Dom.create("div",{props:{className:"ui-viewer-pdf-text-layer"}});t.Dom.insertAfter(e,r);return this.#l(s,r,e)}));this.lastRenderedPdfPage=Math.max(i,this.lastRenderedPdfPage);if(i===1){this.firstWidthDocumentPage=r.width}a.promise.then((()=>{this.controller.hideLoading();this.pdfRenderedPages[i]=s;n(s,r)}))}))}));return this.pdfRenderedPages[i]}#o(e){return e.getViewport({scale:this.scale})}#a(e,i,n,s){return e.getAnnotations().then((r=>{t.Dom.style(n,{margin:`-${i.offsetHeight}px auto 0 auto`,height:`${i.height}px`,width:`${i.width}px`});const o=this.#o(e);const a=new BX.UI.Pdfjs.AnnotationLayer({div:n,accessibilityManager:null,annotationCanvasMap:new Map,l10n:{async translate(e){return Promise.resolve()},async get(e,t){return Promise.resolve(e)}},page:e,viewport:o});const l=new BX.UI.Pdfjs.PDFLinkService;l.setDocument(s);return a.render({viewport:o.clone({dontFlip:true}),linkService:l,div:n,annotations:r,page:e}).promise}))}#l(e,i,n){t.Dom.style(n,{margin:`-${i.offsetHeight}px auto 0 auto`,height:`${i.height}px`,width:`${i.width}px`});const s=new BX.UI.Pdfjs.TextLayer({textContentSource:e.streamTextContent(),viewport:this.#o(e),container:n});return s.render().promise}createCanvasPage(){const e=document.createElement("canvas");e.className="ui-viewer-document-page-canvas";this.contentNode.appendChild(e);return e}getContentWidth(){return new Promise((e=>{this.loadDocument().then((()=>{this.renderDocumentPage(this.pdfDocument,1).then((t=>{const i=t.getViewport(this.scale).width;const n=this.contentNode.offsetWidth-this.contentNode.clientWidth;e(i+n)}))}))}))}afterRender(){this.loadDocument().then((e=>{console.log("total pages",e.numPages);for(let i=1;i<=Math.min(e.numPages,u);i++){if(i===1){this._handleControls=this.controller.handleVisibleControls.bind(this.controller);this.controller.enableReadingMode(true);t.Runtime.throttle(t.Event.bind(window,"mousemove",this._handleControls),20)}this.renderDocumentPage(e,i)}}))}beforeHide(){this.pdfRenderedPages={};t.Event.unbind(window,"mousemove",this._handleControls);if(this.printer){this.hidePrintProgress();this.printer.destroy()}}updatePrintProgressMessage(e,i){const n=Math.round(e/i*100);this.controller.setTextOnLoading(t.Loc.getMessage("JS_UI_VIEWER_ITEM_PREPARING_TO_PRINT").replace("#PROGRESS#",n))}showPrintProgress(e,t){this.contentNode.style.opacity=.7;this.contentNode.style.filter="blur(2px)";this.controller.showLoading({zIndex:1});this.updatePrintProgressMessage(e,t)}hidePrintProgress(){this.contentNode.style.opacity=null;this.contentNode.style.filter=null;this.controller.hideLoading()}print(){if(!this.pdfDocument){console.warn("Where is pdf document to print?");return}this.showPrintProgress(0,this.pdfDocument.numPages);this.printer=new r({pdf:this.pdfDocument});this.printer.init().then((()=>{this.printer.prepare({onProgress:this.updatePrintProgressMessage.bind(this)}).then((()=>{this.hidePrintProgress();this.printer.performPrint()}))}))}handleKeyPress(e){if(!this.isLoaded){return false}if(["PageDown","PageUp","ArrowDown","ArrowUp"].includes(e.code)){BX.focus(this.contentNode);return false}if(e.code==="Equal"){e.preventDefault();e.stopPropagation();this.zoomIn();return true}if(e.code==="Minus"){e.preventDefault();e.stopPropagation();this.zoomOut();return true}return false}getScale(){return this.scale}setScale(e){this.scale=e;return this}updateScale(e){if(this.#s){return this.#s.then((()=>this.updateScale(e)))}e=Number(e);if(this.scale===e){return Promise.resolve()}const i=e/this.scale;const n=(e,i,n,s)=>{const r=i[e.pageNumber-1];if(!r){return Promise.resolve()}const o=this.#o(e);r.width=o.width;r.height=o.height;return e.render({canvasContext:r.getContext("2d"),viewport:o}).promise.then((()=>{const i=n[e.pageNumber-1];if(!i){return null}t.Dom.clean(i);return this.#a(e,r,i,this.pdfDocument)})).then((()=>{const i=s[e.pageNumber-1];if(!i){return null}t.Dom.clean(i);return this.#l(e,r,i)}))};const s=[];this.scale=e;const r=[...this.contentNode.querySelectorAll('canvas[class="ui-viewer-document-page-canvas"]')];const o=[...this.contentNode.querySelectorAll('div[class="ui-viewer-pdf-annotation-layer"]')];const a=[...this.contentNode.querySelectorAll('div[class="ui-viewer-pdf-text-layer"]')];
25Object.values(this.pdfRenderedPages).forEach((e=>{if(e instanceof Promise){s.push(new Promise((t=>{e.then((e=>{n(e,r,o,a).then(t)}))})))}else{s.push(n(e,r,o,a))}}));t.Dom.style(this.contentNode,{"--scale-factor":e});const l=this.contentNode.scrollTop*i;this.contentNode.scrollTo(this.contentNode.scrollLeft,l);this.#s=Promise.all(s).finally((()=>{this.#s=null;this.#i=null}));return this.#s}getPagesNumber(){if(!this.pdfDocument){return null}return t.Text.toInteger(this.pdfDocument.numPages)}scrollToPage(e){const t=this.setPageNumber(e)!==null;if(!t){return Promise.resolve()}return new Promise((t=>{const i=[];for(let t=1;t<e;t++){i.push(this.renderDocumentPage(this.pdfDocument,t))}Promise.all(i).then((e=>{let i=0;e.forEach((e=>{const t=e.getViewport({scale:this.scale});i+=t.height+7}));this.contentNode.scrollTo(this.contentNode.scrollLeft,i);t()}))}))}getPageNumber(){return this.#t}setPageNumber(e){e=t.Text.toInteger(e);if(e<0){e=1}let n=this.getPagesNumber();if(!n){n=1}if(e>n){e=n}if(this.#t!==e){this.#t=e;i.EventEmitter.emit(this,"BX.UI.Viewer.Item.Document:updatePageNumber");return this}return null}}const m=t.Reflection.namespace("BX.UI.Viewer.InlineController");class p extends m{bindEvents(){if(!this.eventsAlreadyBinded&&this.getDocumentItem()){i.EventEmitter.subscribe(this.getDocumentItem(),"BX.UI.Viewer.Item.Document:updatePageNumber",(()=>{this.getListingControl().update(this.getDocumentItem().getPageNumber())}))}super.bindEvents()}getDocumentItem(){return this.items[0]}updateControls(){super.updateControls();this.updateListingControl()}getViewerContainer(){if(!this.layout.container){this.layout.inner=t.Tag.render`<div class="ui-viewer__single-document--container ">${this.getItemContainer()}</div>`;if(this.stretch){t.Dom.addClass(this.layout.inner,"--stretch")}this.layout.container=t.Tag.render`<div class="">${this.layout.inner}${this.getControlsContainer()}</div>`}return this.layout.container}getControlsContainer(){if(!this.layout.controlsContainer){return t.Tag.render`<div class="ui-viewer__single-document--controls"> 26 ${this.getListingControl().render()} 27 ${this.getScaleControl().render()} 28 </div>`}return this.layout.controlsContainer}getListingControl(){if(!this.listingControl){this.listingControl=new f;this.listingControl.subscribe("pageUpdated",(()=>{this.getDocumentItem()?.scrollToPage(this.listingControl.getCurrent())}));this.updateListingControl()}return this.listingControl}getScaleControl(){if(!this.scaleControl){this.scaleControl=new w;this.scaleControl.subscribe("scaleUpdated",(()=>{this.getDocumentItem()?.updateScale(this.scaleControl.getScale())}))}return this.scaleControl}updateListingControl(){const e=this.getDocumentItem();if(e){e.loadDocument().then((()=>{this.listingControl.update(1,e.getPagesNumber())}))}}setScale(e){this.getDocumentItem()?.setScale(e);this.getScaleControl().update(e);return this}setPdfSource(e){this.getDocumentItem()?.setPdfSource(e);return this}print(){this.getDocumentItem()?.print()}}class f extends i.EventEmitter{container=null;pagesContainer=null;constructor(e=1,i=1){super();this.setEventNamespace("BX.UI.Viewer.SingleDocumentController.ListingControl");this.pages=t.Text.toInteger(i);this.current=t.Text.toInteger(e);this.arrowClickHandler=this.handleArrowClick.bind(this)}update(e,i=null){e=t.Text.toInteger(e);i=t.Text.toInteger(i);if(i>=1){this.pages=i}if(e<1){e=1}if(e>this.pages){e=this.pages}if(e!==this.current){this.current=e;this.emit("pageUpdated",{page:this.current})}this.adjust()}adjust(){this.pagesContainer.innerHTML=this.renderPages()}getCurrent(){return this.current}render(){if(!this.container){this.pagesContainer=t.Tag.render`<div class="ui-viewer__single-document--listing-info"> 29 ${this.renderPages()} 30 </div>`;this.container=t.Tag.render`<div class="ui-viewer__single-document--listing"> 31 <div class="ui-viewer__single-document--listing--btn --prev" onclick="${this.arrowClickHandler}"></div> 32 ${this.pagesContainer} 33 <div class="ui-viewer__single-document--listing--btn --next" onclick="${this.arrowClickHandler}"></div> 34 </div>`}return this.container}renderPages(){return t.Loc.getMessage("JS_UI_VIEWER_SINGLE_DOCUMENT_LISTING_PAGES").replace("#CURRENT#",this.current).replace("#ALL#",this.pages)}handleArrowClick(e){if(e.target.classList.contains("--prev")){this.update(this.current-1)}if(e.target.classList.contains("--next")){this.update(this.current+1)}}}const P=.5;const v=3;class w extends i.EventEmitter{scale=c;container=null;zoomInContainer=null;zoomOutContainer=null;zoomValueNode=null;constructor(){super();this.scale=c;this.setEventNamespace("BX.UI.Viewer.SingleDocumentController.ScaleControl");this.scaleClickHandler=this.handleScaleClick.bind(this)}getScale(){return this.scale}setDefaultScale(){this.update(c)}adjust(){if(this.scale<=P){t.Dom.hide(this.getZoomOutContainer())}else{t.Dom.show(this.getZoomOutContainer())}if(this.scale>=v){t.Dom.hide(this.getZoomInContainer())}else{t.Dom.show(this.getZoomInContainer())}this.getZoomValueNode().innerText=Math.round(this.scale*100)}update(e){e=t.Text.toNumber(e);if(e<P){e=P}if(e>v){e=v}if(e!==this.scale){this.scale=e;
34this.emit("scaleUpdated");this.adjust()}}render(){if(!this.container){this.container=t.Tag.render`<div class="ui-viewer__single-document--zoom"> 35 ${this.getZoomOutContainer()} 36 ${this.getZoomValueNode()} 37 ${this.getZoomInContainer()} 38 </div>`;this.adjust()}return this.container}getZoomInContainer(){if(!this.zoomInContainer){this.zoomInContainer=t.Tag.render`<div 39 class="ui-viewer__single-document--zoom-control --zoom-in" 40 onclick="${this.scaleClickHandler}" 41 > 42<!-- ${t.Loc.getMessage("JS_UI_VIEWER_SINGLE_DOCUMENT_SCALE_ZOOM_IN")}--> 43 </div>`}return this.zoomInContainer}getZoomOutContainer(){if(!this.zoomOutContainer){this.zoomOutContainer=t.Tag.render`<div 44 class="ui-viewer__single-document--zoom-control --zoom-out" 45 onclick="${this.scaleClickHandler}" 46 > 47<!-- ${t.Loc.getMessage("JS_UI_VIEWER_SINGLE_DOCUMENT_SCALE_ZOOM_OUT")}--> 48 </div>`}return this.zoomOutContainer}getZoomValueNode(){if(!this.zoomValueNode){this.zoomValueNode=t.Tag.render`<span class="ui-viewer__single-document--zoom-value">100</span>`}return this.zoomValueNode}handleScaleClick(e){let t=this.scale;if(e.target.classList.contains("--zoom-in")){t=this.scale*1.1}if(e.target.classList.contains("--zoom-out")){t=this.scale*.9}this.update(t)}}e.Document=g;e.PrintService=r;e.SingleDocumentController=p})(this.BX.UI.Viewer=this.BX.UI.Viewer||{},BX,BX.Event); 49//# sourceMappingURL=viewer.bundle.map.js
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.