UNPKG

apex4x

Version:

The Comprehensive ARIA Development Suite

250 lines (221 loc) 6.65 kB
$A.import("Grid", { defer: true }, function () { var grid = new $A.Grid("dataGridId"); grid.editable(true); grid.setEditOffset(function (cellObject) { return $A.offset(cellObject.cellNode, true); }); grid.setChangeListener( function (originalCellObject, newValue, rowObject, gridInstance) { // rowObject reflects the same object passed to grid.add // so that rowObject.id reflects the original row ID. // originalCellObject reflects the cell object instance passed within 'cells' when passed to grid.add // making it easy to validate the data by comparing originalCellObject.value with newValue // To prevent rendering the changed input or new toggle state, simply return false if (typeof newValue !== "boolean" && !newValue) return false; var val = typeof newValue === "boolean" ? newValue ? "true" : "false" : formatStr(newValue), str = '<span>Update DB row "' + rowObject.id + '" field "' + originalCellObject.id + '" with <br />value: "' + val + '"</span>', popup = $A.get("popupId"); popup.hidden = false; popup.innerHTML = str.announce(); setTimeout(function () { popup.hidden = true; }, 4000); }, ); // set accessible text for screen reader users grid.setAccessibleText({ // Set offscreen and tooltip text for toggle cells toggleButtonRole: "Toggle Button", toggleButtonState: "Pressed", disabledText: "Disabled", // Set the page text to be announced to screen reader users during infinite scrolling. E.G "Page 2", "Page 3", etc. pageRole: "Page", // Set the active state and help tooltip text for mouse users editLinkAction: "Editable", dblClickTitle: "Click to activate", // Set the title text for the edit field editFieldTitle: "Press Enter to save, or Escape to cancel.", }); grid.mapColumnNames([ { id: "row-id", lbl: "ID", colClass: "gridcell-col1", }, { id: "personal-name", lbl: "Name", colClass: "gridcell-col2", }, { id: "personal-email", lbl: "Email", colClass: "gridcell-col3", }, { id: "personal-city", lbl: "Residence", colClass: "gridcell-col4", }, { id: "personal-university", lbl: "University", colClass: "gridcell-col5", }, { id: "personal-status", lbl: "Attendance", colClass: "gridcell-col6", }, ]); grid.enableRowHeaders(true, "row-id"); grid.setRowMax(11); var pageHeaderSpan = $A.get("pTotal"), pageEdit = $A.get("goTo"), pageCurrent = 0, pageTotal = 0, firstBtn = $A.get("btnFirst"), prevBtn = $A.get("btnPrev"), nextBtn = $A.get("btnNext"), lastBtn = $A.get("btnLast"), pgn = $A.get("pgn"); grid.setPageIndexChangeListener( function (currentPage, totalPages, gridInstance) { if (pageCurrent != currentPage) { if (currentPage === 1) { firstBtn.disabled = prevBtn.disabled = true; } else { firstBtn.disabled = prevBtn.disabled = false; } if (currentPage === totalPages) { nextBtn.disabled = lastBtn.disabled = true; } else { nextBtn.disabled = lastBtn.disabled = false; } } pageTotal = totalPages; pageHeaderSpan.innerHTML = "Page " + currentPage + " of " + totalPages; pageEdit.value = pageCurrent = currentPage; }, ); // Fires every time a grid object is opened in the DOM grid.setOpenListener(function (container, dc, gridInstance) { pgn.hidden = false; pageHeaderSpan.innerHTML = "Page " + pageCurrent + " of " + pageTotal; }); // Fires every time a grid object is closed in the DOM grid.setCloseListener(function (container, dc, gridInstance) { pageHeaderSpan.innerHTML = ""; pgn.hidden = true; }); grid.open(); // Load test records var spin = 2, tIndex = 0, dataRows = []; for (tIndex; tIndex <= 1071; tIndex++) { dataRows.push({ id: tIndex, cells: { "row-id": { readonly: true, value: tIndex, }, "personal-name": { value: spin === 2 ? "Rincewind" : spin === 1 ? "Ponder Stibbons" : "Hrun the Barbarian", }, "personal-email": { value: spin === 2 ? "wizzard@whatsock.com" : spin === 1 ? "ponder@whatsock.com" : "aarg@whatsock.com", }, "personal-city": { value: "Ankh-Morpork", }, "personal-university": { value: spin === 2 || spin === 1 ? "Unseen University" : "Gruntings", }, "personal-status": { type: "toggle", name: "Active", value: spin === 2 ? false : true, }, }, }); if (!spin) spin = 2; else spin -= 1; } // Use the .add() method to import data table rows grid.add(dataRows); grid.openPage(1); // Set pagination bindings $A.on("button.paginate", "click", function (ev) { var o = this, open = false; if (o.id == "btnFirst" && pageCurrent > 1) { grid.firstPage(); open = true; } else if (o.id == "btnPrev" && pageCurrent > 1) { grid.prevPage(); open = true; } else if (o.id == "btnNext" && pageCurrent < pageTotal) { grid.nextPage(); open = true; } else if (o.id == "btnLast" && pageCurrent < pageTotal) { grid.lastPage(); open = true; } else if (o.id == "btnGo") { var val = Math.floor(pageEdit.value); if (val > 0 && val <= pageTotal && val !== pageCurrent) { grid.openPage(val); open = true; } else pageEdit.value = pageCurrent; } if (open) { $A.announce("Page " + pageCurrent); grid.focus(); } ev.preventDefault(); }); $A.on(pageEdit, "keydown", function (ev) { var k = ev.which || ev.keyCode; if (k == 13) { $A.trigger("#btnGo", "click"); ev.preventDefault(); } }); var formatStr = function (s, q) { var str = ""; if (typeof s === "number") str = s.toString(); else str = s; var i = str.length, aRet = []; while (i--) { var iC = str[i].charCodeAt(); if (str[i] != "\n" && (iC < 65 || iC > 127 || (iC > 90 && iC < 97))) aRet[i] = "&#" + iC + ";"; else aRet[i] = str[i]; } return aRet.join(""); }; });