diff options
Diffstat (limited to 'includes/js/dojox/grid/tests/test_events.html')
-rw-r--r-- | includes/js/dojox/grid/tests/test_events.html | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/includes/js/dojox/grid/tests/test_events.html b/includes/js/dojox/grid/tests/test_events.html new file mode 100644 index 0000000..8ea61a4 --- /dev/null +++ b/includes/js/dojox/grid/tests/test_events.html @@ -0,0 +1,174 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <title>Test dojox.Grid Events</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta> + <style type="text/css"> + @import "../_grid/Grid.css"; + body,td,th { + font-family: Geneva, Arial, Helvetica, sans-serif; + } + #grid { + border: 1px solid; + border-top-color: #F6F4EB; + border-right-color: #ACA899; + border-bottom-color: #ACA899; + border-left-color: #F6F4EB; + } + #grid { + width: 50em; + height: 20em; + padding: 1px; + overflow: hidden; + font-size: small; + } + h3 { + margin: 10px 0 2px 0; + } + .fade { + /*background-image:url(images/fade.gif);*/ + } + .no-fade { + /*background-image: none;*/ + } + #eventGrid { + float: right; + font-size: small; + } + </style> + <script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:false, parseOnLoad: true"></script> + <script type="text/javascript"> + dojo.require("dojox.grid.Grid"); + dojo.require("dojo.parser"); + </script> + <script type="text/javascript"> + // events to track + var eventRows = [ + { name: 'onCellClick' }, + { name: 'onRowClick', properties: ['rowIndex'] }, + { name: 'onCellDblClick' }, + { name: 'onRowDblClick', properties: ['rowIndex'] }, + { name: 'onCellMouseOver' }, + { name: 'onCellMouseOut' }, + { name: 'onCellMouseDown' }, + { name: 'onRowMouseOver' }, + { name: 'onRowMouseOut' }, + { name: 'onRowMouseDown' }, + { name: 'onHeaderCellClick' }, + { name: 'onHeaderClick', properties: ['rowIndex'] }, + { name: 'onHeaderCellDblClick' }, + { name: 'onHeaderDblClick', properties: ['rowIndex'] }, + { name: 'onHeaderCellMouseOver' }, + { name: 'onHeaderCellMouseOut' }, + { name: 'onHeaderCellMouseDown' }, + { name: 'onHeaderMouseOver' }, + { name: 'onHeaderMouseOut' }, + { name: 'onKeyDown', properties: ['keyCode'] }, + { name: 'onCellContextMenu' }, + { name: 'onRowContextMenu', properties: ['rowIndex'] }, + { name: 'onHeaderCellContextMenu' }, + { name: 'onHeaderContextMenu', properties: ['rowIndex'] } + ]; + + getEventName = function(inRowIndex) { + return eventRows[inRowIndex].name; + }; + + getEventData = function(inRowIndex) { + var d = eventRows[inRowIndex].data; + var r = []; + if (d) + for (var i in d) + r.push(d[i]); + else + r.push('na') + return r.join(', '); + } + + // grid structure for event tracking grid. + var eventView = { + noscroll: true, + cells: [[ + { name: 'Event', get: getEventName, width: 12 }, + { name: 'Data', get: getEventData, width: 10 } + ]] + } + var eventLayout = [ eventView ]; + + var fade = function(inNode) { + if (!inNode || !inNode.style) return; + var c = 150, step = 5, delay = 20; + var animate = function() { + c = Math.min(c + step, 255); + inNode.style.backgroundColor = "rgb(" + c + ", " + c + ", 255)"; + if (c < 255) window.setTimeout(animate, delay); + } + animate(); + } + + // setup a fade on a row. Must do this way to avoid caching of fade gif + updateRowFade = function(inRowIndex) { + var n = eventGrid.views.views[0].getRowNode(inRowIndex); + fade(n); + } + + // store data about event. By default track event.rowIndex and event.cell.index, but eventRows can specify params, which are event properties to track. + setEventData = function(inIndex, inEvent) { + var eRow = eventRows[inIndex]; + eRow.data = {}; + var properties = eRow.properties; + if (properties) + for (var i=0, l=properties.length, p; (p=properties[i] || i < l); i++) + eRow.data[p] = inEvent[p]; + else + eRow.data = { + row: (inEvent.rowIndex != undefined ? Number(inEvent.rowIndex) : 'na'), + cell: (inEvent.cell && inEvent.cell.index != undefined ? inEvent.cell.index : 'na') + } + eventGrid.updateRow(inIndex); + updateRowFade(inIndex); + } + + // setup grid events for all events being tracked. + setGridEvents = function() { + var makeEvent = function(inIndex, inName) { + return function(e) { + setEventData(inIndex, e); + dojox.VirtualGrid.prototype[inName].apply(this, arguments); + } + } + for (var i=0, e; (e=eventRows[i]); i++) + grid[e.name] = makeEvent(i, e.name); + } + + // Grid structure + var layout = [// array of view objects + { type: 'dojox.GridRowView', width: '20px' }, + { noscroll: true, cells: [// array of rows, a row is an array of cells + [{ name: "Alpha", value: '<input type="checkbox"></input>', rowSpan: 2, width: 6, styles: 'text-align:center;' }, { name: "Alpha2", value: "Alpha2" }], + [{ name: "Alpha3", value: "Alpha3" }] + ]}, + { cells: [ + [{ name: "Beta", value: 'simple'}, { name: "Beta2", value: "Beta2" }, { name: "Beta3", value: "Beta3" }, { name: "Beta4", value: "Beta4" }, { name: "Beta5", value: "Beta5" }], + [{ name: "Summary", colSpan: 5, value: 'Summary' }] + ]}, + { noscroll: true, cells: [ + [{ name: "Gamma", value: "Gamma" }, { name: "Gamma2", value: "<button>Radiate</button>", styles: 'text-align:center;' }]] + }]; + + dojo.addOnLoad(function() { + window["grid"] = dijit.byId("grid"); + window["eventGrid"] = dijit.byId("eventGrid"); + grid.rows.defaultRowHeight = 4; + setGridEvents(); + eventGrid.updateRowCount(eventRows.length); + dojo.debug = console.log; + }); + </script> +</head> +<body> +<h3>dojox.Grid Event Tracking</h3> +<div id="eventGrid" autoWidth="true" autoHeight="true" structure="eventLayout" dojoType="dojox.VirtualGrid"></div> +<div id="grid" rowCount="100" dojoType="dojox.VirtualGrid"></div> +</body> +</html> |