source: extensions/GrumPluginClasses/js/ui.inputColorsFB.js @ 10338

Last change on this file since 10338 was 8961, checked in by grum, 13 years ago

release 3.4.0
fix bug:1984, bug:2109
js file are minified, remove packed files

  • Property svn:executable set to *
File size: 19.7 KB
Line 
1/**
2 * -----------------------------------------------------------------------------
3 * file: ui.inputColorsFB.js
4 * file version: 1.0.0
5 * date: 2010-11-04
6 *
7 * A jQuery plugin provided by the piwigo's plugin "GrumPluginClasses"
8 *
9 * -----------------------------------------------------------------------------
10 * Author     : Grum
11 *   email    : grum@piwigo.com
12 *   website  : http://photos.grum.fr
13 *   PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
14 *
15 *   << May the Little SpaceFrog be with you ! >>
16 * -----------------------------------------------------------------------------
17 *
18 *
19 *
20 *
21 * :: HISTORY ::
22 *
23 * | release | date       |
24 * | 1.0.0   | 2010/11/04 | first release
25 * |         |            |
26 * |         |            |
27 * |         |            |
28 * |         |            |
29 * |         |            |
30 * |         |            |
31 *
32 */
33
34
35
36(
37  function($)
38  {
39    /*
40     * plugin 'public' functions
41     */
42    var publicMethods =
43    {
44      init : function (opt)
45        {
46          return this.each(function()
47            {
48              // default values for the plugin
49              var $this=$(this),
50                  data = $this.data('options'),
51                  objects = $this.data('objects'),
52                  properties = $this.data('properties'),
53                  options =
54                    {
55                      width:0,
56                      height:0,
57                      disabled:false,
58                      fg:
59                        {
60                          color:'#ffffff',
61                          opacity:1
62                        },
63                      bg:
64                        {
65                          color:'#000000',
66                          opacity:1
67                        },
68                      selected:'fg',
69                      mode:2, //1 - 2
70                      boxSize:0.6,
71                      change:null,
72                      click:null
73                    };
74
75              // if options given, merge it
76              // if(opt) $.extend(options, opt); ==> options are set by setters
77
78              $this.data('options', options);
79
80
81              if(!properties)
82              {
83                $this.data('properties',
84                  {
85                    initialized:false
86                  }
87                );
88                properties=$this.data('properties');
89              }
90
91              if(!objects)
92              {
93                objects =
94                  {
95                    container:$('<div/>',
96                        {
97                          'class':'ui-inputColorsFB',
98                          css:{
99                            width:'100%',
100                            height:'100%'
101                          }
102                        }
103                    ),
104                    fg:$('<div/>',
105                      {
106                        'class':'ui-inputColorsFB-fg'
107                      }
108                    ).bind('click.inputColorsFB',
109                        function (event)
110                        {
111                          if(options.mode==2) privateMethods.setSelected($this, 'fg' );
112                          if(options.click) $this.trigger('inputColorsFBClick', {target:'fg', color: options.fg} );
113                        }
114                      ),
115                    bg:$('<div/>',
116                      {
117                        'class':'ui-inputColorsFB-bg'
118                      }
119                    ).bind('click.inputColorsFB',
120                        function (event)
121                        {
122                          if(options.mode==2) privateMethods.setSelected($this, 'bg' );
123                          if(options.click) $this.trigger('inputColorsFBClick', {target:'bg', color: options.bg} );
124                        }
125                      ),
126                    fgopacity:$('<div/>',
127                        {
128                          'class':'ui-inputColorsFB-fgopacity'
129                        }
130                    ),
131                    bgopacity:$('<div/>',
132                        {
133                          'class':'ui-inputColorsFB-bgopacity'
134                        }
135                    )
136                  };
137
138                $this
139                  .html('')
140                  .append(objects.container.append(objects.fgopacity.append(objects.fg)).append(objects.bgopacity.append(objects.bg)));
141
142                $this.data('objects', objects);
143              }
144
145              privateMethods.setOptions($this, opt);
146            }
147          );
148        }, // init
149      destroy : function ()
150        {
151          return this.each(
152            function()
153            {
154              // default values for the plugin
155              var $this=$(this),
156                  objects = $this.data('objects');
157              objects.dot.remove();
158              objects.container.unbind().remove();
159              $this
160                .unbind('.inputColorsFB')
161                .css(
162                  {
163                    width:'',
164                    height:''
165                  }
166                );
167            }
168          );
169        }, // destroy
170
171      options: function (value)
172        {
173          return(
174            this.each(
175              function()
176              {
177                privateMethods.setOptions($(this), value);
178              }
179            )
180          );
181        }, // options
182
183      disabled: function (value)
184        {
185          if(value!=null)
186          {
187            return(
188              this.each(
189                function()
190                {
191                  privateMethods.setDisabled($(this), value);
192                }
193              )
194            );
195          }
196          else
197          {
198            var options = this.data('options');
199
200            if(options)
201            {
202              return(options.disabled);
203            }
204            else
205            {
206              return('');
207            }
208          }
209        }, // disabled
210
211      mode: function (value)
212        {
213          if(value!=null)
214          {
215            return(
216              this.each(
217                function()
218                {
219                  privateMethods.setMode($(this), value, true);
220                }
221              )
222            );
223          }
224          else
225          {
226            var options=this.data('options');
227            return(options.mode);
228          }
229        }, // mode
230
231      boxSize: function (value)
232        {
233          if(value!=null)
234          {
235            return(
236              this.each(
237                function()
238                {
239                  privateMethods.setBoxSize($(this), value, true);
240                }
241              )
242            );
243          }
244          else
245          {
246            var options=this.data('options');
247            return(options.boxSize);
248          }
249        }, // boxSize
250
251      width: function (value)
252        {
253          if(value!=null)
254          {
255            return(
256              this.each(
257                function()
258                {
259                  privateMethods.setWidth($(this), value, true);
260                }
261              )
262            );
263          }
264          else
265          {
266            var options=this.data('options');
267            return(options.width);
268          }
269        }, // width
270
271      height: function (value)
272        {
273          if(value!=null)
274          {
275            return(
276              this.each(
277                function()
278                {
279                  privateMethods.setHeight($(this), value, true);
280                }
281              )
282            );
283          }
284          else
285          {
286            var options=this.data('options');
287            return(options.height);
288          }
289        }, // height
290
291      fg: function (value)
292        {
293          if(value!=null)
294          {
295            // set selected value
296            return(
297              this.each(
298                function()
299                {
300                  privateMethods.setFG($(this), value, true);
301                }
302              )
303            );
304          }
305          else
306          {
307            // return the selected tags
308            var options=this.data('options');
309            return(options.fg);
310          }
311        }, // fg
312
313      bg: function (value)
314        {
315          if(value!=null)
316          {
317            // set selected value
318            return(
319              this.each(
320                function()
321                {
322                  privateMethods.setBG($(this), value, true);
323                }
324              )
325            );
326          }
327          else
328          {
329            // return the selected tags
330            var options=this.data('options');
331            return(options.bg);
332          }
333        }, // bg
334
335      selected: function (value)
336        {
337          if(value!=null)
338          {
339            // set selected value
340            return(
341              this.each(
342                function()
343                {
344                  privateMethods.setSelected($(this), value);
345                }
346              )
347            );
348          }
349          else
350          {
351            // return the selected tags
352            var options=this.data('options');
353            return(options.selected);
354          }
355        }, // selected
356
357      isValid: function (value)
358        {
359          if(value!=null)
360          {
361            // set selected value
362            return(
363              this.each(
364                function()
365                {
366                  privateMethods.setIsValid($(this), value);
367                }
368              )
369            );
370          }
371          else
372          {
373            // return the selected tags
374            var properties=this.data('properties');
375            return(properties.isValid);
376          }
377        }, // isValid
378
379      change: function (value)
380        {
381          if(value!=null && $.isFunction(value))
382          {
383            // set selected value
384            return(
385              this.each(
386                function()
387                {
388                  privateMethods.setEventChange($(this), value);
389                }
390              )
391            );
392          }
393          else
394          {
395            // return the selected value
396            var options=this.data('options');
397
398            if(options)
399            {
400              return(options.change);
401            }
402            else
403            {
404              return(null);
405            }
406          }
407        }, // change
408
409      click: function (value)
410        {
411          if(value!=null && $.isFunction(value))
412          {
413            // set selected value
414            return(
415              this.each(
416                function()
417                {
418                  privateMethods.setEventClick($(this), value);
419                }
420              )
421            );
422          }
423          else
424          {
425            // return the selected value
426            var options=this.data('options');
427
428            if(options)
429            {
430              return(options.click);
431            }
432            else
433            {
434              return(null);
435            }
436          }
437        } // click
438
439    }; // methods
440
441
442    /*
443     * plugin 'private' methods
444     */
445    var privateMethods =
446    {
447      setOptions : function (object, value)
448        {
449          var properties=object.data('properties'),
450              options=object.data('options');
451
452          if(!$.isPlainObject(value)) return(false);
453
454          properties.initialized=false;
455
456          privateMethods.setMode(object, (value.mode!=null)?value.mode:options.mode);
457          privateMethods.setBoxSize(object, (value.boxSize!=null)?value.boxSize:options.boxSize);
458          privateMethods.setWidth(object, (value.width!=null)?value.width:options.width);
459          privateMethods.setHeight(object, (value.height!=null)?value.height:options.height);
460          privateMethods.setFG(object, (value.fg!=null)?value.fg:options.fg);
461          privateMethods.setBG(object, (value.bg!=null)?value.bg:options.bg);
462          privateMethods.setSelected(object, (value.selected!=null)?value.selected:options.selected, true);
463
464          privateMethods.setEventChange(object, (value.change!=null)?value.change:options.change);
465          privateMethods.setEventClick(object, (value.click!=null)?value.click:options.click);
466
467          properties.initialized=true;
468        },
469
470      setIsValid : function (object, value)
471        {
472          var objects=object.data('objects'),
473              properties=object.data('properties');
474/*
475          if(properties.isValid!=value && properties.initialized)
476          {
477            properties.isValid=value;
478            if(properties.isValid)
479            {
480              objects.container.removeClass('ui-error');
481              objects.input.removeClass('ui-error');
482            }
483            else
484            {
485              objects.container.addClass('ui-error');
486              objects.input.addClass('ui-error');
487            }
488          }
489*/
490          return(properties.isValid);
491        },
492
493
494      setMode : function (object, value)
495        {
496          var options=object.data('options'),
497              objects=object.data('objects'),
498              properties=object.data('properties');
499
500          if((!properties.initialized || options.mode!=value) && (value==1 || value==2))
501          {
502            options.mode=value;
503            privateMethods.setSelected(object, 'fg');
504            if(options.mode==1)
505            {
506              objects.bg.css('display', 'none');
507              objects.bgopacity.css('display', 'none');
508              objects.fgopacity.removeClass('ui-inputColorsFB-selected');
509              if(options.click==null) objects.fgopacity.removeClass('ui-inputColorsFB-clickable');
510            }
511            else
512            {
513              objects.bg.css('display', 'block');
514              objects.bgopacity.css('display', 'block').addClass('ui-inputColorsFB-clickable');
515              objects.fgopacity.addClass('ui-inputColorsFB-clickable');
516            }
517            privateMethods.updateSizes(object);
518          }
519          return(options.mode);
520        },
521
522      setBoxSize : function (object, value)
523        {
524          var options=object.data('options'),
525              objects=object.data('objects'),
526              properties=object.data('properties');
527
528          if((!properties.initialized || options.boxSize!=value) && (value>0 && value<=1))
529          {
530            options.boxSize=value;
531            privateMethods.updateSizes(object);
532          }
533          return(options.boxSize);
534        },
535
536      setWidth : function (object, value)
537        {
538          var options=object.data('options'),
539              objects=object.data('objects'),
540              properties=object.data('properties');
541
542          if((!properties.initialized || options.width!=value) && value>0)
543          {
544            options.width=value;
545            privateMethods.updateSizes(object);
546          }
547          return(options.width);
548        },
549
550      setHeight : function (object, value)
551        {
552          var options=object.data('options'),
553              objects=object.data('objects'),
554              properties=object.data('properties');
555
556          if((!properties.initialized || options.height!=value) && value>0)
557          {
558            options.height=value;
559            privateMethods.updateSizes(object);
560          }
561          return(options.height);
562        },
563
564      setDisabled : function (object, value)
565        {
566          var options=object.data('options'),
567              objects=object.data('objects'),
568              properties=object.data('properties');
569
570          if((!properties.initialized || options.disabled!=value) && (value==true || value==false))
571          {
572            options.disabled=value;
573            objects.input.attr('disabled', options.disabled);
574          }
575          return(options.disabled);
576        },
577
578      setSelected : function (object, value)
579        {
580          var options=object.data('options'),
581              objects=object.data('objects'),
582              properties=object.data('properties');
583
584          if((!properties.initialized || options.selected!=value) && (value=='fg' || value=='bg') && options.mode==2)
585          {
586            options.selected=value;
587
588            if(options.selected=='fg')
589            {
590              objects.fgopacity.addClass('ui-inputColorsFB-selected');
591              objects.bgopacity.removeClass('ui-inputColorsFB-selected');
592            }
593            else
594            {
595              objects.fgopacity.removeClass('ui-inputColorsFB-selected');
596              objects.bgopacity.addClass('ui-inputColorsFB-selected');
597            }
598            if(options.change) object.trigger('inputColorsFBChange', options.selected);
599          }
600
601          return(options.selected);
602        }, //setFG
603
604      setFG : function (object, value)
605        {
606          var options=object.data('options'),
607              objects=object.data('objects');
608
609          if(value.color==null || value.opacity==null)
610          {
611            return(false);
612          }
613
614          options.fg.color=value.color;
615          options.fg.opacity=value.opacity;
616
617          objects.fg.css(
618            {
619              'background':options.fg.color,
620              'opacity':options.fg.opacity
621            }
622          );
623
624          return(true);
625        }, //setFG
626
627      setBG : function (object, value, apply)
628        {
629          var options=object.data('options'),
630              objects=object.data('objects');
631
632          if(value.color==null || value.opacity==null)
633          {
634            return(false);
635          }
636
637          options.bg.color=value.color;
638          options.bg.opacity=value.opacity;
639
640          objects.bg.css(
641            {
642              'background':options.bg.color,
643              'opacity':options.bg.opacity
644            }
645          );
646
647          return(true);
648        }, //setBG
649
650
651      setEventChange : function (object, value)
652        {
653          var options=object.data('options');
654
655          options.change=value;
656          object.unbind('inputColorsFBChange');
657          if(value) object.bind('inputColorsFBChange', options.change);
658          return(options.change);
659        },
660
661      setEventClick : function (object, value)
662        {
663          var options=object.data('options'),
664              objects=object.data('objects');
665
666          options.click=value;
667          object.unbind('inputColorsFBClick');
668          if(value)
669          {
670            object.bind('inputColorsFBClick', options.click);
671            objects.fgopacity.addClass('ui-inputColorsFB-clickable');
672          }
673          else if(options.mode==1)
674          {
675            objects.fgopacity.removeClass('ui-inputColorsFB-clickable');
676          }
677          return(options.click);
678        },
679
680      updateSizes : function (object)
681        {
682          var options=object.data('options'),
683              objects=object.data('objects'),
684              tmpSize=1;
685
686          if(options.mode==2) tmpSize=options.boxSize;
687
688
689
690          objects.container.css(
691            {
692              'width': options.width+'px',
693              'height': options.height+'px'
694            }
695          );
696          objects.fgopacity.css(
697            {
698              'width': (options.width*tmpSize)+'px',
699              'height': (options.height*tmpSize)+'px'
700            }
701          );
702
703          if(options.mode==2)
704          {
705            objects.bgopacity.css(
706              {
707                'width': (options.width*options.boxSize)+'px',
708                'height': (options.height*options.boxSize)+'px',
709                'margin-left': (options.width*(1-options.boxSize))+'px',
710                'margin-top': (options.height*(1-options.boxSize))+'px'
711              }
712            );
713          }
714        }
715
716    };
717
718
719    $.fn.inputColorsFB = function(method)
720    {
721      if(publicMethods[method])
722      {
723        return publicMethods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
724      }
725      else if(typeof method === 'object' || ! method)
726      {
727        return publicMethods.init.apply(this, arguments);
728      }
729      else
730      {
731        $.error( 'Method ' +  method + ' does not exist on jQuery.inputColorsFB' );
732      }
733    } // $.fn.inputColorsFB
734
735  }
736)(jQuery);
737
738
Note: See TracBrowser for help on using the repository browser.