UNPKG

@syncfusion/ej2-spreadsheet

Version:

Feature-rich JavaScript Spreadsheet (Excel) control with built-in support for selection, editing, formatting, importing and exporting to Excel

976 lines (975 loc) 47.9 kB
import { completeAction, isLockedCells } from '../index'; import { initiateHyperlink, locale, dialog, click, keyUp, createHyperlinkElement, getUpdateUsingRaf, focus, readonlyAlert, removeElements, isValidUrl, editOperation } from '../common/index'; import { editHyperlink, openHyperlink, editAlert, removeHyperlink } from '../common/index'; import { isNullOrUndefined, closest } from '@syncfusion/ej2-base'; import { getRangeIndexes, getCellIndexes, getRangeAddress } from '../../workbook/common/address'; import { getCell, isReadOnlyCells, checkIsFormula } from '../../workbook/index'; import { beforeHyperlinkClick, afterHyperlinkClick, refreshRibbonIcons, deleteHyperlink, beginAction } from '../../workbook/common/event'; import { isCellReference, updateCell, isImported } from '../../workbook/index'; import { Tab, TreeView } from '@syncfusion/ej2-navigations'; /** * `Hyperlink` module */ var SpreadsheetHyperlink = /** @class */ (function () { /** * Constructor for Hyperlink module. * * @param {Spreadsheet} parent - Constructor for Hyperlink module. */ function SpreadsheetHyperlink(parent) { this.divElements = []; this.inputElements = []; this.parent = parent; this.addEventListener(); } /** * To destroy the Hyperlink module. * * @returns {void} - To destroy the Hyperlink module. */ SpreadsheetHyperlink.prototype.destroy = function () { this.removeEventListener(); this.parent = null; }; SpreadsheetHyperlink.prototype.addEventListener = function () { this.parent.on(initiateHyperlink, this.initiateHyperlinkHandler, this); this.parent.on(editHyperlink, this.editHyperlinkHandler, this); this.parent.on(openHyperlink, this.openHyperlinkHandler, this); this.parent.on(click, this.hyperlinkClickHandler, this); this.parent.on(createHyperlinkElement, this.createHyperlinkEle, this); this.parent.on(keyUp, this.keyUpHandler, this); this.parent.on(deleteHyperlink, this.removeHyperlink, this); this.parent.on(removeHyperlink, this.removeHyperlinkHandler, this); }; SpreadsheetHyperlink.prototype.removeEventListener = function () { if (!this.parent.isDestroyed) { this.parent.off(initiateHyperlink, this.initiateHyperlinkHandler); this.parent.off(editHyperlink, this.editHyperlinkHandler); this.parent.off(openHyperlink, this.openHyperlinkHandler); this.parent.off(click, this.hyperlinkClickHandler); this.parent.off(createHyperlinkElement, this.createHyperlinkEle); this.parent.off(keyUp, this.keyUpHandler); this.parent.off(deleteHyperlink, this.removeHyperlink); this.parent.off(removeHyperlink, this.removeHyperlinkHandler); } }; /** * Gets the module name. * * @returns {string} - Gets the module name. */ SpreadsheetHyperlink.prototype.getModuleName = function () { return 'spreadsheetHyperlink'; }; SpreadsheetHyperlink.prototype.keyUpHandler = function (e) { var trgt = e.target; if (closest(trgt, '.e-document')) { var hyperlinkText = document.querySelector('.e-hyp-text'); var hyperlinkSpan = this.parent.element.querySelector('.e-hyperlink-alert-span'); var dlgElement = closest(trgt, '.e-hyperlink-dlg') || closest(trgt, '.e-edithyperlink-dlg'); var footerEle = dlgElement.getElementsByClassName('e-footer-content')[0]; var insertBut = footerEle.firstChild; if (hyperlinkText && !isNullOrUndefined(hyperlinkText.value)) { if (!isCellReference(hyperlinkText.value.toUpperCase())) { this.showDialog(); insertBut.setAttribute('disabled', 'true'); } else if (hyperlinkSpan) { hyperlinkSpan.remove(); insertBut.removeAttribute('disabled'); } } } if (trgt.classList.contains('e-text') && closest(trgt, '.e-cont')) { if (closest(trgt, '.e-webpage') && closest(trgt, '.e-webpage').getElementsByClassName('e-cont')[1] === trgt.parentElement) { var dlgEle = closest(trgt, '.e-hyperlink-dlg') || closest(trgt, '.e-edithyperlink-dlg'); var ftrEle = dlgEle.getElementsByClassName('e-footer-content')[0]; var insertBut = ftrEle.firstChild; if (trgt.value !== '') { insertBut.removeAttribute('disabled'); } else { var linkDialog = closest(trgt, '.e-link-dialog'); var webPage = linkDialog.querySelector('.e-webpage'); var isUrl = webPage.querySelectorAll('.e-cont')[1].querySelector('.e-text').value ? true : false; if (!isUrl) { insertBut.setAttribute('disabled', 'true'); } } } } }; SpreadsheetHyperlink.prototype.initiateHyperlinkHandler = function () { var _this = this; var sheet = this.parent.getActiveSheet(); if (sheet.isProtected && (!sheet.protectSettings.insertLink || isLockedCells(this.parent))) { this.parent.notify(editAlert, null); return; } if (isReadOnlyCells(this.parent)) { this.parent.notify(readonlyAlert, null); return; } var l10n = this.parent.serviceLocator.getService(locale); if (!this.parent.element.querySelector('.e-hyperlink-dlg')) { var dialogInst_1 = this.parent.serviceLocator.getService(dialog); var displayText_1; dialogInst_1.show({ width: 323, isModal: true, showCloseIcon: true, cssClass: 'e-hyperlink-dlg', enableRtl: this.parent.enableRtl, header: l10n.getConstant('InsertLink'), beforeOpen: function (args) { var dlgArgs = { dialogName: 'InsertLinkDialog', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { args.cancel = true; return; } dialogInst_1.dialogInstance.content = _this.hyperlinkContent(); displayText_1 = dialogInst_1.dialogInstance.content.querySelector('.e-text').value; dialogInst_1.dialogInstance.dataBind(); focus(_this.parent.element); }, open: function () { setTimeout(function () { focus(dialogInst_1.dialogInstance.element.querySelectorAll('.e-webpage input')[1]); }); }, beforeClose: this.dialogBeforeClose.bind(this), buttons: [{ buttonModel: { content: l10n.getConstant('Insert'), isPrimary: true, disabled: true }, click: function () { _this.dlgClickHandler(displayText_1); dialogInst_1.hide(); } }] }); } }; SpreadsheetHyperlink.prototype.dialogBeforeClose = function () { var headerTab = this.headerTabs; if (headerTab && headerTab.element) { headerTab.destroy(); headerTab.element.remove(); } this.headerTabs = null; removeElements(this.inputElements); this.inputElements = []; removeElements(this.divElements); this.divElements = []; }; SpreadsheetHyperlink.prototype.dlgClickHandler = function (displayText) { var value; var address; var sheet = this.parent.getActiveSheet(); var cellAddress = sheet.name + '!' + sheet.selectedRange; var item = this.parent.element.querySelector('.e-link-dialog'). getElementsByClassName('e-content')[0].querySelector('.e-item.e-active'); if (item) { value = item.getElementsByClassName('e-cont')[0].querySelector('.e-text').value; if (value === displayText) { value = null; } if (item.querySelector('.e-webpage')) { address = item.getElementsByClassName('e-cont')[1].querySelector('.e-text').value; var args = { address: address }; if (value === address) { value = null; } this.parent.insertHyperlink(args, cellAddress, value, false); } else { address = item.getElementsByClassName('e-cont')[1].querySelector('.e-text').value; var dlgContent = item.getElementsByClassName('e-cont')[2]; if (dlgContent.getElementsByClassName('e-list-item')[0].querySelector('.e-active')) { var sheetName = item.getElementsByClassName('e-cont')[2].querySelector('.e-active').textContent; // const sheets: SheetModel[] = spreadsheetInst.sheets; // for (let idx: number = 0; idx < sheets.length; idx++) { // if (sheets[idx].name === sheetName) { // const sheetIdx: number = idx + 1; // } // } address = sheetName + '!' + address.toUpperCase(); var args = { address: address }; this.parent.insertHyperlink(args, cellAddress, value, false); } else if (dlgContent.querySelector('.e-active')) { var definedName = item.getElementsByClassName('e-cont')[2].querySelector('.e-active').textContent; for (var idx = 0; idx < this.parent.definedNames.length; idx++) { if (this.parent.definedNames[idx].name === definedName) { var args = { address: this.parent.definedNames[idx].name }; this.parent.insertHyperlink(args, cellAddress, value, false); } } } } } }; SpreadsheetHyperlink.prototype.showDialog = function () { if (this.parent.element.querySelector('.e-hyperlink-alert-span')) { this.parent.element.querySelector('.e-hyperlink-alert-span').remove(); } var l10n = this.parent.serviceLocator.getService(locale); var hyperlinkSpan = this.parent.createElement('span', { className: 'e-hyperlink-alert-span' }); hyperlinkSpan.innerText = l10n.getConstant('HyperlinkAlert'); var dlgEle = this.parent.element.querySelector('.e-hyperlink-dlg') || this.parent.element.querySelector('.e-edithyperlink-dlg'); (dlgEle.querySelector('.e-dlg-content')).appendChild(hyperlinkSpan); }; SpreadsheetHyperlink.prototype.editHyperlinkHandler = function () { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var dialogInst = this.parent.serviceLocator.getService(dialog); var displayText; dialogInst.show({ width: 323, isModal: true, showCloseIcon: true, cssClass: 'e-edithyperlink-dlg', enableRtl: this.parent.enableRtl, header: l10n.getConstant('EditLink'), beforeOpen: function (args) { var dlgArgs = { dialogName: 'EditLinkDialog', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { args.cancel = true; return; } dialogInst.dialogInstance.content = _this.hyperEditContent(); displayText = dialogInst.dialogInstance.content.querySelector('.e-text').value; dialogInst.dialogInstance.dataBind(); focus(_this.parent.element); }, open: function () { setTimeout(function () { if (dialogInst.dialogInstance.element.querySelector('.e-webpage')) { focus(dialogInst.dialogInstance.element.querySelectorAll('.e-webpage input')[1]); } else { focus(dialogInst.dialogInstance.element.querySelectorAll('.e-document input')[1]); } }); }, buttons: [{ buttonModel: { content: l10n.getConstant('Update'), isPrimary: true }, click: function () { _this.dlgClickHandler(displayText); dialogInst.hide(); } }] }); }; SpreadsheetHyperlink.prototype.openHyperlinkHandler = function () { var cellIndexes = getCellIndexes(this.parent.getActiveSheet().activeCell); var trgt = this.parent.getCell(cellIndexes[0], cellIndexes[1]); if (trgt.getElementsByClassName('e-hyperlink')[0]) { trgt = trgt.querySelector('.e-hyperlink'); } this.hlOpenHandler(trgt); }; SpreadsheetHyperlink.prototype.hlOpenHandler = function (trgt, isClick, event) { var _this = this; if (trgt.classList.contains('e-hyperlink')) { var cellEle = closest(trgt, '.e-cell'); if (!cellEle) { return; } var range = ['', '']; var rangeIndexes = void 0; var isEmpty = true; var sheet = this.parent.getActiveSheet(); var colIdx = parseInt(cellEle.getAttribute('aria-colindex'), 10) - 1; var rowIdx = parseInt(cellEle.parentElement.getAttribute('aria-rowindex'), 10) - 1; var cell = getCell(rowIdx, colIdx, sheet, false, true); if (cell.style && cell.style.color === '#00e') { updateCell(this.parent, sheet, { rowIdx: rowIdx, colIdx: colIdx, preventEvt: true, cell: { style: { color: '#551a8b' } } }); cellEle.style.color = '#551a8b'; } var rangeAddr = cell.hyperlink; var address = void 0; var befArgs = { hyperlink: rangeAddr, address: sheet.activeCell, target: '_blank', cancel: false }; this.parent.trigger(beforeHyperlinkClick, befArgs); if (befArgs.cancel) { if (event) { event.preventDefault(); } return; } rangeAddr = befArgs.hyperlink; var aftArgs = { hyperlink: rangeAddr, address: sheet.activeCell }; if (typeof (rangeAddr) === 'string') { address = rangeAddr; } if (typeof (rangeAddr) === 'object') { address = rangeAddr.address; } var definedNameCheck = address; if (address.indexOf('http://') === -1 && address.indexOf('https://') === -1 && address.indexOf('ftp://') === -1) { if (!isNullOrUndefined(address)) { if (this.parent.definedNames) { for (var idx = 0; idx < this.parent.definedNames.length; idx++) { if (this.parent.definedNames[idx].name === address) { address = this.parent.definedNames[idx].refersTo; address = address.slice(1); break; } } } if (address.lastIndexOf('!') !== -1) { range[0] = address.substring(0, address.lastIndexOf('!')); if (range[0].startsWith('\'') && range[0].endsWith('\'')) { range[0] = range[0].slice(1, range[0].length - 1); } range[1] = address.substring(address.lastIndexOf('!') + 1); } else { range[0] = this.parent.getActiveSheet().name; range[1] = address; } // selRange = range[1]; var sheetIdx_1; for (var idx = 0; idx < this.parent.sheets.length; idx++) { if (this.parent.sheets[idx].name === range[0]) { sheetIdx_1 = idx; } } sheet = this.parent.sheets[sheetIdx_1]; if (range[1].indexOf(':') !== -1) { var colIndex = range[1].indexOf(':'); var left = range[1].substr(0, colIndex); var right = range[1].substr(colIndex + 1, range[1].length); left = left.replace('$', ''); right = right.replace('$', ''); if (right.match(/\D/g) && !right.match(/[0-9]/g) && left.match(/\D/g) && !left.match(/[0-9]/g)) { // selRange = left + '1' + ':' + right + sheet.rowCount; left = left + '1'; right = right + sheet.rowCount; range[1] = left + ':' + right; } else if (!right.match(/\D/g) && right.match(/[0-9]/g) && !left.match(/\D/g) && left.match(/[0-9]/g)) { // selRange = getCellAddress(parseInt(left, 10) - 1, 0) + ':' + // getCellAddress(parseInt(right, 10) - 1, sheet.colCount - 1); rangeIndexes = [parseInt(left, 10) - 1, 0, parseInt(right, 10) - 1, sheet.colCount - 1]; isEmpty = false; } } var isDefinedNamed = void 0; var definedname = this.parent.definedNames; if (!isNullOrUndefined(definedname)) { for (var idx = 0; idx < definedname.length; idx++) { if (definedname[idx].name === definedNameCheck) { isDefinedNamed = true; break; } } } if (isCellReference(range[1]) || isDefinedNamed) { rangeIndexes = isEmpty ? getRangeIndexes(range[1]) : rangeIndexes; if (!isNullOrUndefined(sheet)) { var rangeAddr_1 = getRangeAddress(rangeIndexes); if (sheet === this.parent.getActiveSheet()) { getUpdateUsingRaf(function () { _this.parent.goTo(rangeAddr_1); }); } else { if (rangeAddr_1.indexOf(':') >= 0) { var addArr = rangeAddr_1.split(':'); rangeAddr_1 = addArr[0] === addArr[1] ? addArr[0] : rangeAddr_1; } getUpdateUsingRaf(function () { _this.parent.goTo(_this.parent.sheets[sheetIdx_1].name + '!' + rangeAddr_1); }); } } } else { this.showInvalidHyperlinkDialog(); } } } else if (!isClick) { if (isValidUrl(address)) { window.open(address, befArgs.target); } else { this.showInvalidHyperlinkDialog(); } } this.parent.trigger(afterHyperlinkClick, aftArgs); } }; SpreadsheetHyperlink.prototype.showInvalidHyperlinkDialog = function () { var dialogInst = this.parent.serviceLocator.getService(dialog); var l10n = this.parent.serviceLocator.getService(locale); dialogInst.show({ width: 323, isModal: true, showCloseIcon: true, header: l10n.getConstant('Hyperlink'), content: l10n.getConstant('InvalidHyperlinkAlert'), buttons: [{ buttonModel: { content: l10n.getConstant('Ok'), isPrimary: true }, click: function () { dialogInst.hide(); } }] }, false); }; SpreadsheetHyperlink.prototype.hyperlinkClickHandler = function (e) { if (this.parent.isEdit) { var eventArgs = { action: 'getCurrentEditValue', editedValue: '' }; this.parent.notify(editOperation, eventArgs); if (checkIsFormula(eventArgs.editedValue, true)) { return; } } var trgt = e.target; if (closest(trgt, '.e-link-dialog') && closest(trgt, '.e-toolbar-item')) { var dlgEle = closest(trgt, '.e-hyperlink-dlg') || closest(trgt, '.e-edithyperlink-dlg'); var ftrEle = dlgEle.getElementsByClassName('e-footer-content')[0]; var insertBut = ftrEle.firstChild; var docEle = dlgEle.querySelector('.e-document'); var webEle = dlgEle.querySelector('.e-webpage'); var webEleText = webEle ? webEle.querySelectorAll('.e-cont')[0].querySelector('.e-text').value : docEle.querySelectorAll('.e-cont')[0].querySelector('.e-text').value; var docEleText = docEle ? docEle.querySelectorAll('.e-cont')[0].querySelector('.e-text').value : webEleText; var toolbarItems = closest(trgt, '.e-toolbar-items'); if (toolbarItems.getElementsByClassName('e-toolbar-item')[1].classList.contains('e-active')) { var actEle = docEle.querySelectorAll('.e-cont')[2].querySelector('.e-active'); docEle.querySelectorAll('.e-cont')[0].querySelector('.e-text').value = webEleText; if (closest(actEle, '.e-list-item').classList.contains('e-level-2') && insertBut.hasAttribute('disabled')) { insertBut.removeAttribute('disabled'); } else if (closest(actEle, '.e-list-item').classList.contains('e-level-1') && !insertBut.hasAttribute('disabled')) { insertBut.setAttribute('disabled', 'true'); } } else { var isEmpty = webEle.querySelectorAll('.e-cont')[1].querySelector('.e-text').value ? false : true; webEle.querySelectorAll('.e-cont')[0].querySelector('.e-text').value = docEleText; if (isEmpty && !insertBut.hasAttribute('disabled')) { insertBut.setAttribute('disabled', 'true'); } else if (!isEmpty && insertBut.hasAttribute('disabled')) { insertBut.removeAttribute('disabled'); } } } if (closest(trgt, '.e-list-item') && trgt.classList.contains('e-fullrow')) { var item = this.parent.element.getElementsByClassName('e-link-dialog')[0]; if (item) { item = item.getElementsByClassName('e-content')[0].getElementsByClassName('e-active')[0]; } else { return; } var cellRef = item.getElementsByClassName('e-cont')[1].getElementsByClassName('e-text')[0]; var dlgEle = closest(trgt, '.e-hyperlink-dlg') || closest(trgt, '.e-edithyperlink-dlg'); var ftrEle = dlgEle.getElementsByClassName('e-footer-content')[0]; var insertBut = ftrEle.firstChild; if (closest(trgt, '.e-list-item').classList.contains('e-level-2')) { if (closest(trgt, '.e-list-item').getAttribute('data-uid') === 'defName') { if (!cellRef.classList.contains('e-disabled') && !cellRef.hasAttribute('readonly')) { cellRef.setAttribute('readonly', 'true'); cellRef.classList.add('e-disabled'); cellRef.setAttribute('disabled', 'true'); } if (insertBut.hasAttribute('disabled')) { insertBut.removeAttribute('disabled'); } } else if (closest(trgt, '.e-list-item').getAttribute('data-uid') === 'sheet') { if (cellRef.classList.contains('e-disabled') && cellRef.hasAttribute('readonly')) { cellRef.removeAttribute('readonly'); cellRef.classList.remove('e-disabled'); cellRef.removeAttribute('disabled'); } if (isCellReference(cellRef.value.toUpperCase())) { if (insertBut.hasAttribute('disabled')) { insertBut.removeAttribute('disabled'); } } } } else if (closest(trgt, '.e-list-item').classList.contains('e-level-1')) { insertBut.setAttribute('disabled', 'true'); } } else { this.hlOpenHandler(trgt, true, e); } }; SpreadsheetHyperlink.prototype.createHyperlinkEle = function (args) { var cell = args.cell; if (!isNullOrUndefined(cell.hyperlink)) { var td = args.td; var hyperEle = this.parent.createElement('a', { className: 'e-hyperlink e-hyperlink-style' }); var address = void 0; if (typeof cell.hyperlink === 'string') { if (cell.hyperlink.toLowerCase().indexOf('www.') === 0) { cell.hyperlink = 'http://' + cell.hyperlink; } address = cell.hyperlink; } else { address = cell.hyperlink.address; if (address.toLowerCase().indexOf('www.') === 0) { cell.hyperlink.address = address = 'http://' + address; } } if (address.indexOf('http://') === 0 || address.indexOf('https://') === 0 || address.indexOf('ftp://') === 0) { hyperEle.setAttribute('href', address); hyperEle.setAttribute('target', '_blank'); } else if (address.includes('=') || address.includes('!')) { hyperEle.setAttribute('ref', address); } if (cell.format && cell.format.includes('*')) { hyperEle.innerHTML = td.innerHTML; } else { hyperEle.innerText = td.innerText !== '' ? td.innerText : address; } td.textContent = ''; td.innerText = ''; if (this.parent.autoFillSettings.fillType === 'FillWithoutFormatting' || args.fillType === 'FillWithoutFormatting' || args.action === 'Clear Formats') { hyperEle.style.textDecoration = 'none'; } td.appendChild(hyperEle); if (!args.style.color || !args.style.textDecoration) { var style = {}; if (!args.style.color) { args.style.color = style.color = '#00e'; } if (!args.style.textDecoration) { args.style.textDecoration = style.textDecoration = 'underline'; } updateCell(this.parent, this.parent.getActiveSheet(), { rowIdx: args.rowIdx, colIdx: args.colIdx, preventEvt: true, cell: { style: style } }); } } }; SpreadsheetHyperlink.prototype.hyperEditContent = function () { var isWeb = true; var dialog = this.hyperlinkContent(); var indexes = getRangeIndexes(this.parent.getActiveSheet().activeCell); var cell = this.parent.sheets[this.parent.getActiveSheet().id - 1].rows[indexes[0]].cells[indexes[1]]; if (this.parent.scrollSettings.enableVirtualization) { indexes[0] = indexes[0] - this.parent.viewport.topIndex; indexes[1] = indexes[1] - this.parent.viewport.leftIndex; } var value = this.parent.getDisplayText(cell); var address; var hyperlink = cell.hyperlink; if (typeof (hyperlink) === 'string') { address = hyperlink; value = value || address; if (address.indexOf('http://') === -1 && address.indexOf('https://') === -1 && address.indexOf('ftp://') === -1) { isWeb = false; } } else if (typeof (hyperlink) === 'object') { address = hyperlink.address; value = value || address; if (address.indexOf('http://') === -1 && address.indexOf('https://') === -1 && address.indexOf('ftp://') === -1) { isWeb = false; } } var definedNamesCount = 0; var rangeCount = 0; var definedNames = this.parent.definedNames; var sheets = this.parent.sheets; for (var idx = 0, len = definedNames.length; idx < len; idx++) { if (definedNames[idx].name === address) { definedNamesCount++; } } for (var idx = 0, len = sheets.length; idx < len; idx++) { if (address.includes(sheets[idx].name)) { rangeCount++; } } if (definedNamesCount === 0 && rangeCount === 0) { isWeb = true; } var item = dialog.querySelector('.e-content'); if (isWeb) { var webContElem = item.querySelector('.e-webpage'); var webTextInput_1 = webContElem.getElementsByClassName('e-cont')[0].getElementsByClassName('e-text')[0]; var webUrlInput_1 = webContElem.getElementsByClassName('e-cont')[1].getElementsByClassName('e-text')[0]; webTextInput_1.setAttribute('value', value); if (typeof (hyperlink) === 'string') { webUrlInput_1.setAttribute('value', hyperlink); } else { webUrlInput_1.setAttribute('value', hyperlink.address); } if (cell.hyperlink && (!cell.value || cell.value !== 0)) { webUrlInput_1.addEventListener('input', function () { webTextInput_1.value = webUrlInput_1.value; }); } } else { var isDefinedNamed = void 0; var docContElem = item.querySelector('.e-document'); docContElem.getElementsByClassName('e-cont')[0].getElementsByClassName('e-text')[0].setAttribute('value', value); var sheetName = void 0; var range = void 0; // let sheet: SheetModel = this.parent.getActiveSheet(); // let sheetIdx: number; if (this.parent.definedNames) { for (var idx = 0; idx < this.parent.definedNames.length; idx++) { if (this.parent.definedNames[idx].name === address) { isDefinedNamed = true; break; } } } if (isDefinedNamed) { var cellRef = docContElem.getElementsByClassName('e-cont')[1].getElementsByClassName('e-text')[0]; cellRef.setAttribute('readonly', 'true'); cellRef.classList.add('e-disabled'); cellRef.setAttribute('disabled', 'true'); var treeCont = docContElem.getElementsByClassName('e-cont')[2]; var listEle = treeCont.querySelectorAll('.e-list-item.e-level-1')[1]; for (var idx = 0; idx < listEle.getElementsByTagName('li').length; idx++) { if (listEle.getElementsByTagName('li')[idx].innerText === address) { listEle.getElementsByTagName('li')[idx].classList.add('e-active'); } } } else { if (address && address.lastIndexOf('!') !== -1) { var lastIndex = address.lastIndexOf('!'); sheetName = address.substring(0, lastIndex); range = address.substring(lastIndex + 1); // sheetIdx = parseInt(rangeArr[0].replace(/\D/g, ''), 10) - 1; // sheet = this.parent.sheets[sheetIdx]; } docContElem.getElementsByClassName('e-cont')[1].querySelector('.e-text').setAttribute('value', range); var treeCont = docContElem.getElementsByClassName('e-cont')[2]; var listEle = treeCont.querySelectorAll('.e-list-item.e-level-1')[0]; for (var idx = 0; idx < listEle.getElementsByTagName('li').length; idx++) { if (listEle.getElementsByTagName('li')[idx].innerText === sheetName) { if (listEle.getElementsByTagName('li')[idx].classList.contains('e-active')) { break; } else { listEle.getElementsByTagName('li')[idx].classList.add('e-active'); } } else { if (listEle.getElementsByTagName('li')[idx].classList.contains('e-active')) { listEle.getElementsByTagName('li')[idx].classList.remove('e-active'); } } } } } return dialog; }; SpreadsheetHyperlink.prototype.hyperlinkContent = function () { var l10n = this.parent.serviceLocator.getService(locale); var idx = 0; var selIdx = 0; var isWeb = true; var isDefinedName; var isCellRef = true; var address; var indexes = getRangeIndexes(this.parent.getActiveSheet().activeCell); var sheet = this.parent.getActiveSheet(); var cell = getCell(indexes[0], indexes[1], sheet); var isEnable = true; var isRTL = this.parent.enableRtl; if (cell) { if ((cell.value && typeof (cell.value) === 'string' && cell.value.match('[A-Za-z]+') !== null) || cell.value === '' || isNullOrUndefined(cell.value)) { isEnable = true; } else { isEnable = false; } var hyperlink = cell.hyperlink; if (typeof (hyperlink) === 'string') { var hl = hyperlink; if (hl.indexOf('http://') === -1 && hl.indexOf('https://') === -1 && hl.indexOf('ftp://') === -1) { address = hyperlink; isWeb = false; } } else if (typeof (hyperlink) === 'object') { var hl = hyperlink.address; if (hl.indexOf('http://') === -1 && hl.indexOf('https://') === -1 && hl.indexOf('ftp://') === -1) { address = hyperlink.address; isWeb = false; } } if (address) { var defNamesCnt = 0; var rangeCnt = 0; var definedNames = this.parent.definedNames; var sheets_1 = this.parent.sheets; for (var idx_1 = 0, len = sheets_1.length; idx_1 < len; idx_1++) { if (address.includes(sheets_1[idx_1].name)) { rangeCnt++; } } for (var idx_2 = 0, len = definedNames.length; idx_2 < len; idx_2++) { if (definedNames[idx_2].name === address) { defNamesCnt++; } } if (defNamesCnt === 0 && rangeCnt === 0) { isWeb = true; } } if (isWeb) { selIdx = 0; } else { selIdx = 1; } if (this.parent.definedNames) { for (var idx_3 = 0; idx_3 < this.parent.definedNames.length; idx_3++) { if (this.parent.definedNames[idx_3].name === address) { isDefinedName = true; isCellRef = false; break; } } } } var dialogElem = this.parent.createElement('div', { className: 'e-link-dialog' }); var webContElem = this.parent.createElement('div', { className: 'e-webpage' }); var docContElem = this.parent.createElement('div', { className: 'e-document' }); this.headerTabs = new Tab({ selectedItem: selIdx, enableRtl: isRTL, items: [ { header: { 'text': l10n.getConstant('WebPage') }, content: webContElem }, { header: { 'text': l10n.getConstant('ThisDocument') }, content: docContElem } ] }); this.headerTabs.appendTo(dialogElem); var indicator = dialogElem.querySelector('.e-toolbar-items').querySelector('.e-indicator'); if (isWeb) { indicator.style.cssText = isRTL ? 'left: 136px; right: 0' : 'left: 0; right: 136px'; } else { indicator.style.cssText = isRTL ? 'left: 0; right: 136px' : 'left: 136px; right: 0'; } var textCont = this.parent.createElement('div', { className: 'e-cont' }); var urlCont = this.parent.createElement('div', { className: 'e-cont' }); var textH = this.parent.createElement('div', { className: 'e-header' }); textH.innerText = l10n.getConstant('DisplayText'); var urlH = this.parent.createElement('div', { className: 'e-header' }); urlH.innerText = l10n.getConstant('Url'); var textInput = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'Text' } }); this.inputElements.push(textInput); if (!isEnable) { textInput.classList.add('e-disabled'); textInput.setAttribute('readonly', 'true'); textInput.setAttribute('disabled', 'true'); } if (cell && isNullOrUndefined(cell.hyperlink)) { textInput.setAttribute('value', this.parent.getDisplayText(cell)); } var urlInput = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'Text' } }); this.inputElements.push(urlInput); textInput.setAttribute('placeholder', l10n.getConstant('EnterTheTextToDisplay')); urlInput.setAttribute('placeholder', l10n.getConstant('EnterTheUrl')); textCont.appendChild(textInput); textCont.insertBefore(textH, textInput); urlCont.appendChild(urlInput); urlCont.insertBefore(urlH, urlInput); webContElem.appendChild(urlCont); webContElem.insertBefore(textCont, urlCont); var cellRef = []; var definedName = []; var sheets = this.parent.sheets; for (idx; idx < this.parent.sheets.length; idx++) { var sheetName = this.parent.sheets[idx].name; if (this.parent.sheets[idx].state === 'Visible') { if (sheets[idx] === this.parent.getActiveSheet()) { cellRef.push({ nodeId: 'sheet', nodeText: sheetName.indexOf(' ') !== -1 ? '\'' + sheetName + '\'' : sheetName, selected: true }); } else { cellRef.push({ nodeId: 'sheet', nodeText: sheetName.indexOf(' ') !== -1 ? '\'' + sheetName + '\'' : sheetName }); } } } for (idx = 0; idx < this.parent.definedNames.length; idx++) { definedName.push({ nodeId: 'defName', nodeText: this.parent.definedNames[idx].name }); } var data = [ { nodeId: '01', nodeText: l10n.getConstant('CellReference'), expanded: isCellRef, nodeChild: cellRef }, { nodeId: '02', nodeText: l10n.getConstant('DefinedNames'), expanded: isDefinedName, nodeChild: definedName } ]; var treeObj = new TreeView({ fields: { dataSource: data, id: 'nodeId', text: 'nodeText', child: 'nodeChild' }, enableRtl: isRTL }); var cellrefCont = this.parent.createElement('div', { className: 'e-cont' }); var cellrefH = this.parent.createElement('div', { className: 'e-header' }); cellrefH.innerText = l10n.getConstant('CellReference'); var cellrefInput = this.parent.createElement('input', { className: 'e-input e-text e-hyp-text', attrs: { 'type': 'Text' } }); cellrefInput.setAttribute('value', 'A1'); this.inputElements.push(cellrefInput); cellrefCont.appendChild(cellrefInput); cellrefCont.insertBefore(cellrefH, cellrefInput); var textCont1 = this.parent.createElement('div', { className: 'e-cont' }); var textH1 = this.parent.createElement('div', { className: 'e-header' }); textH1.innerText = l10n.getConstant('DisplayText'); var textInput1 = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'Text' } }); this.inputElements.push(textInput1); if (!isEnable) { textInput1.classList.add('e-disabled'); textInput1.setAttribute('readonly', 'true'); textInput1.setAttribute('disabled', 'true'); } if (cell && isNullOrUndefined(cell.hyperlink)) { textInput1.setAttribute('value', this.parent.getDisplayText(cell)); } textInput1.setAttribute('placeholder', l10n.getConstant('EnterTheTextToDisplay')); textCont1.appendChild(textInput1); textCont1.insertBefore(textH1, textInput1); var sheetCont = this.parent.createElement('div', { className: 'e-cont' }); var sheetH = this.parent.createElement('div', { className: 'e-header' }); sheetH.innerText = l10n.getConstant('Sheet'); var refCont = this.parent.createElement('div', { className: 'e-refcont' }); this.divElements.push(textCont); this.divElements.push(urlCont); this.divElements.push(textH); this.divElements.push(urlH); this.divElements.push(cellrefCont); this.divElements.push(cellrefH); this.divElements.push(textCont1); this.divElements.push(textH1); this.divElements.push(sheetCont); this.divElements.push(sheetH); this.divElements.push(refCont); this.divElements.push(docContElem); this.divElements.push(webContElem); this.divElements.push(dialogElem); sheetCont.appendChild(refCont); sheetCont.insertBefore(sheetH, refCont); docContElem.appendChild(cellrefCont); docContElem.insertBefore(textCont1, cellrefCont); treeObj.appendTo(refCont); docContElem.appendChild(sheetCont); return dialogElem; }; SpreadsheetHyperlink.prototype.removeHyperlink = function (args) { var cell = getCell(args.rowIdx, args.colIdx, args.sheet); if (cell && cell.hyperlink) { if (typeof (cell.hyperlink) === 'string') { cell.value = cell.value || cell.value === 0 ? cell.value : cell.hyperlink; } else { cell.value = cell.value || cell.value === 0 ? cell.value : cell.hyperlink.address; } delete (cell.hyperlink); if (cell.style) { delete cell.style.textDecoration; delete cell.style.color; } if (cell.validation) { if (cell.validation.isHighlighted) { if (cell.style.backgroundColor) { cell.style.color = '#ff0000'; } } } if (args.sheet === this.parent.getActiveSheet()) { if (cell.style) { this.parent.notify(refreshRibbonIcons, null); } if (!args.preventRefresh) { this.parent.serviceLocator.getService('cell').refresh(args.rowIdx, args.colIdx, false, null, true, false, isImported(this.parent)); } } } }; SpreadsheetHyperlink.prototype.removeHyperlinkHandler = function (args) { var range = args.range; var sheetName; var sheet = this.parent.getActiveSheet(); var sheetIdx; if (!args.preventEventTrigger) { var eventArgs = { address: range.indexOf('!') === -1 ? sheet.name + '!' + range : range, cancel: false }; this.parent.notify(beginAction, { action: 'removeHyperlink', eventArgs: eventArgs }); if (eventArgs.cancel) { return; } } if (range && range.indexOf('!') !== -1) { var lastIndex = range.lastIndexOf('!'); sheetName = range.substring(0, lastIndex); var sheets = this.parent.sheets; for (var idx = 0; idx < sheets.length; idx++) { if (sheets[idx].name === sheetName) { sheetIdx = idx; } } sheet = this.parent.sheets[sheetIdx]; range = range.substring(lastIndex + 1); } var rangeIndexes = range ? getRangeIndexes(range) : getRangeIndexes(sheet.activeCell); var cellEle; var classList; for (var rowIdx = rangeIndexes[0]; rowIdx <= rangeIndexes[2]; rowIdx++) { for (var colIdx = rangeIndexes[1]; colIdx <= rangeIndexes[3]; colIdx++) { if (sheet && sheet.rows[rowIdx] && sheet.rows[rowIdx].cells[colIdx]) { classList = []; cellEle = this.parent.getCell(rowIdx, colIdx); if (cellEle) { for (var i = 0; i < cellEle.classList.length; i++) { classList.push(cellEle.classList[i]); } } this.parent.notify(deleteHyperlink, { sheet: sheet, rowIdx: rowIdx, colIdx: colIdx }); for (var i = 0; i < classList.length; i++) { if (!cellEle.classList.contains(classList[i])) { cellEle.classList.add(classList[i]); } } } } } if (!args.preventEventTrigger) { this.parent.notify(completeAction, { action: 'removeHyperlink', eventArgs: { address: range.indexOf('!') === -1 ? sheet.name + '!' + range : range } }); } }; return SpreadsheetHyperlink; }()); export { SpreadsheetHyperlink };