jexcel
Version:
jExcel is a lightweight, vanilla javascript plugin to create amazing web-based interactive tables and spreadsheets compatible with Excel, Google Spreadsheets and any other spreadsheet software.
10 lines • 170 kB
JavaScript
/**
* (c) jExcel v3.0.1
*
* Author: Paul Hodel <paul.hodel@gmail.com>
* Website: https://bossanova.uk/jexcel/
* Description: Create amazing web based spreadsheets.
*
* This software is distribute under MIT License
*/
var jexcel=function(el,options){var obj={options:{}},defaults={url:null,data:[[]],rows:[],columns:[],colHeaders:[],colWidths:[],colAlignments:[],nestedHeaders:null,defaultColWidth:50,minSpareRows:0,minSpareCols:0,minDimensions:[0,0],columnSorting:!0,columnDrag:!1,columnResize:!0,rowResize:!1,rowDrag:!0,editable:!0,allowInsertRow:!0,allowManualInsertRow:!0,allowInsertColumn:!0,allowManualInsertColumn:!0,allowDeleteRow:!0,allowDeleteColumn:!0,allowRenameColumn:!0,allowComments:!1,wordWrap:!1,csv:null,csvFileName:"jexcel",csvHeaders:!0,csvDelimiter:",",selectionCopy:!0,mergeCells:[],toolbar:null,search:!1,pagination:!1,paginationOptions:null,fullscreen:!1,lazyLoading:!1,loadingSpin:!1,tableOverflow:!1,tableHeight:"300px",tableWidth:null,style:null,onload:null,onchange:null,onbeforechange:null,oninsertrow:null,oninsertcolumn:null,ondeleterow:null,ondeletecolumn:null,onmoverow:null,onmovecolumn:null,onresizerow:null,onresizecolumn:null,onsort:null,onselection:null,onpaste:null,onmerge:null,onfocus:null,onblur:null,updateTable:null,text:{noRecordsFound:"No records found",showingPage:"Showing page {0} of {1} entries",show:"Show ",entries:" entries",insertANewColumnBefore:"Insert a new column before",insertANewColumnAfter:"Insert a new column after",deleteSelectedColumns:"Delete selected columns",renameThisColumn:"Rename this column",orderAscending:"Order ascending",orderDescending:"Order descending",insertANewRowBefore:"Insert a new row before",insertANewRowAfter:"Insert a new row after",deleteSelectedRows:"Delete selected rows",editComments:"Edit comments",addComments:"Add comments",comments:"Comments",clearComments:"Clear comments",copy:"Copy...",paste:"Paste...",saveAs:"Save as...",about:"About",areYouSureToDeleteTheSelectedRows:"Are you sure to delete the selected rows?",areYouSureToDeleteTheSelectedColumns:"Are you sure to delete the selected columns?",thisActionWillDestroyAnyExistingMergedCellsAreYouSure:"This action will destroy any existing merged cells. Are you sure?",thisActionWillClearYourSearchResultsAreYouSure:"This action will clear your search results. Are you sure?",thereIsAConflictWithAnotherMergedCell:"There is a conflict with another merged cell",invalidMergeProperties:"Invalid merged properties",cellAlreadyMerged:"Cell already merged",noCellsSelected:"No cells selected"},about:"jExcel Pro Spreadsheet\nVersion 3.0.1\nAuthor: Paul Hodel <paul.hodel@gmail.com>\nWebsite: https://jexcel.net/v3"};for(var property in defaults)options.hasOwnProperty(property)?obj.options[property]=options[property]:obj.options[property]=defaults[property];return obj.el=el,obj.corner=null,obj.contextMenu=null,obj.textarea=null,obj.ads=null,obj.content=null,obj.table=null,obj.thead=null,obj.tbody=null,obj.rows=[],obj.results=null,obj.searchInput=null,obj.toolbar=null,obj.pagination=null,obj.pageNumber=null,obj.headerContainer=null,obj.colgroupContainer=null,obj.headers=[],obj.records=[],obj.history=[],obj.formula=[],obj.formulaStack=0,obj.colgroup=[],obj.selection=[],obj.highlighted=[],obj.selectedCell=null,obj.selectedContainer=null,obj.style=[],obj.meta=[],obj.cursor=null,obj.historyIndex=-1,obj.ignoreEvents=!1,obj.ignoreHistory=!1,obj.edition=null,obj.hashString=null,obj.resizing=null,obj.dragging=null,1==obj.options.lazyLoading&&0==obj.options.tableOverflow&&0==obj.options.fullscreen&&(console.error("JEXCEL: The lazyloading only works when tableOverflow = yes or fullscreen = yes"),obj.options.lazyLoading=!1),obj.prepareTable=function(){var e=obj.options.columns.length;obj.options.data[0].length>e&&(e=obj.options.data[0].length),obj.options.minDimensions[0]>e&&(e=obj.options.minDimensions[0]);for(var t=[],r=[],o=0;o<e;o++)obj.options.colHeaders[o]||(obj.options.colHeaders[o]=""),obj.options.colWidths[o]||(obj.options.colWidths[o]=obj.options.defaultColWidth||"50"),obj.options.colAlignments[o]||(obj.options.colAlignments[o]="center"),obj.options.columns[o]?obj.options.columns[o]||(obj.options.columns[o].type="text"):obj.options.columns[o]={type:"text"},obj.options.columns[o].source||(obj.options.columns[o].source=[]),obj.options.columns[o].options||(obj.options.columns[o].options=[]),obj.options.columns[o].editor||(obj.options.columns[o].editor=null),obj.options.columns[o].allowEmpty||(obj.options.columns[o].allowEmpty=!1),obj.options.columns[o].title||(obj.options.columns[o].title=obj.options.colHeaders[o]?obj.options.colHeaders[o]:""),obj.options.columns[o].width||(obj.options.columns[o].width=obj.options.colWidths[o]?obj.options.colWidths[o]:"50"),obj.options.columns[o].align||(obj.options.columns[o].align=obj.options.colAlignments[o]?obj.options.colAlignments[o]:"center"),"autocomplete"==obj.options.columns[o].type||"dropdown"==obj.options.columns[o].type?obj.options.columns[o].url&&(r.push(o),t.push(fetch(obj.options.columns[o].url,{headers:new Headers({"content-type":"text/json"})}).then(function(e){return e.json()}))):"calendar"==obj.options.columns[o].type&&(obj.options.columns[o].options.format||(obj.options.columns[o].options.format="DD/MM/YYYY"));t.length?Promise.all(t).then(function(e){for(var t=0;t<e.length;t++)obj.options.columns[t].source=e[t];obj.createTable()}):obj.createTable()},obj.createTable=function(){obj.table=document.createElement("table"),obj.thead=document.createElement("thead"),obj.tbody=document.createElement("tbody"),obj.headers=[],obj.colgroup=[],obj.content=document.createElement("div"),obj.content.classList.add("jexcel_content"),obj.toolbar=document.createElement("div"),obj.toolbar.classList.add("jexcel_toolbar");var e=document.createElement("div"),t=document.createTextNode("Search: ");obj.searchInput=document.createElement("input"),obj.searchInput.classList.add("jexcel_search"),e.appendChild(t),e.appendChild(obj.searchInput),obj.searchInput.onfocus=function(){obj.resetSelection()};var r=document.createElement("div");if(obj.options.pagination>0&&obj.options.paginationOptions&&obj.options.paginationOptions.length>0){obj.paginationDropdown=document.createElement("select"),obj.paginationDropdown.classList.add("jexcel_pagination_dropdown"),obj.paginationDropdown.onchange=function(){obj.options.pagination=parseInt(this.value),obj.page(0)};for(var o=0;o<obj.options.paginationOptions.length;o++){var n=document.createElement("option");n.value=obj.options.paginationOptions[o],n.innerHTML=obj.options.paginationOptions[o],obj.paginationDropdown.appendChild(n)}r.appendChild(document.createTextNode(obj.options.text.show)),r.appendChild(obj.paginationDropdown),r.appendChild(document.createTextNode(obj.options.text.entries))}if(obj.filter=document.createElement("div"),obj.filter.classList.add("jexcel_filter"),obj.filter.appendChild(r),obj.filter.appendChild(e),obj.colgroupContainer=document.createElement("colgroup"),(s=document.createElement("col")).setAttribute("width",50),obj.colgroupContainer.appendChild(s),obj.options.nestedHeaders&&obj.options.nestedHeaders.length>0)if(obj.options.nestedHeaders[0]&&obj.options.nestedHeaders[0][0])for(var l=0;l<obj.options.nestedHeaders.length;l++)obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders[l]));else obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders));obj.headerContainer=document.createElement("tr");var s=document.createElement("td");obj.headerContainer.appendChild(s);for(o=0;o<obj.options.columns.length;o++)obj.createCellHeader(o),obj.headerContainer.appendChild(obj.headers[o]),obj.colgroupContainer.appendChild(obj.colgroup[o]);obj.thead.appendChild(obj.headerContainer),obj.table=document.createElement("table"),obj.table.classList.add("jexcel"),obj.table.setAttribute("cellpadding","0"),obj.table.setAttribute("cellspacing","0"),obj.table.setAttribute("unselectable","yes"),obj.table.setAttribute("onselectstart","return false"),obj.table.appendChild(obj.colgroupContainer),obj.table.appendChild(obj.thead),obj.table.appendChild(obj.tbody),obj.corner=document.createElement("div"),obj.corner.className="jexcel_corner",obj.corner.setAttribute("unselectable","on"),obj.corner.setAttribute("onselectstart","return false"),0==obj.selectionCopy&&(obj.corner.style.display="none"),obj.textarea=document.createElement("textarea"),obj.textarea.className="jexcel_textarea",obj.textarea.id="jexcel_textarea",obj.contextMenu=document.createElement("div"),obj.contextMenu.className="jexcel_contextmenu",jApp.contextmenu(obj.contextMenu,{onclick:function(){obj.contextMenu.contextmenu.close(!1)}});var i='<a href="https://bossanova.uk/jexcel/"><img src="//bossanova.uk/jexcel/logo.png">jExcel Spreadsheet</a>';obj.ads=document.createElement("div"),obj.ads.className="jexcel_about","undefined"!=typeof sessionStorage?sessionStorage.getItem("jexcel")||(sessionStorage.setItem("jexcel",!0),obj.ads.innerHTML=i):obj.ads.innerHTML=i,document.createElement("div").classList.add("jexcel_table"),obj.pagination=document.createElement("div"),obj.pagination.classList.add("jexcel_pagination");var a=document.createElement("div"),u=document.createElement("div");obj.pagination.appendChild(a),obj.pagination.appendChild(u),1==obj.options.search&&el.appendChild(obj.filter),obj.content.appendChild(obj.table),obj.content.appendChild(obj.corner),obj.content.appendChild(obj.textarea),el.appendChild(obj.toolbar),el.appendChild(obj.content),el.appendChild(obj.pagination),el.appendChild(obj.contextMenu),el.appendChild(obj.ads),el.classList.add("jexcel_container"),obj.options.toolbar&&obj.options.toolbar.length&&obj.createToolbar(),1==obj.options.fullscreen?(el.classList.add("fullscreen"),obj.options.toolbar&&el.classList.add("with-toolbar")):1==obj.options.tableOverflow&&(obj.options.tableHeight&&(obj.content.style["overflow-y"]="auto",obj.content.style.height=obj.options.tableHeight),obj.options.tableWidth&&(el.content.style["overflow-x"]="auto",el.content.width=obj.options.tableWidth)),1==obj.options.columnDrag&&obj.thead.classList.add("draggable"),1==obj.options.columnResize&&obj.thead.classList.add("resizable"),1==obj.options.rowDrag&&obj.tbody.classList.add("draggable"),1==obj.options.rowResize&&obj.tbody.classList.add("resizable"),obj.setData(),obj.options.style&&obj.setStyle(obj.options.style,null,null,1,1)},obj.setData=function(e){e&&("string"==typeof e&&(e=JSON.parse(e)),obj.options.data=e);var t=0,r=0,o=obj.options.columns.length,n=obj.options.data.length,l=obj.options.minDimensions[0],s=obj.options.minDimensions[1],i=l>o?l:o,a=s>n?s:n;for(t=0;t<a;t++)for(r=0;r<i;r++)null==obj.options.data[t]&&(obj.options.data[t]=[]),null==obj.options.data[t][r]&&(obj.options.data[t][r]="");if(obj.rows=[],obj.results=null,obj.records=[],obj.history=[],obj.historyIndex=-1,obj.tbody.innerHTML="",1==obj.options.lazyLoading){var u=0,c=obj.options.data.length<100?obj.options.data.length:100;obj.options.pagination&&(obj.options.pagination=!1,console.error("JEXCEL: Pagination will be disable due the lazyLoading"))}else if(obj.options.pagination){obj.pageNumber||(obj.pageNumber=0);obj.options.pagination;u=obj.options.pagination*obj.pageNumber,c=obj.options.pagination*obj.pageNumber+obj.options.pagination,obj.options.data.length<c&&(c=obj.options.data.length)}else u=0,c=obj.options.data.length;for(t=0;t<obj.options.data.length;t++){var b=obj.createRow(t,obj.options.data[t]);t>=u&&t<c&&obj.tbody.appendChild(b)}if(1==obj.options.lazyLoading||obj.options.pagination&&obj.updatePagination(),obj.options.mergeCells){var p=Object.keys(obj.options.mergeCells);for(r=0;r<p.length;r++){var d=obj.options.mergeCells[p[r]];obj.setMerge(p[r],d[0],d[1],1)}}obj.updateTable(),obj.ignoreEvents||"function"==typeof obj.options.onload&&obj.options.onload(el)},obj.getData=function(e){for(var t=[],r=0,o=0,n=obj.options.data[0].length,l=obj.options.data.length,s=0;s<l;s++){r=0;for(var i=0;i<n;i++)e&&!obj.records[s][i].classList.contains("highlight")||(t[o]||(t[o]=[]),t[o][r]=obj.options.data[s][i],r++);r>0&&o++}return t},obj.getRowData=function(e){return obj.options.data[e]},obj.getColumnData=function(e){for(var t=[],r=0;r<obj.options.data.length;r++)t.push(obj.options.data[r][e]);return t},obj.createRow=function(e,t){obj.records[e]||(obj.records[e]=[]),obj.rows[e]=document.createElement("tr"),obj.rows[e].setAttribute("data-y",e),obj.options.rows[e]&&obj.options.rows[e].height&&(obj.rows[e].style.height=obj.options.rows[e].height);var r=document.createElement("td");for(r.innerHTML=parseInt(e+1),r.setAttribute("data-y",e),r.className="jexcel_row",obj.rows[e].appendChild(r),i=0;i<obj.options.columns.length;i++)obj.records[e][i]=obj.createCell(i,e,t[i]),obj.rows[e].appendChild(obj.records[e][i]);return obj.rows[e]},obj.createCell=function(e,t,r){var o=document.createElement("td");if(o.setAttribute("data-x",e),o.setAttribute("data-y",t),"hidden"==obj.options.columns[e].type)o.style.display="none",o.innerHTML=r;else if("checkbox"==obj.options.columns[e].type||"radio"==obj.options.columns[e].type){var n=document.createElement("input");n.type=obj.options.columns[e].type,n.name="c"+e,n.checked=1==r||1==r||"true"==r,n.onclick=function(){obj.setValue(o,this.checked)},1==obj.options.columns[e].readOnly&&n.setAttribute("disabled","disabled"),o.appendChild(n),obj.options.data[t][e]=n.checked}else if("calendar"==obj.options.columns[e].type){var l=jApp.calendar.extractDateFromString(r,obj.options.columns[e].options.format);o.innerHTML=jApp.calendar.getDateString(l||r,obj.options.columns[e].options.format)}else if("dropdown"==obj.options.columns[e].type||"autocomplete"==obj.options.columns[e].type)o.classList.add("dropdown"),o.innerHTML=obj.getDropDownValue(e,r);else if("color"==obj.options.columns[e].type)if("square"==obj.options.columns[e].render){var s=document.createElement("div");s.className="color",s.style.backgroundColor=r,o.appendChild(s)}else o.style.color=r,o.innerHTML=r;else if("image"==obj.options.columns[e].type){if(r&&"data:image"==r.substr(0,10)){var i=document.createElement("img");i.src=r,o.appendChild(i)}}else{if("="==(""+r).substr(0,1)&&(r=obj.executeFormula(r,e,t)),obj.options.columns[e].mask){var a=obj.options.columns[e].decimal||".";r=""+jApp.mask.run(r,obj.options.columns[e].mask,a)}o.innerHTML=r}1==obj.options.columns[e].readOnly&&(o.className="readonly");var u=obj.options.columns[e].align?obj.options.columns[e].align:"center";return o.style.textAlign=u,(1==obj.options.wordWrap||1==obj.options.columns[e].wordWrap||o.innerHTML.length>200)&&(o.style.whiteSpace="pre-wrap"),e>0&&(r||o.innerHTML?obj.records[t][e-1].style.overflow="hidden":e==obj.options.columns.length-1&&(o.style.overflow="hidden")),o},obj.createCellHeader=function(e){var t=obj.options.columns[e].width?obj.options.columns[e].width:obj.options.defaultColWidth,r=obj.options.columns[e].align?obj.options.columns[e].align:"center";obj.headers[e]=document.createElement("td"),obj.headers[e].innerHTML=obj.options.columns[e].title?obj.options.columns[e].title:jexcel.getColumnName(e),obj.headers[e].setAttribute("data-x",e),obj.headers[e].style.textAlign=r,obj.options.columns[e].title&&obj.headers[e].setAttribute("title",obj.options.columns[e].title),obj.colgroup[e]=document.createElement("col"),obj.colgroup[e].setAttribute("width",t),"hidden"==obj.options.columns[e].type&&(obj.headers[e].style.display="none",obj.colgroup[e].style.display="none")},obj.createNestedHeader=function(e){var t=document.createElement("tr");t.classList.add("jexcel_nested");var r=document.createElement("td");t.appendChild(r);for(var o=0,n=0;n<e.length;n++){e[n].colspan||(e[n].colspan=1),e[n].align||(e[n].align="center"),e[n].title||(e[n].title="");for(var l=[],s=0;s<e[n].colspan;s++)l.push(o),o++;(r=document.createElement("td")).setAttribute("data-column",l.join(",")),r.setAttribute("colspan",e[n].colspan),r.setAttribute("align",e[n].align),r.innerHTML=e[n].title,t.appendChild(r)}return t},obj.createToolbar=function(e){if(e)obj.options.toolbar=e;else e=obj.options.toolbar;for(var t=0;t<e.length;t++){if("i"==e[t].type)(n=document.createElement("i")).classList.add("jexcel_toolbar_item"),n.classList.add("material-icons"),n.setAttribute("data-k",e[t].k),n.setAttribute("data-v",e[t].v),e[t].onclick&&(e[t].onclick,1)?n.onclick=e[t].onclick:n.onclick=function(){var e=this.getAttribute("data-k"),t=this.getAttribute("data-v");obj.setStyle(obj.highlighted,e,t)},n.innerHTML=e[t].content,obj.toolbar.appendChild(n);else if("select"==e[t].type){(n=document.createElement("select")).classList.add("jexcel_toolbar_item"),n.setAttribute("data-k",e[t].k),e[t].onchange&&(e[t].onchange,1)?n.onchange=e[t].onchange:n.onchange=function(){var e=this.getAttribute("data-k");obj.setStyle(obj.highlighted,e,this.value)};for(var r=0;r<e[t].v.length;r++){var o=document.createElement("option");o.value=e[t].v[r],o.innerHTML=e[t].v[r],n.appendChild(o)}obj.toolbar.appendChild(n)}else if("color"==e[t].type){var n;(n=document.createElement("i")).classList.add("jexcel_toolbar_item"),n.classList.add("material-icons"),n.setAttribute("data-k",e[t].k),n.setAttribute("data-v",""),obj.toolbar.appendChild(n),n.onclick=function(){this.color.open()},n.innerHTML=e[t].content,jApp.color(n,{onchange:function(e,t){var r=e.getAttribute("data-k");obj.setStyle(obj.highlighted,r,t)}})}}},obj.setMerge=function(e,t,r,o){var n=!1;if(!e){if(!obj.highlighted.length)return alert(obj.options.text.noCellsSelected),null;var l=parseInt(obj.highlighted[0].getAttribute("data-x")),s=parseInt(obj.highlighted[0].getAttribute("data-y")),i=parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute("data-x")),a=parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute("data-y"));e=jexcel.getColumnNameFromId([l,s]),t=i-l+1,r=a-s+1}var u=jexcel.getIdFromColumnName(e,!0);if(obj.options.mergeCells[e]&&obj.options.mergeCells[e][2])n=obj.options.text.cellAlreadyMerged;else if((!t||t<2)&&(!r||r<2))n=obj.options.text.invalidMergeProperties;else for(var c=u[1];c<u[1]+r;c++)for(var b=u[0];b<u[0]+t;b++){var p=jexcel.getColumnNameFromId([b,c]);obj.options.mergeCells[p]&&obj.options.mergeCells[p][2]&&(n=obj.options.text.thereIsAConflictWithAnotherMergedCell)}if(n)alert(n);else{t>1?obj.records[u[1]][u[0]].setAttribute("colspan",t):t=1,r>1?obj.records[u[1]][u[0]].setAttribute("rowspan",r):r=1,obj.options.mergeCells[e]=[t,r,[]],obj.records[u[1]][u[0]].setAttribute("data-merged","true"),obj.records[u[1]][u[0]].style.overflow="hidden";for(var d=[],j=u[1];j<u[1]+r;j++)for(var f=u[0];f<u[0]+t;f++)u[0]==f&&u[1]==j||(d.push(obj.options.data[j][f]),obj.updateCell(f,j,"",!0),obj.options.mergeCells[e][2].push(obj.records[j][f]),obj.records[j][f].style.display="none",obj.records[j][f]=obj.records[u[1]][u[0]]);obj.updateSelection(obj.records[u[1]][u[0]]),o||(obj.setHistory({action:"setMerge",column:e,colspan:t,rowspan:r,data:d}),"function"==typeof obj.options.onmerge&&obj.options.onmerge(el,column,width,oldWidth))}},obj.getMerge=function(e){var t={};if(e)t=obj.options.mergeCells[e]?[obj.options.mergeCells[e][0],obj.options.mergeCells[e][1]]:null;else if(obj.options.mergeCells){obj.options.mergeCells;for(var r=Object.keys(obj.options.mergeCells),o=0;o<r.length;o++)t[r[o]]=[obj.options.mergeCells[r[o]][0],obj.options.mergeCells[r[o]][1]]}return t},obj.removeMerge=function(e,t,r){if(obj.options.mergeCells[e]){var o=jexcel.getIdFromColumnName(e,!0);obj.records[o[1]][o[0]].removeAttribute("colspan"),obj.records[o[1]][o[0]].removeAttribute("rowspan"),obj.records[o[1]][o[0]].removeAttribute("data-merged");for(var n=obj.options.mergeCells[e],l=0,s=0;s<n[1];s++)for(var i=0;i<n[0];i++)(s>0||i>0)&&(obj.records[o[1]+s][o[0]+i]=n[2][l],obj.records[o[1]+s][o[0]+i].style.display="",t&&t[l]&&obj.updateCell(o[0]+i,o[1]+s,t[l]),l++);obj.updateSelection(obj.records[o[1]][o[0]],obj.records[o[1]+s-1][o[0]+i-1]),r||delete obj.options.mergeCells[e]}},obj.destroyMerged=function(e){if(obj.options.mergeCells){obj.options.mergeCells;for(var t=Object.keys(obj.options.mergeCells),r=0;r<t.length;r++)obj.removeMerge(t[r],null,e)}},obj.isColMerged=function(e,t){var r=[];if(obj.options.mergeCells)for(var o=Object.keys(obj.options.mergeCells),n=0;n<o.length;n++){var l=jexcel.getIdFromColumnName(o[n],!0),s=obj.options.mergeCells[o[n]][0],i=l[0],a=l[0]+(s>1?s-1:0);null==t?i<=e&&a>=e&&r.push(o[n]):t?i<e&&a>=e&&r.push(o[n]):i<=e&&a>e&&r.push(o[n])}return r},obj.isRowMerged=function(e,t){var r=[];if(obj.options.mergeCells)for(var o=Object.keys(obj.options.mergeCells),n=0;n<o.length;n++){var l=jexcel.getIdFromColumnName(o[n],!0),s=obj.options.mergeCells[o[n]][1],i=l[1],a=l[1]+(s>1?s-1:0);null==t?i<=e&&a>=e&&r.push(o[n]):t?i<e&&a>=e&&r.push(o[n]):i<=e&&a>e&&r.push(o[n])}return r},obj.openEditor=function(e,t,r){var o=e.getAttribute("data-y"),n=e.getAttribute("data-x");n>0&&(obj.records[o][n-1].style.overflow="hidden");var l=function(t){let r=e.getBoundingClientRect();var o=document.createElement(t);return o.style.width=r.width+"px",o.style.height=r.height-2+"px",o.style.minHeight=r.height-2+"px",e.classList.add("editor"),e.innerHTML="",e.appendChild(o),o};if(1==e.classList.contains("readonly"));else if(obj.edition=[obj.records[o][n],obj.records[o][n].innerHTML,n,o],obj.options.columns[n].editor)obj.options.columns[n].editor.openEditor(e,el);else if("hidden"==obj.options.columns[n].type);else if("checkbox"==obj.options.columns[n].type||"radio"==obj.options.columns[n].type){var s=!e.children[0].checked;obj.setValue(e,s),obj.edition=null}else if("dropdown"==obj.options.columns[n].type||"autocomplete"==obj.options.columns[n].type){s=obj.options.data[o][n];if("function"==typeof obj.options.columns[n].filter)var i=obj.options.columns[n].filter(el,e,n,o,obj.options.columns[n].source);else i=obj.options.columns[n].source;var a=l("div"),u={data:i,multiple:!!obj.options.columns[n].multiple,autocomplete:!(!obj.options.columns[n].autocomplete&&"autocomplete"!=obj.options.columns[n].type),opened:!0,value:obj.options.columns[n].multiple?s.split(";"):s,width:"100%",height:a.style.minHeight,position:1==obj.options.tableOverflow||1==obj.options.fullscreen,onclose:function(){obj.closeEditor(e,!0)}};obj.options.columns[n].options&&obj.options.columns[n].options.type&&(u.type=obj.options.columns[n].options.type),jApp.dropdown(a,u)}else if("calendar"==obj.options.columns[n].type||"color"==obj.options.columns[n].type){s=obj.options.data[o][n];if((a=l("input")).value=s,1!=obj.options.tableOverflow&&1!=obj.options.fullscreen||(obj.options.columns[n].options.position=!0),obj.options.columns[n].options.value=obj.options.data[o][n],obj.options.columns[n].options.onclose=function(t,r){obj.closeEditor(e,!0)},"color"==obj.options.columns[n].type)jApp.color(a,obj.options.columns[n].options);else jApp.calendar(a,obj.options.columns[n].options).setValue(s);a.focus()}else if("image"==obj.options.columns[n].type){var c=e.children[0];(a=l("div")).style.position="relative";var b=document.createElement("div");b.classList.add("jclose"),c&&c.src&&b.appendChild(c),a.appendChild(b),jApp.image(b);const t=e.getBoundingClientRect(),r=b.getBoundingClientRect();window.innerHeight<t.bottom+r.height?b.style.top=t.top-(r.height+2):b.style.top=t.top}else{s=1==t?"":obj.options.data[o][n];if(1==obj.options.wordWrap||1==obj.options.columns[n].wordWrap||s.length>200)a=l("textarea");else{a=l("input");obj.options.columns[n].mask&&a.setAttribute("data-mask",obj.options.columns[n].mask)}a.value=s,a.onblur=function(){obj.closeEditor(e,!0)},a.focus()}},obj.closeEditor=function(e,t){var r=parseInt(e.getAttribute("data-x")),o=parseInt(e.getAttribute("data-y"));if(1==t){if(obj.options.columns[r].editor)var n=obj.options.columns[r].editor.closeEditor(e,t);else if("checkbox"==obj.options.columns[r].type||"radio"==obj.options.columns[r].type||"hidden"==obj.options.columns[r].type);else if("dropdown"==obj.options.columns[r].type||"autocomplete"==obj.options.columns[r].type)n=e.children[0].dropdown.close(!0);else if("calendar"==obj.options.columns[r].type)n=e.children[0].calendar.close(!0);else if("color"==obj.options.columns[r].type)n=e.children[1].color.close(!0);else if("image"==obj.options.columns[r].type){var l=e.children[0].children[0].children[0];n=l&&"IMG"==l.tagName?l.src:""}else if("numeric"==obj.options.columns[r].type){"="!=(n=e.children[0].value).substr(0,1)&&""==n&&(n=obj.options.columns[r].allowEmpty?"":0),e.children[0].onblur=null}else{n=e.children[0].value;e.children[0].onblur=null}var s=!!obj.ignoreEvents,i=!!obj.ignoreHistory;obj.options.data[o][r]==n&&(obj.ignoreEvents=!0,obj.ignoreHistory=!0),obj.edition[1]==n?e.innerHTML=obj.edition[1]:obj.setValue(e,n),obj.ignoreEvents=s,obj.ignoreHistory=i}else obj.options.columns[r].editor?obj.options.columns[r].editor.closeEditor(e,t):"dropdown"==obj.options.columns[r].type||"autocomplete"==obj.options.columns[r].type?e.children[0].dropdown.close(!1):"calendar"==obj.options.columns[r].type?e.children[0].calendar.close(!1):"color"==obj.options.columns[r].type?e.children[1].color.close(!1):e.children[0].onblur=null,e.innerHTML=obj.edition[1];e.classList.remove("editor"),obj.edition=null},obj.getValue=function(e){if("object"==typeof e)var t=e.getAttribute("data-x"),r=e.getAttribute("data-y");else t=(e=jexcel.getIdFromColumnName(e,!0))[0],r=e[1];return null!=t&&null!=r?obj.options.data[r][t]:null},obj.getValueFromCoords=function(e,t){if(null!=e&&null!=t)return obj.options.data[t][e]},obj.setValue=function(e,t,r){var o=[];if("string"==typeof e){var n=jexcel.getIdFromColumnName(e,!0),l=n[0],s=n[1];o.push(obj.updateCell(l,s,t))}else{var i=Object.keys(e);if(i.length>0)for(var a=0;a<i.length;a++){l=e[a].getAttribute("data-x"),s=e[a].getAttribute("data-y");o.push(obj.updateCell(l,s,t))}else{l=e.getAttribute("data-x"),s=e.getAttribute("data-y");o.push(obj.updateCell(l,s,t))}}var u=function(e,t){var r=jexcel.getColumnNameFromId([e,t]);if(obj.formula[r]&&obj.formula[r].length>0)for(var n=0;n<obj.formula[r].length;n++){var l=jexcel.getIdFromColumnName(obj.formula[r][n],!0),s=""+obj.options.data[l[1]][l[0]];"="==s.substr(0,1)?o.push(obj.updateCell(l[0],l[1],s)):Object.keys(obj.formula)[n]=null,u(l[0],l[1])}};u(l,s),obj.setHistory({action:"setValue",records:o,selection:obj.selectedCell}),obj.updateTable()},obj.setCheckRadioValue=function(){for(var e=[],t=Object.keys(obj.highlighted),r=0;r<t.length;r++){var o=obj.highlighted[r].getAttribute("data-x"),n=obj.highlighted[r].getAttribute("data-y");"checkbox"!=obj.options.columns[o].type&&"radio"!=obj.options.columns[o].type||e.push(obj.updateCell(o,n,!obj.options.data[n][o]))}e.length&&obj.setHistory({action:"setValue",records:e,selection:obj.selectedCell})},obj.updateCell=function(e,t,r,o){if(1==obj.records[t][e].classList.contains("readonly")&&0==o);else{obj.ignoreEvents||"function"==typeof obj.options.onbeforechange&&obj.options.onbeforechange(el,obj.records[t][e],e,t,r);var n={col:e,row:t,newValue:r,oldValue:obj.options.data[t][e]};if(obj.options.columns[e].editor)obj.options.data[t][e]=r,obj.options.columns[e].editor.setValue(obj.records[t][e],r,o);else if("checkbox"==obj.options.columns[e].type||"radio"==obj.options.columns[e].type){if("radio"==obj.options.columns[e].type)for(var l=0;l<obj.options.data.length;l++)obj.options.data[l][e]=!1;obj.records[t][e].children[0].checked=1==r||1==r||"true"==r,obj.options.data[t][e]=obj.records[t][e].children[0].checked}else if("dropdown"==obj.options.columns[e].type||"autocomplete"==obj.options.columns[e].type)obj.options.data[t][e]=r,obj.records[t][e].innerHTML=obj.getDropDownValue(e,r);else if("calendar"==obj.options.columns[e].type){var s=jApp.calendar.extractDateFromString(r,obj.options.columns[e].options.format);obj.options.data[t][e]=r,obj.records[t][e].innerHTML=jApp.calendar.getDateString(s||r)}else if("color"==obj.options.columns[e].type)if(obj.options.data[t][e]=r,"square"==obj.options.columns[e].render){var i=document.createElement("div");i.className="color",i.style.backgroundColor=r,obj.records[t][e].innerHTML="",obj.records[t][e].appendChild(i)}else obj.records[t][e].style.color=r,obj.records[t][e].innerHTML=r;else if("image"==obj.options.columns[e].type){if(r=""+r,obj.options.data[t][e]=r,obj.records[t][e].innerHTML="",r&&"data:image"==r.substr(0,10)){var a=document.createElement("img");a.src=r,obj.records[t][e].appendChild(a)}}else{if(obj.options.data[t][e]=r&&Number(r)==r?Number(r):r,"="==(""+r).substr(0,1)&&(r=obj.executeFormula(r,e,t)),obj.options.columns[e].mask){var u=obj.options.columns[e].decimal||".";r=""+jApp.mask.run(r,obj.options.columns[e].mask,u)}obj.records[t][e].innerHTML=r,obj.records[t][e].innerHTML.length>200?obj.records[t][e].style.whiteSpace="pre-wrap":0==obj.options.wordWrap&&0==obj.options.columns[e].wordWrap&&(obj.records[t][e].style.whiteSpace="")}e>0&&(obj.options.data[t][e]||"text"!=obj.options.columns[e].type&&"number"!=obj.options.columns[e].type?obj.records[t][e-1].style.overflow="hidden":obj.records[t][e-1].style.overflow=""),obj.ignoreEvents||"function"==typeof obj.options.onchange&&obj.options.onchange(el,obj.records[t][e],e,t,r)}return n},obj.copyData=function(e,t){for(var r=obj.getData(!0),o=obj.selectedContainer[1],n=obj.selectedContainer[3],l=parseInt(e.getAttribute("data-x")),s=parseInt(e.getAttribute("data-y")),i=parseInt(t.getAttribute("data-x")),a=parseInt(t.getAttribute("data-y")),u=[],c=1,b=0,p=0,d=s;d<=a;d++)if("none"!=obj.rows[d].style.display){null==r[p]&&(p=0),b=0;for(var j=l;j<=i;j++){if(obj.records[d][j]&&!obj.records[d][j].classList.contains("readonly")&&"none"!=obj.records[d][j].style.display){if(!jexcel.current.selection.length&&obj.options.data[d][j])return;if(null==r[p]?b=0:null==r[p][b]?b=0:value=r[p][b],value&&o==n)if("text"==obj.options.columns[j].type||"number"==obj.options.columns[j].type)if("="==(""+value).substr(0,1)){var f=value.match(/([A-Z]+[0-9]+)/g);if(f){for(var h=[],g=0;g<f.length;g++){var m=jexcel.getIdFromColumnName(f[g],1);m[1]+=c;var v=jexcel.getColumnNameFromId([m[0],m[1]]);v!=f[g]&&(h[f[g]]=v)}h&&(value=obj.updateFormula(value,h))}}else value==Number(value)&&(value=Number(value)+c);else if("calendar"==obj.options.columns[j].type){var x=new Date(value);x.setDate(x.getDate()+c),value=x.getFullYear()+"-"+parseInt(x.getMonth()+1)+"-"+x.getDate()+" "+x.getHours()+":"+x.getMinutes()+":00"}u.push(obj.updateCell(j,d,value))}b++}p++,c++}obj.setHistory({action:"setValue",records:u,selection:obj.selectedCell}),obj.updateTable()},obj.refreshSelection=function(){obj.selectedCell&&obj.updateSelectionFromCoords(obj.selectedCell[0],obj.selectedCell[1],obj.selectedCell[2],obj.selectedCell[3])},obj.conditionalSelectionUpdate=function(e,t,r){if(1==e){if(obj.selectedCell&&(t>=obj.selectedCell[1]&&t<=obj.selectedCell[3]||r>=obj.selectedCell[1]&&r<=obj.selectedCell[3]))return void obj.updateSelectionFromCoords(0,0)}else if(obj.selectedCell&&(t>=obj.selectedCell[0]&&t<=obj.selectedCell[2]||r>=obj.selectedCell[0]&&r<=obj.selectedCell[2]))return void obj.updateSelectionFromCoords(0,0)},obj.resetSelection=function(e){if(obj.highlighted.length){i=1;for(var t=0;t<obj.highlighted.length;t++){obj.highlighted[t].classList.remove("highlight"),obj.highlighted[t].classList.remove("highlight-left"),obj.highlighted[t].classList.remove("highlight-right"),obj.highlighted[t].classList.remove("highlight-top"),obj.highlighted[t].classList.remove("highlight-bottom"),obj.highlighted[t].classList.remove("highlight-selected");var r=parseInt(obj.highlighted[t].getAttribute("data-x")),o=parseInt(obj.highlighted[t].getAttribute("data-y"));if(obj.highlighted[t].getAttribute("data-merged"))var n=parseInt(obj.highlighted[t].getAttribute("colspan")),l=parseInt(obj.highlighted[t].getAttribute("rowspan"));else n=r,l=o;for(var s=r;s<=n;s++)obj.headers[s]&&obj.headers[s].classList.remove("selected");for(s=o;s<=l;s++)obj.rows[s]&&obj.rows[s].classList.remove("selected")}}else var i=0;return obj.highlighted=[],obj.selectedCell=null,obj.corner.style.top="-2000px",obj.corner.style.left="-2000px",1!=obj.ignoreEvents&&1==e&&obj.options.onblur&&"function"==typeof obj.options.onblur&&1==i&&obj.options.onblur(el),i},obj.updateSelection=function(e,t,r){var o=e.getAttribute("data-x"),n=e.getAttribute("data-y");if(t)var l=t.getAttribute("data-x"),s=t.getAttribute("data-y");else l=o,s=n;obj.updateSelectionFromCoords(o,n,l,s,r)},obj.updateSelectionFromCoords=function(e,t,r,o,n){var l=obj.resetSelection();if(null==r&&(r=e),null==o&&(o=t),e>=obj.headers.length&&(e=obj.headers.length-1),t>=obj.rows.length&&(t=obj.rows.length-1),r>=obj.headers.length&&(r=obj.headers.length-1),o>=obj.rows.length&&(o=obj.rows.length-1),obj.selectedCell=[e,t,r,o],null!=e){if(obj.records[t][e].classList.add("highlight-selected"),parseInt(e)<parseInt(r))var s=parseInt(e),i=parseInt(r);else s=parseInt(r),i=parseInt(e);if(parseInt(t)<parseInt(o))var a=parseInt(t),u=parseInt(o);else a=parseInt(o),u=parseInt(t);for(var c=s;c<=i;c++)for(var b=a;b<=u;b++)if(obj.records[b][c].getAttribute("data-merged")){var p=parseInt(obj.records[b][c].getAttribute("data-x")),d=parseInt(obj.records[b][c].getAttribute("data-y")),j=parseInt(obj.records[b][c].getAttribute("colspan")),f=parseInt(obj.records[b][c].getAttribute("rowspan"));j>1&&(p<s&&(s=p),p+j>i&&(i=p+j-1)),f&&(d<a&&(a=d),d+f>u&&(u=d+f-1))}var h=null,g=null,m=null,v=null;for(b=a;b<=u;b++)"none"!=obj.rows[b].style.display&&(null==m&&(m=b),v=b);for(c=s;c<=i;c++){for(b=a;b<=u;b++)"none"!=obj.rows[b].style.display&&"none"!=obj.records[b][c].style.display&&(obj.records[b][c].classList.add("highlight"),obj.highlighted.push(obj.records[b][c]));"hidden"!=obj.options.columns[c].type&&(null==h&&(h=c),g=c)}for(c=h;c<=g;c++)"hidden"!=obj.options.columns[c].type&&(obj.records[m][c].classList.add("highlight-top"),obj.records[v][c].classList.add("highlight-bottom"),obj.headers[c].classList.add("selected"));for(b=m;b<=v;b++)"none"!=obj.rows[b].style.display&&(obj.records[b][h].classList.add("highlight-left"),obj.records[b][g].classList.add("highlight-right"),obj.rows[b].classList.add("selected"));obj.selectedContainer=[h,m,g,v]}1!=obj.ignoreEvents&&(obj.options.onfocus&&"function"==typeof obj.options.onfocus&&0==l&&obj.options.onfocus(el),"function"==typeof obj.options.onselection&&obj.options.onselection(el,h,m,g,v,n)),obj.updateCornerPosition()},obj.removeCopySelection=function(){for(var e=0;e<obj.selection.length;e++)obj.selection[e].classList.remove("selection"),obj.selection[e].classList.remove("selection-left"),obj.selection[e].classList.remove("selection-right"),obj.selection[e].classList.remove("selection-top"),obj.selection[e].classList.remove("selection-bottom");obj.selection=[]},obj.updateCopySelection=function(e,t){obj.removeCopySelection();var r=obj.selectedContainer[0],o=obj.selectedContainer[1],n=obj.selectedContainer[2],l=obj.selectedContainer[3];if(e&&t){if(e-n>0)var s=parseInt(n)+1,i=parseInt(e);else s=parseInt(e),i=parseInt(r)-1;if(t-l>0)var a=parseInt(l)+1,u=parseInt(t);else a=parseInt(t),u=parseInt(o)-1;if(i-s<u-a)s=parseInt(r),i=parseInt(n);else a=parseInt(o),u=parseInt(l);for(var c=a;c<=u;c++)for(var b=s;b<=i;b++)obj.records[c][b]&&"none"!=obj.rows[c].style.display&&"none"!=obj.records[c][b].style.display&&(obj.records[c][b].classList.add("selection"),obj.records[a][b].classList.add("selection-top"),obj.records[u][b].classList.add("selection-bottom"),obj.records[c][s].classList.add("selection-left"),obj.records[c][i].classList.add("selection-right"),obj.selection.push(obj.records[c][b]))}},obj.updateCornerPosition=function(){if(obj.highlighted.length){var e=obj.highlighted[obj.highlighted.length-1],t=obj.content.getBoundingClientRect().left,r=obj.content.getBoundingClientRect().top,o=e.getBoundingClientRect().left,n=e.getBoundingClientRect().top,l=e.getBoundingClientRect().width,s=e.getBoundingClientRect().height,i=o-t+obj.content.scrollLeft+l-4,a=n-r+obj.content.scrollTop+s-4;obj.corner.style.top=a+"px",obj.corner.style.left=i+"px"}else obj.corner.style.top="-2000px",obj.corner.style.left="-2000px"},obj.updateScroll=function(e){var t=obj.content.getBoundingClientRect().left,r=obj.content.getBoundingClientRect().top,o=obj.content.getBoundingClientRect().width,n=obj.content.getBoundingClientRect().height,l=obj.records[obj.selectedCell[3]][obj.selectedCell[2]],s=l.getBoundingClientRect().left,i=l.getBoundingClientRect().top,a=l.getBoundingClientRect().width,u=l.getBoundingClientRect().height;if(0==e||1==e)var c=s-t+obj.content.scrollLeft,b=i-r+obj.content.scrollTop-2;else c=s-t+obj.content.scrollLeft+a,b=i-r+obj.content.scrollTop+u;b>obj.content.scrollTop+30&&b<obj.content.scrollTop+n||(b<obj.content.scrollTop+30?obj.content.scrollTop=b-u:obj.content.scrollTop=b-(n-2)),c>obj.content.scrollLeft&&c<obj.content.scrollLeft+o||(c<obj.content.scrollLeft+30?(obj.content.scrollLeft=c,obj.content.scrollLeft<50&&(obj.content.scrollLeft=0)):obj.content.scrollLeft=c-(o-20))},obj.getWidth=function(e){if(e)"object"==typeof e&&(e=$(e).getAttribute("data-x")),t=obj.colgroup[e].getAttribute("width");else for(var t=[],r=0;r<obj.headers.length;r++)t.push(obj.columns[r].width);return t},obj.setWidth=function(e,t,r){t>0&&("object"==typeof e&&(e=$(e).getAttribute("data-x")),r||obj.colgroup[e].getAttribute("width"),obj.colgroup[e].setAttribute("width",t),obj.options.columns[e].width=t,obj.setHistory({action:"setWidth",column:e,oldValue:r,newValue:t}),1!=obj.ignoreEvents&&"function"==typeof obj.options.onresizecolumn&&obj.options.onresizecolumn(el,e,t,r),obj.updateCornerPosition())},obj.setHeight=function(e,t,r){t>0&&("object"==typeof e&&(column=$(e).getAttribute("data-y")),r||obj.rows[e].getAttribute("height"),obj.rows[e].setAttribute("height",t),obj.setHistory({action:"setHeight",row:e,oldValue:r,newValue:t}),1!=obj.ignoreEvents&&"function"==typeof obj.options.onresizerow&&obj.options.onresizerow(el,e,t,r),obj.updateCornerPosition())},obj.getHeight=function(e){return e&&("object"==typeof e&&(e=$(e).getAttribute("data-y")),data=obj.rows[e].getAttribute("height")),data},obj.getHeader=function(e){return obj.headers[e].innerText},obj.setHeader=function(e,t){if(obj.headers[e]){var r=obj.headers[e].innerText;t||(t=prompt("Column name",r)),t&&(obj.headers[e].innerHTML=t),obj.setHistory({action:"setHeader",column:e,oldValue:r,newValue:t})}},obj.getHeaders=function(e){for(var t=[],r=0;r<obj.headers.length;r++)t.push(obj.getHeader(r));return e?t:t.join(",")},obj.getStyle=function(e,t){if(e)return e=jexcel.getIdFromColumnName(e,!0),t?obj.records[e[1]][e[0]].style[t]:obj.records[e[1]][e[0]].getAttribute("style");for(var r={},o=obj.options.data[0].length,n=obj.options.data.length,l=0;l<n;l++)for(var s=0;s<o;s++){var i=t?obj.records[l][s].style[t]:obj.records[l][s].getAttribute("style");if(i)r[jexcel.getColumnNameFromId([s,l])]=i}return r},obj.resetStyle=function(e,t){for(var r=Object.keys(e),o=0;o<r.length;o++){var n=jexcel.getIdFromColumnName(r[o],!0);obj.records[n[1]]&&obj.records[n[1]][n[0]]&&obj.records[n[1]][n[0]].setAttribute("style","")}obj.setStyle(e,null,null,null,t)},obj.setStyle=function(e,t,r,o,n){var l={},s={},i=function(e,t,r){var n=jexcel.getIdFromColumnName(e,!0);if(obj.records[n[1]]&&obj.records[n[1]][n[0]]){var i=obj.records[n[1]][n[0]].style[t];i!=r||o?obj.records[n[1]][n[0]].style[t]=r:(r="",obj.records[n[1]][n[0]].style[t]=""),s[e]||(s[e]=[]),l[e]||(l[e]=[]),s[e].push([t+":"+i]),l[e].push([t+":"+r])}};if(t&&r)if("string"==typeof e)i(e,t,r);else for(var a=[],u=0;u<e.length;u++){var c=e[u].getAttribute("data-x"),b=e[u].getAttribute("data-y"),p=jexcel.getColumnNameFromId([c,b]);a[p]||(i(p,t,r),a[p]=!0)}else{var d=Object.keys(e);for(u=0;u<d.length;u++){var j=e[d[u]];"string"==typeof j&&(j=j.split(";"));for(var f=0;f<j.length;f++)"string"==typeof j[f]&&(j[f]=j[f].split(":")),j[f][0].trim()&&i(d[u],j[f][0].trim(),j[f][1])}}for(d=Object.keys(s),u=0;u<d.length;u++)s[d[u]]=s[d[u]].join(";");for(d=Object.keys(l),u=0;u<d.length;u++)l[d[u]]=l[d[u]].join(";");n||obj.setHistory({action:"setStyle",oldValue:s,newValue:l})},obj.getComments=function(e,t){if("string"==typeof e)e=jexcel.getIdFromColumnName(e,!0);return t?[obj.records[e[1]][e[0]].getAttribute("title"),obj.records[e[1]][e[0]].getAttribute("author")]:obj.records[e[1]][e[0]].getAttribute("title")||""},obj.setComments=function(e,t,r){if("string"==typeof e)var o=jexcel.getIdFromColumnName(e,!0);else o=e;var n=[obj.records[o[1]][o[0]].getAttribute("title"),r=obj.records[o[1]][o[0]].getAttribute("data-author")];obj.records[o[1]][o[0]].setAttribute("title",t||""),obj.records[o[1]][o[0]].setAttribute("data-author",r||""),t?obj.records[o[1]][o[0]].classList.add("jexcel_comments"):obj.records[o[1]][o[0]].classList.remove("jexcel_comments"),obj.setHistory({action:"setComments",column:e,newValue:[t,r],oldValue:n})},obj.orderBy=function(e,t){if(e>=0){if(Object.keys(obj.options.mergeCells).length>0){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}t=null==t?obj.headers[e].classList.contains("arrow-down")?1:0:t?1:0,Array.prototype.orderBy=function(e,t){return this.slice(0).sort(function(r,o){var n=Number(r[e])==r[e]?Number(r[e]):r[e].toLowerCase(),l=Number(o[e])==o[e]?Number(o[e]):o[e].toLowerCase();return t?n>l?-1:n<l?1:0:n>l?1:n<l?-1:0})};var r=[];if("calendar"==obj.options.columns[e].type||"checkbox"==obj.options.columns[e].type||"radio"==obj.options.columns[e].type)for(var o=0;o<obj.options.data.length;o++)r[o]=[o,obj.options.data[o][e]];else for(o=0;o<obj.options.data.length;o++)r[o]=[o,obj.records[o][e].innerHTML];r=r.orderBy(1,t);var n=[];for(o=0;o<r.length;o++)n[o]=r[o][0];return obj.setHistory({action:"orderBy",rows:n,column:e,order:t}),1!=obj.ignoreEvents&&"function"==typeof obj.options.onsort&&obj.options.onsort(el,e,t),obj.updateOrderArrow(e,t),obj.updateOrder(n),!0}},obj.updateOrderArrow=function(e,t){for(var r=0;r<obj.headers.length;r++)obj.headers[r].classList.remove("arrow-up"),obj.headers[r].classList.remove("arrow-down");t?obj.headers[e].classList.add("arrow-up"):obj.headers[e].classList.add("arrow-down")},obj.updateOrder=function(e){for(var t=[],r=0;r<e.length;r++)t[r]=obj.options.data[e[r]];obj.options.data=t;for(t=[],r=0;r<e.length;r++)t[r]=obj.records[e[r]];obj.records=t;for(t=[],r=0;r<e.length;r++)t[r]=obj.rows[e[r]];if(obj.rows=t,obj.updateTableReferences(),obj.searchInput.value)obj.search(obj.searchInput.value);else if(obj.results=null,obj.pageNumber=0,obj.options.pagination>0)obj.page(0);else if(1==obj.options.lazyLoading)obj.loadPage(0);else for(r=0;r<obj.rows.length;r++)obj.tbody.appendChild(obj.rows[r])},obj.moveRow=function(e,t,r){if(Object.keys(obj.options.mergeCells).length>0&&obj.isRowMerged(t).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}if(1==obj.options.search){if(obj.results&&obj.results.length!=obj.rows.length){if(!confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure))return!1;obj.resetSearch()}obj.results=null}r||(Array.prototype.indexOf.call(obj.tbody.children,obj.rows[t])>=0?obj.tbody.insertBefore(obj.rows[e],obj.rows[t]):obj.tbody.removeChild(obj.rows[e])),obj.rows.splice(t,0,obj.rows.splice(e,1)[0]),obj.records.splice(t,0,obj.records.splice(e,1)[0]),obj.options.data.splice(t,0,obj.options.data.splice(e,1)[0]),obj.options.pagination>0&&obj.tbody.children.length!=obj.options.pagination&&obj.page(obj.pageNumber),obj.setHistory({action:"moveRow",oldValue:e,newValue:t}),1!=obj.ignoreEvents&&"function"==typeof obj.options.onmoverow&&obj.options.onmoverow(el,e,t),obj.updateTableReferences()},obj.insertRow=function(e,t,r){if(1==obj.options.allowInsertRow){var o=[];if(e>0)var n=e;else{n=1;e&&(o=e)}r=!!r;var l=obj.options.data.length-1;if((null==t||t>=parseInt(l)||t<0)&&(t=l),Object.keys(obj.options.mergeCells).length>0&&obj.isRowMerged(t,r).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}if(1==obj.options.search){if(obj.results&&obj.results.length!=obj.rows.length){if(!confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure))return!1;obj.resetSearch()}obj.results=null}for(var s=r?t:t+1,i=obj.records.splice(s),a=obj.options.data.splice(s),u=obj.rows.splice(s),c=[],b=[],p=[],d=s;d<n+s;d++){obj.options.data[d]=[];for(var j=0;j<obj.options.columns.length;j++)obj.options.data[d][j]=o[j]?o[j]:"";var f=obj.createRow(d,obj.options.data[d]);(!u[0]||Array.prototype.indexOf.call(obj.tbody.children,u[0])>=0)&&obj.tbody.insertBefore(f,u[0]),c.push(obj.records[d]),b.push(obj.options.data[d]),p.push(f)}Array.prototype.push.apply(obj.records,i),Array.prototype.push.apply(obj.options.data,a),Array.prototype.push.apply(obj.rows,u),obj.options.pagination>0&&obj.page(obj.pageNumber),obj.setHistory({action:"insertRow",rowNumber:t,numOfRows:n,insertBefore:r,rowRecords:c,rowData:b,rowNode:p}),1!=obj.ignoreEvents&&"function"==typeof obj.options.oninsertrow&&obj.options.oninsertrow(el,t,n,c),obj.updateTableReferences()}},obj.deleteRow=function(e,t){if(1==obj.options.allowDeleteRow)if(obj.options.data.length>1){if(null==e){var r=obj.getSelectedRows();r[0]?(e=parseInt(r[0].getAttribute("data-y")),t=r.length):(e=obj.options.data.length-1,t=1)}var o=obj.options.data.length-1;if((null==e||e>o||e<0)&&(e=o),t||(t=1),e+t>=obj.options.data.length&&(t=obj.options.data.length-e),parseInt(e)>-1){var n=!1;if(Object.keys(obj.options.mergeCells).length>0)for(var l=e;l<e+t;l++)obj.isRowMerged(l,!1).length&&(n=!0);if(n){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}if(1==obj.options.search){if(obj.results&&obj.results.length!=obj.rows.length){if(!confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure))return!1;obj.resetSearch()}obj.results=null}for(l=e;l<e+t;l++)Array.prototype.indexOf.call(obj.tbody.children,obj.rows[l])>=0&&(obj.rows[l].className="",obj.rows[l].remove());var s=obj.records.splice(e,t),i=obj.options.data.splice(e,t),a=obj.rows.splice(e,t);obj.options.pagination>0&&obj.tbody.children.length!=obj.options.pagination&&obj.page(obj.pageNumber),obj.conditionalSelectionUpdate(1,e,e+t-1),obj.setHistory({action:"deleteRow",rowNumber:e,numOfRows:t,insertBefore:1,rowRecords:s,rowData:i,rowNode:a}),1!=obj.ignoreEvents&&"function"==typeof obj.options.ondeleterow&&obj.options.ondeleterow(el,e,t,s),obj.updateTableReferences()}}else console.error("JEXCEL. It is not possible to delete the last row")},obj.moveColumn=function(e,t){if(Object.keys(obj.options.mergeCells).length>0&&obj.isColMerged(t).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}if((e=parseInt(e))>(t=parseInt(t))){obj.headerContainer.insertBefore(obj.headers[e],obj.headers[t]),obj.colgroupContainer.insertBefore(obj.colgroup[e],obj.colgroup[t]);for(var r=0;r<obj.rows.length;r++)obj.rows[r].insertBefore(obj.records[r][e],obj.records[r][t])}else{obj.headerContainer.insertBefore(obj.headers[e],obj.headers[t].nextSibling),obj.colgroupContainer.insertBefore(obj.colgroup[e],obj.colgroup[t].nextSibling);for(r=0;r<obj.rows.length;r++)obj.rows[r].insertBefore(obj.records[r][e],obj.records[r][t].nextSibling)}obj.options.columns.splice(t,0,obj.options.columns.splice(e,1)[0]),obj.headers.splice(t,0,obj.headers.splice(e,1)[0]),obj.colgroup.splice(t,0,obj.colgroup.splice(e,1)[0]);for(r=0;r<obj.rows.length;r++)obj.options.data[r].splice(t,0,obj.options.data[r].splice(e,1)[0]),obj.records[r].splice(t,0,obj.records[r].splice(e,1)[0]);obj.setHistory({action:"moveColumn",oldValue:e,newValue:t}),1!=obj.ignoreEvents&&"function"==typeof obj.options.onmovecolumn&&obj.options.onmovecolumn(el,e,t),obj.updateTableReferences()},obj.insertColumn=function(e,t,r,o){if(1==obj.options.allowInsertColumn){var n=[];e>0?numOfColumns=e:(numOfColumns=1,e&&(n=e));r=!!r;var l=obj.options.columns.length-1;if((null==t||t>=parseInt(l)||t<0)&&(t=l),Object.keys(obj.options.mergeCells).length>0&&obj.isColMerged(t,r).length){if(!confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure))return!1;obj.destroyMerged()}o||(o=[]),o.columns||(o.columns=[]);for(var s=0;s<numOfColumns;s++)o.columns[s]||(o.columns[s]={type:"text",source:[],options:[],width:"50",align:"center"});var i=r?t:t+1;obj.options.columns=obj.options.columns.injectArray(i,o.columns);for(var a=obj.headers.splice(i),u=obj.colgroup.splice(i),c=[],b=[],p=[],d=[],j=i;j<numOfColumns+i;j++)obj.createCellHeader(j),obj.headerContainer.insertBefore(obj.headers[j],obj.headerContainer.children[j+1]),obj.colgroupContainer.insertBefore(obj.colgroup[j],obj.colgroupContainer.children[j+1]),c.push(obj.headers[j]),b.push(obj.colgroup[j]);for(var f=0;f<obj.options.data.length;f++){var h=obj.options.data[f].splice(i),g=obj.records[f].splice(i);d[f]=[],p[f]=[];for(j=i;j<numOfColumns+i;j++){var m=n[f]?n[f]:"";obj.options.data[f][j]=m;var v=obj.createCell(j,f,obj.options.data[f][j]);obj.records[f][j]=v,obj.rows[f]&&obj.rows[f].insertBefore(v,obj.rows[f].children[j+1]),d[f].push(m),p[f].push(v)}Array.prototype.push.apply(obj.options.data[f],h),Array.prototype.push.apply(obj.records[f],g)}if(Array.prototype.push.apply(obj.headers,a),Array.prototype.push.apply(obj.colgroup,u),obj.options.nestedHeaders&&obj.options.nestedHeaders.length>0)if(obj.options.nestedHeaders[0]&&obj.options.nestedHeaders[0][0])for(var x=0;x<obj.options.nestedHeaders.length;x++){var y=parseInt(obj.options.nestedHeaders[x][obj.options.nestedHeaders[x].length-1].colspan)+numOfColumns;obj.options.nestedHeaders[x][obj.options.nestedHeaders[x].length-1].colspan=y,obj.thead.children[x].children[obj.thead.children[x].children.length-1].setAttribute("colspan",y)}else{y=parseInt(obj.options.nestedHeaders[0].colspan)+numOfColumns;obj.options.nestedHeaders[0].colspan=y,obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute("colspan",y)}obj.setHistory({action:"insertColumn",columnNumber:t,numOfColumns:numOfColumns,insertBefore:r,columns:o.columns,headers:c,colgroup:b,records:p,data:d}),1!=obj.ignoreEvents&&"function"==typeof obj.o