diff --git a/dist/jquery.boxfit.js b/dist/jquery.boxfit.js
index 096c1dc..8138226 100644
--- a/dist/jquery.boxfit.js
+++ b/dist/jquery.boxfit.js
@@ -23,7 +23,7 @@
'use strict';
var boxfit = function ($nodes, options) {
return $nodes.each(function () {
- var current_step, inner_span, next_font_size, original_height, original_text, original_width, settings, span;
+ var current_step, inner_span, minimum_font, maximum_font, next_font_size, original_height, original_text, original_width, settings, span;
settings = {
// manually set a width/height if you haven't set one explicitly via CSS
width: null,
@@ -90,21 +90,42 @@
// fixing issue where custom line-heights would break wrapped text
inner_span.css('line-height', settings.line_height);
- // keep growing the target so long as we haven't exceeded the width or height
- inner_span.css('font-size', settings.minimum_font_size);
- while ($(this).width() <= original_width && $(this).height() <= original_height) {
- if (current_step++ > settings.step_limit) {
- break;
+ if (settings.maximum_font_size) {
+ // use binary searching algorithm if we have max font size set
+ minimum_font = settings.minimum_font_size;
+ maximum_font = settings.maximum_font_size;
+
+ next_font_size = parseInt((minimum_font + maximum_font) / 2, 10);
+ inner_span.css('font-size', (next_font_size));
+
+ while (minimum_font <= maximum_font) {
+ if($(this).width() <= original_width && $(this).height() <= original_height){
+ minimum_font = next_font_size + 1;
+ } else {
+ maximum_font = next_font_size - 1;
+ }
+
+ next_font_size = parseInt((minimum_font + maximum_font) / 2, 10);
+ inner_span.css('font-size', (next_font_size));
}
- next_font_size = parseInt(inner_span.css('font-size'), 10);
- if (settings.maximum_font_size && next_font_size > settings.maximum_font_size) {
- break;
+ } else {
+ // keep growing the target so long as we haven't exceeded the width or height
+ inner_span.css('font-size', settings.minimum_font_size);
+ while ($(this).width() <= original_width && $(this).height() <= original_height) {
+ if (current_step++ > settings.step_limit) {
+ break;
+ }
+ next_font_size = parseInt(inner_span.css('font-size'), 10);
+ if (settings.maximum_font_size && next_font_size > settings.maximum_font_size) {
+ break;
+ }
+ inner_span.css('font-size', next_font_size + settings.step_size);
}
- inner_span.css('font-size', next_font_size + settings.step_size);
+
+ // go back one step
+ inner_span.css('font-size', parseInt(inner_span.css('font-size'), 10) - settings.step_size);
}
- // go back one step
- inner_span.css('font-size', parseInt(inner_span.css('font-size'), 10) - settings.step_size);
return $(this);
}
});
diff --git a/dist/jquery.boxfit.min.js b/dist/jquery.boxfit.min.js
index 14c9681..6e40239 100644
--- a/dist/jquery.boxfit.min.js
+++ b/dist/jquery.boxfit.min.js
@@ -1 +1 @@
-!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof exports?module.exports=b(a,require("jquery")):b(a,jQuery)}(this,function(a,b){"use strict";var c=function(c,d){return c.each(function(){var c,e,f,g,h,i,j,k;if(j={width:null,height:null,step_size:1,step_limit:200,align_middle:!0,align_center:!0,multiline:!1,minimum_font_size:5,maximum_font_size:null,line_height:"100%"},b.extend(j,d),j.width?(i=j.width,b(this).width(i+"px")):i=b(this).width(),j.height?(g=j.height,b(this).height(g+"px")):g=b(this).height(),i&&g){for(j.multiline||b(this).css("white-space","nowrap"),h=b(this).html(),0===b("
"+h+"
").find("span.boxfitted").length?(k=b(b("").addClass("boxfitted").html(h)),b(this).html(k)):k=b(b(this).find("span.boxfitted")[0]),c=0,e=k,b(this).css("display","table"),e.css("display","table-cell"),j.align_middle&&e.css("vertical-align","middle"),j.align_center&&(b(this).css("text-align","center"),e.css("text-align","center")),e.css("line-height",j.line_height),e.css("font-size",j.minimum_font_size);b(this).width()<=i&&b(this).height()<=g&&!(c++>j.step_limit)&&(f=parseInt(e.css("font-size"),10),!(j.maximum_font_size&&f>j.maximum_font_size));)e.css("font-size",f+j.step_size);return e.css("font-size",parseInt(e.css("font-size"),10)-j.step_size),b(this)}return null!==a.console?console.info("Set static height/width on target DIV before using boxfit! Detected width: "+i+" height: "+g):void 0})};return b.fn.boxfit=function(a){return c(this,a)},c});
\ No newline at end of file
+!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof exports?module.exports=b(a,require("jquery")):b(a,jQuery)}(this,function(a,b){"use strict";var c=function(c,d){return c.each(function(){var c,e,f,g,h,i,j,k,l,m;if(l={width:null,height:null,step_size:1,step_limit:200,align_middle:!0,align_center:!0,multiline:!1,minimum_font_size:5,maximum_font_size:null,line_height:"100%"},b.extend(l,d),l.width?(k=l.width,b(this).width(k+"px")):k=b(this).width(),l.height?(i=l.height,b(this).height(i+"px")):i=b(this).height(),k&&i){if(l.multiline||b(this).css("white-space","nowrap"),j=b(this).html(),0===b(""+j+"
").find("span.boxfitted").length?(m=b(b("").addClass("boxfitted").html(j)),b(this).html(m)):m=b(b(this).find("span.boxfitted")[0]),c=0,e=m,b(this).css("display","table"),e.css("display","table-cell"),l.align_middle&&e.css("vertical-align","middle"),l.align_center&&(b(this).css("text-align","center"),e.css("text-align","center")),e.css("line-height",l.line_height),l.maximum_font_size)for(f=l.minimum_font_size,g=l.maximum_font_size,h=parseInt((f+g)/2,10),e.css("font-size",h);g>=f;)b(this).width()<=k&&b(this).height()<=i?f=h+1:g=h-1,h=parseInt((f+g)/2,10),e.css("font-size",h);else{for(e.css("font-size",l.minimum_font_size);b(this).width()<=k&&b(this).height()<=i&&!(c++>l.step_limit)&&(h=parseInt(e.css("font-size"),10),!(l.maximum_font_size&&h>l.maximum_font_size));)e.css("font-size",h+l.step_size);e.css("font-size",parseInt(e.css("font-size"),10)-l.step_size)}return b(this)}return null!==a.console?console.info("Set static height/width on target DIV before using boxfit! Detected width: "+k+" height: "+i):void 0})};return b.fn.boxfit=function(a){return c(this,a)},c});
\ No newline at end of file
diff --git a/src/jquery.boxfit.js b/src/jquery.boxfit.js
index 096c1dc..8138226 100644
--- a/src/jquery.boxfit.js
+++ b/src/jquery.boxfit.js
@@ -23,7 +23,7 @@
'use strict';
var boxfit = function ($nodes, options) {
return $nodes.each(function () {
- var current_step, inner_span, next_font_size, original_height, original_text, original_width, settings, span;
+ var current_step, inner_span, minimum_font, maximum_font, next_font_size, original_height, original_text, original_width, settings, span;
settings = {
// manually set a width/height if you haven't set one explicitly via CSS
width: null,
@@ -90,21 +90,42 @@
// fixing issue where custom line-heights would break wrapped text
inner_span.css('line-height', settings.line_height);
- // keep growing the target so long as we haven't exceeded the width or height
- inner_span.css('font-size', settings.minimum_font_size);
- while ($(this).width() <= original_width && $(this).height() <= original_height) {
- if (current_step++ > settings.step_limit) {
- break;
+ if (settings.maximum_font_size) {
+ // use binary searching algorithm if we have max font size set
+ minimum_font = settings.minimum_font_size;
+ maximum_font = settings.maximum_font_size;
+
+ next_font_size = parseInt((minimum_font + maximum_font) / 2, 10);
+ inner_span.css('font-size', (next_font_size));
+
+ while (minimum_font <= maximum_font) {
+ if($(this).width() <= original_width && $(this).height() <= original_height){
+ minimum_font = next_font_size + 1;
+ } else {
+ maximum_font = next_font_size - 1;
+ }
+
+ next_font_size = parseInt((minimum_font + maximum_font) / 2, 10);
+ inner_span.css('font-size', (next_font_size));
}
- next_font_size = parseInt(inner_span.css('font-size'), 10);
- if (settings.maximum_font_size && next_font_size > settings.maximum_font_size) {
- break;
+ } else {
+ // keep growing the target so long as we haven't exceeded the width or height
+ inner_span.css('font-size', settings.minimum_font_size);
+ while ($(this).width() <= original_width && $(this).height() <= original_height) {
+ if (current_step++ > settings.step_limit) {
+ break;
+ }
+ next_font_size = parseInt(inner_span.css('font-size'), 10);
+ if (settings.maximum_font_size && next_font_size > settings.maximum_font_size) {
+ break;
+ }
+ inner_span.css('font-size', next_font_size + settings.step_size);
}
- inner_span.css('font-size', next_font_size + settings.step_size);
+
+ // go back one step
+ inner_span.css('font-size', parseInt(inner_span.css('font-size'), 10) - settings.step_size);
}
- // go back one step
- inner_span.css('font-size', parseInt(inner_span.css('font-size'), 10) - settings.step_size);
return $(this);
}
});