-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.fontjustment.js
111 lines (88 loc) · 2.46 KB
/
jquery.fontjustment.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
Fontjustment
Version 1.0
By Alireza Asadi
*/
(function($){
$.fn.fontjustment = function(options){
var settings = $.extend({
}, options);
var getReadWidth = function (element) {
var wrapper = document.createElement('span'),
result;
while (element.firstChild) {
wrapper.appendChild(element.firstChild);
}
element.appendChild(wrapper);
result = wrapper.offsetWidth;
element.removeChild(wrapper);
while (wrapper.firstChild) {
element.appendChild(wrapper.firstChild);
}
return result;
};
var char_truncate = function(_this){
var truncated = false;
var val = _this.html();
// Backup originalText
if(settings.cache){
if(!_this.attr("data-org-none-trunc"))
_this.attr("data-org-none-trunc", val);
else{
val = _this.attr("data-org-none-trunc");
_this.html(val);
}
}
var parsed = parser(val);
var numOfLines = _numberOfLine(_this);
truncated = (parsed.totalChars > settings.max);
// If truncated char is not space
if(truncated){
if(val.substr(settings.max-1,1) != ' '){
settings.max = val.lastIndexOf(' ', settings.max);
}
var newText = val.substr(0, settings.max);
_this.html(newText);
_this.append('<span class="ellipsis">' + settings.ellipsis + '</span>');
}
};
var init = function(_this){
_this.addClass('fontjustment-applied');
var defaultFontSize = _this.attr('data-default-size');
if(!defaultFontSize){
defaultFontSize = _this.css('font-size');
_this.attr('data-default-size', defaultFontSize);
}
_this.css('font-size', defaultFontSize);
var realWidth = getReadWidth(_this.get(0));
var width = _this.width();
var size = 0;
var sizeUnit = 'px';
if(defaultFontSize.indexOf('px') > -1){
sizeUnit = 'px';
size = parseInt(defaultFontSize.replace('px'));
}else if(defaultFontSize.indexOf('em') > -1){
sizeUnit = 'em';
size = parseFloat(defaultFontSize.replace('em'));
}else if(defaultFontSize.indexOf('pt') > -1){
sizeUnit = 'pt';
size = parseInt(defaultFontSize.replace('pt'));
}
while(realWidth > width && size > 0){
_this.css('font-size', size + sizeUnit);
realWidth = getReadWidth(_this.get(0));
if(sizeUnit == 'em')
size-=0.01;
else
size--;
}
};
return this.each(function(){
var _this = $(this);
init(_this);
$(window).resize(function(){
init(_this);
});
});
};
}(jQuery));