wp/wp-admin/js/color-picker.js
author ymh <ymh.work@gmail.com>
Thu, 07 Nov 2013 00:08:07 +0000
changeset 1 f6eb5a861d2f
parent 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
remove unnessary files. Make timthumb work
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
( function( $, undef ){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
	// html stuff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
	var _before = '<a tabindex="0" class="wp-color-result" />',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
		_after = '<div class="wp-picker-holder" />',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
		_wrap = '<div class="wp-picker-container" />',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
		_button = '<input type="button" class="button button-small hidden" />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
	// jQuery UI Widget constructor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
	var ColorPicker = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
		options: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
			defaultColor: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
			change: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
			clear: false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
			hide: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
			palettes: true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
		_create: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
			// bail early for unsupported Iris.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
			if ( ! $.support.iris )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
			var self = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
			var el = self.element;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
			$.extend( self.options, el.data() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
			self.initialValue = el.val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
			// Set up HTML structure, hide things
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
			el.addClass( 'wp-color-picker' ).hide().wrap( _wrap );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			self.wrap = el.parent();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
			self.toggler = $( _before ).insertBefore( el ).css( { backgroundColor: self.initialValue } ).attr( "title", wpColorPickerL10n.pick ).attr( "data-current", wpColorPickerL10n.current );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
			self.pickerContainer = $( _after ).insertAfter( el );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
			self.button = $( _button );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
			if ( self.options.defaultColor )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
				self.button.addClass( 'wp-picker-default' ).val( wpColorPickerL10n.defaultString );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
				self.button.addClass( 'wp-picker-clear' ).val( wpColorPickerL10n.clear );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			el.wrap('<span class="wp-picker-input-wrap" />').after(self.button);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			el.iris( {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
				target: self.pickerContainer,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
				hide: true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
				width: 255,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
				mode: 'hsv',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
				palettes: self.options.palettes,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
				change: function( event, ui ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
					self.toggler.css( { backgroundColor: ui.color.toString() } );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
					// check for a custom cb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
					if ( $.isFunction( self.options.change ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
						self.options.change.call( this, event, ui );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			} );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
			el.val( self.initialValue );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
			self._addListeners();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
			if ( ! self.options.hide )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
				self.toggler.click();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		_addListeners: function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
			var self = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
			self.toggler.click( function( event ){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				event.stopPropagation();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
				self.element.toggle().iris( 'toggle' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
				self.button.toggleClass('hidden');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
				self.toggler.toggleClass( 'wp-picker-open' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
				// close picker when you click outside it
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
				if ( self.toggler.hasClass( 'wp-picker-open' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
					$( "body" ).on( 'click', { wrap: self.wrap, toggler: self.toggler }, self._bodyListener );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
					$( "body" ).off( 'click', self._bodyListener );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			self.element.change(function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
				var me = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
					val = me.val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
				// Empty = clear
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
				if ( val === '' || val === '#' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
					self.toggler.css('backgroundColor', '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
					// fire clear callback if we have one
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
					if ( $.isFunction( self.options.clear ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
						self.options.clear.call( this, event );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			// open a keyboard-focused closed picker with space or enter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			self.toggler.on('keyup', function( e ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
				if ( e.keyCode === 13 || e.keyCode === 32 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
					e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
					self.toggler.trigger('click').next().focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
			self.button.click( function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
				var me = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
				if ( me.hasClass( 'wp-picker-clear' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
					self.element.val( '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
					self.toggler.css('backgroundColor', '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
					if ( $.isFunction( self.options.clear ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
						self.options.clear.call( this, event );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
				} else if ( me.hasClass( 'wp-picker-default' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
					self.element.val( self.options.defaultColor ).change();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		_bodyListener: function( event ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			if ( ! event.data.wrap.find( event.target ).length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
					event.data.toggler.click();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		// $("#input").wpColorPicker('color') returns the current color
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		// $("#input").wpColorPicker('color', '#bada55') to set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		color: function( newColor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			if ( newColor === undef )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
				return this.element.iris( "option", "color" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
			this.element.iris( "option", "color", newColor );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		//$("#input").wpColorPicker('defaultColor') returns the current default color
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		//$("#input").wpColorPicker('defaultColor', newDefaultColor) to set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		defaultColor: function( newDefaultColor ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			if ( newDefaultColor === undef )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
				return this.options.defaultColor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			this.options.defaultColor = newDefaultColor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
	$.widget( 'wp.wpColorPicker', ColorPicker );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
}( jQuery ) );