wp/wp-admin/js/farbtastic.js
author ymh <ymh.work@gmail.com>
Fri, 05 Sep 2025 18:40:08 +0200
changeset 21 48c4eec2b7e6
parent 0 d970ebf37754
permissions -rw-r--r--
Add CLAUDE.md documentation and sync WordPress core files - Add comprehensive CLAUDE.md documentation file with project architecture, development setup, database operations, WordPress CLI usage, file sync procedures, and Mercurial commands - Update WordPress core files from wordpress/ to wp/ directory - Sync latest WordPress admin interface, includes, and core functionality - Update plugins: portfolio plugin with latest BWS framework and fancybox integration - Maintain custom configuration and theme files 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/*!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 * Farbtastic: jQuery color picker plug-in v1.3u
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     3
 * https://github.com/mattfarina/farbtastic
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * Licensed under the GPL license:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *   http://www.gnu.org/licenses/gpl.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 */
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     8
/**
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     9
 * Modified for WordPress: replaced deprecated jQuery methods.
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    10
 * See https://core.trac.wordpress.org/ticket/57946.
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    11
 */
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    12
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
(function($) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
$.fn.farbtastic = function (options) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
  $.farbtastic(this, options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
  return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
$.farbtastic = function (container, callback) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
  var container = $(container).get(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
  return container.farbtastic || (container.farbtastic = new $._farbtastic(container, callback));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
$._farbtastic = function (container, callback) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
  // Store farbtastic object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
  var fb = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
  // Insert markup
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
  $(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>');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
  var e = $('.farbtastic', container);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
  fb.wheel = $('.wheel', container).get(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
  // Dimensions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  fb.radius = 84;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  fb.square = 100;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  fb.width = 194;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
  // Fix background PNGs in IE6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  if (navigator.appVersion.match(/MSIE [0-6]\./)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    $('*', e).each(function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
      if (this.currentStyle.backgroundImage != 'none') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        var image = this.currentStyle.backgroundImage;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        image = this.currentStyle.backgroundImage.substring(5, image.length - 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        $(this).css({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
          'backgroundImage': 'none',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
          'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
   * Link to the given element(s) or callback.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
  fb.linkTo = function (callback) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    // Unbind previous nodes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    if (typeof fb.callback == 'object') {
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    58
      $(fb.callback).off('keyup', fb.updateValue);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    // Reset color
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    fb.color = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    // Bind callback or elements
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    if (typeof callback == 'function') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
      fb.callback = callback;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    else if (typeof callback == 'object' || typeof callback == 'string') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
      fb.callback = $(callback);
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    70
      fb.callback.on('keyup', fb.updateValue);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
      if (fb.callback.get(0).value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        fb.setColor(fb.callback.get(0).value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
  fb.updateValue = function (event) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    if (this.value && this.value != fb.color) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
      fb.setColor(this.value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
   * Change color with HTML syntax #123456
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
  fb.setColor = function (color) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    var unpack = fb.unpack(color);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    if (fb.color != color && unpack) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
      fb.color = color;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
      fb.rgb = unpack;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
      fb.hsl = fb.RGBToHSL(fb.rgb);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
      fb.updateDisplay();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    return this;
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
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
   * Change color with HSL triplet [0..1, 0..1, 0..1]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
  fb.setHSL = function (hsl) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    fb.hsl = hsl;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    fb.rgb = fb.HSLToRGB(hsl);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    fb.color = fb.pack(fb.rgb);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    fb.updateDisplay();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    return this;
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
   * Retrieve the coordinates of the given event relative to the center
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
   * of the widget.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
  fb.widgetCoords = function (event) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    var offset = $(fb.wheel).offset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    return { x: (event.pageX - offset.left) - fb.width / 2, y: (event.pageY - offset.top) - fb.width / 2 };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
   * Mousedown handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
  fb.mousedown = function (event) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
    // Capture mouse
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    if (!document.dragging) {
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   125
      $(document).on('mousemove', fb.mousemove).on('mouseup', fb.mouseup);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
      document.dragging = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
    // Check which area is being dragged
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    var pos = fb.widgetCoords(event);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
    // Process
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
    fb.mousemove(event);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
    return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
   * Mousemove handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
  fb.mousemove = function (event) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
    // Get coordinates relative to color picker center
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    var pos = fb.widgetCoords(event);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    // Set new HSL parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
    if (fb.circleDrag) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
      var hue = Math.atan2(pos.x, -pos.y) / 6.28;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
      if (hue < 0) hue += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
      fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
      var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
      var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
      fb.setHSL([fb.hsl[0], sat, lum]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
   * Mouseup handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
  fb.mouseup = function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
    // Uncapture mouse
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   164
    $(document).off('mousemove', fb.mousemove);
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   165
    $(document).off('mouseup', fb.mouseup);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    document.dragging = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
  /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
   * Update the markers and styles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
   */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
  fb.updateDisplay = function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
    // Markers
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
    var angle = fb.hsl[0] * 6.28;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
    $('.h-marker', e).css({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
      left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
      top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
    });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
    $('.sl-marker', e).css({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
      left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
      top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
    // Saturation/Luminance gradient
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
    // Linked elements or callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    if (typeof fb.callback == 'object') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
      // Set background/foreground color
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
      $(fb.callback).css({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        backgroundColor: fb.color,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        color: fb.hsl[2] > 0.5 ? '#000' : '#fff'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
      });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
      // Change linked value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
      $(fb.callback).each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        if (this.value && this.value != fb.color) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
          this.value = fb.color;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
      });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
    else if (typeof fb.callback == 'function') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
      fb.callback.call(fb, fb.color);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
  /* Various color utility functions */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
  fb.pack = function (rgb) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
    var r = Math.round(rgb[0] * 255);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
    var g = Math.round(rgb[1] * 255);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
    var b = Math.round(rgb[2] * 255);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
    return '#' + (r < 16 ? '0' : '') + r.toString(16) +
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
           (g < 16 ? '0' : '') + g.toString(16) +
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
           (b < 16 ? '0' : '') + b.toString(16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
  fb.unpack = function (color) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
    if (color.length == 7) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
      return [parseInt('0x' + color.substring(1, 3)) / 255,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
        parseInt('0x' + color.substring(3, 5)) / 255,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        parseInt('0x' + color.substring(5, 7)) / 255];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
    else if (color.length == 4) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
      return [parseInt('0x' + color.substring(1, 2)) / 15,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
        parseInt('0x' + color.substring(2, 3)) / 15,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
        parseInt('0x' + color.substring(3, 4)) / 15];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
  fb.HSLToRGB = function (hsl) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
    var m1, m2, r, g, b;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
    var h = hsl[0], s = hsl[1], l = hsl[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
    m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
    m1 = l * 2 - m2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
    return [this.hueToRGB(m1, m2, h+0.33333),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
        this.hueToRGB(m1, m2, h),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
        this.hueToRGB(m1, m2, h-0.33333)];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
  fb.hueToRGB = function (m1, m2, h) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
    h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
    if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
    if (h * 2 < 1) return m2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
    if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
    return m1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
  fb.RGBToHSL = function (rgb) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
    var min, max, delta, h, s, l;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
    var r = rgb[0], g = rgb[1], b = rgb[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
    min = Math.min(r, Math.min(g, b));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
    max = Math.max(r, Math.max(g, b));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
    delta = max - min;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
    l = (min + max) / 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    s = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
    if (l > 0 && l < 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
      s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    h = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
    if (delta > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
      if (max == r && max != g) h += (g - b) / delta;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
      if (max == g && max != b) h += (2 + (b - r) / delta);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
      if (max == b && max != r) h += (4 + (r - g) / delta);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
      h /= 6;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
    return [h, s, l];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
  // Install mousedown handler (the others are set on the document on-demand)
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   271
  $('*', e).on('mousedown', fb.mousedown);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
    // Init color
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
  fb.setColor('#000000');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
  // Set linked elements/callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
  if (callback) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
    fb.linkTo(callback);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
})(jQuery);