Upgrade to ExtJS 4.0.2 - Released 06/09/2011
[extjs.git] / docs / source / Color.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5   <title>The source code</title>
6   <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../prettify/prettify.js"></script>
8   <style type="text/css">
9     .highlight { display: block; background-color: #ddd; }
10   </style>
11   <script type="text/javascript">
12     function highlight() {
13       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
14     }
15   </script>
16 </head>
17 <body onload="prettyPrint(); highlight();">
18   <pre class="prettyprint lang-js"><span id='Ext-picker-Color'>/**
19 </span> * @class Ext.picker.Color
20  * @extends Ext.Component
21  * &lt;p&gt;ColorPicker provides a simple color palette for choosing colors. The picker can be rendered to any container.
22  * The available default to a standard 40-color palette; this can be customized with the {@link #colors} config.&lt;/p&gt;
23  * &lt;p&gt;Typically you will need to implement a handler function to be notified when the user chooses a color from the
24  * picker; you can register the handler using the {@link #select} event, or by implementing the {@link #handler}
25  * method.&lt;/p&gt;
26  * &lt;p&gt;Here's an example of typical usage:&lt;/p&gt;
27  * &lt;pre&gt;&lt;code&gt;var cp = new Ext.picker.Color({
28     value: '993300',  // initial selected color
29     renderTo: 'my-div'
30 });
31
32 cp.on('select', function(picker, selColor){
33     // do something with selColor
34 });
35 &lt;/code&gt;&lt;/pre&gt;
36  * {@img Ext.picker.Color/Ext.picker.Color.png Ext.picker.Color component}
37  *
38  */
39 Ext.define('Ext.picker.Color', {
40     extend: 'Ext.Component',
41     requires: 'Ext.XTemplate',
42     alias: 'widget.colorpicker',
43     alternateClassName: 'Ext.ColorPalette',
44     
45 <span id='Ext-picker-Color-cfg-componentCls'>    /**
46 </span>     * @cfg {String} componentCls
47      * The CSS class to apply to the containing element (defaults to 'x-color-picker')
48      */
49     componentCls : Ext.baseCSSPrefix + 'color-picker',
50     
51 <span id='Ext-picker-Color-cfg-selectedCls'>    /**
52 </span>     * @cfg {String} selectedCls
53      * The CSS class to apply to the selected element
54      */
55     selectedCls: Ext.baseCSSPrefix + 'color-picker-selected',
56     
57 <span id='Ext-picker-Color-cfg-value'>    /**
58 </span>     * @cfg {String} value
59      * The initial color to highlight (should be a valid 6-digit color hex code without the # symbol).  Note that
60      * the hex codes are case-sensitive.
61      */
62     value : null,
63     
64 <span id='Ext-picker-Color-cfg-clickEvent'>    /**
65 </span>     * @cfg {String} clickEvent
66      * The DOM event that will cause a color to be selected. This can be any valid event name (dblclick, contextmenu).
67      * Defaults to &lt;tt&gt;'click'&lt;/tt&gt;.
68      */
69     clickEvent :'click',
70
71 <span id='Ext-picker-Color-cfg-allowReselect'>    /**
72 </span>     * @cfg {Boolean} allowReselect If set to true then reselecting a color that is already selected fires the {@link #select} event
73      */
74     allowReselect : false,
75
76 <span id='Ext-picker-Color-property-colors'>    /**
77 </span>     * &lt;p&gt;An array of 6-digit color hex code strings (without the # symbol).  This array can contain any number
78      * of colors, and each hex code should be unique.  The width of the picker is controlled via CSS by adjusting
79      * the width property of the 'x-color-picker' class (or assigning a custom class), so you can balance the number
80      * of colors with the width setting until the box is symmetrical.&lt;/p&gt;
81      * &lt;p&gt;You can override individual colors if needed:&lt;/p&gt;
82      * &lt;pre&gt;&lt;code&gt;
83 var cp = new Ext.picker.Color();
84 cp.colors[0] = 'FF0000';  // change the first box to red
85 &lt;/code&gt;&lt;/pre&gt;
86
87 Or you can provide a custom array of your own for complete control:
88 &lt;pre&gt;&lt;code&gt;
89 var cp = new Ext.picker.Color();
90 cp.colors = ['000000', '993300', '333300'];
91 &lt;/code&gt;&lt;/pre&gt;
92      * @type Array
93      */
94     colors : [
95         '000000', '993300', '333300', '003300', '003366', '000080', '333399', '333333',
96         '800000', 'FF6600', '808000', '008000', '008080', '0000FF', '666699', '808080',
97         'FF0000', 'FF9900', '99CC00', '339966', '33CCCC', '3366FF', '800080', '969696',
98         'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF', '993366', 'C0C0C0',
99         'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', '99CCFF', 'CC99FF', 'FFFFFF'
100     ],
101
102 <span id='Ext-picker-Color-cfg-handler'>    /**
103 </span>     * @cfg {Function} handler
104      * Optional. A function that will handle the select event of this picker.
105      * The handler is passed the following parameters:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
106      * &lt;li&gt;&lt;code&gt;picker&lt;/code&gt; : ColorPicker&lt;div class=&quot;sub-desc&quot;&gt;The {@link #picker Ext.picker.Color}.&lt;/div&gt;&lt;/li&gt;
107      * &lt;li&gt;&lt;code&gt;color&lt;/code&gt; : String&lt;div class=&quot;sub-desc&quot;&gt;The 6-digit color hex code (without the # symbol).&lt;/div&gt;&lt;/li&gt;
108      * &lt;/ul&gt;&lt;/div&gt;
109      */
110 <span id='Ext-picker-Color-cfg-scope'>    /**
111 </span>     * @cfg {Object} scope
112      * The scope (&lt;tt&gt;&lt;b&gt;this&lt;/b&gt;&lt;/tt&gt; reference) in which the &lt;code&gt;{@link #handler}&lt;/code&gt;
113      * function will be called.  Defaults to this ColorPicker instance.
114      */
115     
116     colorRe: /(?:^|\s)color-(.{6})(?:\s|$)/,
117     
118     constructor: function() {
119         this.renderTpl = Ext.create('Ext.XTemplate', '&lt;tpl for=&quot;colors&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;color-{.}&quot; hidefocus=&quot;on&quot;&gt;&lt;em&gt;&lt;span style=&quot;background:#{.}&quot; unselectable=&quot;on&quot;&gt;&amp;#160;&lt;/span&gt;&lt;/em&gt;&lt;/a&gt;&lt;/tpl&gt;');
120         this.callParent(arguments);
121     },
122     
123     // private
124     initComponent : function(){
125         var me = this;
126         
127         this.callParent(arguments);
128         me.addEvents(
129 <span id='Ext-picker-Color-event-select'>            /**
130 </span>             * @event select
131              * Fires when a color is selected
132              * @param {Ext.picker.Color} this
133              * @param {String} color The 6-digit color hex code (without the # symbol)
134              */
135             'select'
136         );
137
138         if (me.handler) {
139             me.on('select', me.handler, me.scope, true);
140         }
141     },
142
143
144     // private
145     onRender : function(container, position){
146         var me = this,
147             clickEvent = me.clickEvent;
148             
149         Ext.apply(me.renderData, {
150             itemCls: me.itemCls,
151             colors: me.colors    
152         });
153         this.callParent(arguments);
154
155         me.mon(me.el, clickEvent, me.handleClick, me, {delegate: 'a'});
156         // always stop following the anchors
157         if(clickEvent != 'click'){
158             me.mon(me.el, 'click', Ext.emptyFn, me, {delegate: 'a', stopEvent: true});
159         }
160     },
161
162     // private
163     afterRender : function(){
164         var me = this,
165             value;
166             
167         this.callParent(arguments);
168         if (me.value) {
169             value = me.value;
170             me.value = null;
171             me.select(value, true);
172         }
173     },
174
175     // private
176     handleClick : function(event, target){
177         var me = this,
178             color;
179             
180         event.stopEvent();
181         if (!me.disabled) {
182             color = target.className.match(me.colorRe)[1];
183             me.select(color.toUpperCase());
184         }
185     },
186
187 <span id='Ext-picker-Color-method-select'>    /**
188 </span>     * Selects the specified color in the picker (fires the {@link #select} event)
189      * @param {String} color A valid 6-digit color hex code (# will be stripped if included)
190      * @param {Boolean} suppressEvent (optional) True to stop the select event from firing. Defaults to &lt;tt&gt;false&lt;/tt&gt;.
191      */
192     select : function(color, suppressEvent){
193         
194         var me = this,
195             selectedCls = me.selectedCls,
196             value = me.value,
197             el;
198             
199         color = color.replace('#', '');
200         if (!me.rendered) {
201             me.value = color;
202             return;
203         }
204         
205         
206         if (color != value || me.allowReselect) {
207             el = me.el;
208
209             if (me.value) {
210                 el.down('a.color-' + value).removeCls(selectedCls);
211             }
212             el.down('a.color-' + color).addCls(selectedCls);
213             me.value = color;
214             if (suppressEvent !== true) {
215                 me.fireEvent('select', me, color);
216             }
217         }
218     },
219     
220 <span id='Ext-picker-Color-method-getValue'>    /**
221 </span>     * Get the currently selected color value.
222      * @return {String} value The selected value. Null if nothing is selected.
223      */
224     getValue: function(){
225         return this.value || null;
226     }
227 });
228 </pre>
229 </body>
230 </html>