UNPKG

@syncfusion/ej2-pdfviewer

Version:
420 lines (419 loc) 19.2 kB
import { createElement, Browser, isBlazor, initializeCSPTemplate } from '@syncfusion/ej2-base'; import { TreeView } from '@syncfusion/ej2-navigations'; import { ListView } from '@syncfusion/ej2-lists'; import { AjaxHandler } from '../index'; /** * The `BookmarkView` module is used to handle bookmark view navigation of PDF viewer. * * @param {EventArgs} args - args * @returns {void} */ var BookmarkView = /** @class */ (function () { /** * @param {PdfViewer} pdfViewer - It describes about the pdfViewer * @param {PdfViewerBase} pdfViewerBase - It describes about the pdfViewerBase * @private */ function BookmarkView(pdfViewer, pdfViewerBase) { var _this = this; this.isKeyboardNavigation = false; /** * @private */ this.childNavigateCount = 0; this.bookmarkClick = function (args) { if (!args.event.target.classList.contains('e-icons')) { var bookid = args.data.Id; _this.childNavigateCount = 0; _this.pdfViewerBase.navigationPane.goBackToToolbar(); var selectedItem = _this.bookmarkList.getSelectedItems(); _this.navigateToBookmark(bookid, args.text, selectedItem.data.FileName); } else { _this.childNavigateCount++; } return false; }; this.nodeClick = function (args) { _this.setHeight(args.node); var data = _this.treeObj.getTreeData(args.node); var bookid = Number(data[0].Id); _this.navigateToBookmark(bookid, args.node.textContent, data[0].FileName); if (_this.pdfViewer.annotationModule && _this.pdfViewer.annotationModule.inkAnnotationModule) { var currentPageNumber = parseInt(_this.pdfViewer.annotationModule.inkAnnotationModule.currentPageNumber, 10); _this.pdfViewer.annotationModule.inkAnnotationModule.drawInkAnnotation(currentPageNumber); } return false; }; this.bookmarkKeypress = function (args) { if (args.event && args.event.pointerType !== 'mouse' && args.event.pointerType !== 'touch' && (args.event.key === 'Enter' || args.event.key === ' ')) { _this.isKeyboardNavigation = true; _this.nodeClick(args); _this.isKeyboardNavigation = false; } }; this.bookmarkPanelBeforeOpen = function (args) { if (_this.pdfViewer.enableBookmarkStyles) { for (var k = 0; k < _this.bookmarkStyles.length; k++) { if ((args.text.trim()) === (_this.bookmarkStyles[parseInt(k.toString(), 10)].Text.trim())) { var element = args.node.lastElementChild; if (element) { var fontStyle = _this.bookmarkStyles[parseInt(k.toString(), 10)].FontStyle.split(','); for (var n = 0; n < fontStyle.length; n++) { switch (fontStyle[parseInt(n.toString(), 10)].trim()) { case 'Italic': element.style.fontStyle = 'italic'; break; case 'Bold': element.style.fontWeight = 'Bold'; } } var currentElement = element.getElementsByClassName('e-pv-bookmark-title')[0]; if (currentElement) { currentElement.style.color = _this.bookmarkStyles[parseInt(k.toString(), 10)].Color; } else { element.children[0].style.color = _this.bookmarkStyles[parseInt(k.toString(), 10)].Color; } } break; } } } }; this.pdfViewer = pdfViewer; this.pdfViewerBase = pdfViewerBase; } /** * Open the bookmark pane of the PDF Viewer. * * @returns {void} */ BookmarkView.prototype.openBookmarkPane = function () { if (this.pdfViewerBase.navigationPane) { this.pdfViewerBase.navigationPane.openBookmarkcontentInitially(); } }; /** * Close the bookmark pane of the PDF Viewer. * * @returns {void} */ BookmarkView.prototype.closeBookmarkPane = function () { if (this.pdfViewerBase.navigationPane) { this.pdfViewerBase.navigationPane.closeBookmarkPane(); } }; /** * @private * @returns {void} */ BookmarkView.prototype.createRequestForBookmarks = function () { // eslint-disable-next-line var proxy = this; var jsonObject = { hashId: this.pdfViewerBase.hashId, action: 'Bookmarks', elementId: this.pdfViewer.element.id, uniqueId: this.pdfViewerBase.documentId }; if (this.pdfViewerBase.jsonDocumentId) { jsonObject.documentId = this.pdfViewerBase.jsonDocumentId; } if (this.pdfViewer.enableBookmarkStyles) { jsonObject.bookmarkStyles = this.pdfViewer.enableBookmarkStyles; } this.bookmarkRequestHandler = new AjaxHandler(this.pdfViewer); this.bookmarkRequestHandler.url = proxy.pdfViewer.serviceUrl + '/Bookmarks'; this.bookmarkRequestHandler.responseType = 'json'; if (this.pdfViewerBase.clientSideRendering) { var data = this.pdfViewer.pdfRendererModule.getBookmarks(jsonObject); this.renderBookmarksOnSuccess(data, proxy); } else { this.pdfViewerBase.requestCollection.push(this.bookmarkRequestHandler); this.bookmarkRequestHandler.send(jsonObject); this.bookmarkRequestHandler.onSuccess = function (result) { if (proxy.pdfViewerBase.navigationPane) { proxy.pdfViewerBase.navigationPane.disableBookmarkButton(); } var data = result.data; var redirect = proxy.pdfViewerBase.checkRedirection(data); if (!redirect) { proxy.renderBookmarksOnSuccess(data, proxy); } }; this.bookmarkRequestHandler.onFailure = function (result) { proxy.pdfViewer.fireAjaxRequestFailed(result.status, result.statusText, 'Bookmarks'); }; this.bookmarkRequestHandler.onError = function (result) { proxy.pdfViewerBase.openNotificationPopup(); proxy.pdfViewer.fireAjaxRequestFailed(result.status, result.statusText, 'Bookmarks'); }; } }; BookmarkView.prototype.renderBookmarksOnSuccess = function (data, proxy) { if (data) { if (typeof data !== 'object') { try { data = JSON.parse(data); } catch (error) { proxy.pdfViewerBase.onControlError(500, data, 'Bookmarks'); data = null; } } if (data && data.uniqueId === proxy.pdfViewerBase.documentId) { proxy.pdfViewer.fireAjaxRequestSuccess('Bookmarks', data); proxy.bookmarks = { bookMark: data.Bookmarks }; proxy.bookmarkStyles = data.Bookmarkstyles; proxy.bookmarksDestination = { bookMarkDestination: data.BookmarksDestination }; if (isBlazor()) { var bookmarkCollection = { bookmarks: proxy.bookmarks, bookmarksDestination: proxy.bookmarksDestination }; if (proxy.pdfViewer && proxy.pdfViewer._dotnetInstance) { proxy.pdfViewer._dotnetInstance.invokeMethodAsync('UpdateBookmarkCollection', bookmarkCollection); } } } } if (proxy.pdfViewerBase.navigationPane) { if (proxy.bookmarks == null) { proxy.pdfViewerBase.navigationPane.disableBookmarkButton(); if (isBlazor() && proxy.pdfViewer._dotnetInstance) { proxy.pdfViewer._dotnetInstance.invokeMethodAsync('UpdateBookmarkCollection', null); } } else { proxy.pdfViewerBase.navigationPane.enableBookmarkButton(); proxy.isBookmarkViewDiv = false; if (proxy.pdfViewer.isBookmarkPanelOpen) { proxy.pdfViewerBase.navigationPane.openBookmarkcontentInitially(); } } } }; /** * @private * @returns {void} */ BookmarkView.prototype.renderBookmarkcontent = function () { var _this = this; if (!this.isBookmarkViewDiv) { var isblazor = isBlazor(); this.bookmarkView = isblazor ? this.pdfViewer.element.querySelector('.e-pv-bookmark-view') : createElement('div', { id: this.pdfViewer.element.id + '_bookmark_view', className: 'e-pv-bookmark-view' }); this.pdfViewerBase.navigationPane.sideBarContent.appendChild(this.bookmarkView); var bookmarkIconView_1 = createElement('div', { id: this.pdfViewer.element.id + '_bookmark_iconview', className: 'e-pv-bookmark-icon-view' }); if (!this.pdfViewer.enableRtl) { var bookmarkIcon = createElement('span', { id: this.pdfViewer.element.id + '_bookmark_icon', className: 'e-pv-bookmark-icon e-pv-icon' }); bookmarkIconView_1.appendChild(bookmarkIcon); } else { var bookmarkIcon = createElement('span', { id: this.pdfViewer.element.id + '_bookmark_icon', className: 'e-pv-bookmark-icon e-pv-icon e-right' }); bookmarkIconView_1.appendChild(bookmarkIcon); } var bookmarkTitle = createElement('div', { id: this.pdfViewer.element.id + '_bookmark_Title', className: 'e-pv-bookmark-title' }); if (this.pdfViewer.enableRtl) { bookmarkTitle.style.paddingRight = 26 + 'px'; } bookmarkTitle.innerText = '${Title}'; bookmarkIconView_1.appendChild(bookmarkTitle); if (!isblazor) { this.treeObj = new TreeView({ fields: { dataSource: this.bookmarks.bookMark, id: 'Id', text: 'Title', child: 'Child', hasChildren: 'HasChild' }, nodeTemplate: initializeCSPTemplate(function (data) { return bookmarkIconView_1.outerHTML.replace('${Title}', data.Title); }), nodeClicked: this.nodeClick.bind(this), keyPress: this.bookmarkKeypress.bind(this), drawNode: this.bookmarkPanelBeforeOpen.bind(this) }); this.treeObj.isStringTemplate = true; if (this.pdfViewer.enableRtl) { this.treeObj.enableRtl = true; } this.treeObj.appendTo(this.bookmarkView); } var event_1 = ['mouseover', 'keydown']; for (var m = 0; m < event_1.length; m++) { this.bookmarkView.addEventListener(event_1[parseInt(m.toString(), 10)], function (event) { _this.setHeight(event.target); }); } this.isBookmarkViewDiv = true; } this.bookmarkView.style.display = 'block'; }; /** * @private * @returns {void} */ BookmarkView.prototype.renderBookmarkContentMobile = function () { if (this.bookmarkView != null) { this.bookmarkView.remove(); } this.bookmarkView = createElement('div', { id: this.pdfViewer.element.id + '_bookmark_view', className: 'e-pv-bookmark-view' }); this.pdfViewerBase.getElement('_bookmarks_container').appendChild(this.bookmarkView); this.bookmarkList = new ListView({ dataSource: this.bookmarks.bookMark, fields: { id: 'Id', text: 'Title', child: 'Child' }, showHeader: false, select: this.bookmarkClick.bind(this) }); this.bookmarkList.isStringTemplate = true; if (this.pdfViewer.enableRtl) { this.bookmarkList.enableRtl = true; } this.bookmarkList.appendTo(this.bookmarkView); }; BookmarkView.prototype.setHeight = function (element) { if (this.treeObj) { if (this.treeObj.fullRowSelect && element.classList) { if (element.classList.contains('e-treeview') && element.classList.contains('.e-active')) { element = element.querySelector('.e-active').querySelector('.e-fullrow'); } else if (element.classList.contains('e-treeview')) { element = element.querySelector('.e-fullrow'); } else if (element.classList.contains('e-list-parent')) { element = element.querySelector('.e-fullrow'); } else if (element.classList.value !== ('e-fullrow')) { if (element.closest && element.closest('.e-list-item')) { element = element.closest('.e-list-item').querySelector('.e-fullrow'); } else { if (element.classList.contains('e-list-item')) { element = element.querySelector('.e-fullrow'); } else if (element.classList.contains('e-icons') && element.classList.contains('interaction') && element.parentElement.parentElement.classList.contains('e-list-item')) { element = element.parentElement.parentElement.querySelector('.e-fullrow'); } } } if (element.nextElementSibling) { element.style.height = element.nextElementSibling.offsetHeight + 'px'; } } } }; /** * @private * @returns {void} */ BookmarkView.prototype.setBookmarkContentHeight = function () { if (this.treeObj) { var element = this.treeObj.element; if (this.treeObj.fullRowSelect) { if (element.classList.contains('e-treeview') && element.classList.contains('.e-active')) { element = element.querySelector('.e-active').querySelector('.e-fullrow'); } else if (element.classList.contains('e-treeview')) { element = element.querySelector('.e-fullrow'); } if (element.nextElementSibling) { element.style.height = element.nextElementSibling.offsetHeight + 'px'; } } } }; BookmarkView.prototype.navigateToBookmark = function (bookid, text, fileName) { var pageIndex = this.bookmarksDestination.bookMarkDestination[parseInt(bookid.toString(), 10)].PageIndex; var Y = this.bookmarksDestination.bookMarkDestination[parseInt(bookid.toString(), 10)].Y; if (pageIndex !== -1) { this.goToBookmark(pageIndex, Y); } this.pdfViewer.fireBookmarkClick(pageIndex !== -1 ? pageIndex + 1 : pageIndex, Y, text, fileName); }; /** * Get Bookmarks of the PDF document being loaded in the ejPdfViewer control * * @returns {any} - any */ BookmarkView.prototype.getBookmarks = function () { if (this.bookmarks && this.bookmarksDestination) { return { bookmarks: this.bookmarks, bookmarksDestination: this.bookmarksDestination }; } }; /** * Navigate To current Bookmark location of the PDF document being loaded in the ejPdfViewer control. * * @param {number} pageIndex - Specifies the pageIndex for Navigate * @param {number} y - Specifies the Y coordinates value of the Page * @returns {void} */ BookmarkView.prototype.goToBookmark = function (pageIndex, y) { // eslint-disable-next-line var proxy = this; var destPage = (this.pdfViewerBase.pageSize[parseInt(pageIndex.toString(), 10)].height); var scrollValue; if (y === 0) { scrollValue = this.pdfViewerBase.pageSize[parseInt(pageIndex.toString(), 10)].top * this.pdfViewerBase.getZoomFactor(); } else { scrollValue = this.pdfViewerBase.pageSize[parseInt(pageIndex.toString(), 10)].top * this.pdfViewerBase.getZoomFactor() + ((destPage - y) * this.pdfViewerBase.getZoomFactor()); } var scroll = scrollValue.toString(); proxy.pdfViewerBase.viewerContainer.scrollTop = parseInt(scroll, 10); if (Browser.isDevice && !this.pdfViewer.enableDesktopMode) { this.pdfViewerBase.mobileScrollerContainer.style.display = ''; this.pdfViewerBase.updateMobileScrollerPosition(); } if (!this.isKeyboardNavigation) { this.pdfViewerBase.focusViewerContainer(); } if (pageIndex > 0 && pageIndex <= this.pdfViewerBase.pageCount && this.pdfViewerBase.currentPageNumber !== pageIndex + 1) { this.pdfViewerBase.updateScrollTop(pageIndex, false); } this.isKeyboardNavigation = false; return false; }; /** * @private * @returns {void} */ BookmarkView.prototype.clear = function () { if (this.pdfViewerBase.navigationPane) { this.pdfViewerBase.navigationPane.disableBookmarkButton(); this.pdfViewerBase.navigationPane.updateViewerContainerOnClose(); } if (this.bookmarks) { this.bookmarks.bookMark = []; this.bookmarks = null; } if (this.bookmarksDestination) { this.bookmarksDestination.bookMarkDestination = []; } if (this.bookmarkView != null && !isBlazor()) { if (this.bookmarkView.parentElement !== null) { this.bookmarkView.parentElement.removeChild(this.bookmarkView); } while (this.bookmarkView.hasChildNodes()) { this.bookmarkView.removeChild(this.bookmarkView.lastChild); } } if (this.bookmarkRequestHandler) { this.bookmarkRequestHandler.clear(); } }; /** * @private * @returns {void} */ BookmarkView.prototype.destroy = function () { this.clear(); }; /** * @private * @returns {string} - string */ BookmarkView.prototype.getModuleName = function () { return 'BookmarkView'; }; return BookmarkView; }()); export { BookmarkView };