UNPKG

@syncfusion/ej2-spreadsheet

Version:

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

816 lines (815 loc) 42.3 kB
import { applyProtect, protectSheet, protectCellFormat, editAlert, enableFormulaInput, protectWorkbook, keyUp, unProtectSheetPassword, completeAction, setProtectWorkbook, removeWorkbookProtection } from '../common/event'; import { unProtectWorkbook, importProtectWorkbook, hideAutoFillElement } from '../common/event'; import { clearCopy, protectSelection, clearUndoRedoCollection, focus, isLockedCells, toggleProtect } from '../common/index'; import { ListView } from '@syncfusion/ej2-lists'; import { EventHandler, closest, isNullOrUndefined, getInstance } from '@syncfusion/ej2-base'; import { locale, updateToggleItem, dialog } from '../common/index'; import { CheckBox } from '@syncfusion/ej2-buttons'; import { getSheet, protectsheetHandler, getRangeIndexes, importModelUpdate } from '../../workbook/index'; /** * The `Protect-sheet` module is used to handle the Protecting functionalities in Spreadsheet. */ var ProtectSheet = /** @class */ (function () { /** * Constructor for protectSheet module in Spreadsheet. * * @param {Spreadsheet} parent - Specify the spreadsheet. * @private */ function ProtectSheet(parent) { this.parent = parent; this.init(); } ProtectSheet.prototype.init = function () { this.addEventListener(); }; /** * To destroy the protectSheet module. * * @returns {void} - To destroy the protectSheet module. * @hidden */ ProtectSheet.prototype.destroy = function () { this.removeEventListener(); this.parent = null; }; ProtectSheet.prototype.addEventListener = function () { this.parent.on(applyProtect, this.protect, this); this.parent.on(protectSheet, this.protectSheetHandler, this); this.parent.on(importModelUpdate, this.protectSheetHandler, this); this.parent.on(editAlert, this.editProtectedAlert, this); this.parent.on(protectWorkbook, this.protectWorkbook, this); this.parent.on(keyUp, this.KeyUpHandler, this); this.parent.on(unProtectWorkbook, this.unProtectWorkbook, this); this.parent.on(unProtectSheetPassword, this.unProtectSheetPassword, this); this.parent.on(importProtectWorkbook, this.importProtectWorkbook, this); this.parent.on(setProtectWorkbook, this.protectWorkbookHandler, this); this.parent.on(removeWorkbookProtection, this.removeWorkbookProtection, this); this.parent.on(toggleProtect, this.toggleProtect, this); }; ProtectSheet.prototype.removeEventListener = function () { if (!this.parent.isDestroyed) { this.parent.off(applyProtect, this.protect); this.parent.off(protectSheet, this.protectSheetHandler); this.parent.off(importModelUpdate, this.protectSheetHandler); this.parent.off(editAlert, this.editProtectedAlert); this.parent.off(protectWorkbook, this.protectWorkbook); this.parent.off(keyUp, this.KeyUpHandler); this.parent.off(unProtectWorkbook, this.unProtectWorkbook); this.parent.off(unProtectSheetPassword, this.unProtectSheetPassword); this.parent.off(importProtectWorkbook, this.importProtectWorkbook); this.parent.off(setProtectWorkbook, this.protectWorkbookHandler); this.parent.off(removeWorkbookProtection, this.removeWorkbookProtection); this.parent.off(toggleProtect, this.toggleProtect); } }; ProtectSheet.prototype.protect = function (args) { if (args.isActive) { var sheet = this.parent.getActiveSheet(); if (sheet.isImportProtected) { sheet.isImportProtected = false; } } this.parent.notify(clearCopy, null); if (!args.isActive) { this.createDialogue(); } else { this.parent.setSheetPropertyOnMute(getSheet(this.parent, args.sheetIndex), 'isProtected', false); this.parent.notify(updateToggleItem, { props: 'Protect' }); this.parent.notify(protectSheet, args); this.parent.notify(protectSelection, null); } }; ProtectSheet.prototype.createDialogue = function () { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var listData = [ { text: l10n.getConstant('SelectCells'), id: '1' }, { text: l10n.getConstant('SelectUnlockedCells'), id: '6' }, { text: l10n.getConstant('FormatCells'), id: '2' }, { text: l10n.getConstant('FormatRows'), id: '3' }, { text: l10n.getConstant('FormatColumns'), id: '4' }, { text: l10n.getConstant('InsertLinks'), id: '5' } ]; this.optionList = new ListView({ dataSource: listData, showCheckBox: true, enableRtl: this.parent.enableRtl, select: this.dialogOpen.bind(this) }); var dialogElem = this.parent.createElement('div', { className: 'e-sheet-password-dialog' }); var pwdCont = this.parent.createElement('div', { className: 'e-sheet-password-content' }); var textH = this.parent.createElement('div', { className: 'e-header' }); textH.innerText = l10n.getConstant('SheetPassword'); var pwdInput = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'password' } }); pwdInput.setAttribute('placeholder', l10n.getConstant('EnterThePassword')); pwdCont.appendChild(pwdInput); pwdCont.insertBefore(textH, pwdInput); dialogElem.appendChild(pwdCont); var protectHeaderCntent = this.parent.createElement('div', { className: 'e-protect-content' }); protectHeaderCntent.innerText = l10n.getConstant('ProtectAllowUser'); this.parent.setSheetPropertyOnMute(this.parent.getActiveSheet(), 'isProtected', false); var checkbox = new CheckBox({ checked: true, label: l10n.getConstant('ProtectContent'), cssClass: 'e-protect-checkbox', enableRtl: this.parent.enableRtl }); var listViewElement = this.parent.createElement('div', { className: 'e-protect-option-list', id: this.parent.element.id + '_option_list' }); var headerContent = this.parent.createElement('div', { className: 'e-header-content' }); headerContent.innerText = l10n.getConstant('ProtectSheet'); var checkBoxElement = this.parent.createElement('input', { id: this.parent.element.id + '_protect_check', attrs: { type: 'checkbox' } }); var protectSheetDlg = this.parent.serviceLocator.getService('dialog'); var checkBoxClickHandler = function () { var ch = getInstance(document.getElementById(_this.parent.element.id + '_protect_check'), CheckBox); protectSheetDlg.dialogInstance.element.querySelector('.e-footer-content .e-btn.e-primary').disabled = !ch.checked; }; var dlgCanceled; protectSheetDlg.show({ header: headerContent.outerHTML, content: dialogElem.outerHTML + checkBoxElement.outerHTML + protectHeaderCntent.outerHTML + listViewElement.outerHTML, showCloseIcon: true, isModal: true, cssClass: 'e-protect-dlg', enableRtl: this.parent.enableRtl, beforeOpen: function (args) { var dlgArgs = { dialogName: 'ProtectSheetDialog', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { dlgCanceled = args.cancel = true; } else { focus(_this.parent.element); } }, beforeClose: function () { if (!dlgCanceled) { EventHandler.remove(checkbox.element, 'click', checkBoxClickHandler); } }, buttons: [{ click: this.selectOption.bind(this, protectSheetDlg), buttonModel: { content: l10n.getConstant('Ok'), isPrimary: true } }, { click: function () { return protectSheetDlg.hide(); }, buttonModel: { content: l10n.getConstant('Cancel') } }] }, false); if (!dlgCanceled) { checkbox.appendTo('#' + this.parent.element.id + '_protect_check'); this.optionList.appendTo('#' + this.parent.element.id + '_option_list'); this.optionList.selectMultipleItems([{ id: '1' }, { id: '6' }]); EventHandler.add(checkbox.element, 'click', checkBoxClickHandler, this); } }; ProtectSheet.prototype.dialogOpen = function (args) { var l10n = this.parent.serviceLocator.getService(locale); if (args.text === l10n.getConstant('SelectCells') && args.isChecked && args.isInteracted) { this.optionList.checkItem({ id: '6' }); } if (args.text === l10n.getConstant('SelectUnlockedCells') && !args.isChecked && args.isInteracted) { this.optionList.uncheckItem({ id: '1' }); } }; ProtectSheet.prototype.selectOption = function (protectSheetDlg) { var pwdInput = protectSheetDlg.dialogInstance.element.querySelector('.e-sheet-password-content .e-input'); var pwd = pwdInput.value; if (pwd) { this.reEnterSheetPassword(pwd); } else { var sheet = this.parent.getActiveSheet(); this.parent.setSheetPropertyOnMute(sheet, 'isProtected', true); this.parent.setSheetPropertyOnMute(sheet, 'password', pwd); this.updateProtectSheet(pwd); protectSheetDlg.hide(); if (!sheet.protectSettings.selectCells && !sheet.protectSettings.selectUnLockedCells) { this.parent.notify(hideAutoFillElement, null); } else if (sheet.protectSettings.selectUnLockedCells && isLockedCells(this.parent, getRangeIndexes(sheet.selectedRange))) { this.parent.notify(hideAutoFillElement, null); } } }; ProtectSheet.prototype.applySheetPwd = function (pwd) { var actSheet = this.parent.getActiveSheet(); this.parent.setSheetPropertyOnMute(actSheet, 'isProtected', true); this.parent.setSheetPropertyOnMute(actSheet, 'password', pwd); this.updateProtectSheet(pwd); if (!actSheet.protectSettings.selectCells && !actSheet.protectSettings.selectUnLockedCells) { this.parent.notify(hideAutoFillElement, null); } }; ProtectSheet.prototype.updateProtectSheet = function (password) { var l10n = this.parent.serviceLocator.getService(locale); var selectedItems = this.optionList.getSelectedItems(); var protectSettings = { selectCells: selectedItems.text.indexOf(l10n.getConstant('SelectCells')) > -1, formatCells: selectedItems.text.indexOf(l10n.getConstant('FormatCells')) > -1, formatRows: selectedItems.text.indexOf(l10n.getConstant('FormatRows')) > -1, formatColumns: selectedItems.text.indexOf(l10n.getConstant('FormatColumns')) > -1, insertLink: selectedItems.text.indexOf(l10n.getConstant('InsertLinks')) > -1, selectUnLockedCells: selectedItems.text.indexOf(l10n.getConstant('SelectUnlockedCells')) > -1 }; this.parent.notify(protectsheetHandler, { protectSettings: protectSettings, password: password, triggerEvent: true }); this.parent.notify(protectSelection, null); this.parent.notify(clearUndoRedoCollection, null); }; ProtectSheet.prototype.protectSheetHandler = function (args) { var sheetIndex = isNullOrUndefined(args && args.sheetIndex) ? this.parent.activeSheetIndex : args.sheetIndex; var sheet = getSheet(this.parent, sheetIndex); var id = this.parent.element.id; var disableHomeBtnId = [id + '_undo', id + '_redo', id + '_cut', id + '_copy', id + '_paste', id + '_number_format', id + '_font_name', id + '_font_size', id + '_bold', id + '_italic', id + '_line-through', id + '_underline', id + '_font_color_picker', id + '_fill_color_picker', id + '_borders', id + '_merge_cells', id + '_text_align', id + '_vertical_align', id + '_wrap', id + '_sorting', id + '_clear', id + '_conditionalformatting']; var enableHomeBtnId = [id + '_cut', id + '_copy', id + '_number_format', id + '_font_name', id + '_font_size', id + '_bold', id + '_italic', id + '_line-through', id + '_underline', id + '_font_color_picker', id + '_fill_color_picker', id + '_borders', id + '_text_align', id + '_vertical_align', id + '_wrap', id + '_sorting', id + '_clear', id + '_conditionalformatting']; if (this.parent.allowMerge) { var selectedRange = getRangeIndexes(sheet.selectedRange); if (selectedRange[0] !== selectedRange[2] || selectedRange[1] !== selectedRange[3]) { enableHomeBtnId.push(id + '_merge_cells'); } } var enableFrmlaBtnId = [id + '_insert_function']; var enableInsertBtnId = [id + '_hyperlink', id + '_', id + '_chart']; var imageBtnId = [id + '_image']; var findBtnId = [id + '_find']; var dataValidationBtnId = [id + '_datavalidation']; var chartBtnId = [id + '_chart']; var sheetElement = document.getElementById(this.parent.element.id + '_sheet_panel'); if (sheetElement) { if (sheet.isProtected) { if (sheet.protectSettings.selectCells) { sheetElement.classList.remove('e-protected'); } else if (sheet.protectSettings.selectUnLockedCells && !isLockedCells(this.parent, getRangeIndexes(sheet.selectedRange))) { sheetElement.classList.remove('e-protected'); } else { sheetElement.classList.add('e-protected'); } } else { sheetElement.classList.add('e-protected'); } if (!sheet.isProtected) { sheetElement.classList.remove('e-protected'); } } this.parent.dataBind(); this.parent.notify(protectCellFormat, { disableHomeBtnId: disableHomeBtnId, enableHomeBtnId: enableHomeBtnId, enableFrmlaBtnId: enableFrmlaBtnId, enableInsertBtnId: enableInsertBtnId, findBtnId: findBtnId, dataValidationBtnId: dataValidationBtnId, imageBtnId: imageBtnId, chartBtnId: chartBtnId }); this.parent.notify(enableFormulaInput, null); if (sheet.isProtected) { this.parent.notify(updateToggleItem, { props: 'Protect' }); } if (args && args.triggerEvent) { this.parent.notify(completeAction, { action: 'protectSheet', eventArgs: { sheetIndex: sheetIndex, isProtected: sheet.isProtected, password: sheet.password, protectSettings: sheet.protectSettings.properties || sheet.protectSettings } }); } }; ProtectSheet.prototype.editProtectedAlert = function () { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var protectedAlertDlg = this.parent.serviceLocator.getService('dialog'); protectedAlertDlg.show({ content: l10n.getConstant('EditAlert'), isModal: true, closeOnEscape: true, showCloseIcon: true, width: '400px', cssClass: 'e-editAlert-dlg', enableRtl: this.parent.enableRtl, beforeOpen: function (args) { var dlgArgs = { dialogName: 'EditAlertDialog', content: l10n.getConstant('EditAlert'), element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { args.cancel = true; } else { protectedAlertDlg.dialogInstance.content = dlgArgs.content; focus(_this.parent.element); } }, close: function () { return focus(_this.parent.element); } }); }; ProtectSheet.prototype.protectWorkbook = function () { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var dialogInst = this.parent.serviceLocator.getService(dialog); dialogInst.show({ width: 323, isModal: true, showCloseIcon: true, cssClass: 'e-protectworkbook-dlg', enableRtl: this.parent.enableRtl, header: l10n.getConstant('ProtectWorkbook'), beforeOpen: function (args) { var dlgArgs = { dialogName: 'ProtectWorkbook', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { args.cancel = true; } else { dialogInst.dialogInstance.content = _this.passwordProtectContent(); dialogInst.dialogInstance.dataBind(); focus(_this.parent.element); } }, buttons: [{ buttonModel: { content: l10n.getConstant('Ok'), isPrimary: true }, click: function () { _this.alertMessage(); _this.dlgClickHandler(dialogInst); } }] }); }; ProtectSheet.prototype.passwordProtectContent = function () { var l10n = this.parent.serviceLocator.getService(locale); var dialogElem = this.parent.createElement('div', { className: 'e-password-dialog' }); var pwdCont = this.parent.createElement('div', { className: 'e-password-content' }); var cnfrmPwdCont = this.parent.createElement('div', { className: 'e-password-content' }); var textH = this.parent.createElement('div', { className: 'e-header' }); textH.innerText = l10n.getConstant('Password'); var urlH = this.parent.createElement('div', { className: 'e-header' }); urlH.innerText = l10n.getConstant('ConfirmPassword'); var pwdInput = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'password' } }); var cnfrmPwdInput = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'password' } }); pwdInput.setAttribute('placeholder', l10n.getConstant('EnterThePassword')); cnfrmPwdInput.setAttribute('placeholder', l10n.getConstant('EnterTheConfirmPassword')); pwdCont.appendChild(pwdInput); pwdCont.insertBefore(textH, pwdInput); cnfrmPwdCont.appendChild(cnfrmPwdInput); cnfrmPwdCont.insertBefore(urlH, cnfrmPwdInput); dialogElem.appendChild(cnfrmPwdCont); dialogElem.insertBefore(pwdCont, cnfrmPwdCont); return dialogElem; }; ProtectSheet.prototype.KeyUpHandler = function (e) { var trgt = e.target; if (trgt.classList.contains('e-text') && closest(trgt, '.e-password-content')) { if (closest(trgt, '.e-password-dialog') && closest(trgt, '.e-password-dialog'). getElementsByClassName('e-password-content')[1] === trgt.parentElement) { var dlgEle = closest(trgt, '.e-protectworkbook-dlg'); var ftrEle = dlgEle.getElementsByClassName('e-footer-content')[0]; var okBtn = ftrEle.firstChild; if (trgt.value !== '') { okBtn.removeAttribute('disabled'); } else { okBtn.setAttribute('disabled', 'true'); } } } if (trgt.classList.contains('e-text') && closest(trgt, '.e-unprotectpwd-content')) { if (closest(trgt, '.e-unprotectpwd-dialog') && closest(trgt, '.e-unprotectpwd-dialog'). getElementsByClassName('e-unprotectpwd-content')[0] === trgt.parentElement) { var dlgElement = closest(trgt, '.e-unprotectworkbook-dlg'); var ftrElement = dlgElement.getElementsByClassName('e-footer-content')[0]; var okButton = ftrElement.firstChild; if (trgt.value !== '') { okButton.removeAttribute('disabled'); } else { okButton.setAttribute('disabled', 'true'); } } } if (trgt.classList.contains('e-text') && closest(trgt, '.e-reenterpwd-content')) { if (closest(trgt, '.e-reenterpwd-dialog') && closest(trgt, '.e-reenterpwd-dialog'). getElementsByClassName('e-reenterpwd-content')[0] === trgt.parentElement) { var dlgCnt = closest(trgt, '.e-reenterpwd-dlg'); var ftrCnt = dlgCnt.getElementsByClassName('e-footer-content')[0]; var okBtnElem = ftrCnt.firstChild; if (trgt.value !== '') { okBtnElem.removeAttribute('disabled'); } else { okBtnElem.setAttribute('disabled', 'true'); } } } if (trgt.classList.contains('e-text') && closest(trgt, '.e-unprotectsheetpwd-content')) { if (closest(trgt, '.e-unprotectsheetpwd-dialog') && closest(trgt, '.e-unprotectsheetpwd-dialog'). getElementsByClassName('e-unprotectsheetpwd-content')[0] === trgt.parentElement) { var dlg = closest(trgt, '.e-unprotectworksheet-dlg'); var ftr = dlg.getElementsByClassName('e-footer-content')[0]; var btn = ftr.firstChild; if (trgt.value !== '') { btn.removeAttribute('disabled'); } else { btn.setAttribute('disabled', 'true'); } } } if (trgt.classList.contains('e-text') && closest(trgt, '.e-importprotectpwd-content')) { if (closest(trgt, '.e-importprotectpwd-dialog') && closest(trgt, '.e-importprotectpwd-dialog'). getElementsByClassName('e-importprotectpwd-content')[0] === trgt.parentElement) { var dlgElem = closest(trgt, '.e-importprotectworkbook-dlg'); var ftrElem = dlgElem.getElementsByClassName('e-footer-content')[0]; var btn = ftrElem.firstChild; if (trgt.value !== '') { btn.removeAttribute('disabled'); } else { btn.setAttribute('disabled', 'true'); } } } }; ProtectSheet.prototype.alertMessage = function () { var spanElem = this.parent.element.querySelector('.e-pwd-alert-span'); var unpotectSpanElem = this.parent.element.querySelector('.e-unprotectpwd-alert-span'); var importpotectSpanElem = this.parent.element.querySelector('.e-importprotectpwd-alert-span'); var protectSheetSpanElem = this.parent.element.querySelector('.e-reenterpwd-alert-span'); var unProtectSheetSpanElem = this.parent.element.querySelector('.e-unprotectsheetpwd-alert-span'); if (spanElem) { spanElem.remove(); } if (unpotectSpanElem) { unpotectSpanElem.remove(); } if (importpotectSpanElem) { importpotectSpanElem.remove(); } if (protectSheetSpanElem) { protectSheetSpanElem.remove(); } if (unProtectSheetSpanElem) { unProtectSheetSpanElem.remove(); } }; ProtectSheet.prototype.dlgClickHandler = function (dialogInst) { var l10n = this.parent.serviceLocator.getService(locale); var pwdVal = this.parent.element.querySelector('.e-password-dialog'). getElementsByClassName('e-password-content')[0].querySelector('.e-input'); var cnfrmPwd = this.parent.element.querySelector('.e-password-dialog'). getElementsByClassName('e-password-content')[1].querySelector('.e-input'); var pwdSpan = this.parent.createElement('span', { className: 'e-pwd-alert-span' }); if (pwdVal.value === cnfrmPwd.value) { dialogInst.hide(); this.parent.notify(updateToggleItem, { props: 'Protectworkbook' }); this.protectWorkbookHandler({ password: pwdVal.value }); this.parent.notify(completeAction, { action: 'protectWorkbook', eventArgs: { isProtected: true, password: pwdVal.value } }); } else if (pwdVal.value === '') { pwdSpan.textContent = l10n.getConstant('PasswordAlertMsg'); } else if (cnfrmPwd.value === '') { pwdSpan.textContent = l10n.getConstant('ConfirmPasswordAlertMsg'); } else if (pwdVal.value !== cnfrmPwd.value) { pwdSpan.textContent = l10n.getConstant('PasswordAlert'); } if (dialogInst.dialogInstance) { (this.parent.element.querySelector('.e-protectworkbook-dlg').querySelector('.e-dlg-content')).appendChild(pwdSpan); } }; ProtectSheet.prototype.protectWorkbookHandler = function (args) { this.parent.password = args.password; this.parent.isProtected = true; if (this.parent.showSheetTabs) { this.parent.element.querySelector('.e-add-sheet-tab').setAttribute('disabled', 'true'); this.parent.element.querySelector('.e-add-sheet-tab').classList.add('e-disabled'); } this.parent.notify(updateToggleItem, { props: 'Protectworkbook' }); }; ProtectSheet.prototype.unProtectWorkbook = function () { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var dialogInst = this.parent.serviceLocator.getService(dialog); dialogInst.show({ width: 323, isModal: true, showCloseIcon: true, cssClass: 'e-unprotectworkbook-dlg', enableRtl: this.parent.enableRtl, header: l10n.getConstant('UnprotectWorkbook'), beforeOpen: function (args) { var dlgArgs = { dialogName: 'UnprotectWorkbook', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { args.cancel = true; } else { dialogInst.dialogInstance.content = _this.unProtectPasswordContent(); dialogInst.dialogInstance.dataBind(); focus(_this.parent.element); } }, buttons: [{ buttonModel: { content: l10n.getConstant('Ok'), isPrimary: true, disabled: true }, click: function () { _this.alertMessage(); _this.unprotectdlgOkClick(dialogInst); } }] }); }; ProtectSheet.prototype.unProtectsheet = function (isImportedSheet) { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var dialogInst = this.parent.serviceLocator.getService(dialog); dialogInst.show({ width: 323, isModal: true, showCloseIcon: true, cssClass: 'e-unprotectworksheet-dlg', enableRtl: this.parent.enableRtl, header: l10n.getConstant('UnprotectWorksheet'), beforeOpen: function (args) { var dlgArgs = { dialogName: 'UnProtectSheet', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { args.cancel = true; } else { dialogInst.dialogInstance.content = _this.unProtectSheetPasswordContent(); dialogInst.dialogInstance.dataBind(); focus(_this.parent.element); } }, buttons: [{ buttonModel: { content: l10n.getConstant('Ok'), isPrimary: true, disabled: this.parent.allowOpen && this.parent.openModule.isImportedFile && (this.parent.openModule.unProtectSheetIdx.indexOf(this.parent.activeSheetIndex) === -1) ? false : true }, click: function () { _this.alertMessage(); _this.unprotectSheetdlgOkClick(dialogInst, isImportedSheet); } }] }); }; ProtectSheet.prototype.reEnterSheetPassword = function (pwd) { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var dialogInst = this.parent.serviceLocator.getService(dialog); var protectSheetDlgInst = dialogInst.dialogInstance; var dlgCancel; var pwdApplied; dialogInst.show({ width: 323, isModal: true, showCloseIcon: true, cssClass: 'e-reenterpwd-dlg', enableRtl: this.parent.enableRtl, header: l10n.getConstant('ConfirmPassword'), beforeOpen: function (args) { var dlgArgs = { dialogName: 'Re-enterPassword', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { dlgCancel = args.cancel = true; } else { var l10n_1 = _this.parent.serviceLocator.getService(locale); var dialogCont = _this.parent.createElement('div', { className: 'e-reenterpwd-dialog' }); var pwdCont = _this.parent.createElement('div', { className: 'e-reenterpwd-content' }); var textH = _this.parent.createElement('div', { className: 'e-header' }); textH.innerText = l10n_1.getConstant('ReEnterPassword'); var pwdInput = _this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'password' } }); pwdCont.appendChild(pwdInput); pwdCont.insertBefore(textH, pwdInput); dialogCont.appendChild(pwdCont); dialogInst.dialogInstance.content = dialogCont; dialogInst.dialogInstance.dataBind(); focus(_this.parent.element.querySelector('.e-protect-dlg.e-dialog .e-footer-content .e-btn')); } }, close: function () { dialogInst.dialogInstance = protectSheetDlgInst; if (dlgCancel) { _this.applySheetPwd(pwd); dialogInst.hide(true); } else if (pwdApplied) { dialogInst.hide(true); } }, buttons: [{ buttonModel: { content: l10n.getConstant('Ok'), isPrimary: true, disabled: true }, click: function () { _this.alertMessage(); var l10n = _this.parent.serviceLocator.getService(locale); var cnfrmPwdInput = _this.parent.element.querySelector('.e-reenterpwd-dialog .e-reenterpwd-content .e-input'); var cnfrmPwd = cnfrmPwdInput.value; if (pwd === cnfrmPwd) { _this.applySheetPwd(pwd); pwdApplied = true; dialogInst.hide(); } else { var pwdSpan = _this.parent.createElement('span', { className: 'e-reenterpwd-alert-span' }); if (!cnfrmPwd) { pwdSpan.textContent = l10n.getConstant('ConfirmPasswordAlertMsg'); } else { pwdSpan.textContent = l10n.getConstant('PasswordAlert'); } (_this.parent.element.querySelector('.e-reenterpwd-dlg').querySelector('.e-reenterpwd-dialog')).appendChild(pwdSpan); } } }] }); }; ProtectSheet.prototype.unProtectPasswordContent = function () { var l10n = this.parent.serviceLocator.getService(locale); var dlgElem = this.parent.createElement('div', { className: 'e-unprotectpwd-dialog' }); var pwdCont = this.parent.createElement('div', { className: 'e-unprotectpwd-content' }); var textHeader = this.parent.createElement('div', { className: 'e-header' }); textHeader.innerText = l10n.getConstant('EnterThePassword'); var pwdInputElem = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'password' } }); pwdCont.appendChild(pwdInputElem); pwdCont.insertBefore(textHeader, pwdInputElem); dlgElem.appendChild(pwdCont); return dlgElem; }; ProtectSheet.prototype.unProtectSheetPasswordContent = function () { var l10n = this.parent.serviceLocator.getService(locale); var dialogCnt = this.parent.createElement('div', { className: 'e-unprotectsheetpwd-dialog' }); var pwdCnt = this.parent.createElement('div', { className: 'e-unprotectsheetpwd-content' }); var textH = this.parent.createElement('div', { className: 'e-header' }); textH.innerText = l10n.getConstant('EnterThePassword'); var pwdInput = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'password' } }); pwdCnt.appendChild(pwdInput); pwdCnt.insertBefore(textH, pwdInput); dialogCnt.appendChild(pwdCnt); return dialogCnt; }; ProtectSheet.prototype.unprotectdlgOkClick = function (dialogInst) { var l10n = this.parent.serviceLocator.getService(locale); var pwd = this.parent.element.querySelector('.e-unprotectpwd-dialog'). getElementsByClassName('e-unprotectpwd-content')[0].querySelector('.e-input'); if (this.parent.password === pwd.value) { dialogInst.hide(); this.removeWorkbookProtection(); this.parent.notify(completeAction, { action: 'protectWorkbook', eventArgs: { isProtected: false } }); } else { var pwdSpan = this.parent.createElement('span', { className: 'e-unprotectpwd-alert-span' }); pwdSpan.innerText = l10n.getConstant('UnprotectPasswordAlert'); (this.parent.element.querySelector('.e-unprotectworkbook-dlg').querySelector('.e-dlg-content')).appendChild(pwdSpan); } }; ProtectSheet.prototype.removeWorkbookProtection = function () { this.parent.password = ''; this.parent.isProtected = false; if (this.parent.showSheetTabs) { this.parent.element.querySelector('.e-add-sheet-tab').removeAttribute('disabled'); this.parent.element.querySelector('.e-add-sheet-tab').classList.remove('e-disabled'); } var elem = document.getElementById(this.parent.element.id + '_protectworkbook'); if (elem) { elem.classList.remove('e-active'); } this.parent.notify(updateToggleItem, { props: 'Protectworkbook' }); }; ProtectSheet.prototype.unprotectSheetdlgOkClick = function (dialogInst, isImportedSheet) { var l10n = this.parent.serviceLocator.getService(locale); var sheet = this.parent.getActiveSheet(); var pwd = this.parent.element.querySelector('.e-unprotectsheetpwd-dialog'). getElementsByClassName('e-unprotectsheetpwd-content')[0].querySelector('.e-input'); if (isImportedSheet && sheet.password.length === 0) { var impArgs = { sheetPassword: pwd.value, sheetIndex: this.parent.activeSheetIndex }; this.parent.open(impArgs); } else { if (sheet.password === pwd.value) { dialogInst.hide(); this.unProtectSheetPassword(); } else { var pwdSpan = this.parent.createElement('span', { className: 'e-unprotectsheetpwd-alert-span' }); pwdSpan.innerText = l10n.getConstant('UnprotectPasswordAlert'); (this.parent.element.querySelector('.e-unprotectworksheet-dlg').querySelector('.e-dlg-content')).appendChild(pwdSpan); } } }; ProtectSheet.prototype.unProtectSheetPassword = function () { var sheet = this.parent.getActiveSheet(); var sheetIdx = this.parent.activeSheetIndex; this.parent.setSheetPropertyOnMute(sheet, 'isProtected', !sheet.isProtected); this.parent.setSheetPropertyOnMute(sheet, 'password', ''); var isActive = sheet.isProtected ? false : true; this.parent.notify(applyProtect, { isActive: isActive, id: this.parent.element.id + '_protect', sheetIndex: sheetIdx, triggerEvent: true }); if (this.parent.allowOpen && this.parent.openModule.isImportedFile && this.parent.openModule.unProtectSheetIdx.indexOf(sheetIdx) === -1) { this.parent.openModule.unProtectSheetIdx.push(sheetIdx); } }; ProtectSheet.prototype.importProtectWorkbook = function (fileArgs) { var _this = this; var l10n = this.parent.serviceLocator.getService(locale); var dialogInst = this.parent.serviceLocator.getService(dialog); dialogInst.show({ width: 323, isModal: true, showCloseIcon: true, cssClass: 'e-importprotectworkbook-dlg', enableRtl: this.parent.enableRtl, header: l10n.getConstant('UnprotectWorkbook'), beforeOpen: function (args) { var dlgArgs = { dialogName: 'ImportProtectWorkbook', element: args.element, target: args.target, cancel: args.cancel }; _this.parent.trigger('dialogBeforeOpen', dlgArgs); if (dlgArgs.cancel) { args.cancel = true; } else { dialogInst.dialogInstance.content = _this.importProtectPasswordContent(fileArgs); dialogInst.dialogInstance.dataBind(); focus(_this.parent.element); } }, buttons: [{ buttonModel: { content: l10n.getConstant('Ok'), isPrimary: true, disabled: true }, click: function () { _this.alertMessage(); _this.importOkClick(fileArgs); } }] }); }; ProtectSheet.prototype.importProtectPasswordContent = function (args) { var l10n = this.parent.serviceLocator.getService(locale); var dialogElem = this.parent.createElement('div', { className: 'e-importprotectpwd-dialog' }); var pwdCont = this.parent.createElement('div', { className: 'e-importprotectpwd-content' }); var textSpan = this.parent.createElement('span', { className: 'e-header' }); textSpan.innerText = '"' + args.file.name + '"' + ' ' + l10n.getConstant('IsProtected'); var pwdInput = this.parent.createElement('input', { className: 'e-input e-text', attrs: { 'type': 'password' } }); pwdInput.setAttribute('placeholder', l10n.getConstant('EnterThePassword')); pwdCont.appendChild(textSpan); pwdCont.appendChild(pwdInput); dialogElem.appendChild(pwdCont); return dialogElem; }; ProtectSheet.prototype.importOkClick = function (args) { var pwd = this.parent.element.querySelector('.e-importprotectpwd-dialog'). getElementsByClassName('e-importprotectpwd-content')[0].querySelector('.e-input'); this.parent.password = pwd.value; var impArgs = { file: args.file, password: pwd.value }; this.parent.open(impArgs); }; ProtectSheet.prototype.toggleProtect = function () { var isActive; var parentId = this.parent.element.id; var sheet = this.parent.getActiveSheet(); if (sheet.isProtected && this.parent.allowOpen && sheet.isImportProtected && this.parent.openModule.isImportedFile && this.parent.openModule.unProtectSheetIdx.indexOf(this.parent.activeSheetIndex) === -1) { this.unProtectsheet(true); } else if (sheet.password && sheet.password.length > 0) { this.unProtectsheet(); } else { this.parent.setSheetPropertyOnMute(sheet, 'isProtected', !sheet.isProtected); isActive = sheet.isProtected ? false : true; this.parent.notify(applyProtect, { isActive: isActive, id: parentId + '_protect', sheetIndex: this.parent.activeSheetIndex, triggerEvent: true }); } }; /** * Get the module name. * * @returns {string} - Get the module name. * * @private */ ProtectSheet.prototype.getModuleName = function () { return 'protectSheet'; }; return ProtectSheet; }()); export { ProtectSheet };