PageRenderTime 131ms CodeModel.GetById 50ms RepoModel.GetById 1ms app.codeStats 0ms

/ext-4.0.7/examples/menu/action-grid.js

https://bitbucket.org/srogerf/javascript
JavaScript | 205 lines | 170 code | 10 blank | 25 comment | 12 complexity | 6883bc8697678b0549719ac049899a65 MD5 | raw file
  1. /*
  2. This file is part of Ext JS 4
  3. Copyright (c) 2011 Sencha Inc
  4. Contact: http://www.sencha.com/contact
  5. GNU General Public License Usage
  6. This file may be used under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation and appearing in the file LICENSE included in the packaging of this file. Please review the following information to ensure the GNU General Public License version 3.0 requirements will be met: http://www.gnu.org/copyleft/gpl.html.
  7. If you are unsure which license is appropriate for your use, please contact the sales department at http://www.sencha.com/contact.
  8. */
  9. Ext.require([
  10. 'Ext.grid.*',
  11. 'Ext.data.*',
  12. 'Ext.util.*',
  13. 'Ext.Action'
  14. ]);
  15. Ext.onReady(function() {
  16. Ext.QuickTips.init();
  17. // sample static data for the store
  18. var myData = [
  19. ['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'],
  20. ['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'],
  21. ['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'],
  22. ['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am'],
  23. ['American International Group, Inc.', 64.13, 0.31, 0.49, '9/1 12:00am'],
  24. ['AT&T Inc.', 31.61, -0.48, -1.54, '9/1 12:00am'],
  25. ['Boeing Co.', 75.43, 0.53, 0.71, '9/1 12:00am'],
  26. ['Caterpillar Inc.', 67.27, 0.92, 1.39, '9/1 12:00am'],
  27. ['Citigroup, Inc.', 49.37, 0.02, 0.04, '9/1 12:00am'],
  28. ['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28, '9/1 12:00am'],
  29. ['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am'],
  30. ['General Electric Company', 34.14, -0.08, -0.23, '9/1 12:00am'],
  31. ['General Motors Corporation', 30.27, 1.09, 3.74, '9/1 12:00am'],
  32. ['Hewlett-Packard Co.', 36.53, -0.03, -0.08, '9/1 12:00am'],
  33. ['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'],
  34. ['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'],
  35. ['International Business Machines', 81.41, 0.44, 0.54, '9/1 12:00am'],
  36. ['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'],
  37. ['JP Morgan & Chase & Co', 45.73, 0.07, 0.15, '9/1 12:00am'],
  38. ['McDonald\'s Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'],
  39. ['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'],
  40. ['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'],
  41. ['Pfizer Inc', 27.96, 0.4, 1.45, '9/1 12:00am'],
  42. ['The Coca-Cola Company', 45.07, 0.26, 0.58, '9/1 12:00am'],
  43. ['The Home Depot, Inc.', 34.64, 0.35, 1.02, '9/1 12:00am'],
  44. ['The Procter & Gamble Company', 61.91, 0.01, 0.02, '9/1 12:00am'],
  45. ['United Technologies Corporation', 63.26, 0.55, 0.88, '9/1 12:00am'],
  46. ['Verizon Communications', 35.57, 0.39, 1.11, '9/1 12:00am'],
  47. ['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am']
  48. ];
  49. /**
  50. * Custom function used for column renderer
  51. * @param {Object} val
  52. */
  53. function change(val) {
  54. if (val > 0) {
  55. return '<span style="color:green;">' + val + '</span>';
  56. } else if (val < 0) {
  57. return '<span style="color:red;">' + val + '</span>';
  58. }
  59. return val;
  60. }
  61. /**
  62. * Custom function used for column renderer
  63. * @param {Object} val
  64. */
  65. function pctChange(val) {
  66. if (val > 0) {
  67. return '<span style="color:green;">' + val + '%</span>';
  68. } else if (val < 0) {
  69. return '<span style="color:red;">' + val + '%</span>';
  70. }
  71. return val;
  72. }
  73. // create the data store
  74. var store = Ext.create('Ext.data.ArrayStore', {
  75. fields: [
  76. {name: 'company'},
  77. {name: 'price', type: 'float'},
  78. {name: 'change', type: 'float'},
  79. {name: 'pctChange', type: 'float'},
  80. {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
  81. ],
  82. data: myData
  83. });
  84. var sellAction = Ext.create('Ext.Action', {
  85. icon : '../shared/icons/fam/delete.gif', // Use a URL in the icon config
  86. text: 'Sell stock',
  87. disabled: true,
  88. handler: function(widget, event) {
  89. var rec = grid.getSelectionModel().getSelection()[0];
  90. if (rec) {
  91. alert("Sell " + rec.get('company'));
  92. } else {
  93. alert('Please select a company from the grid');
  94. }
  95. }
  96. });
  97. var buyAction = Ext.create('Ext.Action', {
  98. iconCls: 'buy-button',
  99. text: 'Buy stock',
  100. disabled: true,
  101. handler: function(widget, event) {
  102. var rec = grid.getSelectionModel().getSelection()[0];
  103. if (rec) {
  104. alert("Buy " + rec.get('company'));
  105. } else {
  106. alert('Please select a company from the grid');
  107. }
  108. }
  109. });
  110. var contextMenu = Ext.create('Ext.menu.Menu', {
  111. items: [
  112. buyAction,
  113. sellAction
  114. ]
  115. });
  116. // create the Grid
  117. var grid = Ext.create('Ext.grid.Panel', {
  118. store: store,
  119. columnLines: true,
  120. columns: [
  121. {
  122. text : 'Company',
  123. flex : 1,
  124. sortable : false,
  125. dataIndex: 'company'
  126. },
  127. {
  128. text : 'Price',
  129. width : 75,
  130. sortable : true,
  131. renderer : 'usMoney',
  132. dataIndex: 'price'
  133. },
  134. {
  135. text : 'Change',
  136. width : 75,
  137. sortable : true,
  138. renderer : change,
  139. dataIndex: 'change'
  140. },
  141. {
  142. text : '% Change',
  143. width : 75,
  144. sortable : true,
  145. renderer : pctChange,
  146. dataIndex: 'pctChange'
  147. },
  148. {
  149. text : 'Last Updated',
  150. width : 85,
  151. sortable : true,
  152. renderer : Ext.util.Format.dateRenderer('m/d/Y'),
  153. dataIndex: 'lastChange'
  154. }
  155. ],
  156. dockedItems: [{
  157. xtype: 'toolbar',
  158. items: [
  159. buyAction, sellAction
  160. ]
  161. }],
  162. viewConfig: {
  163. stripeRows: true,
  164. listeners: {
  165. itemcontextmenu: function(view, rec, node, index, e) {
  166. e.stopEvent();
  167. contextMenu.showAt(e.getXY());
  168. return false;
  169. }
  170. }
  171. },
  172. height: 350,
  173. width: 600,
  174. title: 'Action Grid',
  175. renderTo: 'grid-example',
  176. stateful: false
  177. });
  178. grid.getSelectionModel().on({
  179. selectionchange: function(sm, selections) {
  180. if (selections.length) {
  181. buyAction.enable();
  182. sellAction.enable();
  183. } else {
  184. buyAction.disable();
  185. sellAction.disable();
  186. }
  187. }
  188. });
  189. });