66
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
1 |
/** |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
2 |
* Interface Elements for jQuery |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
3 |
* Expander |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
4 |
* |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
5 |
* http://interface.eyecon.ro |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
6 |
* |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
7 |
* Copyright (c) 2006 Stefan Petre |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
8 |
* Dual licensed under the MIT (MIT-LICENSE.txt) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
9 |
* and GPL (GPL-LICENSE.txt) licenses. |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
10 |
* |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
11 |
* |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
12 |
*/ |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
13 |
|
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
14 |
/** |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
15 |
* Expands text and textarea elements while new characters are typed to the a miximum width |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
16 |
* |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
17 |
* @name Expander |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
18 |
* @description Expands text and textarea elements while new characters are typed to the a miximum width |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
19 |
* @param Mixed limit integer if only expands in width, array if expands in width and height |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
20 |
* @type jQuery |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
21 |
* @cat Plugins/Interface |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
22 |
* @author Stefan Petre |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
23 |
*/ |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
24 |
|
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
25 |
jQuery.iExpander = |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
26 |
{ |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
27 |
helper : null, |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
28 |
expand : function() |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
29 |
{ |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
30 |
|
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
31 |
text = this.value; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
32 |
if (!text) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
33 |
return; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
34 |
style = { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
35 |
fontFamily: jQuery(this).css('fontFamily')||'', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
36 |
fontSize: jQuery(this).css('fontSize')||'', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
37 |
fontWeight: jQuery(this).css('fontWeight')||'', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
38 |
fontStyle: jQuery(this).css('fontStyle')||'', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
39 |
fontStretch: jQuery(this).css('fontStretch')||'', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
40 |
fontVariant: jQuery(this).css('fontVariant')||'', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
41 |
letterSpacing: jQuery(this).css('letterSpacing')||'', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
42 |
wordSpacing: jQuery(this).css('wordSpacing')||'' |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
43 |
}; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
44 |
jQuery.iExpander.helper.css(style); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
45 |
html = jQuery.iExpander.htmlEntities(text); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
46 |
html = html.replace(new RegExp( "\\n", "g" ), "<br />"); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
47 |
jQuery.iExpander.helper.html('pW'); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
48 |
spacer = jQuery.iExpander.helper.get(0).offsetWidth; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
49 |
jQuery.iExpander.helper.html(html); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
50 |
width = jQuery.iExpander.helper.get(0).offsetWidth + spacer; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
51 |
if (this.Expander.limit && width > this.Expander.limit[0]) { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
52 |
width = this.Expander.limit[0]; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
53 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
54 |
this.style.width = width + 'px'; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
55 |
if (this.tagName == 'TEXTAREA') { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
56 |
height = jQuery.iExpander.helper.get(0).offsetHeight + spacer; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
57 |
if (this.Expander.limit && height > this.Expander.limit[1]) { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
58 |
height = this.Expander.limit[1]; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
59 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
60 |
this.style.height = height + 'px'; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
61 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
62 |
}, |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
63 |
htmlEntities : function(text) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
64 |
{ |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
65 |
entities = { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
66 |
'&':'&', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
67 |
'<':'<', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
68 |
'>':'>', |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
69 |
'"':'"' |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
70 |
}; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
71 |
for(i in entities) { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
72 |
text = text.replace(new RegExp(i,'g'),entities[i]); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
73 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
74 |
return text; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
75 |
}, |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
76 |
build : function(limit) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
77 |
{ |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
78 |
if (jQuery.iExpander.helper == null) { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
79 |
jQuery('body', document).append('<div id="expanderHelper" style="position: absolute; top: 0; left: 0; visibility: hidden;"></div>'); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
80 |
jQuery.iExpander.helper = jQuery('#expanderHelper'); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
81 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
82 |
return this.each( |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
83 |
function() |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
84 |
{ |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
85 |
if (/TEXTAREA|INPUT/.test(this.tagName)) { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
86 |
if (this.tagName == 'INPUT') { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
87 |
elType = this.getAttribute('type'); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
88 |
if (!/text|password/.test(elType)) { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
89 |
return; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
90 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
91 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
92 |
if (limit && (limit.constructor == Number || (limit.constructor == Array && limit.length == 2))) { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
93 |
if (limit.constructor == Number) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
94 |
limit = [limit, limit]; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
95 |
else { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
96 |
limit[0] = parseInt(limit[0])||400; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
97 |
limit[1] = parseInt(limit[1])||400; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
98 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
99 |
this.Expander = { |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
100 |
limit : limit |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
101 |
}; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
102 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
103 |
jQuery(this) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
104 |
.blur(jQuery.iExpander.expand) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
105 |
.keyup(jQuery.iExpander.expand) |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
106 |
.keypress(jQuery.iExpander.expand); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
107 |
jQuery.iExpander.expand.apply(this); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
108 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
109 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
110 |
); |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
111 |
} |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
112 |
}; |
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
113 |
|
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
114 |
jQuery.fn.Autoexpand = jQuery.iExpander.build; |