1 /* global wpColorPickerL10n:true */
2 ( function( $, undef ){
6 _before = '<a tabindex="0" class="wp-color-result" />',
7 _after = '<div class="wp-picker-holder" />',
8 _wrap = '<div class="wp-picker-container" />',
9 _button = '<input type="button" class="button button-small hidden" />';
11 // jQuery UI Widget constructor
21 // bail early for unsupported Iris.
22 if ( ! $.support.iris )
27 $.extend( self.options, el.data() );
29 self.initialValue = el.val();
31 // Set up HTML structure, hide things
32 el.addClass( 'wp-color-picker' ).hide().wrap( _wrap );
33 self.wrap = el.parent();
34 self.toggler = $( _before ).insertBefore( el ).css( { backgroundColor: self.initialValue } ).attr( 'title', wpColorPickerL10n.pick ).attr( 'data-current', wpColorPickerL10n.current );
35 self.pickerContainer = $( _after ).insertAfter( el );
36 self.button = $( _button );
38 if ( self.options.defaultColor )
39 self.button.addClass( 'wp-picker-default' ).val( wpColorPickerL10n.defaultString );
41 self.button.addClass( 'wp-picker-clear' ).val( wpColorPickerL10n.clear );
43 el.wrap('<span class="wp-picker-input-wrap" />').after(self.button);
46 target: self.pickerContainer,
50 palettes: self.options.palettes,
51 change: function( event, ui ) {
52 self.toggler.css( { backgroundColor: ui.color.toString() } );
53 // check for a custom cb
54 if ( $.isFunction( self.options.change ) )
55 self.options.change.call( this, event, ui );
58 el.val( self.initialValue );
60 if ( ! self.options.hide )
63 _addListeners: function() {
66 self.toggler.click( function( event ){
67 event.stopPropagation();
68 self.element.toggle().iris( 'toggle' );
69 self.button.toggleClass('hidden');
70 self.toggler.toggleClass( 'wp-picker-open' );
72 // close picker when you click outside it
73 if ( self.toggler.hasClass( 'wp-picker-open' ) )
74 $( 'body' ).on( 'click', { wrap: self.wrap, toggler: self.toggler }, self._bodyListener );
76 $( 'body' ).off( 'click', self._bodyListener );
79 self.element.change(function( event ) {
83 if ( val === '' || val === '#' ) {
84 self.toggler.css('backgroundColor', '');
85 // fire clear callback if we have one
86 if ( $.isFunction( self.options.clear ) )
87 self.options.clear.call( this, event );
91 // open a keyboard-focused closed picker with space or enter
92 self.toggler.on('keyup', function( e ) {
93 if ( e.keyCode === 13 || e.keyCode === 32 ) {
95 self.toggler.trigger('click').next().focus();
99 self.button.click( function( event ) {
101 if ( me.hasClass( 'wp-picker-clear' ) ) {
102 self.element.val( '' );
103 self.toggler.css('backgroundColor', '');
104 if ( $.isFunction( self.options.clear ) )
105 self.options.clear.call( this, event );
106 } else if ( me.hasClass( 'wp-picker-default' ) ) {
107 self.element.val( self.options.defaultColor ).change();
111 _bodyListener: function( event ) {
112 if ( ! event.data.wrap.find( event.target ).length )
113 event.data.toggler.click();
115 // $("#input").wpColorPicker('color') returns the current color
116 // $("#input").wpColorPicker('color', '#bada55') to set
117 color: function( newColor ) {
118 if ( newColor === undef )
119 return this.element.iris( 'option', 'color' );
121 this.element.iris( 'option', 'color', newColor );
123 //$("#input").wpColorPicker('defaultColor') returns the current default color
124 //$("#input").wpColorPicker('defaultColor', newDefaultColor) to set
125 defaultColor: function( newDefaultColor ) {
126 if ( newDefaultColor === undef )
127 return this.options.defaultColor;
129 this.options.defaultColor = newDefaultColor;
133 $.widget( 'wp.wpColorPicker', ColorPicker );