Skip to content

Instantly share code, notes, and snippets.

@dtao
Created August 1, 2012 22:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dtao/3231384 to your computer and use it in GitHub Desktop.
Save dtao/3231384 to your computer and use it in GitHub Desktop.
Function to automatically zoom in any website to fill available screen width
(function() {
function expand($) {
function text($element) {
return $.trim($element.clone().children().remove().end().text());
}
function isFixedOrFloating($element) {
try {
if ($element.css("position") === "fixed") {
return true;
}
var float = $element.css("float");
if (float === "left" || float === "right") {
return true;
}
var $parent = $element.parent();
if ($parent.length) {
return isFixedOrFloating($parent);
}
} catch (e) {
return false;
}
return false;
}
function hasContent($element) {
// Ignore elements that are deliberately positioned off-screen.
var offset = $element.offset();
if (offset.left < 0 || offset.left > $(document).width()) {
return false;
}
// Ignore elements that float or are fixed to a set position on the screen
// as these will remain in view after zooming.
if (isFixedOrFloating($element)) {
return false;
}
return $element.is(":visible") && text($element).length > 0;
}
function getExtremeEdges($elements) {
var extremeLeft = null;
var extremeRight = null;
$.each($elements, function(i, el) {
var $element = $(el);
var offset = $element.offset();
var left = offset.left;
var right = offset.left + $element.width();
if (!extremeLeft || left < extremeLeft) {
extremeLeft = left;
}
if (!extremeRight || right > extremeRight) {
extremeRight = right;
}
});
return [extremeLeft, extremeRight];
}
var $elementsWithContent = $("*").filter(function(i) {
return hasContent($(this));
});
var extremeEdges = getExtremeEdges($elementsWithContent);
var width = extremeEdges[1] - extremeEdges[0];
var desiredWidth = $(document).width() * 0.95;
if (width < desiredWidth) {
$("body").css("zoom", desiredWidth / width);
}
}
function waitToExpand() {
setTimeout(function() {
if (typeof window.jQuery === "undefined") {
waitToExpand();
} else {
expand(window.jQuery);
}
}, 100);
}
// Dynamically inject jQuery into the page if it's not already present.
if (typeof window.jQuery === "undefined") {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
document.body.appendChild(script);
waitToExpand();
} else {
expand(window.jQuery);
}
}());
(function(){function a(a){function b(b){return a.trim(b.clone().children().remove().end().text())}function c(a){try{if(a.css("position")==="fixed"){return true}var b=a.css("float");if(b==="left"||b==="right"){return true}var d=a.parent();if(d.length){return c(d)}}catch(e){return false}return false}function d(d){var e=d.offset();if(e.left<0||e.left>a(document).width()){return false}if(c(d)){return false}return d.is(":visible")&&b(d).length>0}function e(b){var c=null;var d=null;a.each(b,function(b,e){var f=a(e);var g=f.offset();var h=g.left;var i=g.left+f.width();if(!c||h<c){c=h}if(!d||i>d){d=i}});return[c,d]}var f=a("*").filter(function(b){return d(a(this))});var g=e(f);var h=g[1]-g[0];var i=a(document).width()*.95;if(h<i){a("body").css("zoom",i/h)}}function b(){setTimeout(function(){if(typeof window.jQuery==="undefined"){b()}else{a(window.jQuery)}},100)}if(typeof window.jQuery==="undefined"){var c=document.createElement("script");c.type="text/javascript";c.src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";document.body.appendChild(c);b()}else{a(window.jQuery)}})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment