﻿(function ($) { $.fn.Identicon = function () { var u = function (a, b) { if (b.length >= 2) { a.beginPath(); a.moveTo(b[0], b[1]); for (var i = 2; i < b.length; i++) { a.lineTo(b[i], b[i + 1]); i++ } a.fill() } }; var v = function (a, b) { switch (a) { case 0: a = [0.5, 1, 1, 0, 1, 1]; break; case 1: a = [0.5, 0, 1, 0, 0.5, 1, 0, 1]; break; case 2: a = [0.5, 0, 1, 0, 1, 1, 0.5, 1, 1, 0.5]; break; case 3: a = [0, 0.5, 0.5, 0, 1, 0.5, 0.5, 1, 0.5, 0.5]; break; case 4: a = [0, 0.5, 1, 0, 1, 1, 0, 1, 1, 0.5]; break; case 5: a = [1, 0, 1, 1, 0.5, 1, 1, 0.5, 0.5, 0.5]; break; case 6: a = [0, 0, 1, 0, 1, 0.5, 0, 0, 0.5, 1, 0, 1]; break; case 7: a = [0, 0, 0.5, 0, 1, 0.5, 0.5, 1, 0, 1, 0.5, 0.5]; break; case 8: a = [0.5, 0, 0.5, 0.5, 1, 0.5, 1, 1, 0.5, 1, 0.5, 0.5, 0, 0.5]; break; case 9: a = [0, 0, 1, 0, 0.5, 0.5, 1, 0.5, 0.5, 1, 0.5, 0.5, 0, 1]; break; case 10: a = [0, 0.5, 0.5, 1, 1, 0.5, 0.5, 0, 1, 0, 1, 1, 0, 1]; break; case 11: a = [0.5, 0, 1, 0, 1, 1, 0.5, 1, 1, 0.75, 0.5, 0.5, 1, 0.25]; break; case 12: a = [0, 0.5, 0.5, 0, 0.5, 0.5, 1, 0, 1, 0.5, 0.5, 1, 0.5, 0.5, 0, 1]; break; case 13: a = [0, 0, 1, 0, 1, 1, 0, 1, 1, 0.5, 0.5, 0.25, 0.5, 0.75, 0, 0.5, 0.5, 0.25]; break; case 14: a = [0, 0.5, 0.5, 0.5, 0.5, 0, 1, 0, 0.5, 0.5, 1, 0.5, 0.5, 1, 0.5, 0.5, 0, 1]; break; default: a = [0, 0, 1, 0, 0.5, 0.5, 0.5, 0, 0, 0.5, 1, 0.5, 0.5, 1, 0.5, 0.5, 0, 1]; break } for (var i = 0; i < a.length; i++) { a[i] = a[i] * b } return a }; var w = function (a, b) { var c; var d = b / 5; var j = 0; var k = 0; a.strokeRect(0, 0, d, d); for (var i = 0; i < 15; i++) { c = v(i, d); a.save(); a.translate(d / 2 + (j * d), d / 2 + (k * d)); for (var p = 0; p < c.length; p++) { c[p] -= d / 2 } u(a, c); a.strokeRect(-d / 2, -d / 2, d, d); a.restore(); if (j >= 4) { j = 0; k++ } else { j++ } } }; var z = function (a, b, x, y, c, d, e) { var f = e / 2; a.save(); a.translate(x, y); a.rotate(d * Math.PI / 180); a.save(); a.translate(f, f); var g = []; for (var p = 0; p < b.length; p++) { g[p] = b[p] - f } a.rotate(c); u(a, g); a.restore(); a.restore() }; var A = function (a, b) { switch (a) { case 0: a = []; break; case 1: a = [0, 0, 1, 0, 1, 1, 0, 1]; break; case 2: a = [0.5, 0, 1, 0.5, 0.5, 1, 0, 0.5]; break; case 3: a = [0, 0, 1, 0, 1, 1, 0, 1, 0, 0.5, 0.5, 1, 1, 0.5, 0.5, 0, 0, 0.5]; break; case 4: a = [0.25, 0, 0.75, 0, 0.5, 0.5, 1, 0.25, 1, 0.75, 0.5, 0.5, 0.75, 1, 0.25, 1, 0.5, 0.5, 0, 0.75, 0, 0.25, 0.5, 0.5]; break; case 5: a = [0, 0, 0.5, 0.25, 1, 0, 0.75, 0.5, 1, 1, 0.5, 0.75, 0, 1, 0.25, 0.5]; break; case 6: a = [0.33, 0.33, 0.67, 0.33, 0.67, 0.67, 0.33, 0.67]; break; case 7: a = [0, 0, 0.33, 0, 0.33, 0.33, 0.66, 0.33, 0.67, 0, 1, 0, 1, 0.33, 0.67, 0.33, 0.67, 0.67, 1, 0.67, 1, 1, 0.67, 1, 0.67, 0.67, 0.33, 0.67, 0.33, 1, 0, 1, 0, 0.67, 0.33, 0.67, 0.33, 0.33, 0, 0.33]; break; default: a = [0, 0, 1, 0, 0.5, 0.5, 0.5, 0, 0, 0.5, 1, 0.5, 0.5, 1, 0.5, 0.5, 0, 1]; break } for (var i = 0; i < a.length; i++) { a[i] = a[i] * b } return a }; var B = function (a, b, c) { var d = parseInt(b.substr(0, 1), 16); var e = parseInt(b.substr(1, 1), 16); var f = parseInt(b.substr(2, 1), 16) & 7; var g = parseInt(b.substr(3, 1), 16) & 3; var h = parseInt(b.substr(4, 1), 16) & 3; var i = parseInt(b.substr(5, 1), 16) % 2; var j = parseInt(b.substr(6, 2), 16); var k = parseInt(b.substr(8, 2), 16); var l = parseInt(b.substr(10, 2), 16); var m = parseInt(b.substr(12, 2), 16); var n = parseInt(b.substr(14, 2), 16); var o = parseInt(b.substr(16, 2), 16); var p = c / 3; var q = c; var r = v(d, p); a.fillStyle = "rgb(" + j + "," + k + "," + l + ")"; z(a, r, 0, 0, g, 0, p); z(a, r, q, 0, g, 90, p); z(a, r, q, q, g, 180, p); z(a, r, 0, q, g, 270, p); var s = v(e, p); a.fillStyle = "rgb(" + m + "," + n + "," + o + ")"; z(a, s, 0, p, h, 0, p); z(a, s, 2 * p, 0, h, 90, p); z(a, s, 3 * p, 2 * p, h, 180, p); z(a, s, p, 3 * p, h, 270, p); var t = A(f, p); if (i > 0 && (Math.abs(j - m) > 127 || Math.abs(k - n) > 127 || Math.abs(l - o) > 127)) { a.fillStyle = "rgb(" + m + "," + n + "," + o + ")" } else { a.fillStyle = "rgb(" + j + "," + k + "," + l + ")" } z(a, t, p, p, 0, 0, p) }; return this.each(function () { var a = this; if (a.getContext) { var b = a.getContext("2d"); var c = $(this).html(); var d = $(this).attr('width'); if (c === "test") { w(b, d) } else { B(b, c, d) } } }) } })(jQuery);
