$.fn.extremes = function(options) { var defaults = { diameter: false, background: false }; var options = jQuery.extend(defaults, options); return this.each(function() { var diagram = $(this); // Apply a rotation to offset awkward initial states // 'this' is the selector diagram.css({ position: "relative" }); if (defaults.rotate) { diagram.css({ '-webkit-transform': "rotate(" + options.rotate + "deg)", '-moz-transform': "rotate(" + options.rotate + "deg)", '-ms-transform': "rotate(" + options.rotate + "deg)", '-o-transform': "rotate(" + options.rotate + "deg)", 'transform': "rotate(" + options.rotate + "deg)", }); } var elements = $(this).children(); var length = elements.length; $(this).css({ "display" : "block", "position:" : "relative" }); var maxWidth = 0; elements.css("float", "left"); elements.each(function(i){ var width = $(this).width(); if (width > maxWidth) { maxWidth = width; } var element = $(this); var height = $(this).height(); var degrees = i/length * 360 - 90; var position = "0 50%"; var indent = (defaults.diameter) ? "0 0 0 " + defaults.diameter + "px" : "0 0 0 " + height * (length /6) + "px"; element.wrap("
"); $(this).parent().parent().css({ "-webkit-transform-origin": position, "-moz-transform-origin": position, "-o-transform-origin": position, "-ms-transform-origin": position, "transform-origin": position, "-webkit-transform": "rotate(" + degrees + "deg)", "-moz-transform": "rotate(" + degrees + "deg)", "-o-transform": "rotate(" + degrees + "deg)", "-ms-transform": "rotate(" + degrees + "deg)", "transform": "rotate(" + degrees + "deg)", "padding": indent, "position": "absolute", "top": "50%", "left": "50%", "white-space" : "nowrap" }); if (degrees > 90) { $(this).parent().css({ "-webkit-transform-origin": "50% 50%", "-moz-transform-origin": "50% 50%", "-o-transform-origin": "50% 50%", "-ms-transform-origin": "50% 50%", "transform-origin": "50% 50%", "-webkit-transform": "rotate(180deg)", "-moz-transform": "rotate(180deg)", "-o-transform": "rotate(180deg)", "-ms-transform": "rotate(180deg)", "transform": "rotate(180deg)", "position": "absolute" }); $(this).parent().parent().css({ width: $(this).parent().width(), height: $(this).parent().height(), }) } }); if (diagram.height() < 50) { diagram.css({ "width" : maxWidth * 2 + defaults.diameter || 100, "height" : maxWidth * 2 + defaults.diameter || 100 }); } }); };