jquery-benignware-rails 0.0.3 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitmodules +9 -3
- data/lib/jquery-benignware-rails/version.rb +1 -1
- data/vendor/assets/javascripts/benignware/bootstrap.dropdown-control.js +210 -0
- data/vendor/assets/javascripts/benignware/jquery.nativepicker.js +266 -0
- data/vendor/assets/javascripts/benignware/jquery.touchclick.js +175 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTU4ZTY3N2UyMWU2MzBiNzZlODBlNGYwZjUzYzdhYmViMjhiODcxZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjhjMDVhNjkyNmVmNzQ2ZGQ1OTZmNmY2Yzg4MzBlMmZjZGVmYmRhZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGMwYjlhMGI2NGI3MWM4Y2IwZWU5NWYxZjFhNzJjMGVmNDMzOGZkZTU3NzZh
|
10
|
+
OWQwYWE0Nzc5NmFmOWM1NDk3NzNiMjRmNDE5YmUzNWY2MjYwMmFlMGE2ZDJm
|
11
|
+
Yjg3ZmU5NWNjODM2NmVlMDE1YmFlM2ZmM2JmMTVhMmMyOTc1MjA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YmE0ZGIzZDY2ODIyMTRmMjg1N2I1YjAzM2IyYjI0Y2QwNjA3OWU4NzlkY2Ux
|
14
|
+
MGJiYzY3ZjU2YTIxZTczNmFkZDVkMzgyNGI3NzMwN2FjMDNjMzg1MGY4OWVi
|
15
|
+
MjBhZDFlMGU2YjAxYTUyZWE2YTQ0ZjZkZDUzZTNiY2QxN2M1Mzk=
|
data/.gitmodules
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
[submodule "submodules/jquery-checkview"]
|
2
2
|
path = submodules/jquery-checkview
|
3
3
|
url = https://github.com/benignware/jquery-checkview
|
4
|
-
[submodule "submodules/jquery-back-to-top"]
|
5
|
-
path = submodules/jquery-back-to-top
|
6
|
-
url = https://github.com/benignware/jquery-back-to-top
|
7
4
|
[submodule "submodules/jquery-responsive-text"]
|
8
5
|
path = submodules/jquery-responsive-text
|
9
6
|
url = https://github.com/benignware/jquery-responsive-text
|
7
|
+
[submodule "submodules/jquery-nativepicker"]
|
8
|
+
path = submodules/jquery-nativepicker
|
9
|
+
url = https://github.com/benignware/jquery-nativepicker.git
|
10
|
+
[submodule "submodules/jquery-touchclick"]
|
11
|
+
path = submodules/jquery-touchclick
|
12
|
+
url = https://github.com/benignware/jquery-touchclick.git
|
13
|
+
[submodule "submodules/bootstrap-dropdown-control"]
|
14
|
+
path = submodules/bootstrap-dropdown-control
|
15
|
+
url = https://github.com/benignware/bootstrap-dropdown-control.git
|
@@ -0,0 +1,210 @@
|
|
1
|
+
|
2
|
+
// Ensure private scope + aliases
|
3
|
+
+function ( $, window) {
|
4
|
+
|
5
|
+
var pluginName = "dropdownControl";
|
6
|
+
|
7
|
+
var _super = $.fn.dropdown;
|
8
|
+
|
9
|
+
// TODO: defaults have no effect
|
10
|
+
$.extend(_super.Constructor.DEFAULTS, {
|
11
|
+
showOnFocus: false,
|
12
|
+
focusInput: false
|
13
|
+
});
|
14
|
+
|
15
|
+
var backdrop = '.dropdown-backdrop';
|
16
|
+
var toggle = '[data-toggle=actions]';
|
17
|
+
|
18
|
+
var inputSelector = "input[type!='hidden']";
|
19
|
+
|
20
|
+
// bootstrap original helper methods
|
21
|
+
function getParent($this) {
|
22
|
+
var selector = $this.attr('data-target');
|
23
|
+
if (!selector) {
|
24
|
+
selector = $this.attr('href');
|
25
|
+
selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, ''); //strip for ie7
|
26
|
+
}
|
27
|
+
var $parent = selector && $(selector);
|
28
|
+
return $parent && $parent.length ? $parent : $this.parent();
|
29
|
+
}
|
30
|
+
|
31
|
+
function getBackdrop($element) {
|
32
|
+
var parent = getParent($element);
|
33
|
+
return parent.find('.dropdown-backdrop');
|
34
|
+
}
|
35
|
+
|
36
|
+
function clearMenu(toggle) {
|
37
|
+
$(backdrop).remove();
|
38
|
+
|
39
|
+
$(toggle).each(function (e) {
|
40
|
+
|
41
|
+
var $parent = getParent($(this));
|
42
|
+
if (!$parent.hasClass('open')) return
|
43
|
+
|
44
|
+
$parent.trigger(e = $.Event('hide.bs.dropdown'));
|
45
|
+
if (e.isDefaultPrevented()) return
|
46
|
+
$parent.removeClass('open').trigger('hidden.bs.dropdown');
|
47
|
+
// blur inputs
|
48
|
+
$parent.find(".dropdown-menu " + inputSelector).blur();
|
49
|
+
});
|
50
|
+
}
|
51
|
+
|
52
|
+
|
53
|
+
// custom helper methods
|
54
|
+
function getMenu($element) {
|
55
|
+
return $element.next('.dropdown-menu');
|
56
|
+
}
|
57
|
+
|
58
|
+
function isOpen($element) {
|
59
|
+
return getParent($element).hasClass('open');
|
60
|
+
}
|
61
|
+
|
62
|
+
function focusInput(menu) {
|
63
|
+
menu.find(inputSelector).first().focus();
|
64
|
+
}
|
65
|
+
|
66
|
+
// create a new constructor
|
67
|
+
function DropdownControl(element, options) {
|
68
|
+
|
69
|
+
// call the original constructor
|
70
|
+
//_super.Constructor.apply( this, arguments );
|
71
|
+
|
72
|
+
// do custom constructor stuff here
|
73
|
+
var $element = $(element);
|
74
|
+
|
75
|
+
var toggle = element;
|
76
|
+
var parent = getParent($element);
|
77
|
+
var menu = getMenu($element);
|
78
|
+
|
79
|
+
// init key events
|
80
|
+
$element.on('keydown.bs.dropdown.data-api', DropdownControl.prototype.keydown);
|
81
|
+
|
82
|
+
// show on focus
|
83
|
+
$element.on('focus', function(event) {
|
84
|
+
if (!clickContext && options.showOnFocus && !isOpen($element)) {
|
85
|
+
event.preventDefault();
|
86
|
+
DropdownControl.prototype.toggle.apply(this, arguments);
|
87
|
+
if (options.focusInput) {
|
88
|
+
focusInput(menu);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
});
|
92
|
+
|
93
|
+
// start click context on toggle element
|
94
|
+
$element.on('mousedown touchstart', function(event) {
|
95
|
+
if (!clickContext) {
|
96
|
+
clickContext = true;
|
97
|
+
}
|
98
|
+
});
|
99
|
+
|
100
|
+
// start click context on parent element
|
101
|
+
parent.on('mousedown touchstart', function(event) {
|
102
|
+
if (!clickContext) {
|
103
|
+
clickContext = true;
|
104
|
+
}
|
105
|
+
});
|
106
|
+
|
107
|
+
$element.on('click', function(event) {
|
108
|
+
if (isOpen($element)) {
|
109
|
+
if (!('ontouchstart' in window)) {
|
110
|
+
clearMenu($element);
|
111
|
+
}
|
112
|
+
} else {
|
113
|
+
DropdownControl.prototype.toggle.apply(this, arguments);
|
114
|
+
if (options.focusInput) {
|
115
|
+
focusInput(menu);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
event.stopImmediatePropagation();
|
120
|
+
event.preventDefault();
|
121
|
+
clickContext = false;
|
122
|
+
});
|
123
|
+
|
124
|
+
// end click context on parent click
|
125
|
+
parent.on('click', function(event) {
|
126
|
+
clickContext = false;
|
127
|
+
event.stopImmediatePropagation();
|
128
|
+
});
|
129
|
+
|
130
|
+
|
131
|
+
var clickContext = false;
|
132
|
+
|
133
|
+
|
134
|
+
// clear menu on blur
|
135
|
+
menu.find(inputSelector).on('blur', function(event) {
|
136
|
+
if (!clickContext) {
|
137
|
+
window.setTimeout(function() {
|
138
|
+
if (isOpen($element)) {
|
139
|
+
|
140
|
+
if (!menu.has(document.activeElement).length) {
|
141
|
+
clearMenu(element);
|
142
|
+
}
|
143
|
+
}
|
144
|
+
|
145
|
+
}, 0);
|
146
|
+
}
|
147
|
+
});
|
148
|
+
|
149
|
+
|
150
|
+
// close on click outside
|
151
|
+
$(document)
|
152
|
+
.on('mousedown touchstart', function(event) {
|
153
|
+
var parent = getParent($element);
|
154
|
+
if (isOpen($element) &&
|
155
|
+
(!parent.is(event.target) && !parent.has(event.target).length)) {
|
156
|
+
clearMenu($element);
|
157
|
+
}
|
158
|
+
})
|
159
|
+
.on('click.bs.dropdown.data-api', function(event) {
|
160
|
+
});
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
};
|
165
|
+
|
166
|
+
|
167
|
+
// extend prototypes and add a super function
|
168
|
+
DropdownControl.prototype = $.extend({}, _super.Constructor.prototype, {
|
169
|
+
Constructor: DropdownControl,
|
170
|
+
toggle: function(e) {
|
171
|
+
if (!isOpen($(this))) {
|
172
|
+
_super.Constructor.prototype.toggle.apply(this, e);
|
173
|
+
// remove backdrop
|
174
|
+
var backdrop = getBackdrop($(this));
|
175
|
+
backdrop.remove();
|
176
|
+
} else {
|
177
|
+
// do nothing
|
178
|
+
}
|
179
|
+
},
|
180
|
+
keyDown: function(e) {
|
181
|
+
_super.Constructor.prototype.keyDown.apply(this, e);
|
182
|
+
}
|
183
|
+
});
|
184
|
+
|
185
|
+
|
186
|
+
// plugin initialization
|
187
|
+
var pluginClass = DropdownControl;
|
188
|
+
$.fn[pluginName] = $.extend(function(option) {
|
189
|
+
|
190
|
+
var args = $.makeArray(arguments),
|
191
|
+
option = args.shift();
|
192
|
+
|
193
|
+
return this.each(function() {
|
194
|
+
|
195
|
+
var $this = $(this);
|
196
|
+
var data = $this.data(pluginName),
|
197
|
+
options = $.extend({}, _super.defaults, $this.data(), typeof option == 'object' && option);
|
198
|
+
|
199
|
+
if ( !data ) {
|
200
|
+
$this.data(pluginName, (data = new pluginClass(this, options)));
|
201
|
+
}
|
202
|
+
if (typeof option == 'string') {
|
203
|
+
data[option].apply( data, args );
|
204
|
+
}
|
205
|
+
|
206
|
+
});
|
207
|
+
|
208
|
+
}, $.fn[pluginName]);
|
209
|
+
|
210
|
+
}( jQuery, window );
|
@@ -0,0 +1,266 @@
|
|
1
|
+
|
2
|
+
+function ( $, window) {
|
3
|
+
|
4
|
+
window.console = window.console || {
|
5
|
+
log: function() {},
|
6
|
+
info: function() {}
|
7
|
+
};
|
8
|
+
|
9
|
+
var pluginName = 'nativepicker';
|
10
|
+
|
11
|
+
var defaults = {
|
12
|
+
// options
|
13
|
+
type: 'auto',
|
14
|
+
toggleEvent: 'touchstart mousedown',
|
15
|
+
// callback
|
16
|
+
show: null,
|
17
|
+
change: null
|
18
|
+
};
|
19
|
+
|
20
|
+
// http://stackoverflow.com/questions/6525538/convert-utc-date-time-to-local-date-time-using-javascript
|
21
|
+
function convertUTCDateToLocalDate(date) {
|
22
|
+
var newDate = new Date(date.getTime());
|
23
|
+
var offset = date.getTimezoneOffset() / 60;
|
24
|
+
var hours = date.getHours();
|
25
|
+
newDate.setHours(hours - offset);
|
26
|
+
return newDate;
|
27
|
+
}
|
28
|
+
|
29
|
+
// http://stackoverflow.com/questions/10830357/javascript-toisostring-ignores-timezone-offset
|
30
|
+
function getLocalIsoString(date) {
|
31
|
+
date = convertUTCDateToLocalDate(date);
|
32
|
+
var padDigits = function padDigits(number, digits) {
|
33
|
+
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
|
34
|
+
};
|
35
|
+
|
36
|
+
var tzOffset = date.getTimezoneOffset() + 30 * -1,
|
37
|
+
tzHour = padDigits( Math.floor(tzOffset / 60), 2 ),
|
38
|
+
tzMin = padDigits( (tzOffset % 60), 2 ),
|
39
|
+
tz = "";
|
40
|
+
|
41
|
+
tz = tzHour > 0 ? "+" : "-";
|
42
|
+
tz = tz + tzHour + ":" + tzMin;
|
43
|
+
|
44
|
+
return date.getFullYear()
|
45
|
+
+ "-" + padDigits((date.getMonth()+1),2)
|
46
|
+
+ "-" + padDigits(date.getDate(),2)
|
47
|
+
+ "T"
|
48
|
+
+ padDigits(date.getHours(),2)
|
49
|
+
+ ":" + padDigits(date.getMinutes(),2)
|
50
|
+
+ ":" + padDigits(date.getSeconds(),2)
|
51
|
+
+ "." + padDigits(date.getMilliseconds(),2)
|
52
|
+
+ tz;
|
53
|
+
}
|
54
|
+
|
55
|
+
// TODO: cache results
|
56
|
+
function isTypeSupported(type) {
|
57
|
+
|
58
|
+
switch (type) {
|
59
|
+
|
60
|
+
// html4 input types
|
61
|
+
case 'select':
|
62
|
+
case 'text':
|
63
|
+
case 'textarea':
|
64
|
+
result = true;
|
65
|
+
break;
|
66
|
+
default:
|
67
|
+
// detect html5 input types
|
68
|
+
var i = document.createElement('input');
|
69
|
+
i.setAttribute("type", type);
|
70
|
+
// general support
|
71
|
+
if (i.getAttribute('type') == type) {
|
72
|
+
// exact support
|
73
|
+
switch (type) {
|
74
|
+
case 'date':
|
75
|
+
var testValue = "not a timestring";
|
76
|
+
i.setAttribute('value', testValue);
|
77
|
+
// html5 date control accepts iso time strings only
|
78
|
+
if (!i.value) {
|
79
|
+
result = true;
|
80
|
+
break;
|
81
|
+
}
|
82
|
+
default:
|
83
|
+
result = false;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
delete i;
|
87
|
+
}
|
88
|
+
|
89
|
+
|
90
|
+
return result;
|
91
|
+
}
|
92
|
+
|
93
|
+
var pluginClass = function NativePicker(element, options) {
|
94
|
+
|
95
|
+
var nativePicker = this;
|
96
|
+
var inputSelector = options.inputSelector;
|
97
|
+
var $element = $(element);
|
98
|
+
var picker, toggle;
|
99
|
+
|
100
|
+
// TODO: define exact relations and provide as option
|
101
|
+
var inputSelector = "select, input[type='text]', input[type='date'], textarea";
|
102
|
+
|
103
|
+
|
104
|
+
function getType() {
|
105
|
+
if (options.type && options.type != 'auto') {
|
106
|
+
return options.type;
|
107
|
+
}
|
108
|
+
var picker = getPicker();
|
109
|
+
|
110
|
+
if (picker) {
|
111
|
+
var tagName = picker.prop('tagName').toLowerCase();
|
112
|
+
switch (tagName) {
|
113
|
+
case 'select':
|
114
|
+
case 'textarea':
|
115
|
+
return tagName;
|
116
|
+
case 'input':
|
117
|
+
return picker.prop('type');
|
118
|
+
}
|
119
|
+
}
|
120
|
+
return null;
|
121
|
+
}
|
122
|
+
|
123
|
+
function getPicker() {
|
124
|
+
|
125
|
+
if (!picker) {
|
126
|
+
picker = $element.is(options.inputSelector) ? $element : (function() {
|
127
|
+
// create the picker
|
128
|
+
var picker = null;
|
129
|
+
var type = getType();
|
130
|
+
switch (type) {
|
131
|
+
case 'select':
|
132
|
+
picker = document.createElement(type);
|
133
|
+
break;
|
134
|
+
default:
|
135
|
+
picker = document.createElement('input');
|
136
|
+
picker.setAttribute('type', type);
|
137
|
+
picker.setAttribute('min', options.min);
|
138
|
+
}
|
139
|
+
$(picker).on('change', function(event) {
|
140
|
+
pickerChanged();
|
141
|
+
});
|
142
|
+
|
143
|
+
element.parentNode.insertBefore(picker, element);
|
144
|
+
return $(picker);
|
145
|
+
})();
|
146
|
+
}
|
147
|
+
return picker;
|
148
|
+
}
|
149
|
+
|
150
|
+
function getToggle() {
|
151
|
+
toggle = options.toggle ?
|
152
|
+
typeof (options.toggle) == "function" ? options.toggle.call(element) : $(options.toggle)
|
153
|
+
: $element;
|
154
|
+
return toggle;
|
155
|
+
}
|
156
|
+
|
157
|
+
var toggle = getToggle();
|
158
|
+
|
159
|
+
function layout() {
|
160
|
+
var picker = getPicker();
|
161
|
+
var toggle = getToggle();
|
162
|
+
if (picker && toggle) {
|
163
|
+
picker.css({
|
164
|
+
opacity: 0,
|
165
|
+
position: 'absolute',
|
166
|
+
zIndex: -1,
|
167
|
+
width: toggle.outerWidth(false),
|
168
|
+
height: toggle.outerHeight(false),
|
169
|
+
display: ''
|
170
|
+
});
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
function toggleHandler(event) {
|
175
|
+
event.stopImmediatePropagation();
|
176
|
+
event.preventDefault();
|
177
|
+
showPicker();
|
178
|
+
}
|
179
|
+
|
180
|
+
function showPicker() {
|
181
|
+
input = getPicker();
|
182
|
+
if (options.show) {
|
183
|
+
options.show.call(element);
|
184
|
+
}
|
185
|
+
input.focus();
|
186
|
+
}
|
187
|
+
|
188
|
+
this.getPickerValue = function() {
|
189
|
+
value = getPicker().prop('value');
|
190
|
+
if (!value) {
|
191
|
+
// default values
|
192
|
+
if (options.min) {
|
193
|
+
value = options.min;
|
194
|
+
} else {
|
195
|
+
value = "";
|
196
|
+
}
|
197
|
+
}
|
198
|
+
return value;
|
199
|
+
};
|
200
|
+
|
201
|
+
this.setPickerValue = function(value) {
|
202
|
+
if (value instanceof Date) {
|
203
|
+
value = getLocalIsoString(value).substring(0, 10);
|
204
|
+
}
|
205
|
+
getPicker().prop('value', value);
|
206
|
+
};
|
207
|
+
|
208
|
+
function pickerChanged() {
|
209
|
+
var value = nativePicker.getPickerValue();
|
210
|
+
|
211
|
+
// update toggle content
|
212
|
+
switch (toggle.prop('tagName').toLowerCase()) {
|
213
|
+
case 'input':
|
214
|
+
case 'select':
|
215
|
+
toggle.prop('value', value);
|
216
|
+
break;
|
217
|
+
default:
|
218
|
+
toggle.html(value);
|
219
|
+
}
|
220
|
+
if (options.change) {
|
221
|
+
value = options.change.call(element, value);
|
222
|
+
}
|
223
|
+
}
|
224
|
+
|
225
|
+
// TODO: as option
|
226
|
+
function isSupported() {
|
227
|
+
return ( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) );
|
228
|
+
}
|
229
|
+
|
230
|
+
function init() {
|
231
|
+
|
232
|
+
if (!isSupported()) {
|
233
|
+
// native picker not supported or required in general
|
234
|
+
return;
|
235
|
+
}
|
236
|
+
|
237
|
+
var type = getType();
|
238
|
+
if (type && !isTypeSupported(type)) {
|
239
|
+
// input type is not natively supported
|
240
|
+
return;
|
241
|
+
}
|
242
|
+
|
243
|
+
// bind
|
244
|
+
getToggle().bind(options.toggleEvent, toggleHandler);
|
245
|
+
|
246
|
+
// initial layout
|
247
|
+
layout.call(this);
|
248
|
+
}
|
249
|
+
|
250
|
+
init.call(this);
|
251
|
+
|
252
|
+
};
|
253
|
+
|
254
|
+
|
255
|
+
// bootstrap plugin
|
256
|
+
$.fn[pluginName] = function(options) {
|
257
|
+
options = $.extend({}, defaults, options);
|
258
|
+
return this.each(function() {
|
259
|
+
if (!$(this).data(pluginName)) {
|
260
|
+
$(this).data(pluginName, new pluginClass(this, options));
|
261
|
+
}
|
262
|
+
return $(this);
|
263
|
+
});
|
264
|
+
};
|
265
|
+
|
266
|
+
}( jQuery, window );
|
@@ -0,0 +1,175 @@
|
|
1
|
+
|
2
|
+
+function ( $, window) {
|
3
|
+
|
4
|
+
window.console = window.console || {
|
5
|
+
log: function() {},
|
6
|
+
info: function() {}
|
7
|
+
};
|
8
|
+
|
9
|
+
var pluginName = 'touchclick';
|
10
|
+
|
11
|
+
var defaults = {
|
12
|
+
draggingTimeout: 100,
|
13
|
+
scrollingTimeout: 750,
|
14
|
+
preventClickTimeout: 500
|
15
|
+
};
|
16
|
+
|
17
|
+
function getOverflowContainer(elem) {
|
18
|
+
while (elem && elem.nodeType == 1) {
|
19
|
+
if (elem.nodeName.toLowerCase() == 'body' || elem.nodeName.toLowerCase() == 'html') {
|
20
|
+
break;
|
21
|
+
}
|
22
|
+
var overflow = $(elem).css('overflow');
|
23
|
+
if (overflow == 'auto' || overflow == 'scroll') {
|
24
|
+
return elem;
|
25
|
+
}
|
26
|
+
elem = elem.parentNode;
|
27
|
+
}
|
28
|
+
return window;
|
29
|
+
}
|
30
|
+
|
31
|
+
// helper methods
|
32
|
+
|
33
|
+
var pluginClass = function TouchClick(element, options) {
|
34
|
+
|
35
|
+
var touchClick = this;
|
36
|
+
|
37
|
+
var $element = $(element);
|
38
|
+
var $window = $(window);
|
39
|
+
|
40
|
+
var dragging = false;
|
41
|
+
var draggingTimeoutId = null;
|
42
|
+
var preventClick = false;
|
43
|
+
var touchStartElement = null;
|
44
|
+
|
45
|
+
var overflowContainer = null;
|
46
|
+
var scrolling = false;
|
47
|
+
var touchStartScrollPos = null;
|
48
|
+
var scrollingTimeoutId = null;
|
49
|
+
|
50
|
+
$element.bind('touchstart', function(event) {
|
51
|
+
|
52
|
+
touchStartScrollPos = null;
|
53
|
+
overflowContainer = getOverflowContainer(event.target);
|
54
|
+
if (overflowContainer) {
|
55
|
+
var scrollPos = {
|
56
|
+
x: overflowContainer.scrollLeft,
|
57
|
+
y: overflowContainer.scrollTop
|
58
|
+
};
|
59
|
+
touchStartScrollPos = scrollPos;
|
60
|
+
}
|
61
|
+
window.clearTimeout(draggingTimeoutId);
|
62
|
+
window.clearTimeout(scrollingTimeoutId);
|
63
|
+
dragging = false;
|
64
|
+
scrolling = false;
|
65
|
+
touchStartElement = event.target;
|
66
|
+
|
67
|
+
$(event.target).unbind('scroll', scrollHandler);
|
68
|
+
if (overflowContainer && (overflowContainer.scrollHeight > 0 || overflowContainer.scrollWidth > 0)) {
|
69
|
+
$(overflowContainer).bind('scroll', scrollHandler);
|
70
|
+
}
|
71
|
+
|
72
|
+
$(event.target).unbind('click', preventClickHandler);
|
73
|
+
|
74
|
+
});
|
75
|
+
|
76
|
+
$element.bind('touchmove', function(event) {
|
77
|
+
dragging = true;
|
78
|
+
if (overflowContainer) {
|
79
|
+
var scrollPos = {
|
80
|
+
x: overflowContainer.scrollLeft,
|
81
|
+
y: overflowContainer.scrollTop
|
82
|
+
};
|
83
|
+
if (touchStartScrollPos) {
|
84
|
+
if (touchStartScrollPos.x != scrollPos.x || touchStartScrollPos.y != scrollPos.y) {
|
85
|
+
scrolling = true;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
});
|
90
|
+
|
91
|
+
function preventClickHandler(event, custom) {
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
if (!custom) {
|
96
|
+
// prevent original event
|
97
|
+
//event.preventDefault();
|
98
|
+
// prevent propagation
|
99
|
+
event.stopImmediatePropagation();
|
100
|
+
$(this).unbind('click', preventClickHandler);
|
101
|
+
|
102
|
+
} else {
|
103
|
+
// custom click actions
|
104
|
+
|
105
|
+
//$(event.target).focus();
|
106
|
+
|
107
|
+
// open links
|
108
|
+
window.setTimeout(function() {
|
109
|
+
if (custom && !event.isDefaultPrevented()) {
|
110
|
+
var a = $(event.target).is('a[href]') ? event.target : $(event.target).parents('a[href]')[0];
|
111
|
+
if (a && a.href) {
|
112
|
+
window.location.href = a.href;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}, 1);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
$element.bind('touchend', function(event) {
|
120
|
+
|
121
|
+
$(event.target).unbind('click', preventClickHandler);
|
122
|
+
|
123
|
+
if (!scrolling && !dragging && event.target == touchStartElement) {
|
124
|
+
|
125
|
+
$(event.target).bind('click', preventClickHandler);
|
126
|
+
|
127
|
+
var events = jQuery._data(event.target).events;
|
128
|
+
if (events && events['click'] && events['click'].length > 1) {
|
129
|
+
var onClickHandlers = events['click'];
|
130
|
+
onClickHandlers.splice(0, 0, onClickHandlers.pop());
|
131
|
+
}
|
132
|
+
|
133
|
+
$(event.target).trigger({
|
134
|
+
type: 'click',
|
135
|
+
bubbles: true
|
136
|
+
}, [true]);
|
137
|
+
|
138
|
+
$(event.target).focus();
|
139
|
+
|
140
|
+
event.preventDefault();
|
141
|
+
event.stopImmediatePropagation();
|
142
|
+
}
|
143
|
+
|
144
|
+
window.clearTimeout(draggingTimeoutId);
|
145
|
+
draggingTimeoutId = window.setTimeout(function() {
|
146
|
+
dragging = false;
|
147
|
+
}, options.draggingTimeout);
|
148
|
+
|
149
|
+
|
150
|
+
});
|
151
|
+
|
152
|
+
function scrollHandler(event) {
|
153
|
+
scrolling = true;
|
154
|
+
window.clearTimeout(draggingTimeoutId);
|
155
|
+
draggingTimeoutId = window.setTimeout(function() {
|
156
|
+
scrolling = false;
|
157
|
+
$(this).unbind('scroll', scrollHandler);
|
158
|
+
}, options.scrollingTimeout);
|
159
|
+
}
|
160
|
+
|
161
|
+
};
|
162
|
+
|
163
|
+
|
164
|
+
// bootstrap plugin
|
165
|
+
$.fn[pluginName] = function(options) {
|
166
|
+
options = $.extend({}, defaults, options);
|
167
|
+
return this.each(function() {
|
168
|
+
if (!$(this).data(pluginName)) {
|
169
|
+
$(this).data(pluginName, new pluginClass(this, options));
|
170
|
+
}
|
171
|
+
return $(this);
|
172
|
+
});
|
173
|
+
};
|
174
|
+
|
175
|
+
}( jQuery, window );
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery-benignware-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- rexblack
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -46,9 +46,12 @@ files:
|
|
46
46
|
- jquery-benignware-rails.gemspec
|
47
47
|
- lib/jquery-benignware-rails.rb
|
48
48
|
- lib/jquery-benignware-rails/version.rb
|
49
|
+
- vendor/assets/javascripts/benignware/bootstrap.dropdown-control.js
|
49
50
|
- vendor/assets/javascripts/benignware/jquery.backToTop.js
|
50
51
|
- vendor/assets/javascripts/benignware/jquery.checkView.js
|
52
|
+
- vendor/assets/javascripts/benignware/jquery.nativepicker.js
|
51
53
|
- vendor/assets/javascripts/benignware/jquery.responsiveText.js
|
54
|
+
- vendor/assets/javascripts/benignware/jquery.touchclick.js
|
52
55
|
- vendor/assets/stylesheets/benignware/jquery-checkview.bootstrap.css
|
53
56
|
homepage: ''
|
54
57
|
licenses: []
|
@@ -69,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
72
|
version: '0'
|
70
73
|
requirements: []
|
71
74
|
rubyforge_project:
|
72
|
-
rubygems_version: 2.1.
|
75
|
+
rubygems_version: 2.1.11
|
73
76
|
signing_key:
|
74
77
|
specification_version: 4
|
75
78
|
summary: gem summary
|