Вход Регистрация
Файл: whmcs/includes/jscript/jquery.miniColors.js
Строк: 604
<?php
/*
 * jQuery miniColors: A small color selector
 *
 * Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/)
 *
 * Dual licensed under the MIT or GPL Version 2 licenses
 *
*/
if(jQuery) (function($) {
    
    $.
extend($.fn, {
        
        
miniColors: function(odata) {
            
            var 
create = function(inputodata) {
                
//
                // Creates a new instance of the miniColors selector
                //
                
                // Determine initial color (defaults to white)
                
var color expandHex(input.val());
                if( !
color color 'ffffff';
                var 
hsb hex2hsb(color);
                
                
// Create trigger
                
var trigger = $('<a class="miniColors-trigger" style="background-color: #' color '" href="#"></a>');
                
trigger.insertAfter(input);
                
                
// Set input data and update attributes
                
input
                    
.addClass('miniColors')
                    .
data('original-maxlength'input.attr('maxlength') || null)
                    .
data('original-autocomplete'input.attr('autocomplete') || null)
                    .
data('letterCase''uppercase')
                    .
data('trigger'trigger)
                    .
data('hsb'hsb)
                    .
data('change'o.change o.change null)
                    .
attr('maxlength'7)
                    .
attr('autocomplete''off')
                    .
val('#' convertCase(coloro.letterCase));
                
                
// Handle options
                
if( o.readonly input.prop('readonly'true);
                if( 
o.disabled disable(input);
                
                
// Show selector when trigger is clicked
                
trigger.bind('click.miniColors', function(event) {
                    
event.preventDefault();
                    if( 
input.val() === '' input.val('#');
                    
show(input);

                });
                
                
// Show selector when input receives focus
                
input.bind('focus.miniColors', function(event) {
                    if( 
input.val() === '' input.val('#');
                    
show(input);
                });
                
                
// Hide on blur
                
input.bind('blur.miniColors', function(event) {
                    var 
hex expandHex(input.val());
                    
input.valhex '#' convertCase(hexinput.data('letterCase')) : '' );
                });
                
                
// Hide when tabbing out of the input
                
input.bind('keydown.miniColors', function(event) {
                    if( 
event.keyCode === hide(input);
                });
                
                
// Update when color is typed in
                
input.bind('keyup.miniColors', function(event) {
                    
setColorFromInput(input);
                });
                
                
// Handle pasting
                
input.bind('paste.miniColors', function(event) {
                    
// Short pause to wait for paste to complete
                    
setTimeout( function() {
                        
setColorFromInput(input);
                    }, 
5);
                });
                
            };
            
            var 
destroy = function(input) {
                
//
                // Destroys an active instance of the miniColors selector
                //
                
                
hide();
                
input = $(input);
                
                
// Restore to original state
                
input.data('trigger').remove();
                
input
                    
.attr('autocomplete'input.data('original-autocomplete'))
                    .
attr('maxlength'input.data('original-maxlength'))
                    .
removeData()
                    .
removeClass('miniColors')
                    .
unbind('.miniColors');
                $(
document).unbind('.miniColors');
            };
            
            var 
enable = function(input) {
                
//
                // Enables the input control and the selector
                //
                
input
                    
.prop('disabled'false)
                    .
data('trigger')
                    .
css('opacity'1);
            };
            
            var 
disable = function(input) {
                
//
                // Disables the input control and the selector
                //
                
hide(input);
                
input
                    
.prop('disabled'true)
                    .
data('trigger')
                    .
css('opacity'0.5);
            };
            
            var 
show = function(input) {
                
//
                // Shows the miniColors selector
                //
                
if( input.prop('disabled') ) return false;
                
                
// Hide all other instances 
                
hide();             
                
                
// Generate the selector
                
var selector = $('<div class="miniColors-selector"></div>');
                
selector
                    
.append('<div class="miniColors-colors" style="background-color: #FFF;"><div class="miniColors-colorPicker"></div></div>')
                    .
append('<div class="miniColors-hues"><div class="miniColors-huePicker"></div></div>')
                    .
css({
                        
topinput.is(':visible') ? input.offset().top input.outerHeight() : input.data('trigger').offset().top input.data('trigger').outerHeight(),
                        
leftinput.is(':visible') ? input.offset().left input.data('trigger').offset().left,
                        
display'none'
                    
})
                    .
addClassinput.attr('class') );
                
                
// Set background for colors
                
var hsb input.data('hsb');
                
selector
                    
.find('.miniColors-colors')
                    .
css('backgroundColor''#' hsb2hex({ hhsb.hs100b100 }));
                
                
// Set colorPicker position
                
var colorPosition input.data('colorPosition');
                if( !
colorPosition colorPosition getColorPositionFromHSB(hsb);
                
selector.find('.miniColors-colorPicker')
                    .
css('top'colorPosition.'px')
                    .
css('left'colorPosition.'px');
                
                
// Set huePicker position
                
var huePosition input.data('huePosition');
                if( !
huePosition huePosition getHuePositionFromHSB(hsb);
                
selector.find('.miniColors-huePicker').css('top'huePosition.'px');
                
                
// Set input data
                
input
                    
.data('selector'selector)
                    .
data('huePicker'selector.find('.miniColors-huePicker'))
                    .
data('colorPicker'selector.find('.miniColors-colorPicker'))
                    .
data('mousebutton'0);
                    
                $(
'BODY').append(selector);
                
selector.fadeIn(100);
                
                
// Prevent text selection in IE
                
selector.bind('selectstart', function() { return false; });
                
                $(
document).bind('mousedown.miniColors touchstart.miniColors', function(event) {
                    
                    
input.data('mousebutton'1);
                    
                    if( $(
event.target).parents().andSelf().hasClass('miniColors-colors') ) {
                        
event.preventDefault();
                        
input.data('moving''colors');
                        
moveColor(inputevent);
                    }
                    
                    if( $(
event.target).parents().andSelf().hasClass('miniColors-hues') ) {
                        
event.preventDefault();
                        
input.data('moving''hues');
                        
moveHue(inputevent);
                    }
                    
                    if( $(
event.target).parents().andSelf().hasClass('miniColors-selector') ) {
                        
event.preventDefault();
                        return;
                    }
                    
                    if( $(
event.target).parents().andSelf().hasClass('miniColors') ) return;
                    
                    
hide(input);
                });
                
                $(
document)
                    .
bind('mouseup.miniColors touchend.miniColors', function(event) {
                        
event.preventDefault();
                        
input.data('mousebutton'0).removeData('moving');
                    })
                    .
bind('mousemove.miniColors touchmove.miniColors', function(event) {
                        
event.preventDefault();
                        if( 
input.data('mousebutton') === ) {
                            if( 
input.data('moving') === 'colors' moveColor(inputevent);
                            if( 
input.data('moving') === 'hues' moveHue(inputevent);
                        }
                    });
                
            };
            
            var 
hide = function(input) {
                
                
//
                // Hides one or more miniColors selectors
                //
                
                // Hide all other instances if input isn't specified
                
if( !input input '.miniColors';
                
                $(
input).each( function() {
                    var 
selector = $(this).data('selector');
                    $(
this).removeData('selector');
                    $(
selector).fadeOut(100, function() {
                        $(
this).remove();
                    });
                });
                
                $(
document).unbind('.miniColors');
                
            };
            
            var 
moveColor = function(inputevent) {

                var 
colorPicker input.data('colorPicker');
                
                
colorPicker.hide();
                
                var 
position = {
                    
xevent.pageX,
                    
yevent.pageY
                
};
                
                
// Touch support
                
if( event.originalEvent.changedTouches ) {
                    
position.event.originalEvent.changedTouches[0].pageX;
                    
position.event.originalEvent.changedTouches[0].pageY;
                }
                
position.position.input.data('selector').find('.miniColors-colors').offset().left 5;
                
position.position.input.data('selector').find('.miniColors-colors').offset().top 5;
                if( 
position.<= -position.= -5;
                if( 
position.>= 144 position.144;
                if( 
position.<= -position.= -5;
                if( 
position.>= 144 position.144;
                
                
input.data('colorPosition'position);
                
colorPicker.css('left'position.x).css('top'position.y).show();
                
                
// Calculate saturation
                
var Math.round((position.5) * 0.67);
                if( 
0;
                if( 
100 100;
                
                
// Calculate brightness
                
var 100 Math.round((position.5) * 0.67);
                if( 
0;
                if( 
100 100;
                
                
// Update HSB values
                
var hsb input.data('hsb');
                
hsb.s;
                
hsb.b;
                
                
// Set color
                
setColor(inputhsbtrue);
            };
            
            var 
moveHue = function(inputevent) {
                
                var 
huePicker input.data('huePicker');
                
                
huePicker.hide();
                
                var 
position = {
                    
yevent.pageY
                
};
                
                
// Touch support
                
if( event.originalEvent.changedTouches ) {
                    
position.event.originalEvent.changedTouches[0].pageY;
                }
                
                
position.position.input.data('selector').find('.miniColors-colors').offset().top 1;
                if( 
position.<= -position.= -1;
                if( 
position.>= 149 position.149;
                
input.data('huePosition'position);
                
huePicker.css('top'position.y).show();
                
                
// Calculate hue
                
var Math.round((150 position.1) * 2.4);
                if( 
0;
                if( 
360 360;
                
                
// Update HSB values
                
var hsb input.data('hsb');
                
hsb.h;
                
                
// Set color
                
setColor(inputhsbtrue);
                
            };
            
            var 
setColor = function(inputhsbupdateInput) {
                
input.data('hsb'hsb);
                var 
hex hsb2hex(hsb); 
                if( 
updateInput input.val'#' convertCase(hexinput.data('letterCase')) );
                
input.data('trigger').css('backgroundColor''#' hex);
                if( 
input.data('selector') ) input.data('selector').find('.miniColors-colors').css('backgroundColor''#' hsb2hex({ hhsb.hs100b100 }));
                
                
// Fire change callback
                
if( input.data('change') ) {
                    if( 
hex === input.data('lastChange') ) return;
                    
input.data('change').call(input.get(0), '#' hexhsb2rgb(hsb));
                    
input.data('lastChange'hex);
                }
                
            };
            
            var 
setColorFromInput = function(input) {
                
                
input.val('#' cleanHex(input.val()));
                var 
hex expandHex(input.val());
                if( !
hex ) return false;
                
                
// Get HSB equivalent
                
var hsb hex2hsb(hex);
                
                
// If color is the same, no change required
                
var currentHSB input.data('hsb');
                if( 
hsb.=== currentHSB.&& hsb.=== currentHSB.&& hsb.=== currentHSB.) return true;
                
                
// Set colorPicker position
                
var colorPosition getColorPositionFromHSB(hsb);
                var 
colorPicker = $(input.data('colorPicker'));
                
colorPicker.css('top'colorPosition.'px').css('left'colorPosition.'px');
                
input.data('colorPosition'colorPosition);
                
                
// Set huePosition position
                
var huePosition getHuePositionFromHSB(hsb);
                var 
huePicker = $(input.data('huePicker'));
                
huePicker.css('top'huePosition.'px');
                
input.data('huePosition'huePosition);
                
                
setColor(inputhsb);
                
                return 
true;
                
            };
            
            var 
convertCase = function(stringletterCase) {
                if( 
letterCase === 'lowercase' ) return string.toLowerCase();
                if( 
letterCase === 'uppercase' ) return string.toUpperCase();
                return 
string;
            };
            
            var 
getColorPositionFromHSB = function(hsb) {               
                var 
Math.ceil(hsb.0.67);
                if( 
0;
                if( 
150 150;
                var 
150 Math.ceil(hsb.0.67);
                if( 
0;
                if( 
150 150;
                return { 
x5y};
            };
            
            var 
getHuePositionFromHSB = function(hsb) {
                var 
150 - (hsb.2.4);
                if( 
0;
                if( 
150 150;              
                return { 
y};
            };
            
            var 
cleanHex = function(hex) {
                return 
hex.replace(/[^A-F0-9]/ig'');
            };
            
            var 
expandHex = function(hex) {
                
hex cleanHex(hex);
                if( !
hex ) return null;
                if( 
hex.length === hex hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
                return 
hex.length === hex null;
            };          
            
            var 
hsb2rgb = function(hsb) {
                var 
rgb = {};
                var 
Math.round(hsb.h);
                var 
Math.round(hsb.s*255/100);
                var 
Math.round(hsb.b*255/100);
                if(
=== 0) {
                    
rgb.rgb.rgb.v;
                } else {
                    var 
t1 v;
                    var 
t2 = (255 s) * 255;
                    var 
t3 = (t1 t2) * (60) / 60;
                    if( 
=== 360 0;
                    if( 
60 ) { rgb.t1rgb.t2rgb.t2 t3; }
                    else if( 
120 ) {rgb.t1rgb.t2rgb.t1 t3; }
                    else if( 
180 ) {rgb.t1rgb.t2rgb.t2 t3; }
                    else if( 
240 ) {rgb.t1rgb.t2rgb.t1 t3; }
                    else if( 
300 ) {rgb.t1rgb.t2rgb.t2 t3; }
                    else if( 
360 ) {rgb.t1rgb.t2rgb.t1 t3; }
                    else { 
rgb.0rgb.0rgb.0; }
                }
                return {
                    
rMath.round(rgb.r),
                    
gMath.round(rgb.g),
                    
bMath.round(rgb.b)
                };
            };
            
            var 
rgb2hex = function(rgb) {
                var 
hex = [
                    
rgb.r.toString(16),
                    
rgb.g.toString(16),
                    
rgb.b.toString(16)
                ];
                $.
each(hex, function(nrval) {
                    if (
val.length === 1hex[nr] = '0' val;
                });
                return 
hex.join('');
            };
            
            var 
hex2rgb = function(hex) {
                
hex parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);
                
                return {
                    
rhex >> 16,
                    
g: (hex 0x00FF00) >> 8,
                    
b: (hex 0x0000FF)
                };
            };
            
            var 
rgb2hsb = function(rgb) {
                var 
hsb = { h0s0b};
                var 
min Math.min(rgb.rrgb.grgb.b);
                var 
max Math.max(rgb.rrgb.grgb.b);
                var 
delta max min;
                
hsb.max;
                
hsb.max !== 255 delta max 0;
                if( 
hsb.!== ) {
                    if( 
rgb.=== max ) {
                        
hsb.= (rgb.rgb.b) / delta;
                    } else if( 
rgb.=== max ) {
                        
hsb.+ (rgb.rgb.r) / delta;
                    } else {
                        
hsb.+ (rgb.rgb.g) / delta;
                    }
                } else {
                    
hsb.= -1;
                }
                
hsb.*= 60;
                if( 
hsb.) {
                    
hsb.+= 360;
                }
                
hsb.*= 100/255;
                
hsb.*= 100/255;
                return 
hsb;
            };          
            
            var 
hex2hsb = function(hex) {
                var 
hsb rgb2hsb(hex2rgb(hex));
                
// Zero out hue marker for black, white, and grays (saturation === 0)
                
if( hsb.=== hsb.360;
                return 
hsb;
            };
            
            var 
hsb2hex = function(hsb) {
                return 
rgb2hex(hsb2rgb(hsb));
            };

            
            
// Handle calls to $([selector]).miniColors()
            
switch(o) {
            
                case 
'readonly':
                    
                    $(
this).each( function() {
                        if( !$(
this).hasClass('miniColors') ) return;
                        $(
this).prop('readonly'data);
                    });
                    
                    return $(
this);
                
                case 
'disabled':
                    
                    $(
this).each( function() {
                        if( !$(
this).hasClass('miniColors') ) return;
                        if( 
data ) {
                            
disable($(this));
                        } else {
                            
enable($(this));
                        }
                    });
                                        
                    return $(
this);
            
                case 
'value':
                    
                    
// Getter
                    
if( data === undefined ) {
                        if( !$(
this).hasClass('miniColors') ) return;
                        var 
input = $(this),
                            
hex expandHex(input.val());
                        return 
hex '#' convertCase(hexinput.data('letterCase')) : null;
                    }
                    
                    
// Setter
                    
$(this).each( function() {
                        if( !$(
this).hasClass('miniColors') ) return;
                        $(
this).val(data);
                        
setColorFromInput($(this));
                    });
                    
                    return $(
this);
                    
                case 
'destroy':
                    
                    $(
this).each( function() {
                        if( !$(
this).hasClass('miniColors') ) return;
                        
destroy($(this));
                    });
                                        
                    return $(
this);
                
                default:
                    
                    if( !
= {};
                    
                    $(
this).each( function() {
                        
                        
// Must be called on an input element
                        
if( $(this)[0].tagName.toLowerCase() !== 'input' ) return;
                        
                        
// If a trigger is present, the control was already created
                        
if( $(this).data('trigger') ) return;
                        
                        
// Create the control
                        
create($(this), odata);
                        
                    });
                    
                    return $(
this);
                    
            }
            
        }
            
    });
    
})(
jQuery);
?>
Онлайн: 0
Реклама