-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.motrim.js
110 lines (103 loc) · 2.85 KB
/
jquery.motrim.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
/*
* Copyright (c) 2015 Michael M. Ocana ([email protected])
*
* jQuery moTrim plugin
* Version 1.0 (September 2015)
* https://github.com/michaelocana/motrim
*
* Licensed under the MIT License
*/
/*global jQuery*/
(function($) {
if ($.fn.motrim) {
return;
}
$.fn.motrim = function(options) {
var settings = $.extend({
width: null,
ellipsis: '...',
cut_by: null,
}, options);
return this.each(function() {
var textContent = $(this).text();
if (settings.width == null) {
var parentWidth = $(this).parent().width();
}
else {
var parentWidth = parseInt(settings.width);
}
$('<span id="guide" style="display: none; white-space: nowrap;"></span>').insertBefore(this);
if ($(this).find('a').length) {
$(this).find('a').html(doTrim(textContent, parentWidth));
}
else {
$(this).html(doTrim(textContent, parentWidth));
}
$("#guide").remove();
});
function getTextWidth(textElement) {
var ruler = $("#guide");
ruler.empty();
ruler.html(textElement);
return ruler.width();
}
function doTrim(textContent, length) {
if (settings.cut_by == 'char') {
return trimByCharacter(textContent, length);
}
else if (settings.cut_by == 'word') {
return trimByWords(textContent, length);
}
else {
return '';
}
}
function trimByCharacter(textContent, length) {
var tmp = textContent;
var trimmed = '';
var splitContent = new Array();
var newSplit = new Array();
if (getTextWidth(tmp) > length) {
splitContent = tmp.trim().split('');
newSplit = tmp.trim().split('');
for (index = 0; index < splitContent.length; ++index) {
trimmed = newSplit.join('');
if (length > getTextWidth(trimmed + settings.ellipsis)) {
break;
}
newSplit = trimmed.split('');
newSplit.pop();
}
trimmed = trimmed + settings.ellipsis;
}
else {
trimmed = textContent;
}
return trimmed;
}
function trimByWords(textContent, length) {
var tmp = textContent;
var trimmed = '';
var splitContent = new Array();
var newSplit = new Array();
var index;
if (getTextWidth(tmp) > length) {
splitContent = tmp.trim().split(' ');
newSplit = tmp.trim().split(' ');
for (index = 0; index < splitContent.length; ++index) {
trimmed = newSplit.join(' ');
if (length > getTextWidth(trimmed + settings.ellipsis)) {
break;
}
newSplit = trimmed.split(' ');
newSplit.pop();
}
trimmed = trimmed + settings.ellipsis;
}
else {
trimmed = textContent;
}
return trimmed;
}
}
})(jQuery);