/* * jQuery MiniColors: A tiny color picker built on jQuery * * Copyright Cory LaViska for A Beautiful Site, LLC. (http://www.abeautifulsite.net/) * * Licensed under the MIT license: http://opensource.org/licenses/MIT * */ jQuery && function(a) { function b(b, c) { var d = a('
'), e = a.minicolors.defaults; b.data("minicolors-initialized") || (c = a.extend(!0, {}, e, c), d.addClass("minicolors-theme-" + c.theme).toggleClass("minicolors-with-opacity", c.opacity), void 0 !== c.position && a.each(c.position.split(" "), function() { d.addClass("minicolors-position-" + this) }), b.addClass("minicolors-input").data("minicolors-initialized", !1).data("minicolors-settings", c).prop("size", 7).wrap(d).after('"), c.inline || (b.after(''), b.next(".minicolors-swatch").on("click", function(a) { a.preventDefault(), b.focus() })), b.parent().find(".minicolors-panel").on("selectstart", function() { return!1 }).end(), c.inline && b.parent().addClass("minicolors-inline"), h(b, !1), b.data("minicolors-initialized", !0)) } function c(a) { var b = a.parent(); a.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"), b.before(a).remove() } function d(a) { var b = a.parent(), c = b.find(".minicolors-panel"), d = a.data("minicolors-settings"); !a.data("minicolors-initialized") || a.prop("disabled") || b.hasClass("minicolors-inline") || b.hasClass("minicolors-focus") || (e(), b.addClass("minicolors-focus"), c.stop(!0, !0).fadeIn(d.showSpeed, function() { d.show && d.show.call(a.get(0)) })) } function e() { a(".minicolors-focus").each(function() { var b = a(this), c = b.find(".minicolors-input"), d = b.find(".minicolors-panel"), e = c.data("minicolors-settings"); d.fadeOut(e.hideSpeed, function() { e.hide && e.hide.call(c.get(0)), b.removeClass("minicolors-focus") }) }) } function f(a, b, c) { var m, n, o, p, d = a.parents(".minicolors").find(".minicolors-input"), e = d.data("minicolors-settings"), f = a.find("[class$=-picker]"), h = a.offset().left, i = a.offset().top, j = Math.round(b.pageX - h), k = Math.round(b.pageY - i), l = c ? e.animationSpeed : 0; b.originalEvent.changedTouches && (j = b.originalEvent.changedTouches[0].pageX - h, k = b.originalEvent.changedTouches[0].pageY - i), 0 > j && (j = 0), 0 > k && (k = 0), j > a.width() && (j = a.width()), k > a.height() && (k = a.height()), a.parent().is(".minicolors-slider-wheel") && f.parent().is(".minicolors-grid") && (m = 75 - j, n = 75 - k, o = Math.sqrt(m * m + n * n), p = Math.atan2(n, m), 0 > p && (p += 2 * Math.PI), o > 75 && (o = 75, j = 75 - 75 * Math.cos(p), k = 75 - 75 * Math.sin(p)), j = Math.round(j), k = Math.round(k)), a.is(".minicolors-grid") ? f.stop(!0).animate({top: k + "px", left: j + "px"}, l, e.animationEasing, function() { g(d, a) }) : f.stop(!0).animate({top: k + "px"}, l, e.animationEasing, function() { g(d, a) }) } function g(a, b) { function c(a, b) { var c, d; return a.length && b ? (c = a.offset().left, d = a.offset().top, {x: c - b.offset().left + a.outerWidth() / 2, y: d - b.offset().top + a.outerHeight() / 2}) : null } var d, e, f, g, h, j, k, m = a.val(), o = a.attr("data-opacity"), p = a.parent(), r = a.data("minicolors-settings"), s = p.find(".minicolors-swatch"), t = p.find(".minicolors-grid"), u = p.find(".minicolors-slider"), v = p.find(".minicolors-opacity-slider"), w = t.find("[class$=-picker]"), x = u.find("[class$=-picker]"), y = v.find("[class$=-picker]"), z = c(w, t), A = c(x, u), B = c(y, v); if (b.is(".minicolors-grid, .minicolors-slider")) { switch (r.control) { case"wheel": g = t.width() / 2 - z.x, h = t.height() / 2 - z.y, j = Math.sqrt(g * g + h * h), k = Math.atan2(h, g), 0 > k && (k += 2 * Math.PI), j > 75 && (j = 75, z.x = 69 - 75 * Math.cos(k), z.y = 69 - 75 * Math.sin(k)), e = n(j / .75, 0, 100), d = n(180 * k / Math.PI, 0, 360), f = n(100 - Math.floor(A.y * (100 / u.height())), 0, 100), m = q({h: d, s: e, b: f}), u.css("backgroundColor", q({h: d, s: e, b: 100})); break; case"saturation": d = n(parseInt(z.x * (360 / t.width()), 10), 0, 360), e = n(100 - Math.floor(A.y * (100 / u.height())), 0, 100), f = n(100 - Math.floor(z.y * (100 / t.height())), 0, 100), m = q({h: d, s: e, b: f}), u.css("backgroundColor", q({h: d, s: 100, b: f})), p.find(".minicolors-grid-inner").css("opacity", e / 100); break; case"brightness": d = n(parseInt(z.x * (360 / t.width()), 10), 0, 360), e = n(100 - Math.floor(z.y * (100 / t.height())), 0, 100), f = n(100 - Math.floor(A.y * (100 / u.height())), 0, 100), m = q({h: d, s: e, b: f}), u.css("backgroundColor", q({h: d, s: e, b: 100})), p.find(".minicolors-grid-inner").css("opacity", 1 - f / 100); break; default: d = n(360 - parseInt(A.y * (360 / u.height()), 10), 0, 360), e = n(Math.floor(z.x * (100 / t.width())), 0, 100), f = n(100 - Math.floor(z.y * (100 / t.height())), 0, 100), m = q({h: d, s: e, b: f}), t.css("backgroundColor", q({h: d, s: 100, b: 100})) } a.val(l(m, r.letterCase)) } b.is(".minicolors-opacity-slider") && (o = r.opacity ? parseFloat(1 - B.y / v.height()).toFixed(2) : 1, r.opacity && a.attr("data-opacity", o)), s.find("SPAN").css({backgroundColor: m, opacity: o}), i(a, m, o) } function h(a, b) { var c, d, e, f, g, h, j, k = a.parent(), o = a.data("minicolors-settings"), p = k.find(".minicolors-swatch"), s = k.find(".minicolors-grid"), t = k.find(".minicolors-slider"), u = k.find(".minicolors-opacity-slider"), v = s.find("[class$=-picker]"), w = t.find("[class$=-picker]"), x = u.find("[class$=-picker]"); switch (c = l(m(a.val(), !0), o.letterCase), c || (c = l(m(o.defaultValue, !0), o.letterCase)), d = r(c), b || a.val(c), o.opacity && (e = "" === a.attr("data-opacity") ? 1 : n(parseFloat(a.attr("data-opacity")).toFixed(2), 0, 1), isNaN(e) && (e = 1), a.attr("data-opacity", e), p.find("SPAN").css("opacity", e), g = n(u.height() - u.height() * e, 0, u.height()), x.css("top", g + "px")), p.find("SPAN").css("backgroundColor", c), o.control) { case"wheel": h = n(Math.ceil(.75 * d.s), 0, s.height() / 2), j = d.h * Math.PI / 180, f = n(75 - Math.cos(j) * h, 0, s.width()), g = n(75 - Math.sin(j) * h, 0, s.height()), v.css({top: g + "px", left: f + "px"}), g = 150 - d.b / (100 / s.height()), "" === c && (g = 0), w.css("top", g + "px"), t.css("backgroundColor", q({h: d.h, s: d.s, b: 100})); break; case"saturation": f = n(5 * d.h / 12, 0, 150), g = n(s.height() - Math.ceil(d.b / (100 / s.height())), 0, s.height()), v.css({top: g + "px", left: f + "px"}), g = n(t.height() - d.s * (t.height() / 100), 0, t.height()), w.css("top", g + "px"), t.css("backgroundColor", q({h: d.h, s: 100, b: d.b})), k.find(".minicolors-grid-inner").css("opacity", d.s / 100); break; case"brightness": f = n(5 * d.h / 12, 0, 150), g = n(s.height() - Math.ceil(d.s / (100 / s.height())), 0, s.height()), v.css({top: g + "px", left: f + "px"}), g = n(t.height() - d.b * (t.height() / 100), 0, t.height()), w.css("top", g + "px"), t.css("backgroundColor", q({h: d.h, s: d.s, b: 100})), k.find(".minicolors-grid-inner").css("opacity", 1 - d.b / 100); break; default: f = n(Math.ceil(d.s / (100 / s.width())), 0, s.width()), g = n(s.height() - Math.ceil(d.b / (100 / s.height())), 0, s.height()), v.css({top: g + "px", left: f + "px"}), g = n(t.height() - d.h / (360 / t.height()), 0, t.height()), w.css("top", g + "px"), s.css("backgroundColor", q({h: d.h, s: 100, b: 100})) } a.data("minicolors-initialized") && i(a, c, e) } function i(a, b, c) { var d = a.data("minicolors-settings"), e = a.data("minicolors-lastChange"); e && e.hex === b && e.opacity === c || (a.data("minicolors-lastChange", {hex: b, opacity: c}), d.change && (d.changeDelay ? (clearTimeout(a.data("minicolors-changeTimeout")), a.data("minicolors-changeTimeout", setTimeout(function() { d.change.call(a.get(0), b, c) }, d.changeDelay))) : d.change.call(a.get(0), b, c)), a.trigger("change").trigger("input")) } function j(b) { var c = m(a(b).val(), !0), d = t(c), e = a(b).attr("data-opacity"); return d ? (void 0 !== e && a.extend(d, {a: parseFloat(e)}), d) : null } function k(b, c) { var d = m(a(b).val(), !0), e = t(d), f = a(b).attr("data-opacity"); return e ? (void 0 === f && (f = 1), c ? "rgba(" + e.r + ", " + e.g + ", " + e.b + ", " + parseFloat(f) + ")" : "rgb(" + e.r + ", " + e.g + ", " + e.b + ")") : null } function l(a, b) { return"uppercase" === b ? a.toUpperCase() : a.toLowerCase() } function m(a, b) { return a = a.replace(/[^A-F0-9]/gi, ""), 3 !== a.length && 6 !== a.length ? "" : (3 === a.length && b && (a = a[0] + a[0] + a[1] + a[1] + a[2] + a[2]), "#" + a) } function n(a, b, c) { return b > a && (a = b), a > c && (a = c), a } function o(a) { var b = {}, c = Math.round(a.h), d = Math.round(255 * a.s / 100), e = Math.round(255 * a.b / 100); if (0 === d) b.r = b.g = b.b = e; else { var f = e, g = (255 - d) * e / 255, h = (f - g) * (c % 60) / 60; 360 === c && (c = 0), 60 > c ? (b.r = f, b.b = g, b.g = g + h) : 120 > c ? (b.g = f, b.b = g, b.r = f - h) : 180 > c ? (b.g = f, b.r = g, b.b = g + h) : 240 > c ? (b.b = f, b.r = g, b.g = f - h) : 300 > c ? (b.b = f, b.g = g, b.r = g + h) : 360 > c ? (b.r = f, b.g = g, b.b = f - h) : (b.r = 0, b.g = 0, b.b = 0) } return{r: Math.round(b.r), g: Math.round(b.g), b: Math.round(b.b)} } function p(b) { var c = [b.r.toString(16), b.g.toString(16), b.b.toString(16)]; return a.each(c, function(a, b) { 1 === b.length && (c[a] = "0" + b) }), "#" + c.join("") } function q(a) { return p(o(a)) } function r(a) { var b = s(t(a)); return 0 === b.s && (b.h = 360), b } function s(a) { var b = {h: 0, s: 0, b: 0}, c = Math.min(a.r, a.g, a.b), d = Math.max(a.r, a.g, a.b), e = d - c; return b.b = d, b.s = 0 !== d ? 255 * e / d : 0, b.h = 0 !== b.s ? a.r === d ? (a.g - a.b) / e : a.g === d ? 2 + (a.b - a.r) / e : 4 + (a.r - a.g) / e : -1, b.h *= 60, b.h < 0 && (b.h += 360), b.s *= 100 / 255, b.b *= 100 / 255, b } function t(a) { return a = parseInt(a.indexOf("#") > -1 ? a.substring(1) : a, 16), {r: a >> 16, g: (65280 & a) >> 8, b: 255 & a} } a.minicolors = {defaults: {animationSpeed: 50, animationEasing: "swing", change: null, changeDelay: 0, control: "hue", defaultValue: "", hide: null, hideSpeed: 100, inline: !1, letterCase: "lowercase", opacity: !1, position: "bottom left", show: null, showSpeed: 100, theme: "default"}}, a.extend(a.fn, {minicolors: function(f, g) { switch (f) { case"destroy": return a(this).each(function() { c(a(this)) }), a(this); case"hide": return e(), a(this); case"opacity": return void 0 === g ? a(this).attr("data-opacity") : (a(this).each(function() { h(a(this).attr("data-opacity", g)) }), a(this)); case"rgbObject": return j(a(this), "rgbaObject" === f); case"rgbString": case"rgbaString": return k(a(this), "rgbaString" === f); case"settings": return void 0 === g ? a(this).data("minicolors-settings") : (a(this).each(function() { var b = a(this).data("minicolors-settings") || {}; c(a(this)), a(this).minicolors(a.extend(!0, b, g)) }), a(this)); case"show": return d(a(this).eq(0)), a(this); case"value": return void 0 === g ? a(this).val() : (a(this).each(function() { h(a(this).val(g)) }), a(this)); default: return"create" !== f && (g = f), a(this).each(function() { b(a(this), g) }), a(this) } }}), a(document).on("mousedown.minicolors touchstart.minicolors", function(b) { a(b.target).parents().add(b.target).hasClass("minicolors") || e() }).on("mousedown.minicolors touchstart.minicolors", ".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider", function(b) { var c = a(this); b.preventDefault(), a(document).data("minicolors-target", c), f(c, b, !0) }).on("mousemove.minicolors touchmove.minicolors", function(b) { var c = a(document).data("minicolors-target"); c && f(c, b) }).on("mouseup.minicolors touchend.minicolors", function() { a(this).removeData("minicolors-target") }).on("mousedown.minicolors touchstart.minicolors", ".minicolors-swatch", function(b) { var c = a(this).parent().find(".minicolors-input"); b.preventDefault(), d(c) }).on("focus.minicolors", ".minicolors-input", function() { var b = a(this); b.data("minicolors-initialized") && d(b) }).on("blur.minicolors", ".minicolors-input", function() { var b = a(this), c = b.data("minicolors-settings"); b.data("minicolors-initialized") && (b.val(m(b.val(), !0)), "" === b.val() && b.val(m(c.defaultValue, !0)), b.val(l(b.val(), c.letterCase))) }).on("keydown.minicolors", ".minicolors-input", function(b) { var c = a(this); if (c.data("minicolors-initialized")) switch (b.keyCode) { case 9: e(); break; case 13: case 27: e(), c.blur() } }).on("keyup.minicolors", ".minicolors-input", function() { var b = a(this); b.data("minicolors-initialized") && h(b, !0) }).on("paste.minicolors", ".minicolors-input", function() { var b = a(this); b.data("minicolors-initialized") && setTimeout(function() { h(b, !0) }, 1) }) }(jQuery);