var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var Unibase; (function (Unibase) { let Apps; (function (Apps) { let Collaboration; (function (Collaboration) { let Components; (function (Components) { let Sheets; (function (Sheets) { class Base { constructor() { this.isViewOnly = false; this.editedTime = new Date(); this.lastEditedTime = 0; this.f2Edit = false; this.showFormula = false; this.fontFamilyRecent = []; this.isFormula = false; this.isResizing = false; this.rowwidthcount = 0; this.isNewSheet = false; this.reqCount = 0; this.isInitial = true; this.clicks = 0; this.autofillDrag = false; this.checkedIndexes = []; this.selectedIndexes = [null, null, null, null]; this.isCtrlA = false; this.isCreatingNewFile = false; this.isDriveImport = false; this.openJSON = false; } init(response, res, customresponce, callback) { this.result = response.result; this.documentGroup = this.result.DocumentGroup; this.customresult = customresponce.result; this.filedata = res.result; this.FileName = response.result.FileTitle; this.FileId = response.result.FileId; this.permissionLevel = response.result.UserPermission; this.lastEditedTime = response.result.LastUpdateTime; this.timePeriod = response.result.TimePeriod; this.username = response.result.LastUpdateByName; this.folderId = response.result.folderId; this.fileurl = response.result.FileUrl; this.Priority = response.result.Priority; this.newUpload = response.result.NewUpload; this.NewDocument = response.result.NewDocument; this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); this.unibaseusername = this.identity.name; this.hederText = {}; this.mouseDownHandlers = []; this.keyDownHandlers = []; this.render(); if (callback != null) { callback(); } } clickHandler(e) { if (e.target.getAttribute('id') == 'importdata-cancel-bt') { } if (e.target.getAttribute('id') == 'importdata-select-btn') { } } removeListeners() { } unwireBootStrapKeyEvent() { let popup = document.body.getElementsByClassName('_bizgaze_popup_container'); let events = $._data($(popup)[0], "events"); if (events && events.keydown) { $(popup).off('keydown.dismiss.bs.modal', events.keydown[0].handler); } if (events && events.click) { events.click.filter((obj) => obj).forEach(click => { $(popup).off('click.dismiss.bs.modal', click.handler); }); } } clearFindReplace() { if (!this.ssObj.element.querySelector('.e-find-dlg') && !this.ssObj.element.querySelector('.e-findtool-dlg')) { this.ssObj.ribbonModule.findValue = ''; this.ssObj.findAndReplaceModule.shortValue = ''; } } fullScreenHandler() { setTimeout(() => { this.setHeightOnFullScreenChange(); }, 0); } processSheetRender() { this.updateProps(); this.renderMenuBar(); this.refreshHeight(); this.ssRender(); this.ribbon.init(this.result); if (this.permissionLevel && this.permissionLevel == Unibase.Apps.Collaboration.Enums.Share.Viewer) { setTimeout(() => { this.setViewonly(); this.ssObj.dataBind(); }, 0); } this.unwireBootStrapKeyEvent(); this.priorityRender(); this.eventListners(); this.colourpicker(); } connectHub(fileId, documentgroup) { Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(["apps/collaboration/components/docconnector.js", "apps/collaboration/components/unidochub.js"], function () { Unibase.Apps.Collaboration.Components.DocConnector.Instance().init(fileId, documentgroup); }); } sheetColorRender() { if (!this.NewDocument) { Unibase.Apps.Collaboration.DocumentManager.Instance().getCustomJsonData(this.FileId).then((res) => { var result = res.result.tabcolors; this.sheets = this.ssObj.element.querySelector('.e-sheet-tab').querySelectorAll('.e-toolbar-item'); this.sheetsName = this.ssObj.element.querySelector('.e-sheet-tab .e-active').querySelector('.e-tab-text'); var R; var G; var B; for (var i = 0; i < this.sheets.length; i++) { if (result.sheets[i].TabColor !== null && result.sheets[i].TabColor !== undefined && result.sheets[i].TabColor.Name !== "0" && result.sheets[i].TabColor.Name !== null && result.sheets[i].TabColor.Name !== undefined) { if (result.sheets[i].TabColor.R == null || result.sheets[i].TabColor.R == "") { R = 0; } else { R = result.sheets[i].TabColor.R; } if (result.sheets[i].TabColor.G == null || result.sheets[i].TabColor.G == "") { G = 0; } else { G = result.sheets[i].TabColor.G; } if (result.sheets[i].TabColor.B == null || result.sheets[i].TabColor.B == "") { B = 0; } else { B = result.sheets[i].TabColor.B; } document.getElementById(this.sheets[i].id).style.borderBottom = "4px solid rgb(" + R + "," + G + "," + B + ")"; document.getElementById(this.sheets[i].id).firstElementChild.style.height = "100%"; } } document.getElementsByClassName("e-indicator e-ignore")[1].style.display = "none"; }); } document.getElementsByClassName("e-indicator e-ignore")[1].style.display = "none"; } sheetColorChange(colorcode) { var sheetIndex = this.ssObj.activeSheetIndex; if (sheetIndex != null) { var rgbcolor = []; var name; if (colorcode != "0") { rgbcolor = this.hexToRgb(colorcode); name = "#" + colorcode; } else { rgbcolor.push(0); rgbcolor.push(0); rgbcolor.push(0); name = colorcode; } var data = { FileId: this.FileId, TabColor: rgbcolor, SheetIndex: sheetIndex, SheetHexCode: name, }; Unibase.Apps.Collaboration.DocumentManager.Instance().saveSheetColor(data).then((responce) => { if (colorcode != 0) { document.getElementById(this.sheets[sheetIndex].id).style.borderBottom = "4px solid rgb(" + rgbcolor[0] + "," + rgbcolor[1] + "," + rgbcolor[2] + ")"; document.getElementById(this.sheets[sheetIndex].id).firstElementChild.style.height = "100%"; } else { document.getElementById(this.sheets[sheetIndex].id).style.borderBottom = "none"; } document.getElementsByClassName("e-indicator e-ignore")[1].style.display = "none"; this.customresult = responce.result.tabcolor; this.editDetails(); let args = { origin: 'biz', action: 'colorchange', sheetIndex: this.getSheetIndex() }; Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().bizSignalr(args); }); } } hexToRgb(hex) { var rgb = hex.match(/.{1,2}/g); var arrayRgb = [ parseInt(rgb[0], 16), parseInt(rgb[1], 16), parseInt(rgb[2], 16), ]; return arrayRgb; } priorityRender() { if (this.Priority) { $(".biz_ss_star_icon_" + this.FileId).removeClass("fa-star-o"); $(".biz_ss_star_icon_" + this.FileId).addClass("fa-star"); $(".biz_ss_star_icon_" + this.FileId).removeClass("text-light"); $(".biz_ss_star_icon_" + this.FileId).css("color", "orange"); } } render() { this.renderPopup(this.processSheetRender.bind(this)); } parseMatchValue(value) { if (value.trim().toLowerCase() == "true" || value.trim() == "1") { return true; } return false; } ssRender() { this.ssObj = new ej.spreadsheet.Spreadsheet(this.ssSettings); this.formatpainter.init(this); this.spellchecker.init(this); if (this.permissionLevel && this.permissionLevel == Unibase.Apps.Collaboration.Enums.Share.Viewer) { this.initialLoadFn = this.initialLoad.bind(this); this.ssObj.on("initialLoad", this.initialLoadFn); } this.ssObj.on("initialLoad", this.addFormatsToToolbar.bind(this)); this.ssObj.on("deleteImage", this.deleteImageHandler, this); this.ssObj.on('performUndoRedo', this.performBizUndoRedo.bind(this)); setTimeout(() => { this.fontFamilyObj = this.ssObj.element.querySelector('#' + this.ssObj.element.id + '_font_name').ej2_instances[0]; this.fontFamilyObj.addEventListener('beforeOpen', this.fontFamilyBfOpen.bind(this)); this.fontFamilyObj.beforeItemRender = this.fontFamilyBfRender.bind(this); this.fontFamilyObj.addEventListener('select', this.fontFamilySelect.bind(this)); window.hlookupHandler = (value, range, rowIdx, match) => { var val = this.ssObj.element.querySelector('.e-spreadsheet-edit').innerText; range = val.split('(')[1].split(')')[0].split(',')[1]; }; window.vlookupHandler = (value, range, colIdx, match) => { let sheet = this.ssObj.biz.getActiveSheet(); let val = this.ssObj.element.querySelector('.e-spreadsheet-edit').innerText; range = val.split('(')[1].split(')')[0].split(',')[1]; colIdx = parseInt(colIdx); value = value.replace(/['"]+/g, ''); match = this.parseMatchValue(match); let ranges = ej.spreadsheet.getIndexesFromAddress(range); let i, j; let isMatched; if (value.includes('#NAME')) { return value; } if (ranges[3] - ranges[1] + 1 < colIdx || colIdx < 1) { return '#REF!'; } for (i = ranges[0]; i <= ranges[2]; i++) { if (isMatched) { break; } for (j = ranges[1]; j <= ranges[3]; j++) { let cellObj = ej.spreadsheet.getCell(i, j, sheet); if (cellObj && cellObj.value && match ? cellObj.value.toString() === value : cellObj.value.toString().toLowerCase() === value.toLowerCase()) { isMatched = true; break; } } } let cell = ej.spreadsheet.getCell(i - 1, ranges[1] + colIdx - 1, sheet); if (isMatched && cell) { return cell.value || ''; } else { return '#N/A'; } }; window.hlookupHandler = (value, range, rowIdx, match) => { let sheet = this.ssObj.biz.getActiveSheet(); let val = this.ssObj.element.querySelector('.e-spreadsheet-edit').innerText; range = val.split('(')[1].split(')')[0].split(',')[1]; rowIdx = parseInt(rowIdx); value = value.replace(/['"]+/g, ''); match = this.parseMatchValue(match); let ranges = ej.spreadsheet.getIndexesFromAddress(range); let i, j; let isMatched; if (value.includes('#NAME')) { return value; } if (ranges[2] - ranges[0] + 1 < rowIdx || rowIdx < 1) { return '#REF!'; } for (i = ranges[0]; i <= ranges[2]; i++) { if (isMatched) { break; } for (j = ranges[1]; j <= ranges[3]; j++) { let cellObj = ej.spreadsheet.getCell(i, j, sheet); if (cellObj && cellObj.value && match ? cellObj.value.toString() === value : cellObj.value.toString().toLowerCase() === value.toLowerCase()) { isMatched = true; break; } } } let cell = ej.spreadsheet.getCell(ranges[0] + rowIdx - 1, j, sheet); if (isMatched && cell) { return cell.value || ''; } else { return '#N/A'; } }; this.ssObj.addCustomFunction("hlookupHandler", "hlookup"); this.ssObj.addCustomFunction("vlookupHandler", "vlookup"); }, 1000); this.wireEvents(); this.ssObj.appendTo('.DocumentViewer'); this.ssObj.biz = {}; this.addUtilFn(); Unibase.Apps.Collaboration.Components.Documents.Instance()._openedfile = this.ssObj; this.initSetInterval(); document.getElementsByClassName('e-spinner-pane')[0].style.display = 'none'; } dialogOpenHandler(args) { if (args.dialogName == "ValidationDialog") { args.element.ej2_instances[0].addEventListener("open", (arg) => { document.querySelector(".e-validation-dlg .e-allow input").ej2_instances[0].addEventListener("change", this.validationInputHandler.bind(this)); }); args.element.ej2_instances[0].addEventListener("beforeClose", (arg) => { document.querySelector(".e-validation-dlg .e-allow input").ej2_instances[0].removeEventListener("change", this.validationInputHandler.bind(this)); }); } } validationInputHandler(changedargs) { let dataNote = "Note: date format should be MM/DD/YYYY"; let timeNote = "Note: time format should be HH:MM:SS AM/PM "; let listNote = "Note: List will be seperated by comma(,)"; let validationDailog = document.getElementsByClassName("e-validation-dlg")[0]; let ele = document.createElement("div"); let container = document.createElement("div"); container.classList.add("biz-validation-note-wrapper"); ele.classList.add("biz-validation-note"); container.append(ele); let wrapperElement = document.getElementsByClassName("biz-validation-note-wrapper"); if (changedargs.value == "Date") { if (wrapperElement.length == 0) { document.getElementsByClassName("e-cellrange")[0].before(container); ele.textContent = dataNote; validationDailog.style.marginTop = "0"; container.style.marginBottom = "10px"; } else document.getElementsByClassName("biz-validation-note")[0].textContent = dataNote; } else if (changedargs.value == "Time") { if (wrapperElement.length == 0) { document.getElementsByClassName("e-cellrange")[0].before(container); ele.textContent = timeNote; validationDailog.style.marginTop = "0"; container.style.marginBottom = "10px"; } else { document.getElementsByClassName("biz-validation-note")[0].textContent = timeNote; } } else if (changedargs.value == "List") { if (wrapperElement.length == 0) { document.getElementsByClassName("e-cellrange")[0].before(container); ele.textContent = listNote; validationDailog.style.marginTop = "0"; container.style.marginBottom = "10px"; } else { document.getElementsByClassName("biz-validation-note")[0].textContent = listNote; } } else { (wrapperElement.length !== 0) && wrapperElement[0].remove(); validationDailog.style.marginTop = ""; container.style.marginBottom = ""; } } deleteImageHandler(args) { let sheet = this.ssObj.getActiveSheet(); let sheetName = this.setSheetNameForInCell(sheet.name); if (!args.id.includes(sheetName) && document.getElementById(args.id)) { let data = document.getElementById(args.id).style.backgroundImage; args["src"] = data.substring(5, data.length - 2); let img = sheet.pictures.find(x => x.imageId == args.id); setTimeout(() => { if (img) { let index = sheet.pictures.indexOf(img); args.id += "_" + sheetName + "_" + img.row + "_" + img.col + "_import"; (index != -1) && (sheet.pictures.splice(index, 1)); } }, 150); } setTimeout(() => { args["action"] = args.name; (args.id.includes(sheetName)) && (this.download.ssAutoSave(args, this, true)); }, 200); } initSetInterval() { if (this.timePeriod === "Minutes" || this.timePeriod === "Minute") { this.intr = setInterval(() => { this.lastEditedTime = this.lastEditedTime + 1; this.username = this.username; this.timePeriod = this.timePeriod; if (this.lastEditedTime != 1) { if (this.lastEditedTime >= 59 && this.timePeriod === "Minutes") { Unibase.Apps.Collaboration.DocumentManager.Instance().lastEdit(this.FileId).then((response) => { this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); this.unibaseusername = this.identity.name; this.lastEditedTime = response.result.Lastedittime; this.username = response.result.LastUpdatedByName; this.timePeriod = response.result.TimePeriod; if (this.unibaseusername === this.username) { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago"; } else { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username; } }); } else { this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); this.unibaseusername = this.identity.name; if (this.unibaseusername === this.username) { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago"; } else { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username; } } } }, 60000); } else if (this.timePeriod === "Hour" || this.timePeriod === "Hours") { this.intrhour = setInterval(() => { this.lastEditedTime = this.lastEditedTime + 1; this.username = this.username; this.timePeriod = this.timePeriod; if (this.lastEditedTime >= 23 && this.timePeriod === "Hours") { Unibase.Apps.Collaboration.DocumentManager.Instance().lastEdit(this.FileId).then((response) => { this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); this.unibaseusername = this.identity.name; this.lastEditedTime = response.result.Lastedittime; this.username = response.result.LastUpdatedByName; this.timePeriod = response.result.TimePeriod; if (this.unibaseusername === this.username) { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago"; } else { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username; } }); } else { this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); this.unibaseusername = this.identity.name; if (this.unibaseusername === this.username) { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago"; } else { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago by " + this.username; } } }, 3600000); } } activeUsers(FileUsers) { var connecteduser = []; for (var v in FileUsers) { let identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); let unibaseId = identity.unibaseId; if (unibaseId != FileUsers[v].unibaseId) { connecteduser.push(FileUsers[v].firstName.trim()); } } this.connecteduserfirstName = connecteduser; console.log(this.connecteduserfirstName); this.showActiveUsers(FileUsers); return this.connecteduserfirstName; } showActiveUsers(FileUsers) { var onlineusername = document.getElementsByClassName("biz-ss-onlineusersintials")[0]; let identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); let unibaseId = identity.unibaseId; var connectedUsersFirstChar = []; for (var user in this.connecteduserfirstName) { connectedUsersFirstChar.push(this.connecteduserfirstName[user].charAt(0)); } var element = document.getElementById('biz-ss-connected_users_container'); if (typeof (element) != 'undefined' && element != null) { element.remove(); } let html = ""; let html1 = `
`; $(".biz-ss-onlineusersintials").append(html1); let usersHtml = '', randomColor; let colorPalette = ['#6640b2', '#3a55b1', '#0092ee', '#00acf0', '#1ebccd', '#009b84', '#22af47', '#88c241', '#d0d962', '#fde335', '#ffbf36', '#ff9528', '#ff6028', '#7a5449', '#c1993f', '#9e9e9e', '#5e7d8a', '#324148', '#f5f5f6', '#f95851', '#ef3975', '#b642b5', '#7a59bc', '#536bbb', '#21a0f0', '#21b7f2']; for (let i = 0; i < this.connecteduserfirstName.length; i++) { randomColor = colorPalette[Math.floor(Math.random() * colorPalette.length)]; html = `
` + connectedUsersFirstChar[i] + `
`; if (i <= 5) { $("#biz-ss-connected_users_container").append(html); } usersHtml += '
' + connectedUsersFirstChar[i] + '
' + FileUsers[i].firstName + '
'; if (i > 5) { $("#biz-ss-connected_users_container").children().last().remove(); $("#biz-ss-connected_users_container").append('
'); $('.users-dropdown .dropdown-menu').append(usersHtml); } } } fontFamilyBfOpen(args) { args.element.parentElement.classList.remove('e-font-family'); if (this.fontFamilyRecent.length) { let defaultItems = this.ssObj.ribbonModule.getFontFamilyItems(); delete defaultItems[5].iconCss; let sheet = this.ssObj.biz.getActiveSheet(); let range = ej.spreadsheet.getIndexesFromAddress(sheet.activeCell); let cell = ej.spreadsheet.getCell(range[0], range[1], sheet); let style = cell && cell.style && cell.style.fontFamily || 'Calibri'; for (let i = 0; i < defaultItems.length; i++) { if (defaultItems[i].text === style) { defaultItems[i].iconCss = 'e-icons e-selected-icon'; } } let items = this.fontFamilyRecent.concat([{ separator: true }]).concat(defaultItems); this.fontFamilyObj.items = items; this.fontFamilyObj.dataBind(); } } fontFamilyBfRender(args) { args.element.style.fontFamily = args.item.text; } fontFamilySelect(args) { this.fontFamilyRecent = this.fontFamilyRecent.filter((e) => { return e.text !== args.item.text; }); this.fontFamilyRecent.unshift({ text: args.item.text }); if (this.fontFamilyRecent.length > 5) { this.fontFamilyRecent.pop(); } } wireEvents() { if (this.permissionLevel !== Unibase.Apps.Collaboration.Enums.Share.Viewer) { document.body.addEventListener('mousedown', this.mouseDown.bind(this)); document.body.addEventListener('mouseup', this.mouseUp.bind(this)); document.body.querySelector('.DocumentViewer').addEventListener('keyup', this.keyUp.bind(this)); document.body.addEventListener('dblclick', this.bodyDblClick.bind(this)); document.body.querySelector('.DocumentViewer').addEventListener('keydown', this.keyDown.bind(this)); } window.addEventListener('keydown', this.windowKeydown.bind(this)); document.body.addEventListener('mouseup', this.viewOnlyMouseUp.bind(this)); document.body.addEventListener('mousedown', this.viewOnlyMouseDown.bind(this)); document.body.querySelector('.DocumentViewer').addEventListener('keydown', this.viewOnlyKeyDown.bind(this)); } unwireEvents() { document.body.removeEventListener('mousedown', this.mouseDown.bind(this)); document.body.removeEventListener('mousedown', this.mouseDown.bind(this)); document.body.removeEventListener('mouseup', this.mouseUp.bind(this)); document.body.querySelector('.DocumentViewer').removeEventListener('keydown', this.keyDown.bind(this)); document.body.querySelector('.DocumentViewer').removeEventListener('keyup', this.keyUp.bind(this)); document.body.removeEventListener('mouseup', this.viewOnlyMouseUp.bind(this)); document.body.removeEventListener('mousedown', this.viewOnlyMouseDown.bind(this)); document.body.querySelector('.DocumentViewer').removeEventListener('keydown', this.viewOnlyKeyDown.bind(this)); document.body.removeEventListener('dblclick', this.bodyDblClick.bind(this)); window.removeEventListener('keydown', this.windowKeydown.bind(this)); } eventListners() { document.getElementsByClassName("biz-ss-cloudsave")[0].addEventListener('click', (event) => { Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance().renderCloudSavedDialogue(); }); document.getElementsByClassName("biz-ss-cloudloading")[0].addEventListener('click', (event) => { Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance().renderCloudSavingDialogue(); }); document.getElementsByClassName("biz-ss-filename")[0].addEventListener('focusout', (event) => { if (this.FileId) this.fileNameChange(); else this.download.ssAutoSave({ action: "createNewSpreadsheet", eventArgs: {} }, this, false); }); document.getElementsByClassName("biz-ss-starred")[0].addEventListener('click', (event) => { }); (this.ssObj.enableContextMenu) && this.ssObj.contextMenuModule.contextMenuInstance.addEventListener("beforeItemRender", (e) => { var indexes = this.ssObj.biz.getIndexes(); let sheet = this.ssObj.biz.getActiveSheet(); if (e.item.text == "UnHide Rows") { var rowStart = indexes[0]; var rowEnd = indexes[2]; var rows = sheet.rows; rows = rows.slice(rowStart, rowEnd + 1); if (rows.filter(({ hidden }) => hidden == true).length == 1) { e.element.innerHTML = "UnHide Row"; } } if (e.item.text == "UnHide Columns") { var colStart = indexes[1]; var colEnd = indexes[3]; var cols = sheet.columns; cols = cols.slice(colStart, colEnd + 1); if (cols.filter(({ hidden }) => hidden == true).length == 1) { e.element.innerHTML = "UnHide Column"; } } }); document.onpaste = (pasteEvent) => { let sheet = this.ssObj.getActiveSheet(); let indexes = ej.spreadsheet.getIndexesFromAddress(sheet.activeCell); let items = (event.clipboardData || event.originalEvent.clipboardData).items; for (var i = 0; i < 2; i++) { var item = items[i]; if (item && item.kind === 'file') { let blob = item.getAsFile(); let reader = new FileReader(); reader.onload = (event) => { let sheetName = this.setSheetNameForInCell(sheet.name); this.pastedImageDetails = event; let cellPstn = ej.spreadsheet.getCellPosition(sheet, [indexes[0], indexes[1]], sheet.frozenRows, sheet.frozenColumns); let imageModel = { src: this.pastedImageDetails.target.result, top: cellPstn.top, left: cellPstn.left, id: "spreadsheet_overlay_picture_" + sheetName + "_" + indexes[0] + "_" + indexes[1] }; let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet); this.oldCellInfo = Object.assign({}, cellInfo); (!cellInfo) && (cellInfo = {}); this.setImageSize("top", imageModel); this.setImageSize("left", imageModel); cellInfo["image"] = [imageModel]; this.ssObj.biz.setCell(indexes[0], indexes[1], sheet, cellInfo); this.download.ssAutoSave({ action: "cellSave", eventArgs: { address: "sheet!" + this.ssObj.biz.getRange() } }, this, true); let args_undoredo = { indexes: indexes, range: this.ssObj.biz.getRange(), cellInfo: cellInfo, action: 'insertimage', origin: 'biz', sheetIndex: this.getSheetIndex() }; this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'bizImageInCell', options: args_undoredo, oldCells: this.oldCellInfo } }); this.bizSignalr(args_undoredo); }; reader.readAsDataURL(blob); } } }; window.onkeyup = (event) => { if (event.keyCode == 27 && this.fullscreen.ssMenuBarFullScreen) { let sheetPannelElement = document.getElementById("DocumentViewer_sheet_panel"); this.ssObj.element.parentElement.nextElementSibling.style.display = "inline-block"; this.ssObj.element.parentElement.previousElementSibling.style.display = "block"; document.getElementById('DocumentViewer_ribbon').style.display = 'block'; var toolbarPannelHeight = sheetPannelElement.previousElementSibling.previousElementSibling.offsetHeight; var formulaPannelHeight = sheetPannelElement.previousElementSibling.offsetHeight; var sheetTabPannelHeight = sheetPannelElement.nextElementSibling.offsetHeight; var documentviewerHeight = this.ssObj.element.offsetHeight; document.getElementById("DocumentViewer_sheet_panel").style.height = (documentviewerHeight - toolbarPannelHeight - formulaPannelHeight - sheetTabPannelHeight) + 'px'; this.fullscreen.ssMenuBarFullScreen = false; } }; document.getElementsByClassName("biz-ss-filename")[0].addEventListener("input", () => { this.setFileNameElementWidth(); }); } getTextWidth(text, font = this.getCanvasFontSize()) { const canvas = this.getTextWidth.canvas || (this.getTextWidth.canvas = document.createElement("canvas")); const context = canvas.getContext("2d"); context.font = font; const metrics = context.measureText(text); return metrics.width; } getCssStyle(element, prop) { return window.getComputedStyle(element, null).getPropertyValue(prop); } getCanvasFontSize(el = document.body) { const fontWeight = this.getCssStyle(el, 'font-weight') || 'normal'; const fontSize = this.getCssStyle(el, 'font-size') || '16px'; const fontFamily = this.getCssStyle(el, 'font-family') || 'Times New Roman'; return `${fontWeight} ${fontSize} ${fontFamily}`; } setFileNameElementWidth() { let fileNameEle = document.getElementsByClassName("biz-ss-filename")[0]; fileNameEle.style.width = (this.getTextWidth(fileNameEle.value) + 8) + "px"; } mouseUp(e) { setTimeout((e) => { let customSortDlg = document.getElementsByClassName("e-customsort-dlg")[0]; if (customSortDlg) { let addBtnSort = document.getElementsByClassName("e-sort-addbtn")[0]; let dataSourceLen = document.querySelector(".e-sort-field.e-control").ej2_instances[0].dataSource.length; let numberOfList = document.querySelector(".e-list-sort.e-sort-template").firstElementChild.firstElementChild.children.length; if (dataSourceLen === numberOfList) { addBtnSort.classList.add("e-disabled"); addBtnSort.disabled = true; } else { addBtnSort.classList.remove("e-disabled"); addBtnSort.disabled = false; } } }, 300); } viewOnlyMouseUp(e) { if (this.fullscreen.ssMenuBarFullScreen) { setTimeout(() => { if (e.toElement.title == "Expand Formula Bar" || e.toElement.title == "Collapse Formula Bar") { let sheetPannelElement = document.getElementById("DocumentViewer_sheet_panel"); var formulaPannelHeight = sheetPannelElement.previousElementSibling.offsetHeight; var sheetTabPannelHeight = sheetPannelElement.nextElementSibling.offsetHeight; sheetPannelElement.style.height = (window.innerHeight - formulaPannelHeight - sheetTabPannelHeight) + 'px'; } }, 200); } } mouseDown(e) { let sheet = this.ssObj.biz.getActiveSheet(); this.clearFindReplace(); this.mouseDownHandlers.forEach((hanlder) => { hanlder.call(this, e); }); var range = this.ssObj.biz.getIndexes(); this.cellRowStart = range[0]; this.cellColStart = range[1]; this.cellRowEnd = range[2]; this.cellColEnd = range[3]; let moveToDialog = document.getElementsByClassName("copyto_dialog"); let importDialog = document.getElementsByClassName("biz-ss-import-dialog"); let resizeDialog = document.getElementById("biz-ss-resizetofit-dialog_dialog-header"); let cloudSaved = e.target.closest(".biz-ss-cloudsave-container"); let selectedTab = e.target.closest(".e-tab-wrap"); let cloudSaving = e.target.closest(".biz-ss-cloudloading-container"); this.clicks++; setTimeout(() => { this.clicks = 0; }, 400); if (!(cloudSaved)) { if (document.getElementById('biz-ss-cloudsave-container')) { this.ribbon.ssCloudSavedDialougObj.destroy(); } } if (!(cloudSaving)) { if (document.getElementById('biz-ss-cloudloading-container')) { this.ribbon.ssCloudSavingDialougObj.destroy(); } } if (this.clicks === 2) { let changedValues = []; this.clicks = 0; if (e.target.classList.contains("e-autofill")) { this.autofillDrag = true; let indexes = this.ssObj.biz.getIndexes(); let sheet = this.ssObj.getActiveSheet(); let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet); let leftCellsCount = 0; let currentFormula; let obj; if (cellInfo && cellInfo.formula) { for (var i = indexes[0] + 1; i < 100000000000000; i++) { let cell = ej.spreadsheet.getCell(i, indexes[1] - 1, sheet); if (this.checkCellObjHasValue(cell)) leftCellsCount++; else i = 100000000000000; } if (cellInfo.formula.includes(":") && cellInfo.formula.includes("(")) { let ranges = cellInfo.formula.split(":"); let row1 = Number(ranges[0].match(/\d/g).join("")); let row2 = Number(ranges[1].match(/\d/g).join("")); for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) { ranges[0] = ranges[0].replace(row1.toString(), (row1 + 1).toString()); ranges[1] = ranges[1].replace(row2.toString(), (row2 + 1).toString()); currentFormula = ranges.join(":"); obj = ej.spreadsheet.getCell(i, indexes[1], sheet); if (!obj) obj = { formula: currentFormula }; else obj["formula"] = currentFormula; this.ssObj.biz.setCell(i, indexes[1], sheet, obj); let change = { Row: i, cell: indexes[1], CellInfo: obj }; changedValues.push(change); row1++; row2++; } } else if (cellInfo.formula.includes("(")) { for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) { let row; let formulaRange = cellInfo.formula.split("("); row = Number(formulaRange[1].match(/\d/g).join("")); currentFormula = cellInfo.formula.replace(row.toString(), (i + 1)); obj = ej.spreadsheet.getCell(i, indexes[1], sheet); if (!obj) obj = { formula: currentFormula }; else obj["formula"] = currentFormula; this.ssObj.biz.setCell(i, indexes[1], sheet, obj); let change = { Row: i, cell: indexes[1], CellInfo: obj }; changedValues.push(change); } } else if (cellInfo.formula.includes(":")) { let ranges = cellInfo.formula.split(":"); let row1 = Number(ranges[0].match(/\d/g).join("")); let row2 = Number(ranges[1].match(/\d/g).join("")); for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) { ranges[0] = ranges[0].replace(row1.toString(), (row1 + 1).toString()); ranges[1] = ranges[1].replace(row2.toString(), (row2 + 1).toString()); currentFormula = ranges.join(":"); obj = ej.spreadsheet.getCell(i, indexes[1], sheet); if (!obj) obj = { formula: currentFormula }; else obj["formula"] = currentFormula; this.ssObj.biz.setCell(i, indexes[1], sheet, obj); let change = { Row: i, cell: indexes[1], CellInfo: obj }; changedValues.push(change); row1++; row2++; } } else { let row = Number(cellInfo.formula.match(/\d/g).join("")); for (var i = indexes[0] + 1; i <= indexes[0] + leftCellsCount; i++) { currentFormula = cellInfo.formula.replace(row.toString(), (i + 1)); obj = ej.spreadsheet.getCell(i, indexes[1], sheet); if (!obj) obj = { formula: currentFormula }; else obj["formula"] = currentFormula; this.ssObj.biz.setCell(i, indexes[1], sheet, obj); let change = { Row: i, cell: indexes[1], CellInfo: obj }; changedValues.push(change); } } } (changedValues.length > 0) && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true); this.ssObj.selectRange(sheet.activeCell + ":" + this.generateHeaderText(indexes[3] + 1) + (changedValues.pop().Row + 1)); } } if (moveToDialog.length > 0) { let unicld = Unibase.Apps.Collaboration.Components.UniCloud.Instance(); let copyto = e.target.closest(".copyto_dialog"); if (!(copyto)) { if (document.getElementsByClassName(".copyto_dialog")) { $("#_bizgaze_modal").modal("hide"); $("#_bizgaze_modal").empty(); } } this.selectFileEffectInDialog(e); if (e.target.id === "copyto_select_btn") { if (unicld.copyToSelectedFileId !== 0) { Unibase.Platform.Helpers.NavigationHelper.Instance().showLoading(); let base = Unibase.Apps.Collaboration.Components.Sheets.Base.Instance(); let sheetIdx = base.getSheetIndex(); let parsed = base.ssObj.sheets[sheetIdx]; $("#_bizgaze_modal").modal("hide"); $(".modal-backdrop")[$(".modal-backdrop").length - 1].remove(); $("#moveToModal").empty(); if (unicld.copyToSelectedFileId === base.FileId) { let count = 0; let sheets = base.ssObj.sheets; let sheetnames = base.ssObj.sheets.map(x => x.name); let sheetName; if (sheetnames.includes("Copy of " + parsed.name)) { sheets.forEach((sheet) => { if (sheet.name.startsWith("Copy of " + parsed.name)) count++; }); sheetName = "Copy of " + parsed.name + "(" + count + ")"; } else { sheetName = "Copy of " + parsed.name; } let saveType = "insertsheetinsamewb"; let data = { FileId: base.FileId, sheetName: sheetName, autosavetype: saveType, sheetIndex: Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().getSheetIndex(), requestId: Unibase.Apps.Collaboration.Components.Common.Download.Instance().requestId + 1, }; Unibase.Apps.Collaboration.DocumentManager.Instance().ssAutoSave(data).then(() => { Unibase.Apps.Collaboration.DocumentManager.Instance().getJsonData(base.FileId).then((sheetdata) => { if (sheetdata.result != null) { let newdata = sheetdata.result; this.removeSheetIndexProp(newdata.Workbook); base.ssObj.openFromJson({ file: newdata }); } else { } Unibase.Platform.Helpers.NavigationHelper.Instance().hideLoading(); }); }); } else { let data = { FileId: base.FileId, copytofileid: unicld.copyToSelectedFileId, sheetIndex: base.getSheetIndex(), requestId: Unibase.Apps.Collaboration.Components.Common.Download.Instance().requestId + 1, }; Unibase.Apps.Collaboration.DocumentManager.Instance().CopySheetInToExistingWorkbook(data).then((res) => { Unibase.Platform.Helpers.NavigationHelper.Instance().hideLoading(); if (res.errors) { } else { } }); } } else { unicld.moveToFolderElement.firstElementChild.click(); } } } if (e.target.parentElement.id === "DocumentViewer_currencyformat") { for (let i = this.cellRowStart; i <= this.cellRowEnd; i++) { for (let j = this.cellColStart; j <= this.cellColEnd; j++) { var cellInfo = ej.spreadsheet.getCell(i, j, sheet); cellInfo["format"] = "$#,##0.00"; this.ssObj.biz.setCell(i, j, sheet, cellInfo); } } } if (e.target.parentElement.id === "DocumentViewer_percentageformat") { for (let i = this.cellRowStart; i <= this.cellRowEnd; i++) { for (let j = this.cellColStart; j <= this.cellColEnd; j++) { var cellInfo = ej.spreadsheet.getCell(i, j, sheet); cellInfo["format"] = ".00%"; this.ssObj.biz.setCell(i, j, sheet, cellInfo); } } } if (e.target.classList.contains("biz-ss-fileshare-btn")) { Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(['apps/collaboration/components/old_unicloud.js', 'platform/apps/managers/appmanager.js', 'platform/apps/enums/appconfigurationtypes.js'], () => { Unibase.Apps.Collaboration.Components.UniCloud.Instance().share(this.FileId, "file", 0); }); } if (importDialog.length > 0) { this.selectFileEffectInDialog(e); if (e.target.id == "importfile-drive-cancel-btn") { this.ribbon.ssImportDialougObj.hide(); setTimeout(() => { if (this.ribbon.ssImportDialougObj) this.ribbon.ssImportDialougObj.destroy(); this.ribbon.ssImportDialougObj = null; }, 1000); } else if (e.target.id == "importfile-drive-select-btn") { this.isDriveImport = true; let obj = { name: this.ribbon.driveSelectedLiElement.textContent.trim(), fileid: this.ribbon.driveSelectedFileId, }; let importObj = { upload: false, existingfileid: this.ribbon.driveSelectedFileId, FileId: this.FileId, filedata: "", filetype: "", filename: "", FilePath: null, RefId: 0, }; this.ribbon.spreadsheetImportedFileData = importObj; this.ribbon.spreadsheetImportedReplaceFileData = importObj; this.ribbon.importedFile = { files: [obj] }; this.ribbon.ssImportDialougObj.destroy(); this.ribbon.ssimportedFileDataDailog(); } } if (resizeDialog) { if (e.target.classList.contains("e-dlg-closeicon-btn") || e.target.classList.contains("e-icon-dlg-close")) { this.dialogue.hideResizeDialog(); } } if (selectedTab) { let selectedTabText = selectedTab.querySelector(".e-tab-text").textContent; if (selectedTabText && e.which == 3) selectedTab ? (this.selectedSheetName = selectedTab.textContent) : (this.selectedSheetName = null); else this.selectedSheetName = null; } } viewOnlyMouseDown(e) { let fullscreenDialog = document.getElementsByClassName("biz-ss-menubar-fullscreen"); let requestAcessDialog = e.target.closest(".biz-ss-requestaccess-dialog"); if (fullscreenDialog.length > 0) { if (e.target.classList.contains("biz-ss-menubarfullscreen-dismiss")) this.dialogue.hideSsMenubarFullscreenDialog(); } else if (this.viewOnlyDialog) { var viewonlydialog = ej.base.closest(e.target, '.biz-ss-viewonly-dialog'); if (!viewonlydialog) { this.viewOnlyDialog.hide(); this.viewOnlyDialog.destroy(); } } if (this.requestAccessObj && !requestAcessDialog) { this.hideRequestAccess(); } } checkCellObjHasValue(cell) { if (!cell) return false; else if (cell && cell.value != null && cell.value != undefined && cell.value.toString() != "" && cell.value.toString() != " ") return true; else return false; } selectFileEffectInDialog(e) { let unicld = Unibase.Apps.Collaboration.Components.UniCloud.Instance(); let moveToList = e.target.closest(".copyto_list"); let moveToFileList = e.target.closest(".copyto_file"); let moveTofolder = e.target.closest(".copyto_folder"); let driveSelectBtn = document.getElementById("importfile-drive-select-btn"); let copyToSelectBtn = document.getElementById("copyto_select_btn"); if (moveToList) { if (document.getElementsByClassName("copyto_select")[0]) document.getElementsByClassName("copyto_select")[0].classList.remove("copyto_select"); let copyto = e.target.closest(".copyto_list"); copyto.classList.add("copyto_select"); unicld.copyToSelectedFileId = 0; if (moveToFileList) { let fileid = Number(moveToFileList.id.split("_")[2]); unicld.copyToSelectedFileId = fileid; this.ribbon.driveSelectedFileId = fileid; this.ribbon.driveSelectedLiElement = moveToFileList; if (driveSelectBtn) driveSelectBtn.classList.remove("disabled"); else copyToSelectBtn.classList.remove("disabled"); } if (driveSelectBtn && driveSelectBtn.classList.contains("disabled")) driveSelectBtn.classList.remove("disabled"); else if (driveSelectBtn && driveSelectBtn.classList.contains("e-disabled")) driveSelectBtn.classList.remove("e-disabled"); } if (moveTofolder) { unicld.moveToFolderElement = moveTofolder; (driveSelectBtn) && driveSelectBtn.classList.add("e-disabled"); if (driveSelectBtn) driveSelectBtn.classList.add("disabled"); else copyToSelectBtn.classList.add("disabled"); } } addUtilFn() { this.ssObj.biz.getRange = () => { return this.ssObj.getActiveSheet().selectedRange; }; this.ssObj.biz.getIndexes = () => { return this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.ssObj.biz.getRange())); }; this.ssObj.biz.setCell = (rowIdx, colIdx, sheet, cellObj) => { this.ssObj.clipboardModule.setCell(rowIdx, colIdx, sheet, cellObj, false, false, false); }; this.ssObj.biz.getCell = (rowIdx, colIdx, sheet) => { return ej.spreadsheet.getCell(rowIdx, colIdx, sheet); }; this.ssObj.biz.isRowAvailable = (rowIdx, activeSheet) => { if (activeSheet.rows[rowIdx]) { return true; } return false; }; this.ssObj.biz.getActiveSheet = () => { if (this.ssObj.biz.sheetIndex > -1) { return this.ssObj.sheets[this.ssObj.biz.sheetIndex]; } else { return this.ssObj.getActiveSheet(); } }; this.ssObj.biz.isRowsSelected = (indexes) => { if (!indexes) { indexes = this.ssObj.biz.getIndexes(); } let colStart = indexes[1]; let colEnd = indexes[3]; let colCount = this.ssObj.getActiveSheet().colCount - 1; for (var i = indexes[0]; i <= indexes[2]; i++) { if (!(colStart === 0 && colEnd === colCount)) return false; } return true; }; this.ssObj.biz.isColsSelected = (indexes) => { if (!indexes) { indexes = this.ssObj.biz.getIndexes(); } let rowStart = indexes[0]; let rowEnd = indexes[2]; let rowCount = this.ssObj.getActiveSheet().rowCount - 1; for (var i = indexes[1]; i <= indexes[3]; i++) { if (!(rowStart === 0 && rowEnd === rowCount)) return false; } return true; }; this.ssObj.biz.getSheetIndexByname = (name) => { let len = this.ssObj.sheets.length; for (let i = 0; i < len; i++) { if (this.ssObj.sheets[i].name == name) { return i; } } return -1; }; this.ssObj.biz.getSheetByName = (name) => { let len = this.ssObj.sheets.length; for (let i = 0; i < len; i++) { if (this.ssObj.sheets[i].name == name) { return this.ssObj.sheets[i]; } } }; } getIndexesFromAddress(range) { return this.swapRange(ej.spreadsheet.getIndexesFromAddress(range)); } getSheetIndex(sheet) { sheet = sheet ? sheet : this.ssObj.biz.getActiveSheet(); let len = this.ssObj.sheets.length; for (let i = 0; i < len; i++) { if (this.ssObj.sheets[i].name == sheet.name) { return i; } } return -1; } getCellsFromIndexes(range, customRange) { let cells = []; let sheet = this.ssObj.getActiveSheet(); let k = 0; for (let i = range[0]; i <= range[2]; i++) { for (let j = range[1]; j <= (!customRange ? range[3] : range[1] + customRange[k].length); j++) { cells.push(JSON.parse(JSON.stringify(ej.spreadsheet.getCell(i, j, sheet)))); } k++; } return cells; } setCellObjects(range, cells, customRange) { let sheet = this.ssObj.getActiveSheet(); let k = 0; for (let i = range[0]; i <= range[2]; i++) { for (let j = range[1]; j <= (!customRange ? range[3] : range[1] + customRange[k].length); j++) { let obj = cells.shift(); let cell = ej.spreadsheet.getCell(i, j, sheet); if (cell && cell.image && cell.image[0]) { document.getElementById(cell.image[0].id).remove(); } if (obj) { this.ssObj.biz.setCell(i, j, sheet, obj); } else { this.ssObj.biz.setCell(i, j, sheet, undefined); delete sheet.rows[i].cells[j]; } } k++; } } generateSheetName(names, name) { let splitJoin; if (names.indexOf(name) < 0) return name; if (name.lastIndexOf(" (") > -1) splitJoin = name.substr(0, name.lastIndexOf(" (")); else splitJoin = name; let i = 2; while (names.indexOf(splitJoin + '(' + i + ")") > -1) i++; return name + ' (' + i + ')'; } clearCell(sheet, rowIdx, colIdx) { this.ssObj.biz.setCell(rowIdx, colIdx, sheet, {}); delete sheet.rows[rowIdx].cells[colIdx]; } updateCell(sheet, rowIdx, colIdx, cellObj) { this.ssObj.biz.setCell(rowIdx, colIdx, sheet, cellObj); } clearRow(sheet, rowIdx) { if (this.ssObj.biz.isRowAvailable(rowIdx, sheet) && sheet.rows[rowIdx].cells) { let len = sheet.rows[rowIdx].cells.length; for (let j = 0; j < len; j++) { this.ssObj.biz.setCell(rowIdx, j, sheet, {}); } } delete sheet.rows[rowIdx]; } updateRow(sheet, rowIdx, rowObj) { for (var j = 0; rowObj && rowObj.cells && j <= rowObj.cells.length; j++) { let cell = rowObj.cells[j]; cell && this.ssObj.biz.setCell(rowIdx, j, sheet, cell); } rowObj && (sheet.rows[rowIdx] = rowObj); } swapRange(cells) { if (cells[0] > cells[2]) this.swap(cells, 0, 2); if (cells[1] > cells[3]) this.swap(cells, 1, 3); return cells; } swap(array, x, y) { if (x == y) return; let tmp = array[x]; array[x] = array[y]; array[y] = tmp; } generateHeaderText(colIndex) { if (this.hederText[colIndex]) { return this.hederText[colIndex]; } let text = this.generateText(colIndex); this.hederText[colIndex] = text; return text; } generateText(colIndex) { let alphabet = "Z"; if (colIndex / 26 > 1) return this.generateText((colIndex % 26 === 0) ? (colIndex / 26 - 1) : Math.floor(colIndex / 26)) + String.fromCharCode((colIndex % 26) === 0 ? alphabet.charCodeAt(alphabet) : 64 + (colIndex % 26)); else return String.fromCharCode(64 + (colIndex)); } updateProps() { this.element = document.getElementById('DocumentViewer'); this.ribbon = Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance(); this.dialogue = Unibase.Apps.Collaboration.Components.Sheets.Dialogue.Instance(); this.autofill = Unibase.Apps.Collaboration.Components.Sheets.Autofill.Instance(); this.formatpainter = Unibase.Apps.Collaboration.Components.Sheets.FormatPainter.Instance(); this.spellchecker = Unibase.Apps.Collaboration.Components.Sheets.SpellChecker.Instance(); this.util = Unibase.Apps.Collaboration.Components.Common.Util.Instance(); this.download = Unibase.Apps.Collaboration.Components.Common.Download.Instance(); this.fullscreen = Unibase.Apps.Collaboration.Components.Fullscreen.Instance(); this.ssSettings = { contextMenuBeforeOpen: this.cmenuBfOpen.bind(this), contextMenuItemSelect: this.cmenuSelect.bind(this), actionComplete: this.actionComplete.bind(this), beforeCellRender: this.bfCellRender.bind(this), beforeSelect: this.beforeSelect.bind(this), actionBegin: this.actionBegin.bind(this), cellEdit: this.cellEdit.bind(this), sortComplete: this.sortComplete.bind(this), openComplete: this.openComplete.bind(this), cellSave: this.cellSave.bind(this), dataBound: this.dataBound.bind(this), beforeCellSave: this.beforeCellSave.bind(this), created: this.ssCreated.bind(this), sheets: this.filedata, allowSave: true, saveUrl: _appsettings.server_url() + '/apis/v4/unibase/collaboration/documents/spreadsheetdownload', }; } beforeSelect(args) { let ele = document.getElementById("DocumentViewer_edit"); if (ele) ele.textContent = ""; this.isCtrlA = false; } bfCellRender(args) { if (this.openJSON) { this.processCustomResponse(); this.openJSON = false; } if (this.showFormula) { let value = ''; if (args.cell && args.cell.value) { value = args.cell.value; } if (args.cell.formula && args.cell.formula.length) { value = args.cell.formula; } args.element.innerHTML = value; } if (args && args.cell && args.cell.image && args.cell.image.length > 0) { let sheet = this.ssObj.getActiveSheet(); let sheetName = this.setSheetNameForInCell(sheet.name); (sheet["pictures"] == undefined) && (sheet["pictures"] = []); args.cell.image.forEach((img) => { if ((!img.id.includes(sheetName)) && (!sheet.pictures.find(x => x.imageId == img.id))) sheet.pictures.push({ imageId: img.id, row: args.rowIndex, col: args.colIndex }); }); } } setSheetNameForInCell(currentSheetName) { currentSheetName = currentSheetName.replaceAll("(", ""); currentSheetName = currentSheetName.replaceAll(")", ""); if (currentSheetName.includes(" ")) return currentSheetName.split(" ").join("-"); else return currentSheetName; } beforeCellSave(args) { this.isInitial = false; this.prevFormulaRange = ""; this.f2Edit = false; this.prevFormulaRange = ""; this.formulaActiveCell = ""; if (args.value && args.value.length && args.value.length && args.value[0] === '=' && this.lastKeyEvent.keyCode === 13) { let popup = document.body.querySelector('#' + this.ssObj.element.id + '_ac_popup'); if (popup && popup.classList.contains('e-popup-open')) { args.cancel = true; this.ssObj.formulaModule.triggerKeyDownEvent(13); this.ssObj.formulaModule.hidePopUp(); popup.classList.remove('e-popup-open'); popup.classList.add('e-popup-close'); } } this.removeCopyIndicator(); } cellEdit(args) { this.isInitial = false; var indexes = this.ssObj.biz.getIndexes(); let sheet = this.ssObj.biz.getActiveSheet(); let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet); if (cellInfo && cellInfo.image && cellInfo.image[0] && cellInfo.image[0].id.startsWith("biz_image_in_cell")) { document.getElementById(cellInfo.image[0].id).style.display = "none"; } if (this.autofillDrag) { this.ssObj.endEdit(); this.autofillDrag = false; } } sortComplete(args) { debugger; } cellSave(args) { var indexes = this.ssObj.biz.getIndexes(); let sheet = this.ssObj.biz.getActiveSheet(); let cellInfo = ej.spreadsheet.getCell(indexes[0], indexes[1], sheet); if (cellInfo && cellInfo.value && cellInfo.value != "") { if (cellInfo.image && cellInfo.image.length > 0) { document.getElementById(cellInfo.image[0].id).remove(); cellInfo.image = []; this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: indexes[0], cell: indexes[1], cellinfo: cellInfo }] }, this, true); } } else if (cellInfo && cellInfo.image && cellInfo.image.length > 0) { document.getElementById(cellInfo.image[cellInfo.image.length - 1].id).style.display = ""; } if (this.showFormula) { let value = ''; if (args.value) { value = args.value; } if (args.formula && args.formula.length) { value = args.formula; } args.element.innerHTML = value; } this.removeCopyIndicator(); } openComplete() { setTimeout(() => { this.addImageClassToAllImages(); }, 3000); } ssCreated() { this.openJSON = true; this.removeSheetIndexProp(this.filedata.Workbook); this.ssObj.openFromJson({ file: this.filedata }); this.container.addEventListener('fullscreenchange', this.fullScreenHandler.bind(this)); (this.ssObj.enableContextMenu) && this.ssObj.contextMenuModule.contextMenuInstance.addEventListener('beforeItemRender', this.cmenubfrender.bind(this)); document.getElementsByClassName("e-formula-bar-panel")[0].firstElementChild.lastElementChild.remove(); this.ssObj.element.querySelector('.e-sheet-tab').ej2_instances[0].addEventListener('selected', this.tabSelected.bind(this)); this.focusDocumentViewer(); this.setFileNameElementWidth(); this.ssObj.addEventListener("dialogBeforeOpen", this.dialogOpenHandler.bind(this)); } removeSheetIndexProp(workbook) { if (workbook.sheets && workbook.sheets.length > 0) { for (var i = 0; i < workbook.sheets.length; i++) (workbook.sheets[i] && workbook.sheets[i].index) && (delete workbook.sheets[i].index); } } processCustomResponse() { if (this.customresult.richtexts && this.customresult.richtexts.sheets.length) { let rc = this.customresult.richtexts; for (let i = 0; i < rc.sheets.length; i++) { let idx = this.ssObj.biz.getSheetIndexByname(this.customresult.richtexts.sheets[i].name); this.ssObj.sheets[idx].richtexts = { rows: rc.sheets[0].rows }; } } } autoSave(args) { if (!(args.action == "import" || args.action == "gotoSheets") && !this.isInitial) { Unibase.Apps.Collaboration.Components.Common.Download.Instance().saveDocumentFile(this.FileId, "Excel", null, args, this).then(function () { }); } } cmenubfrender(args) { let ele = document.createElement("span"); ele.classList.add("e-badge"); ele.classList.add("biz-contextmenu-badges"); let indexes = this.ssObj.biz.getIndexes(); let sheet = this.ssObj.biz.getActiveSheet(); if (args.item.text === "Filter") { if (this.ssObj.filterCollection) { let sheetsWithFilter = this.ssObj.filterCollection.map(x => x.sheetIndex); if (sheetsWithFilter.includes(this.getSheetIndex())) { if (args.element.classList.contains("e-disabled")) { args.element.classList.add("e-disabled"); } } } } else if (args.item.text === "Clear validation") { for (var i = indexes[0]; i <= indexes[2]; i++) { for (var j = indexes[1]; j <= indexes[3]; j++) { let cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (cellInfo && !cellInfo.validation) { args.element.classList.add("e-disabled"); i = indexes[2] + 1; j = indexes[3] + 1; } } } } else if (args.item.text === "Cut") { ele.textContent = "Ctrl+X"; } else if (args.item.text === "Copy") { ele.textContent = "Ctrl+C"; } else if (args.item.text === "Paste") { ele.textContent = "Ctrl+V"; } else if (args.item.text === "Values") { ele.textContent = "Ctrl+Shift+V"; } else if (args.item.text === "Hyperlink") { ele.textContent = "Ctrl+K"; } if (args && args.element && !args.element.classList.contains("e-separator") && args.element.id !== "DocumentViewer_cmenu_colorpallet") args.element.append(ele); if (args.item.text === "Move Right") { let idx = this.ssObj.biz.getSheetIndexByname((this.selectedSheetName || sheet.name)); if (idx === this.ssObj.sheets.length - 1) args.element.classList.add("e-disabled"); } if (args.item.text === "Move Left") { let idx = this.ssObj.biz.getSheetIndexByname((this.selectedSheetName || sheet.name)); if (idx === 0) args.element.classList.add("e-disabled"); } } cmenuSelect(args) { let id = this.ssObj.element.id + '_cmenu_'; let sheets = this.ssObj.sheets; let idx = this.getSheetIndex(); let range = this.ssObj.biz.getRange(); let i1, i2; switch (args.item.id) { case id + 'insertrowabove': case id + 'insertrow': this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_row_above' } }); break; case id + 'insertrowbelow': this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_row_below' } }); break; case id + 'insertcolright': this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_column_after' } }); break; case id + 'insertcolleft': case id + 'insertcolumn': this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_insert_column_before' } }); break; case id + 'shiftright': this.formatpainter.insertShiftRight(range); this.download.ssAutoSave({ action: "insertCell" }, this, true); break; case id + 'shiftdown': this.formatpainter.insertShiftDown(range); break; case id + 'deleterow': this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_delete_row' } }); break; case id + 'deletecolumn': this.ssObj.contextMenuModule.selectHandler({ item: { id: this.ssObj.element.id + '_cmenu_delete_column' } }); break; case id + 'shiftleft': this.formatpainter.deleteShiftLeft(range); break; case id + 'shiftup': this.formatpainter.deleteShiftUp(range); break; case id + 'deletevalue': this.ssObj.editModule.editingHandler('delete'); break; case id + 'datvalidation': this.ssObj.notify('initiatedatavalidation', null); break; case id + 'highlightinvaliddata': this.ssObj.addInvalidHighlight(); break; case id + 'clearhighlight': this.ssObj.removeInvalidHighlight(); break; case id + 'clearvalidation': this.ssObj.notify('removeDataValidation', null); break; case id + 'delete_sheet': args.item.id = "skipped"; this.formatpainter.renderConfirmDlg(); break; case id + 'biz_insert': this.ssObj.element.querySelector('.e-add-sheet-tab').click(); break; case id + 'existingspreadsheet': break; case id + 'newspreadsheet': Unibase.Apps.Collaboration.DocumentManager.Instance().CopySheetToNewSpreadsheet({ FileId: this.FileId, sheetIndex: this.getSheetIndex() }).then((res) => { }); break; case id + 'removefilter': this.ssObj.applyFilter(); let sortingBtn = document.getElementById("DocumentViewer_sorting"); sortingBtn.firstElementChild.style.color = ""; break; case id + 'changecolor': break; case id + 'insertnote': this.formatpainter.insertNote(); break; case id + 'clearnotes': this.formatpainter.clearComment(); break; case id + 'resizecolumns': case id + 'resizecolumn': case id + 'resizerows': case id + 'resizerow': this.dialogue.renderResizeDialog(); break; } } cmenuBfOpen(args) { let target = this.ssObj.contextMenuModule.getTarget(args.event.target); let id = this.ssObj.element.id + '_cmenu_'; let ins = this.ssObj.contextMenuModule.contextMenuInstance; let data = this.ssObj.contextMenuModule.getDataSource(target); let spt = this.ssObj.biz.getRange().split(':'); let stCol = spt[0].replace(/[0-9]/g, ''); let endCol = spt[1].replace(/[0-9]/g, ''); let stRow = spt[0].match(/\d+$/)[0]; let endRow = spt[1].match(/\d+$/)[0]; let indexes = this.ssObj.biz.getIndexes(); let isRowsSelected = this.ssObj.biz.isRowsSelected(indexes); let isColsSelected = this.ssObj.biz.isColsSelected(indexes); let row = (indexes[2] - indexes[0] + 1); let col = (indexes[3] - indexes[1] + 1); let sheet = this.ssObj.biz.getActiveSheet(); let range = this.ssObj.getActiveSheet().selectedRange; let count = (range.match(/:/g) || []).length; let ranges; let dataValidationItems = [{ text: 'Data validation', iconCss: '', id: id + 'datvalidation' }, { text: 'Highlight invalid data', iconCss: '', id: id + 'highlightinvaliddata' }, { text: 'Clear highlight', iconCss: '', id: id + 'clearhighlight' }, { text: 'Clear validation', cssClass: "e-disabled", iconCss: '', id: id + 'clearvalidation' },]; switch (target) { case 'Content': if (count <= 1) { data.push({ separator: true }); if (isRowsSelected) { data.push({ text: 'Insert ' + row + ' above', iconCss: '', id: id + 'insertrowabove' }); data.push({ text: 'Insert ' + row + ' below', iconCss: '', id: id + 'insertrowbelow' }); } else { !isColsSelected && data.push({ text: 'Insert ' + row + ' row' + (row > 1 ? 's' : ''), iconCss: '', id: id + 'insertrow' }); } if (isColsSelected) { data.push({ text: 'Insert ' + col + ' left', iconCss: '', id: id + 'insertcolleft' }); data.push({ text: 'Insert ' + col + ' right', iconCss: '', id: id + 'insertcolright' }); } else { !isRowsSelected && data.push({ text: 'Insert ' + col + ' column' + (col > 1 ? 's' : ''), iconCss: '', id: id + 'insertcolumn' }); } data.push({ text: 'Insert cells', iconCss: '', id: id + 'insertcells', items: [{ text: 'Shift right', iconCss: '', id: id + 'shiftright' }, { text: 'Shift down', iconCss: '', id: id + 'shiftdown' }] }); data.push({ separator: true }); !isColsSelected && data.push({ text: row > 1 ? 'Delete selected rows' : 'Delete row', iconCss: '', id: id + 'deleterow' }); !isRowsSelected && data.push({ text: stCol === endCol ? 'Delete column ' + stCol : 'Delete columns ' + stCol + ' - ' + endCol, iconCss: '', id: id + 'deletecolumn' }); data.push({ text: 'Delete cells', iconCss: '', id: id + 'deletecells', items: [{ text: 'Shift left', iconCss: '', id: id + 'shiftleft' }, { text: 'Shift up', iconCss: '', id: id + 'shiftup' }] }); data.push({ separator: true }); data.push({ text: 'Insert note', iconCss: '', id: id + 'insertnote' }); if (sheet.comments && sheet.comments.rows[indexes[0]] && sheet.comments.rows[indexes[0]].cells[indexes[1]]) { data.push({ text: 'Clear notes', iconCss: '', id: id + 'clearnotes' }); } } data.push({ text: 'Validations', iconCss: '', id: id + 'datvalidation', items: dataValidationItems }); data.find(x => x.text == "Filter").items.splice(2, 0, { text: "Remove filter", id: id + "removefilter" }); break; case 'ColumnHeader': data.splice(5, 1); if (isColsSelected) { data.splice(5, 0, { text: 'Insert ' + col + ' left', iconCss: '', id: id + 'insertcolleft' }); data.splice(6, 0, { text: 'Insert ' + col + ' right', iconCss: '', id: id + 'insertcolright' }); if (range.includes(" ")) data.splice(9, 0, { text: 'Resize selected columns', iconCss: '', id: id + 'resizecolumns' }); else if (col > 1) { let cols = this.generateText((indexes[1] + 1)) + " - " + this.generateText((indexes[3] + 1)); data.splice(9, 0, { text: 'Resize Columns ' + cols, iconCss: '', id: id + 'resizecolumns' }); } else data.splice(9, 0, { text: 'Resize Column', iconCss: '', id: id + 'resizecolumn' }); } else data.splice(5, 0, { text: 'Insert ' + col + ' column' + (col > 1 ? 's' : ''), iconCss: '', id: id + 'insertcolumn' }); data.splice(data.length - 1, 0, { text: 'Clear column' + (col > 1 ? 's' : ''), iconCss: '', id: id + 'deletevalue' }); data.push({ separator: true }); data.push({ text: 'Validations', iconCss: '', id: id + 'datvalidation', items: dataValidationItems }); break; case 'RowHeader': data.splice(5, 1); if (isRowsSelected) { data.splice(5, 0, { text: 'Insert ' + row + ' above', iconCss: '', id: id + 'insertrowabove' }); data.splice(6, 0, { text: 'Insert ' + row + ' below', iconCss: '', id: id + 'insertrowbelow' }); if (range.includes(" ")) data.splice(10, 0, { text: 'Resize selected rows', iconCss: '', id: id + 'resizerows' }); else if (row > 1) data.splice(10, 0, { text: 'Resize rows ' + (indexes[0] + 1) + " - " + (indexes[2] + 1), iconCss: '', id: id + 'resizerows' }); else data.splice(10, 0, { text: 'Resize row ', iconCss: '', id: id + 'resizerow' }); } else data.splice(5, 0, { text: 'Insert ' + row + ' row' + (row > 1 ? 's' : ''), iconCss: '', id: id + 'insertrow' }); data.splice(data.length - 1, 0, { text: 'Clear row' + (row > 1 ? 's' : ''), iconCss: '', id: id + 'deletevalue' }); data.push({ separator: true }); data.push({ text: 'Validations', iconCss: '', id: id + 'datvalidation', items: dataValidationItems }); break; case 'Footer': data[0].id = this.ssObj.element.id + '_cmenu_biz_insert'; data.push({ text: 'Copy to', iconCss: '', id: id + 'copyto', items: [{ text: "New Spreadsheet", iconCss: '', id: id + 'newspreadsheet' }, { text: "Existing Spreadsheet", iconCss: '', id: id + 'existingspreadsheet' }] }); data.push({ text: 'Change Color', iconCss: '', id: id + 'changecolor', items: [{ id: id + 'colorpallet' }] }); break; } if (target.length) { ins.items = data; ins.dataBind(); if (target === 'footer') { } if (target === 'Content') { } } if (args.items && args.items[0] && args.items[0].id == id + "colorpallet") { document.getElementById(id + "colorpallet").appendChild(this.changecolor); args.element.style.height = "225px"; let top = window.innerHeight - 400; args.element.style.top = args.element.style.top + top + "px"; args.element.style.borderRadius = "5px"; } } tabSelected() { this.updateSheetIcon(); } colourpicker() { this.changecolor = document.createElement("div"); this.changecolor.setAttribute("id", "changecolor_" + this.FileId); document.body.appendChild(this.changecolor); this.ModalHtml = `
`; $("#changecolor_" + this.FileId).html(this.ModalHtml); var palette = [ '000000', '434343', '666666', '999999', 'b7b7b7', 'cccccc', 'd9d9d9', 'efefef', 'f3f3f3', 'ffffff', '980000', 'ff0000', 'ff9900', 'ffff00', '00ff00', '00ffff', '4a86e8', '0000ff', '9900ff', 'ff00ff', 'e6b8af', 'f4cccc', 'fce5cd', 'fff2cc', 'd9ead3', 'd0e0e3', 'c9daf8', 'cfe2f3', 'd9d2e9', 'ead1dc', 'dd7e6b', 'ea9999', 'f9cb9c', 'ffe599', 'b6d7a8', 'a2c4c9', 'a4c2f4', '9fc5e8', 'b4a7d6', 'd5a6bd', 'cc4125', 'e06666', 'f6b26b', 'ffd966', '93c47d', '76a5af', '6d9eeb', '6fa8dc', '8e7cc3', 'c27ba0', 'a61c00', 'cc0000', 'e69138', 'f1c232', '6aa84f', '45818e', '3c78d8', '3d85c6', '674ea7', 'a64d79', '85200c', '990000', 'b45f06', 'bf9000', '38761d', '134f5c', '1155cc', '0b5394', '351c75', '741b47', '5b0f00', '660000', '783f04', '7f6000', '274e13', '0c343d', '1c4587', '073763', '20124d', '4c1130', ]; var k = 0; var html = ""; var html1 = ""; for (let i = 0; i < 8; i++) { html = `
`; $("#colourpalette").append(html); var rowcount = 10; let j = 0; for (j; j < rowcount; j++) { html1 = ``; $("#biz-ss-colorpallet-" + i).append(html1); k++; } $("#biz-ss-colorpallet-" + i).append("
"); } } updatePadding(isAdd) { let active = this.ssObj.element.querySelector('.e-sheet-tab').querySelector('.biz-dd-active'); if (active) { let parent = active.parentElement; isAdd ? parent.classList.add('biz-dd-parent') : parent.classList.remove('biz-dd-parent'); } } updateSheetIcon() { let sheets = this.ssObj.sheets; let activeSheet = this.ssObj.getActiveSheet(); let sheetsElem = this.ssObj.element.querySelector('.e-sheet-tab').querySelectorAll('.e-text-wrap'); for (let i = 0; i < sheets.length; i++) { if (sheetsElem[i] && !sheetsElem[i].querySelectorAll('.biz-dd-wrap').length) { let wrap = ej.base.createElement('div', { className: 'biz-dd-wrap' }); let icon = ej.base.createElement('span', { className: 'e-icons biz-dd-icon' }); wrap.appendChild(icon); sheetsElem[i].appendChild(wrap); } let wrap = sheetsElem[i].querySelector('.biz-dd-wrap'); wrap.classList.remove('biz-dd-active'); if (activeSheet.name === sheetsElem[i].querySelector('.e-tab-text').innerText) { wrap.classList.add('biz-dd-active'); } } } dataBound(args) { if (this.isInitial) { this.reqCount++; if (this.reqCount == 2) this.isInitial = false; } setTimeout(() => { this.ssObj.sheetTabsModule.refreshSheetTab(); this.sheetColorRender(); }, 50); this.updateSheetIcon(); this.formatpainter.updateEdgesOnBound(); } actionBegin(args) { this.prevFormulaRange = ""; this.formulaActiveCell = ""; this.isFormula = false; if (args.action === "filter") { this.sortingBtn = document.getElementById("DocumentViewer_sorting"); this.sortingBtn.firstElementChild.style.color = "rgb(12 143 11)"; } else if (args.action === 'renameSheet') { let active = this.ssObj.element.querySelector('.e-sheet-tab').querySelector('.biz-dd-active'); this.updatePadding(true); active.remove(); } else if (args.action === 'beforeInsertImage') { var indexes = this.ssObj.biz.getIndexes(); let sheet = this.ssObj.biz.getActiveSheet(); this.oldCellInfo = Object.assign({}, ej.spreadsheet.getCell(indexes[0], indexes[1], sheet)); } else if (args.action === 'clipboard') { (args.args && args.args.eventArgs && args.args.eventArgs.copiedInfo && args.args.eventArgs.copiedInfo.isCut) && this.removeInCellImage(args.args.eventArgs.pastedRange); } } actionComplete(args) { this.prevFormulaRange = ""; this.formulaActiveCell = ""; args.action === 'cellSave' && (this.f2Edit = false, this.isFormula = false); if (args.eventArgs && args.eventArgs.modelType && (args.eventArgs.modelType == "Sheet" || args.eventArgs.modelType == "Row" || args.eventArgs.modelType == "Column") && (args.action == "insert" || args.action == "delete")) { args.eventArgs.sheet = []; this.focusDocumentViewer(); } if (args.action == "resizeToFit") { this.ribbon.imageInCell = true; } if (args.action !== 'import' && Unibase.Apps.Collaboration.Components.Documents.Instance()._openedfile.signalrData != JSON.stringify(args)) { var onlineStatus = (window.navigator.onLine ? 'on' : 'off') + 'line'; window.addEventListener('online', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'inline-block'); window.addEventListener('online', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "none"); window.addEventListener('offline', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'none'); window.addEventListener('offline', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "inline-block"); try { Unibase.Apps.Collaboration.Hubs.UniDocHub.Instance(_appsettings.dochub_url()). getConnection(). invoke("ChangeDoc", Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().FileId, JSON.stringify(args)); } catch (_a) { } } if (args.eventArgs && args.eventArgs.modelType && args.eventArgs.modelType == "Row" && args.action == "delete") { this.removeInCellImage("", [args.eventArgs.startIndex, 0, args.eventArgs.endIndex, this.ssObj.biz.getActiveSheet().usedRange.colIndex]); } if (args.eventArgs && args.eventArgs.modelType && args.eventArgs.modelType == "Column" && args.action == "delete") { this.removeInCellImage("", [0, args.eventArgs.startIndex, this.ssObj.biz.getActiveSheet().usedRange.rowIndex, args.eventArgs.endIndex]); } if (args.action === 'renameSheet') { this.updateSheetIcon(); this.updatePadding(false); this.sheetColorRender(); } if (args.action === 'moveSheet') { this.ssObj.sheets[args.position].index = args.position; this.ssObj.sheets[args.sheetIndexes[0]].index = args.sheetIndexes[0]; var data = { FileId: this.FileId, PreviousSheetIndex: args.sheetIndexes[0], PresentSheetIndex: args.position, }; Unibase.Apps.Collaboration.DocumentManager.Instance().updateSheetColorIndex(data).then((res) => { this.customresult = res.result; this.sheetColorRender(); }); this.focusDocumentViewer(); } if (args.action === 'insert') { if (args.eventArgs.insertType === "Row") { this.ssObj.insertRow(args.eventArgs.index, args.eventArgs.index); } if (args.eventArgs.insertType === "Column") { this.ssObj.insertColumn([{ index: args.eventArgs.index, width: 95 }], args.eventArgs.index); } } if (args.action == "insertImage") { this.actionInsertImage(args); } if (args.action === "imageRefresh" && args && args.eventArgs && args.eventArgs.id) { this.imageRefresh(args); } if (args.action === "resize" && !this.isResizing) { this.resizeImagesOnActionResize(args); this.isResizing = true; this.adjustRowsAndColumnWidth(args); this.isResizing = false; } if (args.action === "cellDelete") this.removeInCellImage(args.eventArgs.address.split("!")[1]); if (args.action === "format") { setTimeout(() => { this.setIncellImageHeightOnFontChange(args); }, 100); } if (args.action === 'resize' || (args.action === 'format' && args.eventArgs.style && args.eventArgs.style.fontSize)) { if (args.eventArgs.isCol) { let size = parseInt(args.eventArgs.width) - parseInt(args.eventArgs.oldWidth); this.formatpainter.refreshEdges(false, undefined, args.eventArgs.index, size); } else if (args.eventArgs.isCol === false) { let size = parseInt(args.eventArgs.height) - parseInt(args.eventArgs.oldHeight); this.formatpainter.refreshEdges(false, args.eventArgs.index, undefined, size); } else { this.formatpainter.refreshEdges(false); } } if (args.action === 'clipboard') { this.removeCopyIndicator(); this.clipboardBizImages(args); (args.eventArgs && args.eventArgs.copiedInfo && args.eventArgs.copiedInfo.isCut) && (this.removeInCellImage(args.eventArgs.pastedRange.split("!")[1])); } if (args.action === "gotoSheet") { this.sortingBtn = document.getElementById("DocumentViewer_sorting"); this.sortingBtn.firstElementChild.style.color = ""; if ((this.ssObj.filterCollection) && this.ssObj.filterCollection.find(x => x.sheetIndex === args.eventArgs.currentSheetIndex)) { this.sortingBtn.firstElementChild.style.color = "rgb(12 143 11)"; } setTimeout(() => { this.addImageClassToAllImages(); }, 1000); this.focusDocumentViewer(); } if (args.action === "filter" && !this.isInitial) { this.updateFilters(args); } if (args.action == "import") { this.updateFilterIcon(); } this.removeCopyIndicator(); args.action == "gotoSheet" && (setTimeout(() => { this.addImageClassToAllImages(); }, 1000)); (this.ribbon.imageInCell) ? (this.ribbon.imageInCell = false) : this.autoSave(args); } updateFilterIcon() { setTimeout(() => { this.sortingBtn = document.getElementById("DocumentViewer_sorting"); if (this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) { this.sortingBtn.firstElementChild.style.color = "rgb(12 143 11)"; } else { this.sortingBtn.firstElementChild.style.color = ""; } }); } focusDocumentViewer() { setTimeout(() => { document.getElementById("DocumentViewer").focus(); }, 100); } removeInCellImage(range, indexes) { let rangeIndexes; if (!indexes) { rangeIndexes = ej.spreadsheet.getIndexesFromAddress(range); } else { rangeIndexes = indexes; } let sheet = this.ssObj.biz.getActiveSheet(); let sheetName = this.setSheetNameForInCell(sheet.name); for (var i = rangeIndexes[0]; i <= rangeIndexes[2]; i++) { for (var j = rangeIndexes[1]; j <= rangeIndexes[3]; j++) { let idEndswith = sheetName + "_" + i + "_" + j; let cell = ej.spreadsheet.getCell(i, j, sheet); if (cell && cell.image && cell.image[0] && cell.image[0].id.startsWith("biz_image_in_cell")) { let img = document.getElementById(cell.image[0].id); if (img) img.remove(); } else if (document.querySelector(`[id$= ${idEndswith}]`)) { let img = document.querySelector(`[id$= ${idEndswith}]`); if (img) img.remove(); } } } } removeCopyIndicator() { if (document.getElementsByClassName("e-copy-indicator")[0]) document.getElementsByClassName("e-copy-indicator")[0].style.display = "none"; if (document.getElementsByClassName("e-formularef-indicator")[0]) document.getElementsByClassName("e-formularef-indicator")[0].remove(); } updateFilters(args) { this.ribbon.imageInCell = true; let sheetIdx = this.getSheetIndex(); if (args.eventArgs.filterOptions) { let collection = { sheetIdx: sheetIdx, column: [], criteria: [], dataType: [], filterRange: args.eventArgs.range, hasFilter: true, predicates: [], value: [] }; this.download.ssAutoSave({ action: "applyFilter", collection: collection }, this, true); } else if (args.eventArgs.predicates) { let cols = args.eventArgs.predicates.map(x => x.field); let collection = { sheetIdx: sheetIdx, column: cols.map(this.lettersToNumber), criteria: args.eventArgs.predicates.map(x => x.operator), dataType: args.eventArgs.predicates.map(x => x.type), filterRange: args.eventArgs.range, hasFilter: true, predicates: args.eventArgs.predicates.map(x => x.predicate), value: args.eventArgs.predicates.map(x => x.value), }; this.download.ssAutoSave({ action: "updateFilter", collection: collection }, this, true); if (this.ssObj.sheets[sheetIdx] && this.ssObj.sheets[sheetIdx].rows) { for (var i = 0; i < this.ssObj.sheets[sheetIdx].rows.length; i++) { if (this.ssObj.sheets[sheetIdx].rows[i] && this.ssObj.sheets[sheetIdx].rows[i].hidden && this.ssObj.sheets[sheetIdx].rows[i].cells) { for (var j = 0; j < this.ssObj.sheets[sheetIdx].rows[i].cells.length; j++) { if (this.ssObj.sheets[sheetIdx].rows[i].cells[j] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id.startsWith("biz_image_in_cell")) { let img = document.getElementById(this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id); if (img) img.style.display = "none"; } } } else if (this.ssObj.sheets[sheetIdx].rows[i].cells) { for (var j = 0; j < this.ssObj.sheets[sheetIdx].rows[i].cells.length; j++) { if (this.ssObj.sheets[sheetIdx].rows[i].cells[j] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id.startsWith("biz_image_in_cell")) { let img = document.getElementById(this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id); img.style.display = ""; } } } } } } else if (!args.eventArgs.filterOptions && !args.eventArgs.predicates) { if (this.ssObj.sheets[sheetIdx] && this.ssObj.sheets[sheetIdx].rows) { for (var i = 0; i < this.ssObj.sheets[sheetIdx].rows.length; i++) { if (this.ssObj.sheets[sheetIdx].rows[i] && this.ssObj.sheets[sheetIdx].rows[i].hidden && this.ssObj.sheets[sheetIdx].rows[i].hidden == false && this.ssObj.sheets[sheetIdx].rows[i].cells) { for (var j = 0; j < this.ssObj.sheets[sheetIdx].rows[i].cells.length; j++) { if (this.ssObj.sheets[sheetIdx].rows[i].cells[j] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0] && this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id.startsWith("biz_image_in_cell")) { let img = document.getElementById(this.ssObj.sheets[sheetIdx].rows[i].cells[j].image[0].id); img.style.display = ""; } } } } } this.download.ssAutoSave({ action: "removeFilter", sheetIndex: this.getSheetIndex() }, this, true); } } setIncellImageHeightOnFontChange(args) { if (args.eventArgs && args.eventArgs.style && args.eventArgs.style.fontSize) { let indexes = this.ssObj.biz.getIndexes(); let sheetIdx = this.getSheetIndex(); let sheet = this.ssObj.biz.getActiveSheet(); let freezeRow = this.ssObj.frozenRowCount(sheet); let freezeCol = this.ssObj.frozenColCount(sheet); let changedValues = []; let remainingRowsImglist = []; if (sheet.rows[indexes[0]].cells) { let currentRowImageslist = []; for (var i = indexes[0]; i <= indexes[2]; i++) { currentRowImageslist = currentRowImageslist.concat(sheet.rows[i].cells.filter(x => x && x.image).map(x => x && x.image[0])); } currentRowImageslist.forEach(x => { if ((x && x.id && x.id).startsWith("biz_image_in_cell")) { let currentrow = Number(x.id.split("_")[5]); let currentcol = Number(x.id.split("_")[6]); let height = (this.ssObj.sheets[sheetIdx].rows[currentrow].height || 19); let cellPstn = ej.spreadsheet.getCellPosition(sheet, [currentrow, currentcol], freezeRow, freezeCol); if (document.getElementById(x.id)) { (document.getElementById(x.id).style.top = cellPstn.top + "px"); document.getElementById(x.id).style.height = height + "px"; } let cell = ej.spreadsheet.getCell(currentrow, currentcol, sheet); cell.image[0].height = height - 2; this.setImageSize("top", cell.image[0]); this.setImageSize("left", cell.image[0]); changedValues.push({ row: currentrow, cell: currentcol, cellinfo: cell }); } }); } for (let i = indexes[2] + 1; i < sheet.rows.length; i++) { let list = sheet.rows[i] && sheet.rows[i].cells && sheet.rows[i].cells.filter(x => x && x.image).map(x => x && x.image[0]); (list) && (remainingRowsImglist = remainingRowsImglist.concat(list)); } remainingRowsImglist.forEach(x => { if ((x && x.id && x.id).startsWith("biz_image_in_cell")) { let row = parseInt(x.id.split("_")[5]); let col = parseInt(x.id.split("_")[6]); let cell = ej.spreadsheet.getCell(row, col, sheet); let cellPstn = ej.spreadsheet.getCellPosition(sheet, [row, col], freezeRow, freezeCol); if (document.getElementById(x.id)) (document.getElementById(x.id).style.top = cellPstn.top + "px"); cell.image[0].top = cellPstn.top; this.setImageSize("top", cell.image[0]); this.setImageSize("left", cell.image[0]); changedValues.push({ row: row, cell: col, cellinfo: cell }); } }); this.ribbon.imageInCell = true; changedValues.length > 0 && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true); } } setColumnIncellImageSize(range) { let sheet = this.ssObj.biz.getActiveSheet(); let changedValuesArray = []; let indexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(range)); for (var i = 0; i <= sheet.usedRange.rowIndex; i++) { for (var j = indexes[1]; j <= sheet.usedRange.colIndex; j++) { changedValuesArray = changedValuesArray.concat(this.performImageResize(sheet, i, j)); } } return changedValuesArray; } setRowIncellImageSize(range) { let sheet = this.ssObj.biz.getActiveSheet(); let changedValuesArray = []; let indexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(range)); for (var i = indexes[0]; i <= sheet.usedRange.rowIndex; i++) { for (var j = 0; j <= sheet.usedRange.colIndex; j++) { changedValuesArray = changedValuesArray.concat(this.performImageResize(sheet, i, j)); } } return changedValuesArray; } performImageResize(sheet, row, col) { let changedValuesArray = []; let cell = ej.spreadsheet.getCell(row, col, sheet); if (cell && cell.image && cell.image.find(x => x.id.startsWith("biz_image_in_cell"))) { let imageModel = cell.image.find(x => x.id.startsWith("biz_image_in_cell")); let imgIdx = cell.image.indexOf(imageModel); let height = (sheet.rows[row].height || 19) - 2; let width = (sheet.columns[col].width || 64) - 1; let cellPstn = ej.spreadsheet.getCellPosition(sheet, [row, col], sheet.frozenRows, sheet.frozenColumns); if (document.getElementById(imageModel.id)) { document.getElementById(imageModel.id).style.top = cellPstn.top + "px"; document.getElementById(imageModel.id).style.left = cellPstn.left + "px"; document.getElementById(imageModel.id).style.height = height + "px"; document.getElementById(imageModel.id).style.width = width + "px"; } cell.image[0].top = cellPstn.top; cell.image[0].left = cellPstn.left; cell.image[0].height = height; cell.image[0].width = width; this.setImageSize("top", cell.image[0]); this.setImageSize("left", cell.image[0]); changedValuesArray.push({ row: row, cell: col, cellinfo: cell }); } return changedValuesArray; } imageRefresh(args) { let sheet = this.ssObj.getActiveSheet(); let idSplit = args.eventArgs.id.split("_"); let row = args.eventArgs.currentRowIdx; let col = args.eventArgs.currentColIdx; let cellInfo = ej.spreadsheet.getCell(row, col, sheet); let sheetName = this.setSheetNameForInCell(sheet.name); let curretImg = cellInfo.image.find(x => x.id == args.eventArgs.id); if (cellInfo && cellInfo.image && curretImg) { let newImgId; if (curretImg.id.includes(sheetName)) { for (var i = 0; i < 3; i++) idSplit.pop(); } else if (!curretImg.id.includes(sheetName)) { if (sheet.pictures) { let index = sheet.pictures.findIndex(x => x.imageId == args.eventArgs.id); (index != -1) && (sheet.pictures.splice(index, 1)); } } newImgId = idSplit.join("_") + "_" + sheetName + "_" + row + "_" + col; let ele = document.getElementById(args.eventArgs.id); (ele) && (ele.id = newImgId); cellInfo.image[0].id = newImgId; cellInfo.image[0].left = args.eventArgs.currentLeft; cellInfo.image[0].top = args.eventArgs.currentTop; cellInfo.image[0].height = parseInt(ele.style.height); cellInfo.image[0].width = parseInt(ele.style.width); this.setImageSize("top", cellInfo.image[0]); this.setImageSize("left", cellInfo.image[0]); this.setImageSize("height", cellInfo.image[0]); this.setImageSize("width", cellInfo.image[0]); let changedValues = [{ row: args.eventArgs.prevRowIdx, cell: args.eventArgs.prevColIdx, cellInfo: ej.spreadsheet.getCell(args.eventArgs.prevRowIdx, args.eventArgs.prevColIdx, sheet) }, { row: row, cell: col, cellInfo: cellInfo }]; this.ribbon.imageInCell = true; (changedValues.length > 0) && this.download.ssAutoSave({ action: "imageRefresh", changedValues: changedValues }, this, true); } } clipboardBizImages(args) { let sheetName; let sheetIdx = this.getSheetIndex(); let sheet = this.ssObj.biz.getActiveSheet(); let freezeRow = this.ssObj.frozenRowCount(sheet); let freezeCol = this.ssObj.frozenColCount(sheet); let changedValues = []; let pastedRange; if (args.action == "cellDrag") { pastedRange = args.pastedCellIdxs; } else { pastedRange = this.ssObj.biz.getIndexes(args.eventArgs.pastedRange.split("!")[1]); } for (var i = pastedRange[0]; i <= pastedRange[2]; i++) { for (var j = pastedRange[1]; j <= pastedRange[3]; j++) { let cellInfo = ej.spreadsheet.getCell(i, j, sheet); sheetName = this.setSheetNameForInCell(sheet.name); if (cellInfo && cellInfo.image && cellInfo.image[0].id.startsWith("biz_image_in_cell_")) { let cellPstn = ej.spreadsheet.getCellPosition(sheet, [i, j], freezeRow, freezeCol); let img = cellInfo.image[0]; let height, width; height = (this.ssObj.sheets[sheetIdx].rows[i].height || 19) - 1; width = (this.ssObj.sheets[sheetIdx].columns[j].width || 64) - 1; if (args.eventArgs.copiedInfo.isCut) { let ele = document.getElementById(cellInfo.image[0].id); img.id = "biz_image_in_cell_" + sheetName + "_" + i + "_" + j; ele.id = img.id; ele.style.height = height + "px"; ele.style.width = width + "px"; ele.style.top = cellPstn.top + "px"; ele.style.left = cellPstn.left + "px"; } else { let prevEle = document.getElementById(cellInfo.image[0].id); var div = document.createElement("div"); div.id = "biz_image_in_cell_" + sheetName + "_" + i + "_" + j; div.style.top = cellPstn.top + "px"; div.style.left = cellPstn.left + "px"; div.style.height = height + "px"; div.style.width = width + "px"; div.style.backgroundImage = "url(" + cellInfo.image[0].src + ")"; div.classList.add('e-ss-overlay'); div.classList.add('biz_image_in_cell'); prevEle.after(div); img.id = div.id; } img.left = cellPstn.left; img.top = cellPstn.top; img.width = width; img.height = height; this.setImageSize("top", img); this.setImageSize("left", img); cellInfo.image[0] = img; changedValues.push({ row: i, cell: j, cellinfo: cellInfo }); this.ribbon.imageInCell = true; } } } if (changedValues.length > 0) { this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true); } } actionInsertImage(args) { let sheetIdx = (args.sheetIndex) ? args.sheetIndex : this.getSheetIndex(); var indexes = (args.indexes) ? args.indexes : this.ssObj.biz.getIndexes(); let sheet = this.ssObj.biz.getActiveSheet(); let cellInfo = (args.cellInfo) ? args.cellInfo : ej.spreadsheet.getCell(indexes[0], indexes[1], sheet); if (args.origin == "biz") { this.ssObj.biz.setCell(indexes[0], indexes[1], sheet, cellInfo); this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: indexes[0], cell: indexes[1], cellinfo: cellInfo }] }, this, true); return; } let sheetName = this.setSheetNameForInCell(sheet.name); let img = cellInfo.image.find(x => x.id == args.eventArgs.id); let ele = document.getElementById(args.eventArgs.id); if (this.ribbon.imageInCell) { if (cellInfo.image && cellInfo.image.find(x => x.id.startsWith("biz_image_in_cell"))) { let prevImgInCell = cellInfo.image.find(x => x.id.startsWith("biz_image_in_cell")); document.getElementById(prevImgInCell.id).remove(); let prevImgIndex = cellInfo.image.indexOf(prevImgInCell); if (~prevImgIndex) cellInfo.image.splice(prevImgIndex, 1); } img.id = "biz_image_in_cell_" + sheetName + "_" + indexes[0] + "_" + indexes[1]; let height, width; height = (this.ssObj.sheets[sheetIdx].rows[indexes[0]].height || 19) - 1; ele.style.height = height + "px"; img.height = height; width = (this.ssObj.sheets[sheetIdx].columns[indexes[1]].width || 64) - 1; ele.style.width = width + "px"; img.width = width; cellInfo.value = ""; ele.classList.add("biz_image_in_cell"); } else { img.id = "spreadsheet_overlay_picture_" + sheetName + "_" + indexes[0] + "_" + indexes[1]; } this.setImageSize("top", img); this.setImageSize("left", img); ele.id = img.id; cellInfo.image[(cellInfo.image.length) - 1] = img; this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: indexes[0], cell: indexes[1], cellinfo: cellInfo }] }, this, true); let args_undoredo = { indexes: indexes, range: this.ssObj.biz.getRange(), cellInfo: cellInfo, action: 'insertimage', origin: 'biz', sheetIndex: sheetIdx }; (this.ribbon.imageInCell) && this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'bizImageInCell', options: args_undoredo, oldCells: this.oldCellInfo } }); this.oldCellInfo = {}; this.ribbon.imageInCell = true; this.bizSignalr(args_undoredo); setTimeout(() => { const index = this.ssObj.undoredoModule.undoCollection.indexOf(this.ssObj.undoredoModule.undoCollection.filter(x => x.name == "bizAction").pop()); this.ssObj.undoredoModule.undoCollection.splice(index + 1, 1); }, 500); } setImageSize(direction, img) { if (img[direction] % 1 != 0) { if (parseInt(img[direction].toString().split(".")[1]) < 50) { img[direction] = parseInt(img[direction].toString().split(".")[0]); } else { img[direction] = parseInt(img[direction].toString().split(".")[0]) + 1; } } else { img[direction] = parseInt(img[direction]); } } resizeImagesOnActionResize(args) { let sheet = this.ssObj.biz.getActiveSheet(); if (args.eventArgs.isCol) { if (sheet.rows && sheet.rows.length > 0) { let changedValues = []; let availableRows = sheet.rows.length; for (var i = 0; i < availableRows; i++) { let cellInfo = ej.spreadsheet.getCell(i, args.eventArgs.index, sheet); if (cellInfo && cellInfo.image && cellInfo.image.length > 0 && cellInfo.image[0].id.startsWith("biz_image_in_cell")) { document.getElementById(cellInfo.image[0].id).style.width = args.eventArgs.width; cellInfo.image[0].width = parseInt(args.eventArgs.width); changedValues.push({ row: i, cell: args.eventArgs.index, cellinfo: cellInfo }); } } for (var i = 0; i < availableRows; i++) { for (var j = args.eventArgs.index + 1; j < sheet.columns.length; j++) { let cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (cellInfo && cellInfo.image && cellInfo.image.length > 0 && cellInfo.image[0].id.startsWith("biz_image_in_cell")) { let previousWidth = cellInfo.image[0].left; let changedWidth = Number(args.eventArgs.width.split("p")[0]) - Number(args.eventArgs.oldWidth.split("p")[0]); let changedWidthWithoutDecimal = parseInt(changedWidth.toString().split(".")[0]); if (changedWidth % 1 != 0) { if (parseInt(changedWidth.toString().split(".")[1]) > 50) { if (Math.sign(changedWidth) === -1) { changedWidth = changedWidthWithoutDecimal - 1; } else if (Math.sign(changedWidth) === 1) { changedWidth = changedWidthWithoutDecimal + 1; } } } let newWidth = previousWidth + changedWidth; if (document.getElementById(cellInfo.image[0].id)) { document.getElementById(cellInfo.image[0].id).style.left = newWidth + 'px'; } cellInfo.image[0].left = newWidth; changedValues.push({ row: i, cell: j, cellinfo: cellInfo }); } } } changedValues.length > 0 && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true); } } else { let changedValues = []; let remainingRowsImglist = []; if (sheet.rows[args.eventArgs.index]) { if (sheet.rows[args.eventArgs.index].cells) { let currentRowImageslist = sheet.rows[args.eventArgs.index].cells.filter(x => x && x.image).map(x => x && x.image[0]); currentRowImageslist.forEach(x => { if ((x && x.id && x.id).startsWith("biz_image_in_cell")) { document.getElementById(x.id).style.height = parseInt(args.eventArgs.height) - 2 + "px"; let col = parseInt(x.id.split("_")[6]); let row = args.eventArgs.index; let cell = ej.spreadsheet.getCell(row, col, sheet); cell.image[0].height = parseInt(args.eventArgs.height) - 2; changedValues.push({ row: row, cell: col, cellinfo: cell }); } }); } } for (var i = parseInt(args.eventArgs.index) + 1; i < sheet.rows.length; i++) { let list = sheet.rows[i] && sheet.rows[i].cells && sheet.rows[i].cells.filter(x => x && x.image).map(x => x && x.image[0]); (list) && (remainingRowsImglist = remainingRowsImglist.concat(list)); } remainingRowsImglist.forEach(x => { if ((x && x.id && x.id).startsWith("biz_image_in_cell")) { let row = parseInt(x.id.split("_")[5]); let col = parseInt(x.id.split("_")[6]); let cell = ej.spreadsheet.getCell(row, col, sheet); let previousHeight = cell.image[0].top; let changedHeight = Number(args.eventArgs.height.split("p")[0]) - Number(args.eventArgs.oldHeight.split("p")[0]); let changedHeightWithoutDecimal = parseInt(changedHeight.toString().split(".")[0]); if (changedHeight % 1 != 0) { if (parseInt(changedHeight.toString().split(".")[1]) > 50) { if (Math.sign(changedHeight) === -1) { changedHeight = changedHeightWithoutDecimal - 1; } else if (Math.sign(changedHeight) === 1) { changedHeight = changedHeightWithoutDecimal + 1; } } } let newHeight = previousHeight + changedHeight; if (document.getElementById(x.id)) { (document.getElementById(x.id).style.top = newHeight + "px"); } cell.image[0].top = newHeight; changedValues.push({ row: row, cell: col, cellinfo: cell }); } }); changedValues.length > 0 && this.download.ssAutoSave({ action: "imageincell", changedValues: changedValues }, this, true); } } addImageClassToAllImages() { let elements = document.querySelectorAll("[id^=biz_image_in_cell]"); elements.forEach(ele => ele.classList.add("biz_image_in_cell")); } bizSignalr(args) { var onlineStatus = (window.navigator.onLine ? 'on' : 'off') + 'line'; window.addEventListener('online', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'inline-block'); window.addEventListener('online', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "none"); window.addEventListener('offline', () => document.getElementsByClassName('biz-ss-cloudsave')[0].style.display = 'none'); window.addEventListener('offline', () => document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "inline-block"); try { Unibase.Apps.Collaboration.Hubs.UniDocHub.Instance(_appsettings.dochub_url()). getConnection(). invoke("ChangeDoc", Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().FileId, JSON.stringify(args)); } catch (_a) { } } refreshHeight() { var rootHeight = this.element.parentElement.parentElement.offsetHeight; var rbnHeight = this.ribbonElem.offsetHeight; this.element.parentElement.style.height = (rootHeight - rbnHeight) + 'px'; } adjustRowsAndColumnWidth(args) { return __awaiter(this, void 0, void 0, function* () { var indexes; var type; var newSize; var oldSize; var size; let spltedrange = this.ssObj.getActiveSheet().selectedRange; if (args.indexes != null) { indexes = args.indexes; } else { indexes = this.ssObj.biz.getIndexes(); } if (args.undo) { let rowstart = args.eventArgs.range[0]; let colstart = args.eventArgs.range[1]; let rowend = args.eventArgs.range[2]; let colend = args.eventArgs.range[3]; if (args.eventArgs.width) { for (let i = colstart; i <= colend; i++) yield this.dialogue.setColWidth(args.eventArgs.width[i].width, i); } if (args.eventArgs.height) { for (let j = rowstart; j <= rowend; j++) yield this.dialogue.setRowHeight(args.eventArgs.height[j].height, j); } } else if (spltedrange.includes(" ") || (indexes[3] - indexes[1] > 0) || (indexes[2] - indexes[0] > 0)) { if (args.eventArgs.width) { type = "Column"; newSize = args.eventArgs.width; oldSize = this.ssObj.getActiveSheet().columns; size = args.eventArgs.width.replace(/[^0-9]/g, ""); if (parseInt(size) <= 30) { args.eventArgs.width = '30px'; } } if (args.eventArgs.height) { type = "Row"; newSize = args.eventArgs.height; oldSize = this.ssObj.getActiveSheet().rows; size = args.eventArgs.height.replace(/[^0-9]/g, ""); if (parseInt(size) <= 21) { args.eventArgs.height = '21px'; } } this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'resize', eventArgs: { index: args.eventArgs.index, newSize: newSize, type: type, sheetIdx: args.eventArgs.sheetIdx, oldSize: oldSize, range: indexes } } }); var array = spltedrange.split(" "); for (let i = 0; i < array.length; i++) { var splitedrange = ej.spreadsheet.getIndexesFromAddress(array[i]); let rowstart = splitedrange[0]; let colstart = splitedrange[1]; let rowend = splitedrange[2]; let colend = splitedrange[3]; if (args.eventArgs.width) { for (let i = colstart; i <= colend; i++) yield this.dialogue.setColWidth(args.eventArgs.width, i); } if (args.eventArgs.height) { for (let j = rowstart; j <= rowend; j++) yield this.dialogue.setRowHeight(args.eventArgs.height, j); } if (!args.indexes) { args.origin = "biz"; args.indexes = indexes; this.bizSignalr(args); this.autoSave(args); } } this.ribbon.imageInCell = true; setTimeout(() => { const index = this.ssObj.undoredoModule.undoCollection.indexOf(this.ssObj.undoredoModule.undoCollection.filter(x => x.name == "bizAction").pop()); this.ssObj.undoredoModule.undoCollection.splice(index + 1, 1); }, 500); } }); } fileNameChange() { var tempfilename = $(".biz-ss-filename").val(); var data = { Title: tempfilename, Id: this.FileId, Type: "File", }; Unibase.Apps.Collaboration.DocumentManager.Instance().renameFileTitle(data); } renderPopup(callback) { Unibase.Apps.Collaboration.Components.Documents.Instance().loadForm(0, this.FileId, 0, callback, this.documentGroup); } renderMenuBar() { let containers = document.body.getElementsByClassName('_bizgaze_popup_container'); this.container = containers[containers.length - 1]; this.container.insertBefore(this.util.createElement("div", 'class', 'biz-ss-ribbon'), this.container.firstElementChild); this.util.appendChildren('DocumentViewer', 0); this.util.appendChildren('biz-ss-ribbon', 0, this.util.createElement("div", 'class', 'biz-ss-sheetlogo'), this.util.createElement("div", 'class', 'biz-ss-tooolbar'), this.util.createElement("div", 'class', 'biz-ss-userdetails e-ribbon e-collapsed'), this.util.createElement("div", 'class', 'biz-ss-username-wrapper')); this.util.appendChildren('biz-ss-sheetlogo', 0, this.util.createElement("img", 'class', 'biz-ss-logo')); this.util.appendChildren('biz-ss-tooolbar', 0, this.util.createElement("div", 'class', 'biz-ss-fileinfo'), this.util.createElement("div", 'class', 'biz-ss-fileshare-wrapper'), this.util.createElement("div", 'class', 'biz-ss-onlineusers'), this.util.createElement("div", 'class', 'biz-ss-toolbarmenu')); this.util.appendChildren('biz-ss-fileshare-wrapper', 0, this.util.createElement("div", 'class', 'biz-ss-fileshare')); this.util.appendChildren('biz-ss-onlineusers', 0, this.util.createElement("div", 'class', 'biz-ss-onlineusersintials d-flex flex-row text-white mx-35 pull-right')); this.util.appendChildren('biz-ss-fileshare', 0, this.util.createElement("button", 'class', 'biz-ss-fileshare-btn')); this.util.appendChildren('biz-ss-fileinfo', 0, this.util.createElement("input", 'class', 'biz-ss-filename'), this.util.createElement('div', 'class', 'biz-ss-starred'), this.util.createElement('div', 'class', 'biz-ss-autosave')); this.util.appendChildren('biz-ss-starred', 0, this.util.createElement("span", 'id', 'biz-ss-star'), this.util.createElement("i", 'class', 'fa fa-star-o text-light font-7 biz_ss_star_icon_' + this.FileId)); this.util.appendChildren('biz-ss-autosave', 0, this.util.createElement("img", 'class', 'biz-ss-saveicon biz-ss-cloudsave'), this.util.createElement("img", 'class', 'biz-ss-saveicon biz-ss-cloudoff'), this.util.createElement("div", 'class', 'biz-ss-cloudloading e-icons'), this.util.createElement('div', 'class', 'biz-ss-saving')); this.util.appendChildren('biz-ss-userdetails', 0, this.util.createElement("div", 'class', 'biz-ss-userinitial')); this.util.appendChildren('biz-ss-toolbarmenu', 0, this.util.createElement("ul", 'id', 'menu'), this.util.createElement("input", 'class', 'biz-ss-lastedited')); document.getElementsByClassName("biz-ss-logo")[0].setAttribute('src', 'imgs/BizgazeSheetsIcon.svg'); document.getElementsByClassName("biz-ss-cloudsave")[0].setAttribute('src', 'imgs/cloud-computing.svg'); document.getElementsByClassName("biz-ss-cloudsave")[0].setAttribute('title', 'See document status'); document.getElementsByClassName("biz-ss-cloudoff")[0].setAttribute('src', 'imgs/cloud-off.svg'); document.getElementsByClassName("biz-ss-cloudoff")[0].style.display = "none"; let htmlelement = document.getElementsByClassName('biz-ss-filename')[0]; this.util.addAttributes(htmlelement, { 'value': this.FileName, 'type': 'text' }); let attributesforautosave = { 'type': 'span' }; this.userInitial = document.getElementsByClassName("biz-ss-userinitial")[0]; let identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); if (!identity.photoUrl) { this.userInitial.textContent += identity.name.trim().slice(0, 1); this.userInitial.classList.add('biz-ss-initial-text'); } else { this.userInitial.classList.add('biz-ss-initial-img'); this.userInitial.style.backgroundImage = "url(" + identity.photoUrl + ")"; } if (!this.newUpload) { if (this.lastEditedTime != 0) { if (this.unibaseusername === this.username) { let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0]; this.util.addAttributes(htmlelementlastedited, { 'value': 'last edit was made ' + this.lastEditedTime + ' ' + this.timePeriod + ' ago', 'type': 'span' }); } else { let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0]; this.util.addAttributes(htmlelementlastedited, { 'value': 'last edit was made ' + this.lastEditedTime + ' ' + this.timePeriod + ' ago by ' + this.username, 'type': 'span' }); } } else { if (this.unibaseusername === this.username) { let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0]; this.util.addAttributes(htmlelementlastedited, { 'value': 'last edit was made seconds ago ', 'type': 'span' }); } else { let htmlelementlastedited = document.getElementsByClassName('biz-ss-lastedited')[0]; this.util.addAttributes(htmlelementlastedited, { 'value': 'last edit was made seconds ago by ' + this.username, 'type': 'span' }); } } } let htmlelementforautosave = document.getElementsByClassName('biz-ss-saving')[0]; this.util.addAttributes(htmlelementforautosave, attributesforautosave); document.getElementsByClassName('biz-ss-lastedited')[0].setAttribute('disabled', ""); document.getElementsByClassName('biz-ss-saving')[0].style.display = 'none'; document.getElementsByClassName('biz-ss-saving')[0].innerText = 'Saving...'; document.getElementsByClassName("biz-ss-fileshare-btn")[0].style.backgroundColor = "#049503"; var shareBtn = new ej.buttons.Button({ cssClass: `e-primary`, content: `Share`, iconCss: 'biz-ss-fileshare-icon icon-ss-lockopen' }); shareBtn.appendTo(".biz-ss-fileshare-btn"); document.getElementsByClassName("biz-ss-userinitial")[0].setAttribute("title", identity.name.trim()); let color = this.util.colorHash(identity.name.trim()); document.getElementsByClassName("biz-ss-userinitial")[0].style.backgroundColor = color.hex; this.ribbonElem = document.body.getElementsByClassName('biz-ss-ribbon')[0]; } editDetails() { if (this.FileId != 0) { Unibase.Apps.Collaboration.DocumentManager.Instance().lastEdit(this.FileId).then((response) => { this.identity = Unibase.Platform.Membership.Infos.Identity.getCurrentUser(); this.unibaseusername = this.identity.name; this.lastEditedTime = response.result.Lastedittime; this.username = response.result.LastUpdatedByName; this.timePeriod = response.result.TimePeriod; if (this.unibaseusername === this.username && this.lastEditedTime === 0) { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made seconds ago"; } else if (this.unibaseusername === this.username && this.lastEditedTime !== 0) { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made " + this.lastEditedTime + " " + this.timePeriod + " ago"; } else { let element = (document.getElementsByClassName('biz-ss-lastedited')[0]); element.value = "last edit was made seconds ago by " + this.username; } }); } clearInterval(this.intr); clearInterval(this.intrhour); this.initSetInterval(); } windowKeydown(e) { if (e.keyCode === 116) (this.fileurl) && (window.location.href = window.origin + "#/documents/" + this.fileurl + "/Excel/0"); this.ctrl_Shift_S(e); } keyDown(e) { let sheet = this.ssObj.biz.getActiveSheet(); let indexes = this.ssObj.biz.getIndexes(); let editDiv = document.getElementById("DocumentViewer_edit"); this.lastKeyEvent = e; this.cellRowStart = indexes[0]; this.cellColStart = indexes[1]; this.cellRowEnd = indexes[2]; this.cellColEnd = indexes[3]; let sheetIdx = this.getSheetIndex(); let availableRows = sheet.rows.length; let availableCols = sheet.columns.length; let indexesToInitiateFormula = []; let prevFormulaIndexes = []; let cellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart, sheet); let evtobj = window.event ? event : e; if (document.getElementById("DocumentViewer_text_align")) var textAlign = document.getElementById("DocumentViewer_text_align").ej2_instances[0]; if (document.getElementById("DocumentViewer_vertical_align")) var verticalAlign = document.getElementById("DocumentViewer_vertical_align").ej2_instances[0]; let popup = document.body.querySelector('#' + this.ssObj.element.id + '_ac_popup'); if (editDiv && editDiv.textContent) { if (this.ssObj.isEdit && editDiv.textContent.startsWith("=")) { this.isFormula = true; if (!popup) { if (!evtobj.ctrlKey && !evtobj.shiftKey) { if (e.keyCode == 37) { if (this.prevFormulaRange) { this.setFormlaActiveCell(this.prevFormulaRange); prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange); if (prevFormulaIndexes[3] == 0) this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1); else this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1]) + (prevFormulaIndexes[0] + 1); } else { prevFormulaIndexes = this.ssObj.biz.getIndexes(); if (prevFormulaIndexes[3] >= 0) { let formulaRange = ""; if (prevFormulaIndexes[3] == 0) formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1); else formulaRange = this.generateHeaderText(prevFormulaIndexes[1]) + (prevFormulaIndexes[0] + 1); this.prevFormulaRange = formulaRange; } } this.formulaActiveCell = this.prevFormulaRange; } else if (e.keyCode == 39) { if (this.prevFormulaRange) { this.setFormlaActiveCell(this.prevFormulaRange); prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange); this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 2) + (prevFormulaIndexes[0] + 1); } else { prevFormulaIndexes = this.ssObj.biz.getIndexes(); let formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 2) + (prevFormulaIndexes[0] + 1); this.prevFormulaRange = formulaRange; } this.formulaActiveCell = this.prevFormulaRange; } else if (e.keyCode == 38) { if (this.prevFormulaRange) { this.setFormlaActiveCell(this.prevFormulaRange); prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange); if (prevFormulaIndexes[2] == 0) this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1); else this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0]); } else { prevFormulaIndexes = this.ssObj.biz.getIndexes(); let formulaRange = ""; if (prevFormulaIndexes[2] == 0) formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1); else formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0]); this.prevFormulaRange = formulaRange; } this.formulaActiveCell = this.prevFormulaRange; } else if (e.keyCode == 40) { if (this.prevFormulaRange) { this.setFormlaActiveCell(this.prevFormulaRange); prevFormulaIndexes = ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange); this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 2); } else { prevFormulaIndexes = this.ssObj.biz.getIndexes(); let formulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 2); this.prevFormulaRange = formulaRange; } this.formulaActiveCell = this.prevFormulaRange; } } if ((!evtobj.ctrlKey && evtobj.shiftKey)) { if (e.keyCode == 40) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); if (this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[0] + 1)) this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 2); else this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 2) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1); } else { this.formulaActiveCell = sheet.activeCell; this.prevFormulaRange = this.formulaActiveCell + ":" + this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 2); } } else if (e.keyCode == 39) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); if (this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[2] + 1)) this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 2) + (prevFormulaIndexes[2] + 1); else this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 2) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1); } else { this.formulaActiveCell = sheet.activeCell; this.prevFormulaRange = this.formulaActiveCell + ":" + this.generateHeaderText(this.cellColEnd + 2) + (this.cellRowEnd + 1); } } else if (e.keyCode == 38) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); if ((this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[0] + 1)) && (prevFormulaIndexes[2] - prevFormulaIndexes[0] > 0)) this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2]); else this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0]) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1); } else { this.formulaActiveCell = sheet.activeCell; this.prevFormulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart) + ":" + this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1); } } else if (e.keyCode == 37) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); if (this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) || this.formulaActiveCell == this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[2] + 1)) this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1] + 1) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3]) + (prevFormulaIndexes[2] + 1); else this.prevFormulaRange = this.generateHeaderText(prevFormulaIndexes[1]) + (prevFormulaIndexes[0] + 1) + ":" + this.generateHeaderText(prevFormulaIndexes[3] + 1) + (prevFormulaIndexes[2] + 1); } else { this.formulaActiveCell = sheet.activeCell; this.prevFormulaRange = this.generateHeaderText(this.cellColStart) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1); } } } if ((evtobj.ctrlKey && evtobj.shiftKey)) { let newIndexes; let activeCellIndexes; if (e.keyCode == 40) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); let args = { evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell); newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]); this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]); } else { this.formulaActiveCell = sheet.activeCell; let args = { evtobj: evtobj, indexes: indexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]); this.prevFormulaRange = formulaRange; } } else if (e.keyCode == 39) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); let args = { evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell); newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]); this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]); } else { this.formulaActiveCell = sheet.activeCell; prevFormulaIndexes = this.ssObj.biz.getIndexes(); let args = { evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]); this.prevFormulaRange = formulaRange; } } else if (e.keyCode == 38) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); let args = { evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell); newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]); this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]); } else { this.formulaActiveCell = sheet.activeCell; prevFormulaIndexes = this.ssObj.biz.getIndexes(); if (prevFormulaIndexes[0] > 0) { let args = { evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]); this.prevFormulaRange = formulaRange; } } } else if (e.keyCode == 37) { if (this.prevFormulaRange) { prevFormulaIndexes = this.swapRange(ej.spreadsheet.getIndexesFromAddress(this.prevFormulaRange)); let args = { evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); activeCellIndexes = ej.spreadsheet.getIndexesFromAddress(this.formulaActiveCell); newIndexes = this.swapRange([activeCellIndexes[0] + 1, activeCellIndexes[1] + 1, indexesToInitiateFormula[1], indexesToInitiateFormula[0]]); this.prevFormulaRange = this.generateHeaderText(newIndexes[1]) + (newIndexes[0]) + ":" + this.generateHeaderText(newIndexes[3]) + (newIndexes[2]); } else { this.formulaActiveCell = sheet.activeCell; prevFormulaIndexes = this.ssObj.biz.getIndexes(); if (prevFormulaIndexes[2] > 0) { let args = { evtobj: evtobj, indexes: prevFormulaIndexes, activeCell: this.formulaActiveCell, availableRows: availableRows, availableCols: availableCols }; indexesToInitiateFormula = this.getIndexesOnCtrlShifArrows(args); let formulaRange = this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1) + ":" + this.generateHeaderText(indexesToInitiateFormula[0]) + (indexesToInitiateFormula[1]); this.prevFormulaRange = formulaRange; } } } } if ((e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40) && this.isFormula) { if (editDiv.textContent.includes("(")) { let formula = editDiv.textContent.split("("); editDiv.textContent = formula[0] + "(" + this.prevFormulaRange; } else editDiv.textContent = "=" + this.prevFormulaRange; let col = { formulaSheetIdx: sheetIdx, name: "initiateFormulaReference", range: this.prevFormulaRange }; this.ssObj.selectionModule.initiateFormulaSelection(col); setTimeout(() => { let range = document.createRange(); var el = this.ssObj.element.querySelector('#' + this.ssObj.element.id + '_edit'); ; var selection = window.getSelection(); range = document.createRange(); selection.removeAllRanges(); range.selectNodeContents(el); range.collapse(false); selection.addRange(range); el.focus(); }, 0); } } } else { this.isFormula = false; } } else { this.isFormula = false; } if (evtobj.ctrlKey && evtobj.shiftKey && !this.isFormula && !this.ssObj.isEdit) { if (evtobj.keyCode == 76) { e.preventDefault(); e.stopImmediatePropagation(); textAlign.trigger('select', { item: textAlign.items[0] }); } if (evtobj.keyCode == 69) { e.preventDefault(); e.stopImmediatePropagation(); textAlign.trigger('select', { item: textAlign.items[1] }); } if (evtobj.keyCode == 82) { e.preventDefault(); textAlign.trigger('select', { item: textAlign.items[2] }); } if (evtobj.keyCode == 84) { e.preventDefault(); e.stopImmediatePropagation(); verticalAlign.trigger('select', { item: verticalAlign.items[0] }); } if (evtobj.keyCode == 77) { e.preventDefault(); verticalAlign.trigger('select', { item: verticalAlign.items[1] }); } if (evtobj.keyCode == 66) { e.preventDefault(); e.stopImmediatePropagation(); verticalAlign.trigger('select', { item: verticalAlign.items[2] }); } } if (e.keyCode == 113) { if (this.ssObj.isEdit) this.f2Edit = true; } if (e.keyCode == 113 && e.shiftKey) { e.preventDefault(); this.formatpainter.insertNote(); } if (this.ssObj.isEdit) { if (!this.isFormula && !this.f2Edit && !evtobj.shiftKey && !evtobj.ctrlKey && (e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40)) { var val = document.getElementsByClassName("e-spreadsheet-edit")[0].innerText; if (cellInfo == null) { cellInfo = {}; } cellInfo["value"] = val; this.ssObj.biz.setCell(this.cellRowStart, this.cellColStart, sheet, cellInfo); this.ssObj.endEdit(); this.f2Edit = false; } } if (!evtobj.shiftKey && evtobj.ctrlKey && (e.keyCode == 68 || e.keyCode == 82 || e.keyCode == 13)) { e.preventDefault(); let args = { origin: 'biz', action: 'shortcuts', range: indexes, e: e, evtobj: evtobj, sheet: sheet, sheetIndex: this.getSheetIndex() }; this.ssObj.updateUndoRedoCollection({ name: 'bizAction', args: { action: 'shortcuts', options: args, oldCells: this.getCellsFromIndexes(args.range) } }); this.shortcuts(args); Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().bizSignalr(args); this.download.ssAutoSave({ action: 'shortcuts' }, this, true); } this.clearFindReplace(); } viewOnlyKeyDown(e) { let sheet = this.ssObj.biz.getActiveSheet(); let indexes = this.ssObj.biz.getIndexes(); let availableRows = sheet.rows.length; let availableCols = sheet.columns.length; let evtobj = window.event ? event : e; let activeCell = sheet.activeCell; let sheetIdx = this.getSheetIndex(); let selectedIndex = []; let fullscreenDialog = document.getElementById("menubar-fullscreen-container"); if (evtobj.ctrlKey && evtobj.shiftKey && !this.isFormula && !this.ssObj.isEdit) { let keyPressArgs = { evtobj: evtobj, indexes: indexes, activeCell: activeCell, availableCols: availableCols, availableRows: availableRows }; selectedIndex = this.getIndexesOnCtrlShifArrows(keyPressArgs); } if (fullscreenDialog && e.keyCode == 27) this.dialogue.hideSsMenubarFullscreenDialog(); if (evtobj.ctrlKey && e.keyCode == 65 && !this.ssObj.isEdit) this.ctrlA_Function(); if (e.keyCode == 122) { e.preventDefault(); this.openFullscreen(this.container); } if (evtobj.keyCode == 37 || evtobj.keyCode == 39 || evtobj.keyCode == 38 || evtobj.keyCode == 40) { this.ssObj.selectRange(this.ssObj.sheets[sheetIdx].activeCell + ":" + this.generateHeaderText(selectedIndex[0]) + (selectedIndex[1])); } this.ctrl_Shift_S(e); } ctrl_Shift_S(e) { if (e.keyCode == 83 && ((e.ctrlKey && !e.shiftKey) || (e.ctrlKey && e.shiftKey))) { e.preventDefault(); e.stopImmediatePropagation(); } } ctrlA_Function() { if (!this.isCtrlA) { this.isCtrlA = true; for (var i = this.cellRowStart; i <= this.cellRowEnd; i++) { for (var j = this.cellColStart; j <= this.cellColEnd; j++) this.checksForCellsWithValues([i, j]); } if ((this.selectedIndexes[0] !== this.cellRowStart || this.selectedIndexes[1] !== this.cellColStart || this.selectedIndexes[2] !== this.cellRowEnd || this.selectedIndexes[3] !== this.cellColEnd)) { this.ssObj.selectRange(this.generateHeaderText(this.selectedIndexes[1] + 1) + (this.selectedIndexes[0] + 1) + ":" + this.generateHeaderText(this.selectedIndexes[3] + 1) + (this.selectedIndexes[2] + 1)); this.isCtrlA = true; } else this.ctrlA_Function(); this.checkedIndexes = []; this.selectedIndexes = [null, null, null, null]; } else { this.isCtrlA = false; var elem = document.body.querySelector('.e-selectall'); var pos = elem.getBoundingClientRect(); this.ssObj.selectionModule.mouseDownHandler({ target: elem, shiftKey: false, ctrlKey: false, type: 'mousedown', clientY: pos.top, clientX: pos.left }); this.checkedIndexes = []; this.selectedIndexes = [null, null, null, null]; } } getIndexesOnCtrlShifArrows(args) { let nextCellInfo; let cellInfo; let selectedIndex = []; let sheet = this.ssObj.biz.getActiveSheet(); this.cellRowStart = args.indexes[0]; this.cellColStart = args.indexes[1]; this.cellRowEnd = args.indexes[2]; this.cellColEnd = args.indexes[3]; if (args.evtobj.keyCode == 40) { args.evtobj.preventDefault(); args.evtobj.stopImmediatePropagation(); if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd + 1, this.cellColStart, sheet); for (var i = this.cellRowEnd + 1; i < 10000000; i++) { for (var j = this.cellColStart; j <= this.cellColStart; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (j == this.cellColStart) { if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo)) || (i >= args.availableRows || j >= args.availableCols))) { selectedIndex.push(this.cellColEnd + 1, i, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } } } } } else if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart + 1, this.cellColStart, sheet); for (var i = this.cellRowStart + 1; i < 10000000; i++) { for (var j = this.cellColStart; j <= this.cellColStart; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo)) || (i >= args.availableRows || j >= args.availableCols))) { selectedIndex.push(this.cellColEnd + 1, i, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } } } } else if (args.activeCell === this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart + 1, this.cellColEnd, sheet); for (var i = this.cellRowStart + 1; i < 10000000; i++) { for (var j = this.cellColEnd; j <= this.cellColEnd; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo)) || (i >= args.availableRows || j >= args.availableCols))) { selectedIndex.push(this.cellColStart + 1, i, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } } } } else { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd + 1, this.cellColEnd, sheet); for (let i = this.cellRowEnd + 1; i < 10000000; i++) { for (let j = this.cellColEnd; j <= this.cellColEnd; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (j == this.cellColEnd) { if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColStart + 1, i, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowEnd, this.cellColEnd); i = 10000000; } } } } } } else if (args.evtobj.keyCode == 38) { args.evtobj.preventDefault(); args.evtobj.stopImmediatePropagation(); if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd - 1, this.cellColStart, sheet); for (let i = this.cellRowEnd - 1; i < 1000000000; i--) { for (let j = this.cellColStart; j <= this.cellColStart; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (j == this.cellColStart) { if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColEnd + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if (i == -1) { selectedIndex.push(this.cellColEnd + 1, 1); i = 1000000001; } } } } } else if (args.activeCell == this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart - 1, this.cellColStart, sheet); for (let i = this.cellRowStart - 1; i < 1000000000; i--) { for (let j = this.cellColStart; j <= this.cellColStart; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (j == this.cellColStart) { if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColEnd + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColEnd + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if (i == -1) { selectedIndex.push(this.cellColEnd + 1, 1); i = 1000000001; } } } } } else if (args.activeCell == this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart - 1, this.cellColEnd, sheet); for (let i = this.cellRowStart - 1; i < 1000000000; i--) { for (let j = this.cellColEnd; j <= this.cellColEnd; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (j == this.cellColEnd) { if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColStart + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if (i == -1) { selectedIndex.push(this.cellColStart + 1, 1); i = 1000000001; } } } } } else { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd - 1, this.cellColEnd, sheet); for (let i = this.cellRowEnd - 1; i < 1000000000; i--) { for (let j = this.cellColEnd; j <= this.cellColEnd; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (j == this.cellColEnd) { if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColStart + 1, i + 2, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(this.cellColStart + 1, i + 1, i, j, this.cellRowStart, this.cellColEnd); i = 1000000001; } else if (i == -1) { selectedIndex.push(this.cellColStart + 1, 1); i = 1000000001; } } } } } } else if (args.evtobj.keyCode == 39) { args.evtobj.preventDefault(); args.evtobj.stopImmediatePropagation(); if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColEnd + 1, sheet); for (let i = this.cellRowStart; i <= this.cellRowStart; i++) { for (let j = this.cellColEnd + 1; j < 1000000000 + 1; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } } } } else if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColEnd + 1, sheet); for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) { for (let j = this.cellColEnd + 1; j < 1000000000 + 1; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } } } } else if (args.activeCell === this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColStart + 1, sheet); for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) { for (let j = this.cellColStart + 1; j < 1000000000 + 1; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowStart + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } } } } else { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart + 1, sheet); for (let i = this.cellRowStart; i <= this.cellRowStart; i++) { for (let j = this.cellColStart + 1; j < 1000000000 + 1; j++) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowEnd + 1, this.cellRowStart, this.cellColStart, i, j); j = 1000000001; } } } } } else if (args.evtobj.keyCode == 37) { args.evtobj.preventDefault(); args.evtobj.stopImmediatePropagation(); if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowStart + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColEnd - 1, sheet); for (let i = this.cellRowStart; i <= this.cellRowStart; i++) { for (let j = this.cellColEnd - 1; j < 1000000000; j--) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 2, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if (j == -1) { selectedIndex.push(1, this.cellRowEnd + 1); j = 1000000001; } } } } else if (args.activeCell === this.generateHeaderText(this.cellColStart + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColEnd - 1, sheet); for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) { for (let j = this.cellColEnd - 1; j < 1000000000; j--) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 2, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if (j == -1) { selectedIndex.push(1, this.cellRowStart + 1); j = 1000000001; } } } } else if (args.activeCell === this.generateHeaderText(this.cellColEnd + 1) + (this.cellRowEnd + 1)) { nextCellInfo = ej.spreadsheet.getCell(this.cellRowEnd, this.cellColStart - 1, sheet); for (let i = this.cellRowEnd; i <= this.cellRowEnd; i++) { for (let j = this.cellColStart - 1; j < 1000000000; j--) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 2, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowStart + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if (j == -1) { selectedIndex.push(1, this.cellRowStart + 1); j = 1000000001; } } } } else { nextCellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart - 1, sheet); for (let i = this.cellRowStart; i <= this.cellRowStart; i++) { for (let j = this.cellColStart - 1; j < 1000000000; j--) { cellInfo = ej.spreadsheet.getCell(i, j, sheet); if (((this.checkCellObjHasValue(nextCellInfo)) && !(this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 2, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if ((!(this.checkCellObjHasValue(nextCellInfo)) && (this.checkCellObjHasValue(cellInfo))) || (i >= args.availableRows || j >= args.availableCols)) { selectedIndex.push(j + 1, this.cellRowEnd + 1, i, j = -1 ? 0 : j, this.cellRowStart, this.cellColStart + 1); j = 1000000001; } else if (j == -1) { selectedIndex.push(1, this.cellRowEnd + 1); j = 1000000001; } } } } } return selectedIndex; } checksForCellsWithValues(indexes) { if (this.checkedIndexes.findIndex((x) => x[0] == indexes[0] && x[1] == indexes[1]) === -1) { this.checkedIndexes.push(indexes); let sheet = this.ssObj.getActiveSheet(); let cellInfoDown = ej.spreadsheet.getCell(indexes[0] + 1, indexes[1], sheet); let cellInfoUp = ej.spreadsheet.getCell(indexes[0] - 1, indexes[1], sheet); let cellInfoLeft = ej.spreadsheet.getCell(indexes[0], indexes[1] - 1, sheet); let cellInfoRight = ej.spreadsheet.getCell(indexes[0], indexes[1] + 1, sheet); if (this.selectedIndexes[0] == null || this.selectedIndexes[2] == null) { this.selectedIndexes[0] = indexes[0]; this.selectedIndexes[2] = indexes[0]; } if (this.selectedIndexes[1] == null || this.selectedIndexes[3] == null) { this.selectedIndexes[1] = indexes[1]; this.selectedIndexes[3] = indexes[1]; } if (this.selectedIndexes[0] > indexes[0]) this.selectedIndexes[0] = indexes[0]; if (this.selectedIndexes[2] < indexes[0]) this.selectedIndexes[2] = indexes[0]; if (this.selectedIndexes[1] > indexes[1]) this.selectedIndexes[1] = indexes[1]; if (this.selectedIndexes[3] < indexes[1]) this.selectedIndexes[3] = indexes[1]; if (this.checkCellObjHasValue(cellInfoDown)) this.checksForCellsWithValues([indexes[0] + 1, indexes[1]]); if (this.checkCellObjHasValue(cellInfoUp)) this.checksForCellsWithValues([indexes[0] - 1, indexes[1]]); if (this.checkCellObjHasValue(cellInfoLeft)) this.checksForCellsWithValues([indexes[0], indexes[1] - 1]); if (this.checkCellObjHasValue(cellInfoRight)) this.checksForCellsWithValues([indexes[0], indexes[1] + 1]); } } setFormlaActiveCell(prevFormula) { if (prevFormula.includes(":")) { let singeRange = prevFormula.split(":")[0]; this.formulaActiveCell = singeRange; } else this.formulaActiveCell = prevFormula; } keyUp(e) { if (e.keyCode == 113) { if (this.ssObj.isEdit) this.f2Edit = true; } } bodyDblClick(e) { let importDialog = document.getElementsByClassName("biz-ss-import-dialog"); if (this.ssObj.isEdit) this.f2Edit = true; if (importDialog.length > 0) { if (e.target.classList.contains("copyto_folder")) { debugger; let folderid = Number(e.target.id.split("_")[2]); let foldername = e.target.firstElementChild.textContent.trim(); Unibase.Apps.Collaboration.Components.Sheets.Ribbon.Instance().getFolderItems(folderid, foldername, true); } } } shortcuts(args) { var range = args.range; this.cellRowStart = range[0]; this.cellColStart = range[1]; this.cellRowEnd = range[2]; this.cellColEnd = range[3]; var cellInfo = ej.spreadsheet.getCell(this.cellRowStart, this.cellColStart, args.sheet); if (args.evtobj.ctrlKey && args.e.keyCode == 13 && !args.evtobj.shiftKey) { args.e.preventDefault(); args.e.stopImmediatePropagation(); args.e.stopPropagation(); for (var i = this.cellRowStart; i <= this.cellRowEnd; i++) { for (var j = this.cellColStart; j <= this.cellColEnd; j++) this.ssObj.biz.setCell(i, j, args.sheet, cellInfo); } } } scroll(selectedIndex) { let sheet = this.ssObj.getActiveSheet(); let freezeRow = this.ssObj.frozenRowCount(sheet); let freezeCol = this.ssObj.frozenColCount(sheet); var cellPosition = ej.spreadsheet.getCellPosition(sheet, [selectedIndex[2], selectedIndex[3]], freezeRow, freezeCol); let verticalElem = this.ssObj.element.querySelector('.e-main-panel'); if (!(cellPosition.top > verticalElem.scrollTop && cellPosition.top < verticalElem.scrollTop + verticalElem.offsetHeight) || verticalElem.offsetHeight + verticalElem.scrollTop < ej.spreadsheet.getCellPosition(this.ssObj.getActiveSheet(), [selectedIndex[2], selectedIndex[3]], freezeRow, freezeCol).top) { verticalElem.scrollTop = cellPosition.top - verticalElem.offsetHeight + 20; } cellPosition = ej.spreadsheet.getCellPosition(sheet, [selectedIndex[4], selectedIndex[5]], freezeRow, freezeCol); let horizontalElem = this.ssObj.getScrollElement(); if (!(cellPosition.left > horizontalElem.scrollLeft && cellPosition.left < horizontalElem.scrollLeft + horizontalElem.offsetWidth) || horizontalElem.offsetWidth + horizontalElem.scrollLeft < ej.spreadsheet.getCellPosition(this.ssObj.getActiveSheet(), [selectedIndex[4], selectedIndex[5]], freezeRow, freezeCol).left) { horizontalElem.scrollLeft = cellPosition.left - horizontalElem.offsetWidth + 20; } } openFullscreen(elem) { if (elem.requestFullscreen) { elem.requestFullscreen(); } else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen(); } else if (elem.msRequestFullscreen) { elem.msRequestFullscreen(); } } setHeightOnFullScreenChange() { let sheetPannelElement = document.getElementById("DocumentViewer_sheet_panel"); var menubarHeight = this.element.parentElement.previousElementSibling.offsetHeight; var footerHeight = this.element.parentElement.nextElementSibling.offsetHeight; var toolbarHeight = sheetPannelElement.previousElementSibling.previousElementSibling.offsetHeight; var sheetTabPannelHeight = sheetPannelElement.nextElementSibling.offsetHeight; var formulaPannelHeight = sheetPannelElement.previousElementSibling.offsetHeight; var totalHeight = menubarHeight + footerHeight + formulaPannelHeight + sheetTabPannelHeight + toolbarHeight; this.element.parentElement.style.height = (window.innerHeight - menubarHeight - footerHeight) + 'px'; sheetPannelElement.style.height = (window.innerHeight - totalHeight) + 'px'; } setViewonly() { this.ssObj["allowEditing"] = false; this.ssObj["allowResizing"] = false; this.ssObj["enableContextMenu"] = false; this.ssObj["allowAutoFill"] = false; document.getElementsByClassName("biz-ss-fileshare-icon")[0].classList.remove("icon-ss-lockopen"); document.getElementsByClassName("biz-ss-fileshare-icon")[0].classList.add("icon-ss-lockclose"); this.ribbon.ssMenubarObj.enableItems(["Import", "Make A Copy", "Edit", "Insert", "Format", "Formulas", "Data", "Freeze Panes", "Freeze Rows", "Freeze Columns", "Tools"], false); document.getElementById("DocumentViewer_sheet_tab_panel").firstElementChild.setAttribute("disabled", "true"); document.getElementById("DocumentViewer_ribbon").classList.add("biz-ss-toolbar-wrapper"); document.getElementById("biz-ss-viewonly-btn").addEventListener("click", () => { if (!(document.getElementById("viewonly-container"))) { this.viewOnlyDialog = new ej.popups.Dialog({ header: "", content: `

you can only view this document. To make changes, ask the owner for edit access

`, width: '240px', height: '135px', buttons: [{ click: this.processAccessDailog.bind(this), buttonModel: { content: 'Request Edit Access', isPrimary: true } }], position: { X: 12, Y: 95 }, cssClass: "biz-ss-viewonly-dialog", }); this.viewOnlyDialog.appendTo('#dialog'); } }); } getElem() { var div = document.createElement('button'); div.setAttribute("id", "biz-ss-viewonly-btn"); let button = new ej.buttons.Button(); button.appendTo(div); div.innerHTML = 'View Only'; return div; } initialLoad() { let getRibbonItemsFn = this.ssObj.ribbonModule.getRibbonItems.bind(this.ssObj.ribbonModule); this.ssObj.ribbonModule.getRibbonItems = () => { let items = getRibbonItemsFn(); let home = items[0].content; let item = { template: this.getElem(), cssClass: 'biz-ss-viewonly-wrapper', id: this.ssObj.element.id + '_viewonly', tooltipText: "View Only" }; home.splice(items[0].content.length, 0, item); return items; }; } performBizUndoRedo(args, isForce) { let undoredoModule = this.ssObj.undoredoModule; let data; if (!isForce) { data = args.isUndo ? undoredoModule.undoCollection[undoredoModule.undoCollection.length - 1] : undoredoModule.redoCollection[undoredoModule.redoCollection.length - 1]; } else { data = args.isUndo ? undoredoModule.undoCollection.pop() : undoredoModule.redoCollection.pop(); } if (data && data.action == "resize") { var k = data; data = []; data.args = k; } if (!(data && data.args)) { return; } switch (data.args.action) { case 'autofill': if (args.isUndo) { let oldCells = JSON.parse(JSON.stringify(data.args.oldCells)); this.setCellObjects(data.args.options.fillRange, oldCells); } else { this.autofill.applyAutofill(data.args.options, data.args.direction); } break; case 'formatpaint': if (args.isUndo) { let oldCells = JSON.parse(JSON.stringify(data.args.oldCells)); this.setCellObjects(data.args.options.destIndexes, oldCells); } else { this.formatpainter.applyFormatPaint(data.args.options.srcRange, data.args.options.destRange, data.args.options.srcSheetIndex); } break; case 'trim': if (args.isUndo) { let oldCells = JSON.parse(JSON.stringify(data.args.oldCells)); this.setCellObjects(data.args.range, oldCells); } else { this.ribbon.processTrim(data.args.range); } break; case 'removeDuplicates': if (args.isUndo) { let oldCells = JSON.parse(JSON.stringify(data.args.oldCells)); this.setCellObjects(data.args.options.indexes, oldCells); } else { this.dialogue.removeDuplicate(data.args.options.range, data.args.options.header, data.args.options.colSelected); } break; case 'splittext': if (args.isUndo) { let oldCells = JSON.parse(JSON.stringify(data.args.oldCells)); this.setCellObjects(data.args.range, oldCells, data.args.stValues); } else { this.formatpainter.applySplitText(data.args.range, data.args.stValues); } break; case 'shiftcells': if (args.isUndo) { let dragCells = JSON.parse(JSON.stringify(data.args.dragCells)); let dropCells = JSON.parse(JSON.stringify(data.args.dropCells)); this.setCellObjects(data.args.options.ranges, dragCells); this.setCellObjects(data.args.options.dropRange, dropCells); } else { let dragCells = JSON.parse(JSON.stringify(data.args.dragCells)); this.setCellObjects(data.args.options.ranges, []); this.setCellObjects(data.args.options.dropRange, dragCells); } break; case 'deleteshiftup': if (args.isUndo) { let oldCells = JSON.parse(JSON.stringify(data.args.oldCells)); this.formatpainter.applyInsertShiftDown(data.args.range, data); this.setCellObjects(data.args.indexes, oldCells); } else { this.formatpainter.applyDeleteShiftUp(data.args.range, data); } break; case 'deleteshiftleft': if (args.isUndo) { let oldCells = JSON.parse(JSON.stringify(data.args.oldCells)); this.formatpainter.applyInsertShiftRight(data.args.range); this.setCellObjects(data.args.indexes, oldCells); } else { this.formatpainter.applyDeleteShiftLeft(data.args.range); } break; case 'insertshiftdown': if (args.isUndo) { this.formatpainter.applyDeleteShiftUp(data.args.range, data); } else { this.formatpainter.applyInsertShiftDown(data.args.range, data); } break; case 'insertshiftright': if (args.isUndo) { this.formatpainter.applyDeleteShiftLeft(data.args.range); } else { this.formatpainter.applyInsertShiftRight(data.args.range); } break; case 'shortcuts': if (args.isUndo) { let oldCells = [...data.args.oldCells]; this.setCellObjects(data.args.options.range, oldCells); } else { this.shortcuts(data.args.options); } break; case 'bizImageInCell': if (args.isUndo) { let oldCells = data.args.oldCells; oldCells ? "" : oldCells = {}; let idxs = data.args.options.indexes; this.setCellObjects(idxs, [oldCells]); this.download.ssAutoSave({ action: "imageincell", changedValues: [{ row: idxs[0], cell: idxs[1], cellinfo: oldCells }] }, this, true); } else { this.actionInsertImage(data.args.options); } break; case 'resize': if (args.isUndo) { let oldData; if (data.args.eventArgs.type === "Column") { oldData = { args: { undo: true, eventArgs: { index: data.args.eventArgs.index, width: data.args.eventArgs.oldSize, sheetIdx: data.args.eventArgs.sheetIdx, oldWidth: data.args.eventArgs.newSize, range: data.args.eventArgs.range }, action: 'resize', name: 'actionComplete' } }; } if (data.args.eventArgs.type === "Row") { oldData = { args: { undo: true, eventArgs: { index: data.args.eventArgs.index, height: data.args.eventArgs.oldSize, sheetIdx: data.args.eventArgs.sheetIdx, oldHeight: data.args.eventArgs.newSize, range: data.args.eventArgs.range }, action: 'resize', name: 'actionComplete' } }; } this.adjustRowsAndColumnWidth(oldData.args); } else { this.adjustRowsAndColumnWidth(data.args); } break; case 'spell': if (args.isUndo) { let oldCells = [...data.args.oldCells]; this.setCellObjects(data.args.options.indexes, oldCells); } else { this.adjustRowsAndColumnWidth(data.args); } break; } let args1 = { origin: 'biz', action: 'undoredo', sheetIndex: this.getSheetIndex(), isUndo: args.isUndo }; !isForce && Unibase.Apps.Collaboration.Components.Sheets.Base.Instance().bizSignalr(args1); } addFormatsToToolbar() { let getRibbonItemsFn = this.ssObj.ribbonModule.getRibbonItems.bind(this.ssObj.ribbonModule); this.ssObj.ribbonModule.getRibbonItems = () => { let items = getRibbonItemsFn(); let home = items[0].content; let item = [{ prefixIcon: "icon-ss-currency", cssClass: 'biz-ss-currencyformat', id: this.ssObj.element.id + '_currencyformat', tooltipText: "Format as currency" }, { prefixIcon: "icon-ss-percentage", cssClass: 'biz-ss-percentageformat', id: this.ssObj.element.id + '_percentageformat', tooltipText: "Format as percentage" }, { template: this.ribbon.getFormulaBtnDdb(), id: this.ssObj.element.id + '_sumformula', tooltipText: "Sum Function", }]; home.splice(8, 0, item[0], item[1]); home.splice(items[0].content.length - 1, 0, item[2]); let sortingBtn = home.find(x => x.id == "DocumentViewer_sorting").template.ej2_instances[0]; sortingBtn.addEventListener('select', this.sortingBtnSelect.bind(this)); sortingBtn.addEventListener('beforeItemRender', this.sortingBtnBfRender.bind(this)); let sort = items[0].content.find(x => x.id == "DocumentViewer_sorting"); sort.template.firstElementChild.classList.remove('e-sort-filter-icon'); sort.template.firstElementChild.classList.add('biz-sort-filter-icon'); return items; }; } sortingBtnBfRender(args) { if (args.item.text === "Filter") { if (this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) { var child = args.element.firstElementChild; args.element.innerHTML = child.outerHTML + "Remove Filter"; args.element.firstElementChild.classList.remove("e-filter-apply"); args.element.firstElementChild.classList.add("e-filter-clear"); } } } sortingBtnBeforeOpen(args) { if (this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) { (args.element.lastElementChild.classList.contains("e-disabled")) && args.element.lastElementChild.classList.remove("e-disabled"); } else { !(args.element.lastElementChild.classList.contains("e-disabled")) && args.element.lastElementChild.classList.add("e-disabled"); } } sortingBtnSelect(args) { if (this.ssObj.filterCollection) { if (args.item.text === "Filter") { setTimeout(() => { if (!this.ssObj.filterModule.filterCollection.has(this.getSheetIndex())) { this.sortingBtn = document.getElementById("DocumentViewer_sorting"); this.sortingBtn.firstElementChild.style.color = ""; } }, 500); } } } processAccessDailog() { this.viewOnlyDialog.hide(); this.viewOnlyDialog.destroy(); this.renderAccessDailog(); } renderAccessDailog() { this.requestAccessObj = new ej.popups.Dialog({ header: "Ask the owner to access for edit", content: `
`, width: '400px', buttons: [{ click: this.hideRequestAccess.bind(this), buttonModel: { content: 'cancel' } }, { click: this.hideRequestAccess.bind(this), buttonModel: { content: 'send', isPrimary: true } }], cssClass: "biz-ss-requestaccess-dialog", target: this.container, isModal: true, }); this.requestAccessObj.appendTo('#dialog'); var textareaObj = new ej.inputs.TextBox({ placeholder: 'Enter your message', floatLabelType: 'Auto', rows: 4, }); textareaObj.appendTo('#requestaccess-textarea'); textareaObj.element.setAttribute("rows", "4"); } hideRequestAccess() { this.requestAccessObj.hide(); this.requestAccessObj.destroy(); } lettersToNumber(letters) { let base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0; for (i = 0, j = letters.length - 1; i < letters.length; i += 1, j -= 1) { result += Math.pow(base.length, j) * (base.indexOf(letters[i]) + 1); } return result; } static Instance() { if (this.instance === undefined) { this.instance = new Base(); } return this.instance; } } Sheets.Base = Base; })(Sheets = Components.Sheets || (Components.Sheets = {})); })(Components = Collaboration.Components || (Collaboration.Components = {})); })(Collaboration = Apps.Collaboration || (Apps.Collaboration = {})); })(Apps = Unibase.Apps || (Unibase.Apps = {})); })(Unibase || (Unibase = {}));