--- /dev/null
+<html>
+<head>
+ <title>The source code</title>
+ <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+ <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
+</head>
+<body onload="prettyPrint();">
+ <pre class="prettyprint lang-js">Ext.ns('Ext.ux.menu');\r
+\r
+<div id="cls-Ext.ux.menu.RangeMenu"></div>/** \r
+ * @class Ext.ux.menu.RangeMenu\r
+ * @extends Ext.menu.Menu\r
+ * Custom implementation of Ext.menu.Menu that has preconfigured\r
+ * items for gt, lt, eq.\r
+ * <p><b><u>Example Usage:</u></b></p>\r
+ * <pre><code> \r
+\r
+ * </code></pre> \r
+ */\r
+Ext.ux.menu.RangeMenu = Ext.extend(Ext.menu.Menu, {\r
+\r
+ constructor : function (config) {\r
+\r
+ Ext.ux.menu.RangeMenu.superclass.constructor.call(this, config);\r
+\r
+ this.addEvents(\r
+ <div id="event-Ext.ux.menu.RangeMenu-update"></div>/**\r
+ * @event update\r
+ * Fires when a filter configuration has changed\r
+ * @param {Ext.ux.grid.filter.Filter} this The filter object.\r
+ */\r
+ 'update'\r
+ );\r
+ \r
+ this.updateTask = new Ext.util.DelayedTask(this.fireUpdate, this);\r
+ \r
+ var i, len, item, cfg, Cls;\r
+\r
+ for (i = 0, len = this.menuItems.length; i < len; i++) {\r
+ item = this.menuItems[i];\r
+ if (item !== '-') {\r
+ // defaults\r
+ cfg = {\r
+ itemId: 'range-' + item,\r
+ enableKeyEvents: true,\r
+ iconCls: this.iconCls[item] || 'no-icon',\r
+ listeners: {\r
+ scope: this,\r
+ keyup: this.onInputKeyUp\r
+ }\r
+ };\r
+ Ext.apply(\r
+ cfg,\r
+ // custom configs\r
+ Ext.applyIf(this.fields[item] || {}, this.fieldCfg[item]),\r
+ // configurable defaults\r
+ this.menuItemCfgs\r
+ );\r
+ Cls = cfg.fieldCls || this.fieldCls;\r
+ item = this.fields[item] = new Cls(cfg);\r
+ }\r
+ this.add(item);\r
+ }\r
+ },\r
+\r
+ /**\r
+ * @private\r
+ * called by this.updateTask\r
+ */\r
+ fireUpdate : function () {\r
+ this.fireEvent('update', this);\r
+ },\r
+ \r
+ <div id="method-Ext.ux.menu.RangeMenu-getValue"></div>/**\r
+ * Get and return the value of the filter.\r
+ * @return {String} The value of this filter\r
+ */\r
+ getValue : function () {\r
+ var result = {}, key, field;\r
+ for (key in this.fields) {\r
+ field = this.fields[key];\r
+ if (field.isValid() && String(field.getValue()).length > 0) {\r
+ result[key] = field.getValue();\r
+ }\r
+ }\r
+ return result;\r
+ },\r
+ \r
+ <div id="method-Ext.ux.menu.RangeMenu-setValue"></div>/**\r
+ * Set the value of this menu and fires the 'update' event.\r
+ * @param {Object} data The data to assign to this menu\r
+ */ \r
+ setValue : function (data) {\r
+ var key;\r
+ for (key in this.fields) {\r
+ this.fields[key].setValue(data[key] !== undefined ? data[key] : '');\r
+ }\r
+ this.fireEvent('update', this);\r
+ },\r
+\r
+ /** \r
+ * @private\r
+ * Handler method called when there is a keyup event on an input\r
+ * item of this menu.\r
+ */\r
+ onInputKeyUp : function (field, e) {\r
+ var k = e.getKey();\r
+ if (k == e.RETURN && field.isValid()) {\r
+ e.stopEvent();\r
+ this.hide(true);\r
+ return;\r
+ }\r
+ \r
+ if (field == this.fields.eq) {\r
+ if (this.fields.gt) {\r
+ this.fields.gt.setValue(null);\r
+ }\r
+ if (this.fields.lt) {\r
+ this.fields.lt.setValue(null);\r
+ }\r
+ }\r
+ else {\r
+ this.fields.eq.setValue(null);\r
+ }\r
+ \r
+ // restart the timer\r
+ this.updateTask.delay(this.updateBuffer);\r
+ }\r
+});\r
+</pre>
+</body>
+</html>
\ No newline at end of file