forked from jquery-archive/jquery-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjquery.mobile.forms.textinput.js
More file actions
98 lines (86 loc) · 2.77 KB
/
jquery.mobile.forms.textinput.js
File metadata and controls
98 lines (86 loc) · 2.77 KB
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
/*
* jQuery Mobile Framework : "textinput" plugin for text inputs, textareas
* Copyright (c) jQuery Project
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function($, undefined ) {
$.widget( "mobile.textinput", $.mobile.widget, {
options: {
theme: null
},
_create: function(){
var input = this.element,
o = this.options,
theme = o.theme,
themeclass;
if ( !theme ) {
var themedParent = this.element.closest("[class*='ui-bar-'],[class*='ui-body-']");
theme = themedParent.length ?
/ui-(bar|body)-([a-z])/.exec( themedParent.attr("class") )[2] :
"c";
}
themeclass = " ui-body-" + theme;
$('label[for="'+input.attr('id')+'"]').addClass('ui-input-text');
input.addClass('ui-input-text ui-body-'+ o.theme);
var focusedEl = input;
//"search" input widget
if( input.is( "[type='search'],:jqmData(type='search')" ) ){
focusedEl = input.wrap('<div class="ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield'+ themeclass +'"></div>').parent();
var clearbtn = $('<a href="#" class="ui-input-clear" title="clear text">clear text</a>')
.tap(function( e ){
input.val('').focus();
input.trigger('change');
clearbtn.addClass('ui-input-clear-hidden');
e.preventDefault();
})
.appendTo(focusedEl)
.buttonMarkup({icon: 'delete', iconpos: 'notext', corners:true, shadow:true});
function toggleClear(){
if(input.val() == ''){
clearbtn.addClass('ui-input-clear-hidden');
}
else{
clearbtn.removeClass('ui-input-clear-hidden');
}
}
toggleClear();
input.keyup(toggleClear);
input.focus(toggleClear);
}
else{
input.addClass('ui-corner-all ui-shadow-inset' + themeclass);
}
input
.focus(function(){
focusedEl.addClass('ui-focus');
})
.blur(function(){
focusedEl.removeClass('ui-focus');
});
//autogrow
if ( input.is('textarea') ) {
var extraLineHeight = 15,
keyupTimeoutBuffer = 100,
keyup = function() {
var scrollHeight = input[0].scrollHeight,
clientHeight = input[0].clientHeight;
if ( clientHeight < scrollHeight ) {
input.css({ height: (scrollHeight + extraLineHeight) });
}
},
keyupTimeout;
input.keyup(function() {
clearTimeout( keyupTimeout );
keyupTimeout = setTimeout( keyup, keyupTimeoutBuffer );
});
}
},
disable: function(){
( this.element.attr("disabled",true).is( "[type='search'],:jqmData(type='search')" ) ? this.element.parent() : this.element ).addClass("ui-disabled");
},
enable: function(){
( this.element.attr("disabled", false).is( "[type='search'],:jqmData(type='search')" ) ? this.element.parent() : this.element ).removeClass("ui-disabled");
}
});
})( jQuery );