/* * CenterIt (v.1.1.5) * by James Studdart (www.jamesstuddart.co.uk) * james@studdart.co.uk * * Copyright (c) 2009-2010 James Studdart * Licensed under the GPL license. * * * NOTE: Requires jQuery framework (www.jquery.com) * Developed for: jQuery 1.4.2 * * Special Thanks to James Parker and Michael Collins * */ /* UPDATE: CenterIt (v.1.1.5) by Michael Collins - mike@intervalia.com (20/09/2010) - Corrected the detection of IE Quirks mode to use position:absolute and not position:fixed. - Fixed bug that was overwriting the object's width and height even if it was not calculating it. - Return the 'this' pointer at the end of all functions to allow proper jQuery chainging. */ /* UPDATE: CenterIt (v.1.1.4) by James Studdart (23/06/2010) - Added property showPopup to ensure items are shown when using centerIt (if required, set to true by default) */ /* UPDATE: CenterIt (v.1.1.3) by James Parker (09/06/2010) - fix bug with calculating padding and margins */ /* UPDATE: CenterIt (v.1.1.2) by James Studdart (25/02/2010) - fix for IE6 and below centering, as IE6 and below do not support fixed positioning */ /* UPDATE: CenterIt (v.1.1.1) by James Studdart (21/02/2010) - Added control.show() to ensure chosen element that will be centred is shown, otherwise centreIt does nothing */ /* UPDATE: CenterIt (v.1.1.0) by James Studdart - Added code to check for NaN on padding and margins */ (function($) { $.fn.CenterIt = function(options) { var defaults = { ignorechildren: true, showPopup: false }; var settings = $.extend({}, defaults, options); var control = $(this); if (settings.showPopup) { control.show(); } $(document).ready(function() { CenterItem(); }); $(window).resize(function() { CenterItem(); }); function CenterItem() { var controlHeight = 0; var controlWidth = 0; if (settings.ignorechildren) { controlHeight = control.height(); controlWidth = control.width(); } else { var children = control.children(); for (var i = 0; i < children.length; i++) { if (children[i].style.display != 'none') { controlHeight = children[i].clientHeight; controlWidth = children[i].clientWidth; } } } var controlMarginCSS = control.css("margin"); var controlPaddingCSS = control.css("padding"); if (controlMarginCSS != null) { //Work out Margins controlMarginCSS = controlMarginCSS.replace(/auto/gi, '0'); controlMarginCSS = controlMarginCSS.replace(/px/gi, ''); controlMarginCSS = controlMarginCSS.replace(/pt/gi, ''); } var totalMargin = ""; if (controlMarginCSS != "" && controlMarginCSS != null) { var totalMarginArray = controlPaddingCSS.split(' '); if (totalMarginArray.length == 1) { var margin = parseInt(totalMarginArray[0]); totalMargin = new Array(margin, margin, margin, margin); } else if (totalMarginArray.length == 2) { var verticalMargin = parseInt(totalMarginArray[0]); var horizontalMargin = parseInt(totalMarginArray[1]); totalMargin = new Array(verticalMargin, horizontalMargin, verticalMargin, horizontalMargin); } else if (totalMarginArray.length == 3) { var topMargin = parseInt(totalMarginArray[0]); var rightMargin = parseInt(totalMarginArray[1]); var bottomMargin = parseInt(totalMarginArray[2]); totalMargin = new Array(topMargin, rightMargin, bottomMargin, rightMargin); } else if (totalMarginArray.length == 4) { var topMargin = parseInt(totalMarginArray[0]); var rightMargin = parseInt(totalMarginArray[1]); var bottomPMargin = parseInt(totalMarginArray[2]); var leftMargin = parseInt(totalMarginArray[3]); totalMargin = new Array(topMargin, rightMargin, bottomMargin, leftMargin); } } var horizontalMargin = 0; var verticalMargin = 0; if (totalMargin != "NaN") { if (totalMargin.length > 0) { horizontalMargin = totalMargin[1] + totalMargin[3]; verticalMargin = totalMargin[0] + totalMargin[2]; } } if (controlPaddingCSS != null) { //Work out Padding controlPaddingCSS = controlPaddingCSS.replace(/auto/gi, '0'); controlPaddingCSS = controlPaddingCSS.replace(/px/gi, ''); controlPaddingCSS = controlPaddingCSS.replace(/pt/gi, ''); } var totalPadding = ""; if (controlPaddingCSS != "" && controlPaddingCSS != null) { var totalPaddingArray = controlPaddingCSS.split(' '); if (totalPaddingArray.length == 1) { var padding = parseInt(totalPaddingArray[0]); totalPadding = new Array(padding, padding, padding, padding); } else if (totalPaddingArray.length == 2) { var verticalPadding = parseInt(totalPaddingArray[0]); var horizontalPadding = parseInt(totalPaddingArray[1]); totalPadding = new Array(verticalPadding, horizontalPadding, verticalPadding, horizontalPadding); } else if (totalPaddingArray.length == 3) { var topPadding = parseInt(totalPaddingArray[0]); var rightPadding = parseInt(totalPaddingArray[1]); var bottomPadding = parseInt(totalPaddingArray[2]); totalPadding = new Array(topPadding, rightPadding, bottomPadding, rightPadding); } else if (totalPaddingArray.length == 4) { var topPadding = parseInt(totalPaddingArray[0]); var rightPadding = parseInt(totalPaddingArray[1]); var bottomPadding = parseInt(totalPaddingArray[2]); var leftPadding = parseInt(totalPaddingArray[3]); totalPadding = new Array(topPadding, rightPadding, bottomPadding, leftPadding); } } var horizontalPadding = 0; var verticalPadding = 0; if (totalPadding != "NaN") { if (totalPadding.length > 0) { horizontalPadding = totalPadding[1] + totalPadding[3]; verticalPadding = totalPadding[0] + totalPadding[2]; } } if (verticalMargin == "NaN" || isNaN(verticalMargin)) { verticalMargin = 0; } if (verticalPadding == "NaN" || isNaN(verticalPadding)) { verticalPadding = 0; } //Apply CSS var windowHeight = $(window).height(); var windowWidth = $(window).width(); if ($.browser.msie && document.documentMode < 7) { //IE Quirks Mode HACK as IE in Quirks Mode does not support fixed positioning control.css("position", "absolute"); } else { control.css("position", "fixed"); } if (!settings.ignorechildren) { control.css("height", controlHeight + "px"); control.css("width", controlWidth + "px"); } control.css("top", ((windowHeight - (controlHeight + verticalMargin + verticalPadding)) / 2) + "px"); control.css("left", ((windowWidth - (controlWidth + horizontalMargin + horizontalPadding)) / 2) + "px"); return this; } return this; } })(jQuery);