-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.shrink-to-fit.js
79 lines (68 loc) · 2.01 KB
/
jquery.shrink-to-fit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
* jQuery.shrinkToFit
*
* Causes text within an input to be shrunk to fit within the available area.
*
* Example Use:
* jQuery("#input").keyUp(function() {
* jQuery("#input").shrinkToFit();
* });
*
* Options include gap (the fixed offset required before shrink starts), scalar (how much to scale per keypress)
* and minSize (the minimum size a font will go).
*/
(function($) {
var measure = function(txt, font) {
var id = 'text-width-tester',
$tag = $('#' + id);
if (!$tag.length) {
$tag = $('<span id="' + id + '" style="display:none;font:' + font + ';">').text(txt); //+ '</span>');
$('body').append($tag);
} else {
$tag.css({font:font}).text(txt);
}
return {
width: $tag.width(),
height: $tag.height()
}
};
var method = function(options) {
var defaults = {
gap: -70,
scalar: 0.95,
minSize: 8,
height: undefined
};
var settings = $.extend({}, defaults, options);
var gap = settings.gap;
var scalar = settings.scalar;
var minSize = settings.minSize;
var height = settings.height;
var $input = $(this),
txt = $input.val(),
maxWidth = $input.width() + gap;
if($input.data("original-font-size") == undefined) {
var fontSize = parseFloat($input.css("font-size"));
$input.data("original-font-size", fontSize);
} else {
var fontSize = $input.data("original-font-size");
}
var fontWeight = $input.css("font-weight");
var fontFamily = $input.css("font-family");
if(height != undefined)
$input.css("height", height);
var font = fontWeight + " " + fontSize + "px " + fontFamily;
var textWidth = measure(txt, font).width; // .replace(/\</g, "<").replace(/\&/g, "&")
if (textWidth > maxWidth) {
fontSize = fontSize * maxWidth / textWidth * scalar;
//console.log(fontSize, "new size");
if(fontSize < minSize) return;
font = fontWeight + " " + fontSize + "px " + fontFamily;
$input.css({font:font});
} else {
//console.log(font, "old size");
$input.css({font:font});
}
};
$.fn.shrinkToFit = method;
})(jQuery);