Вход Регистрация
Файл: Twitter.Clone/TWITTER.CLONE/UPLOAD/js/farbtastic.js
Строк: 281
<?php
// $Id: farbtastic.js,v 1.2 2007/01/08 22:53:01 unconed Exp $
// Farbtastic 1.2

jQuery.fn.farbtastic = function (callback) {
  $.
farbtastic(thiscallback);
  return 
this;
};

jQuery.farbtastic = function (containercallback) {
  var 
container = $(container).get(0);
  return 
container.farbtastic || (container.farbtastic = new jQuery._farbtastic(containercallback));
}

jQuery._farbtastic = function (containercallback) {
  
// Store farbtastic object
  
var fb this;

  
// Insert markup
  
$(container).html('<div class="farbtastic"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>');
  var 
= $('.farbtastic'container);
  
fb.wheel = $('.wheel'container).get(0);
  
// Dimensions
  
fb.radius 84;
  
fb.square 100;
  
fb.width 194;

  
// Fix background PNGs in IE6
  
if (navigator.appVersion.match(/MSIE [0-6]./)) {
    $(
'*'e).each(function () {
      if (
this.currentStyle.backgroundImage != 'none') {
        var 
image this.currentStyle.backgroundImage;
        
image this.currentStyle.backgroundImage.substring(5image.length 2);
        $(
this).css({
          
'backgroundImage''none',
          
'filter'"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" image "')"
        
});
      }
    });
  }

  
/**
   * Link to the given element(s) or callback.
   */
  
fb.linkTo = function (callback) {
    
// Unbind previous nodes
    
if (typeof fb.callback == 'object') {
      $(
fb.callback).unbind('keyup'fb.updateValue);
    }

    
// Reset color
    
fb.color null;

    
// Bind callback or elements
    
if (typeof callback == 'function') {
      
fb.callback callback;
    }
    else if (
typeof callback == 'object' || typeof callback == 'string') {
      
fb.callback = $(callback);
      
fb.callback.bind('keyup'fb.updateValue);
      if (
fb.callback.get(0).value) {
        
fb.setColor(fb.callback.get(0).value);
      }
    }
    return 
this;
  }
  
fb.updateValue = function (event) {
    if (
this.value && this.value != fb.color) {
      
fb.setColor(this.value);
    }
  }

  
/**
   * Change color with HTML syntax #123456
   */
  
fb.setColor = function (color) {
    var 
unpack fb.unpack(color);
    if (
fb.color != color && unpack) {
      
fb.color color;
      
fb.rgb unpack;
      
fb.hsl fb.RGBToHSL(fb.rgb);
      
fb.updateDisplay();
    }
    return 
this;
  }

  
/**
   * Change color with HSL triplet [0..1, 0..1, 0..1]
   */
  
fb.setHSL = function (hsl) {
    
fb.hsl hsl;
    
fb.rgb fb.HSLToRGB(hsl);
    
fb.color fb.pack(fb.rgb);
    
fb.updateDisplay();
    return 
this;
  }

  
/////////////////////////////////////////////////////

  /**
   * Retrieve the coordinates of the given event relative to the center
   * of the widget.
   */
  
fb.widgetCoords = function (event) {
    var 
xy;
    var 
el event.target || event.srcElement;
    var 
reference fb.wheel;

    if (
typeof event.offsetX != 'undefined') {
      
// Use offset coordinates and find common offsetParent
      
var pos = { xevent.offsetXyevent.offsetY };

      
// Send the coordinates upwards through the offsetParent chain.
      
var el;
      while (
e) {
        
e.mouseX pos.x;
        
e.mouseY pos.y;
        
pos.+= e.offsetLeft;
        
pos.+= e.offsetTop;
        
e.offsetParent;
      }

      
// Look for the coordinates starting from the wheel widget.
      
var reference;
      var 
offset = { x0y}
      while (
e) {
        if (
typeof e.mouseX != 'undefined') {
          
e.mouseX offset.x;
          
e.mouseY offset.y;
          break;
        }
        
offset.+= e.offsetLeft;
        
offset.+= e.offsetTop;
        
e.offsetParent;
      }

      
// Reset stored coordinates
      
el;
      while (
e) {
        
e.mouseX undefined;
        
e.mouseY undefined;
        
e.offsetParent;
      }
    }
    else {
      
// Use absolute coordinates
      
var pos fb.absolutePosition(reference);
      
= (event.pageX || 0*(event.clientX + $('html').get(0).scrollLeft)) - pos.x;
      
= (event.pageY || 0*(event.clientY + $('html').get(0).scrollTop)) - pos.y;
    }
    
// Subtract distance to middle
    
return { xfb.width 2yfb.width };
  }

  
/**
   * Mousedown handler
   */
  
fb.mousedown = function (event) {
    
// Capture mouse
    
if (!document.dragging) {
      $(
document).bind('mousemove'fb.mousemove).bind('mouseup'fb.mouseup);
      
document.dragging true;
    }

    
// Check which area is being dragged
    
var pos fb.widgetCoords(event);
    
fb.circleDrag Math.max(Math.abs(pos.x), Math.abs(pos.y)) * fb.square;

    
// Process
    
fb.mousemove(event);
    return 
false;
  }

  
/**
   * Mousemove handler
   */
  
fb.mousemove = function (event) {
    
// Get coordinates relative to color picker center
    
var pos fb.widgetCoords(event);

    
// Set new HSL parameters
    
if (fb.circleDrag) {
      var 
hue Math.atan2(pos.x, -pos.y) / 6.28;
      if (
hue 0hue += 1;
      
fb.setHSL([huefb.hsl[1], fb.hsl[2]]);
    }
    else {
      var 
sat Math.max(0Math.min(1, -(pos.fb.square) + .5));
      var 
lum Math.max(0Math.min(1, -(pos.fb.square) + .5));
      
fb.setHSL([fb.hsl[0], satlum]);
    }
    return 
false;
  }

  
/**
   * Mouseup handler
   */
  
fb.mouseup = function () {
    
// Uncapture mouse
    
$(document).unbind('mousemove'fb.mousemove);
    $(
document).unbind('mouseup'fb.mouseup);
    
document.dragging false;
  }

  
/**
   * Update the markers and styles
   */
  
fb.updateDisplay = function () {
    
// Markers
    
var angle fb.hsl[0] * 6.28;
    $(
'.h-marker'e).css({
      
leftMath.round(Math.sin(angle) * fb.radius fb.width 2) + 'px',
      
topMath.round(-Math.cos(angle) * fb.radius fb.width 2) + 'px'
    
});

    $(
'.sl-marker'e).css({
      
leftMath.round(fb.square * (.5 fb.hsl[1]) + fb.width 2) + 'px',
      
topMath.round(fb.square * (.5 fb.hsl[2]) + fb.width 2) + 'px'
    
});

    
// Saturation/Luminance gradient
    
$('.color'e).css('backgroundColor'fb.pack(fb.HSLToRGB([fb.hsl[0], 10.5])));

    
// Linked elements or callback
    
if (typeof fb.callback == 'object') {
      
// Set background/foreground color
      
$(fb.callback).css({
        
backgroundColorfb.color,
        
colorfb.hsl[2] > 0.5 '#000' '#fff'
      
});

      
// Change linked value
      
$(fb.callback).each(function() {
        if (
this.value && this.value != fb.color) {
          
this.value fb.color;
        }
      });
    }
    else if (
typeof fb.callback == 'function') {
      
fb.callback.call(fbfb.color);
    }
  }

  
/**
   * Get absolute position of element
   */
  
fb.absolutePosition = function (el) {
    var 
= { xel.offsetLeftyel.offsetTop };
    
// Resolve relative to offsetParent
    
if (el.offsetParent) {
      var 
tmp fb.absolutePosition(el.offsetParent);
      
r.+= tmp.x;
      
r.+= tmp.y;
    }
    return 
r;
  };

  
/* Various color utility functions */
  
fb.pack = function (rgb) {
    var 
Math.round(rgb[0] * 255);
    var 
Math.round(rgb[1] * 255);
    var 
Math.round(rgb[2] * 255);
    return 
'#' + (16 '0' '') + r.toString(16) +
           (
16 '0' '') + g.toString(16) +
           (
16 '0' '') + b.toString(16);
  }

  
fb.unpack = function (color) {
    if (
color.length == 7) {
      return [
parseInt('0x' color.substring(13)) / 255,
        
parseInt('0x' color.substring(35)) / 255,
        
parseInt('0x' color.substring(57)) / 255];
    }
    else if (
color.length == 4) {
      return [
parseInt('0x' color.substring(12)) / 15,
        
parseInt('0x' color.substring(23)) / 15,
        
parseInt('0x' color.substring(34)) / 15];
    }
  }

  
fb.HSLToRGB = function (hsl) {
    var 
m1m2rgb;
    var 
hsl[0], hsl[1], hsl[2];
    
m2 = (<= 0.5) ? * (1) : l*s;
    
m1 m2;
    return [
this.hueToRGB(m1m2h+0.33333),
        
this.hueToRGB(m1m2h),
        
this.hueToRGB(m1m2h-0.33333)];
  }

  
fb.hueToRGB = function (m1m2h) {
    
= (0) ? : ((1) ? h);
    if (
1) return m1 + (m2 m1) * 6;
    if (
1) return m2;
    if (
2) return m1 + (m2 m1) * (0.66666 h) * 6;
    return 
m1;
  }

  
fb.RGBToHSL = function (rgb) {
    var 
minmaxdeltahsl;
    var 
rgb[0], rgb[1], rgb[2];
    
min Math.min(rMath.min(gb));
    
max Math.max(rMath.max(gb));
    
delta max min;
    
= (min max) / 2;
    
0;
    if (
&& 1) {
      
delta / (0.5 ? (l) : (l));
    }
    
0;
    if (
delta 0) {
      if (
max == && max != g+= (b) / delta;
      if (
max == && max != b+= (+ (r) / delta);
      if (
max == && max != r+= (+ (g) / delta);
      
/= 6;
    }
    return [
hsl];
  }

  
// Install mousedown handler (the others are set on the document on-demand)
  
$('*'e).mousedown(fb.mousedown);

    
// Init color
  
fb.setColor('#000000');

  
// Set linked elements/callback
  
if (callback) {
    
fb.linkTo(callback);
  }
}
?>
Онлайн: 2
Реклама