| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <head> |
| <title>dojox.Grid - Image Search Test</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta> |
| <style> |
| @import "../../_grid/Grid.css"; |
| body { |
| font-size: 0.9em; |
| font-family: Geneva, Arial, Helvetica, sans-serif; |
| } |
| .grid { |
| height: 30em; |
| width: 51em; |
| border: 1px solid silver; |
| } |
| #info { width: 700px; } |
| </style> |
| <script type="text/javascript" src="../../../../dojo/dojo.js" |
| djConfig="debugAtAllCosts: false, isDebug:false, parseOnLoad: true"> |
| </script> |
| <script type="text/javascript"> |
| dojo.require("dojox.grid.Grid"); |
| dojo.require("dojo.parser"); |
| </script> |
| <script type="text/javascript" src="yahooSearch.js"></script> |
| <script type="text/javascript"> |
| // model fields |
| imageFields = [ |
| { name: 'Title', na: '' }, |
| { name: 'Thumbnail', na: ''}, |
| { name: 'Summary', na: '' }, |
| { name: 'Url', na: '' }, |
| { name: 'FileSize', na: ''}, |
| { name: 'Height', na: ''}, |
| { name: 'Width', na: ''} |
| ]; |
| // create data model |
| var model = new dojox.grid.data.yahooSearch(imageFields, null, "searchInput"); |
| model.url = 'http://search.yahooapis.com/ImageSearchService/V1/imageSearch'; |
| model.observer(this); |
| |
| // report some model send/receive status |
| model.onSend = function(inParams){ |
| dojo.byId('sendInfo').innerHTML = dojo.string.substitute( |
| 'Request rows ${0} to ${1}.  ', |
| [inParams.start, inParams.start + inParams.results -1] |
| ); |
| } |
| model.onReceive = function(inData) { |
| dojo.byId('receiveInfo').innerHTML = dojo.string.substitute( |
| 'Receive rows ${0} to ${1}.  ', |
| [ |
| inData.firstResultPosition, |
| inData.firstResultPosition + inData.totalResultsReturned-1 |
| ] |
| ); |
| } |
| |
| |
| // Define grid structure |
| // remove the height from the header image cell / row cells have a default height so there's less adjustment when thumb comes in. |
| beforeImageRow = function(inRowIndex, inSubRows){ |
| inSubRows[0].hidden = (inRowIndex == -1); |
| } |
| |
| var imageLayout = [ |
| { onBeforeRow: beforeImageRow, |
| cells: [ |
| [ { name: 'Image', cellStyles: "height: 100px;", styles: "text-align: center;", width: 12, field: 3, extraField: 1, formatter: formatImage }, |
| { name: 'Image', cellStyles: "height: 100px;", styles: "text-align: center;", width: 12, field: 3, extraField: 1, formatter: formatImage }, |
| { name: 'Image', cellStyles: "height: 100px;", styles: "text-align: center;", width: 12, field: 3, extraField: 1, formatter: formatImage }, |
| { name: 'Image', cellStyles: "height: 100px;", styles: "text-align: center;", width: 12, field: 3, extraField: 1, formatter: formatImage } |
| ] |
| ]} |
| ]; |
| |
| // Create grid subclass to function as we need to display images only. |
| // adds indirection between model row and grid row. |
| dojo.declare("dojox.ImageGrid", dojox.Grid, { |
| postCreate: function() { |
| this.inherited(arguments); |
| this.modelDatumChange = this.modelRowChange; |
| this.colCount = this.layout.cells.length; |
| }, |
| getDataRowIndex: function(inCell, inRowIndex) { |
| var r = inCell.index + Math.floor(inRowIndex * this.colCount); |
| return r; |
| }, |
| // called in cell context |
| get: function(inRowIndex) { |
| var r = this.grid.getDataRowIndex(this, inRowIndex); |
| return dojox.Grid.prototype.get.call(this, r); |
| }, |
| modelAllChange: function(){ |
| this.rowCount = Math.ceil(this.model.getRowCount() / this.colCount); |
| this.updateRowCount(this.rowCount); |
| }, |
| modelRowChange: function(inData, inRowIndex) { |
| if( |
| (inRowIndex % this.colCount == this.colCount - 1)|| |
| (inRowIndex == this.model.count - 1) |
| ){ |
| this.updateRow(Math.floor(inRowIndex / this.colCount)); |
| } |
| } |
| }); |
| |
| getCellData = function(inCell, inRowIndex, inField) { |
| var m = inCell.grid.model, r = inCell.grid.getDataRowIndex(inCell, inRowIndex); |
| return m.getDatum(r, inField); |
| } |
| |
| // execute search |
| doSearch = function(){ |
| model.clearData(); |
| model.setRowCount(0); |
| grid.render(); |
| grid.resize(); |
| model.requestRows(); |
| } |
| |
| dojo.addOnLoad(function(){ |
| dojo.query("#searchInput").onkeypress(function(e){ |
| if(e.keyCode == dojo.keys.ENTER){ doSearch(); } |
| }); |
| doSearch(); |
| }); |
| |
| </script> |
| </head> |
| <body> |
| <div style="font-weight: bold; padding-bottom: 0.25em;">dojox.Grid - Image Search Test</div> |
| <input id="searchInput" type="text" value="apple"> |
| <button onclick="doSearch()" style="clear: both;">Search</button> |
| <div jsId="grid" class="grid" structure="imageLayout" dojoType="dojox.ImageGrid" model="model"></div> |
| <br> |
| <div id="info"> |
| <div id="rowCount" style="float: left"></div> |
| <div style="float: right"> |
| <div id="sendInfo" style="text-align: right"></div> |
| <div id="receiveInfo" style="text-align: right"></div> |
| </div> |
| </div> |
| <br /><br /> |
| <p>Note: requires PHP for proxy.</p> |
| </body> |
| </html> |