mui_app_rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +34 -0
  3. data/app/assets/fonts/mui.ttf +0 -0
  4. data/app/assets/javascripts/mui_app_rails/actions.js +26 -0
  5. data/app/assets/javascripts/mui_app_rails/ajax.plugin.js +3 -0
  6. data/app/assets/javascripts/mui_app_rails/input.plugin.js +232 -0
  7. data/app/assets/javascripts/mui_app_rails/modals.js +37 -0
  8. data/app/assets/javascripts/mui_app_rails/mui.active.js +30 -0
  9. data/app/assets/javascripts/mui_app_rails/mui.ajax.5+.js +27 -0
  10. data/app/assets/javascripts/mui_app_rails/mui.ajax.js +277 -0
  11. data/app/assets/javascripts/mui_app_rails/mui.animation.js +39 -0
  12. data/app/assets/javascripts/mui_app_rails/mui.animationframe.js +72 -0
  13. data/app/assets/javascripts/mui_app_rails/mui.back.5+.js +108 -0
  14. data/app/assets/javascripts/mui_app_rails/mui.back.js +56 -0
  15. data/app/assets/javascripts/mui_app_rails/mui.class.js +40 -0
  16. data/app/assets/javascripts/mui_app_rails/mui.class.scroll.js +894 -0
  17. data/app/assets/javascripts/mui_app_rails/mui.class.scroll.pullrefresh.js +150 -0
  18. data/app/assets/javascripts/mui_app_rails/mui.class.scroll.slider.js +361 -0
  19. data/app/assets/javascripts/mui_app_rails/mui.class.scroll.slider.old.js +332 -0
  20. data/app/assets/javascripts/mui_app_rails/mui.detect.5+.js +18 -0
  21. data/app/assets/javascripts/mui_app_rails/mui.detect.js +50 -0
  22. data/app/assets/javascripts/mui_app_rails/mui.dialog.alert.js +27 -0
  23. data/app/assets/javascripts/mui_app_rails/mui.dialog.confirm.js +27 -0
  24. data/app/assets/javascripts/mui_app_rails/mui.dialog.prompt.js +33 -0
  25. data/app/assets/javascripts/mui_app_rails/mui.dialog.toast.js +20 -0
  26. data/app/assets/javascripts/mui_app_rails/mui.event.js +160 -0
  27. data/app/assets/javascripts/mui_app_rails/mui.fixed.animation.js +22 -0
  28. data/app/assets/javascripts/mui_app_rails/mui.fixed.classlist.js +50 -0
  29. data/app/assets/javascripts/mui_app_rails/mui.fixed.fastclick.js +64 -0
  30. data/app/assets/javascripts/mui_app_rails/mui.fixed.js +40 -0
  31. data/app/assets/javascripts/mui_app_rails/mui.fixed.keyboard.js +56 -0
  32. data/app/assets/javascripts/mui_app_rails/mui.gestures.drag.js +48 -0
  33. data/app/assets/javascripts/mui_app_rails/mui.gestures.flick.js +30 -0
  34. data/app/assets/javascripts/mui_app_rails/mui.gestures.hold.js +41 -0
  35. data/app/assets/javascripts/mui_app_rails/mui.gestures.js +207 -0
  36. data/app/assets/javascripts/mui_app_rails/mui.gestures.longtap.js +43 -0
  37. data/app/assets/javascripts/mui_app_rails/mui.gestures.swipe.js +29 -0
  38. data/app/assets/javascripts/mui_app_rails/mui.gestures.tap.js +40 -0
  39. data/app/assets/javascripts/mui_app_rails/mui.init.5+.js +441 -0
  40. data/app/assets/javascripts/mui_app_rails/mui.init.js +100 -0
  41. data/app/assets/javascripts/mui_app_rails/mui.init.pullrefresh.js +57 -0
  42. data/app/assets/javascripts/mui_app_rails/mui.js +396 -0
  43. data/app/assets/javascripts/mui_app_rails/mui.jsonp.js +108 -0
  44. data/app/assets/javascripts/mui_app_rails/mui.layout.js +22 -0
  45. data/app/assets/javascripts/mui_app_rails/mui.namespace.js +35 -0
  46. data/app/assets/javascripts/mui_app_rails/mui.number.js +93 -0
  47. data/app/assets/javascripts/mui_app_rails/mui.offcanvas.js +497 -0
  48. data/app/assets/javascripts/mui_app_rails/mui.pullrefresh.js +157 -0
  49. data/app/assets/javascripts/mui_app_rails/mui.target.js +58 -0
  50. data/app/assets/javascripts/mui_app_rails/mui.view.js +172 -0
  51. data/app/assets/javascripts/mui_app_rails/popovers.js +278 -0
  52. data/app/assets/javascripts/mui_app_rails/pullrefresh.5+.js +238 -0
  53. data/app/assets/javascripts/mui_app_rails/push.js +479 -0
  54. data/app/assets/javascripts/mui_app_rails/segmented-controllers.js +99 -0
  55. data/app/assets/javascripts/mui_app_rails/sliders.js +362 -0
  56. data/app/assets/javascripts/mui_app_rails/switches.js +165 -0
  57. data/app/assets/javascripts/mui_app_rails/tableviews.js +512 -0
  58. data/app/assets/javascripts/mui_app_rails.js +1 -0
  59. data/app/assets/stylesheets/mui_app_rails/badges.scss +88 -0
  60. data/app/assets/stylesheets/mui_app_rails/bars.scss +312 -0
  61. data/app/assets/stylesheets/mui_app_rails/base.scss +196 -0
  62. data/app/assets/stylesheets/mui_app_rails/buttons.scss +205 -0
  63. data/app/assets/stylesheets/mui_app_rails/cards.scss +62 -0
  64. data/app/assets/stylesheets/mui_app_rails/forms.scss +452 -0
  65. data/app/assets/stylesheets/mui_app_rails/fullscreen.scss +35 -0
  66. data/app/assets/stylesheets/mui_app_rails/grid.scss +75 -0
  67. data/app/assets/stylesheets/mui_app_rails/hack.scss +14 -0
  68. data/app/assets/stylesheets/mui_app_rails/icon.scss +170 -0
  69. data/app/assets/stylesheets/mui_app_rails/iscroll.scss +43 -0
  70. data/app/assets/stylesheets/mui_app_rails/loadings.scss +111 -0
  71. data/app/assets/stylesheets/mui_app_rails/mixins.scss +212 -0
  72. data/app/assets/stylesheets/mui_app_rails/modals.scss +34 -0
  73. data/app/assets/stylesheets/mui_app_rails/mui.scss +46 -0
  74. data/app/assets/stylesheets/mui_app_rails/normalize.scss +425 -0
  75. data/app/assets/stylesheets/mui_app_rails/number.scss +70 -0
  76. data/app/assets/stylesheets/mui_app_rails/off-canvas.scss +84 -0
  77. data/app/assets/stylesheets/mui_app_rails/os.scss +12 -0
  78. data/app/assets/stylesheets/mui_app_rails/pagination.scss +155 -0
  79. data/app/assets/stylesheets/mui_app_rails/popovers.scss +198 -0
  80. data/app/assets/stylesheets/mui_app_rails/pullrefreshs.scss +98 -0
  81. data/app/assets/stylesheets/mui_app_rails/push.scss +63 -0
  82. data/app/assets/stylesheets/mui_app_rails/scroll.scss +95 -0
  83. data/app/assets/stylesheets/mui_app_rails/segmented-controls.scss +150 -0
  84. data/app/assets/stylesheets/mui_app_rails/slider-cell.scss +20 -0
  85. data/app/assets/stylesheets/mui_app_rails/sliders.scss +133 -0
  86. data/app/assets/stylesheets/mui_app_rails/switches.scss +115 -0
  87. data/app/assets/stylesheets/mui_app_rails/table-views.scss +482 -0
  88. data/app/assets/stylesheets/mui_app_rails/toast.scss +16 -0
  89. data/app/assets/stylesheets/mui_app_rails/type.scss +23 -0
  90. data/app/assets/stylesheets/mui_app_rails/variables.scss +64 -0
  91. data/app/assets/stylesheets/mui_app_rails.css +3 -0
  92. data/lib/mui_app_rails/engine.rb +5 -0
  93. data/lib/mui_app_rails/version.rb +3 -0
  94. data/lib/mui_app_rails.rb +5 -0
  95. metadata +179 -0
@@ -0,0 +1,396 @@
1
+ /**
2
+ * MUI核心JS
3
+ * @type _L4.$|Function
4
+ */
5
+ var mui = (function(document, undefined) {
6
+ var readyRE = /complete|loaded|interactive/;
7
+ var idSelectorRE = /^#([\w-]+)$/;
8
+ var classSelectorRE = /^\.([\w-]+)$/;
9
+ var tagSelectorRE = /^[\w-]+$/;
10
+ var translateRE = /translate(?:3d)?\((.+?)\)/;
11
+ var translateMatrixRE = /matrix(3d)?\((.+?)\)/;
12
+
13
+ var $ = function(selector, context) {
14
+ context = context || document;
15
+ if (!selector)
16
+ return wrap();
17
+ if (typeof selector === 'object')
18
+ return wrap([selector], null);
19
+ if (typeof selector === 'function')
20
+ return $.ready(selector);
21
+ if (typeof selector === 'string') {
22
+ try {
23
+ selector = selector.trim();
24
+ if (idSelectorRE.test(selector)) {
25
+ var found = document.getElementById(RegExp.$1);
26
+ return wrap(found ? [found] : []);
27
+ }
28
+ return wrap($.qsa(selector, context), selector);
29
+ } catch (e) {}
30
+ }
31
+ return wrap();
32
+ };
33
+
34
+ var wrap = function(dom, selector) {
35
+ dom = dom || [];
36
+ Object.setPrototypeOf(dom, $.fn);
37
+ dom.selector = selector || '';
38
+ return dom;
39
+ };
40
+
41
+ $.uuid = 0;
42
+
43
+ $.data = {};
44
+ /**
45
+ * extend(simple)
46
+ * @param {type} target
47
+ * @param {type} source
48
+ * @param {type} deep
49
+ * @returns {unresolved}
50
+ */
51
+ $.extend = function() { //from jquery2
52
+ var options, name, src, copy, copyIsArray, clone,
53
+ target = arguments[0] || {},
54
+ i = 1,
55
+ length = arguments.length,
56
+ deep = false;
57
+
58
+ if (typeof target === "boolean") {
59
+ deep = target;
60
+
61
+ target = arguments[i] || {};
62
+ i++;
63
+ }
64
+
65
+ if (typeof target !== "object" && !$.isFunction(target)) {
66
+ target = {};
67
+ }
68
+
69
+ if (i === length) {
70
+ target = this;
71
+ i--;
72
+ }
73
+
74
+ for (; i < length; i++) {
75
+ if ((options = arguments[i]) != null) {
76
+ for (name in options) {
77
+ src = target[name];
78
+ copy = options[name];
79
+
80
+ if (target === copy) {
81
+ continue;
82
+ }
83
+
84
+ if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {
85
+ if (copyIsArray) {
86
+ copyIsArray = false;
87
+ clone = src && $.isArray(src) ? src : [];
88
+
89
+ } else {
90
+ clone = src && $.isPlainObject(src) ? src : {};
91
+ }
92
+
93
+ target[name] = $.extend(deep, clone, copy);
94
+
95
+ } else if (copy !== undefined) {
96
+ target[name] = copy;
97
+ }
98
+ }
99
+ }
100
+ }
101
+
102
+ return target;
103
+ };
104
+ /**
105
+ * mui noop(function)
106
+ */
107
+ $.noop = function() {};
108
+ /**
109
+ * mui slice(array)
110
+ */
111
+ $.slice = [].slice;
112
+ /**
113
+ * mui filter(array)
114
+ */
115
+ $.filter = [].filter;
116
+
117
+ $.type = function(obj) {
118
+ return obj == null ? String(obj) : class2type[{}.toString.call(obj)] || "object";
119
+ };
120
+ /**
121
+ * mui isArray
122
+ */
123
+ $.isArray = Array.isArray ||
124
+ function(object) {
125
+ return object instanceof Array;
126
+ };
127
+ /**
128
+ * mui isWindow(需考虑obj为undefined的情况)
129
+ */
130
+ $.isWindow = function(obj) {
131
+ return obj != null && obj === obj.window;
132
+ };
133
+ /**
134
+ * mui isObject
135
+ */
136
+ $.isObject = function(obj) {
137
+ return $.type(obj) === "object";
138
+ };
139
+ /**
140
+ * mui isPlainObject
141
+ */
142
+ $.isPlainObject = function(obj) {
143
+ return $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype;
144
+ };
145
+ /**
146
+ * mui isEmptyObject
147
+ * @param {Object} o
148
+ */
149
+ $.isEmptyObject = function(o) {
150
+ for (var p in o) {
151
+ if (p !== undefined) {
152
+ return false;
153
+ }
154
+ }
155
+ return true;
156
+ };
157
+ /**
158
+ * mui isFunction
159
+ */
160
+ $.isFunction = function(value) {
161
+ return $.type(value) === "function";
162
+ };
163
+ /**
164
+ * mui querySelectorAll
165
+ * @param {type} selector
166
+ * @param {type} context
167
+ * @returns {Array}
168
+ */
169
+ $.qsa = function(selector, context) {
170
+ context = context || document;
171
+ return $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector));
172
+ };
173
+ /**
174
+ * ready(DOMContentLoaded)
175
+ * @param {type} callback
176
+ * @returns {_L6.$}
177
+ */
178
+ $.ready = function(callback) {
179
+ if (readyRE.test(document.readyState)) {
180
+ callback($);
181
+ } else {
182
+ document.addEventListener('DOMContentLoaded', function() {
183
+ callback($);
184
+ }, false);
185
+ }
186
+ return this;
187
+ };
188
+ /**
189
+ * map
190
+ */
191
+ $.map = function(elements, callback) {
192
+ var value, values = [],
193
+ i, key;
194
+ if (typeof elements.length === 'number') { //TODO 此处逻辑不严谨,可能会有Object:{a:'b',length:1}的情况未处理
195
+ for (i = 0, len = elements.length; i < len; i++) {
196
+ value = callback(elements[i], i);
197
+ if (value != null) values.push(value);
198
+ }
199
+ } else {
200
+ for (key in elements) {
201
+ value = callback(elements[key], key);
202
+ if (value != null) values.push(value);
203
+ }
204
+ }
205
+ return values.length > 0 ? [].concat.apply([], values) : values;
206
+ };
207
+ /**
208
+ * each
209
+ * @param {type} elements
210
+ * @param {type} callback
211
+ * @returns {_L8.$}
212
+ */
213
+ $.each = function(elements, callback) {
214
+ if (!elements) {
215
+ return this;
216
+ }
217
+ if (typeof elements.length === 'number') {
218
+ [].every.call(elements, function(el, idx) {
219
+ return callback.call(el, idx, el) !== false;
220
+ });
221
+ } else {
222
+ for (var key in elements) {
223
+ if (callback.call(elements[key], key, elements[key]) === false) return elements;
224
+ }
225
+ }
226
+ return this;
227
+ };
228
+ $.focus = function(element) {
229
+ if ($.os.ios) {
230
+ setTimeout(function() {
231
+ element.focus();
232
+ }, 10);
233
+ } else {
234
+ element.focus();
235
+ }
236
+ };
237
+ /**
238
+ * trigger event
239
+ * @param {type} element
240
+ * @param {type} eventType
241
+ * @param {type} eventData
242
+ * @returns {_L8.$}
243
+ */
244
+ $.trigger = function(element, eventType, eventData) {
245
+ element.dispatchEvent(new CustomEvent(eventType, {
246
+ detail: eventData,
247
+ bubbles: true,
248
+ cancelable: true
249
+ }));
250
+ return this;
251
+ };
252
+ /**
253
+ * getStyles
254
+ * @param {type} element
255
+ * @param {type} property
256
+ * @returns {styles}
257
+ */
258
+ $.getStyles = function(element, property) {
259
+ var styles = element.ownerDocument.defaultView.getComputedStyle(element, null);
260
+ if (property) {
261
+ return styles.getPropertyValue(property) || styles[property];
262
+ }
263
+ return styles;
264
+ };
265
+ /**
266
+ * parseTranslate
267
+ * @param {type} translateString
268
+ * @param {type} position
269
+ * @returns {Object}
270
+ */
271
+ $.parseTranslate = function(translateString, position) {
272
+ var result = translateString.match(translateRE || '');
273
+ if (!result || !result[1]) {
274
+ result = ['', '0,0,0'];
275
+ }
276
+ result = result[1].split(",");
277
+ result = {
278
+ x: parseFloat(result[0]),
279
+ y: parseFloat(result[1]),
280
+ z: parseFloat(result[2])
281
+ };
282
+ if (position && result.hasOwnProperty(position)) {
283
+ return result[position];
284
+ }
285
+ return result;
286
+ };
287
+ /**
288
+ * parseTranslateMatrix
289
+ * @param {type} translateString
290
+ * @param {type} position
291
+ * @returns {Object}
292
+ */
293
+ $.parseTranslateMatrix = function(translateString, position) {
294
+ var matrix = translateString.match(translateMatrixRE);
295
+ var is3D = matrix && matrix[1];
296
+ if (matrix) {
297
+ matrix = matrix[2].split(",");
298
+ if (is3D === "3d")
299
+ matrix = matrix.slice(12, 15);
300
+ else {
301
+ matrix.push(0);
302
+ matrix = matrix.slice(4, 7);
303
+ }
304
+ } else {
305
+ matrix = [0, 0, 0];
306
+ }
307
+ var result = {
308
+ x: parseFloat(matrix[0]),
309
+ y: parseFloat(matrix[1]),
310
+ z: parseFloat(matrix[2])
311
+ };
312
+ if (position && result.hasOwnProperty(position)) {
313
+ return result[position];
314
+ }
315
+ return result;
316
+ };
317
+
318
+ $.registerHandler = function(type, handler) {
319
+ var handlers = $[type];
320
+ if (!handlers) {
321
+ handlers = [];
322
+ }
323
+ handler.index = handler.index || 1000;
324
+ handlers.push(handler);
325
+ handlers.sort(function(a, b) {
326
+ return a.index - b.index;
327
+ });
328
+ $[type] = handlers;
329
+ return $[type];
330
+ };
331
+ /**
332
+ * setTimeout封装
333
+ * @param {Object} fn
334
+ * @param {Object} when
335
+ * @param {Object} context
336
+ * @param {Object} data
337
+ */
338
+ $.later = function(fn, when, context, data) {
339
+ when = when || 0;
340
+ var m = fn;
341
+ var d = data;
342
+ var f;
343
+ var r;
344
+
345
+ if (typeof fn === 'string') {
346
+ m = context[fn];
347
+ }
348
+
349
+ f = function() {
350
+ m.apply(context, $.isArray(d) ? d : [d]);
351
+ };
352
+
353
+ r = setTimeout(f, when);
354
+
355
+ return {
356
+ id: r,
357
+ cancel: function() {
358
+ clearTimeout(r);
359
+ }
360
+ };
361
+ };
362
+ $.now = Date.now || function() {
363
+ return +new Date();
364
+ };
365
+ var class2type = {};
366
+ $.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) {
367
+ class2type["[object " + name + "]"] = name.toLowerCase();
368
+ });
369
+ if (window.JSON) {
370
+ $.parseJSON = JSON.parse;
371
+ }
372
+ /**
373
+ * $.fn
374
+ */
375
+ $.fn = {
376
+ each: function(callback) {
377
+ [].every.call(this, function(el, idx) {
378
+ return callback.call(el, idx, el) !== false;
379
+ });
380
+ return this;
381
+ }
382
+ };
383
+
384
+ /**
385
+ * 兼容 AMD 模块
386
+ **/
387
+ if (typeof define === 'function' && define.amd) {
388
+ define('mui', [], function() {
389
+ return $;
390
+ });
391
+ }
392
+
393
+ return $;
394
+ })(document);
395
+ //window.mui = mui;
396
+ //'$' in window || (window.$ = mui);
@@ -0,0 +1,108 @@
1
+ /**
2
+ * MUI JSONP
3
+ * varstion 1.0.0
4
+ * by Houfeng
5
+ * Houfeng@DCloud.io
6
+ */
7
+
8
+ (function($, win, doc) {
9
+
10
+ var callbackIndex = 0;
11
+
12
+ //生成回调函数名
13
+ var createCallbackName = function() {
14
+ return 'mui_jsonp_callback_' + (callbackIndex++);
15
+ };
16
+
17
+ var container = doc.body;
18
+
19
+ //导入 script 元素
20
+ var importScript = function(url) {
21
+ var element = doc.createElement('script');
22
+ element.src = url;
23
+ element.async = true;
24
+ element.defer = true;
25
+ container.appendChild(element);
26
+ return element;
27
+ };
28
+
29
+ //转换 URL,JSONP 只支持 get 方式的 queryString ,需将 data 拼入 url
30
+ var convertUrl = function(url, data, jsonpParam, callbacnName) {
31
+ if (jsonpParam) {
32
+ url = url.replace(jsonpParam + '=?', jsonpParam + '=' + callbacnName);
33
+ } else {
34
+ data['callback'] = callbacnName;
35
+ }
36
+ var buffer = [];
37
+ for (var key in data) {
38
+ buffer.push(key + '=' + encodeURIComponent(data[key]));
39
+ }
40
+ return url + (url.indexOf('?') > -1 ? '&' : '?') + buffer.join('&');
41
+ };
42
+
43
+ //获取 QueryString
44
+ var getQueryString = function(url) {
45
+ url = url || location.search;
46
+ var splitIndex = url.indexOf('?');
47
+ var queryString = url.substr(splitIndex + 1);
48
+ var paramArray = queryString.split('&');
49
+ var result = {};
50
+ for (var i in paramArray) {
51
+ var params = paramArray[i].split('=');
52
+ result[params[0]] = params[1];
53
+ }
54
+ return result;
55
+ }
56
+
57
+ //获取将传递给服务器的回调函数的请求参数名
58
+ var getJSONPParam = function(url) {
59
+ var query = getQueryString(url);
60
+ for (var name in query) {
61
+ if (query[name] === '?') {
62
+ return name;
63
+ }
64
+ }
65
+ return null;
66
+ };
67
+
68
+ /**
69
+ * @description JSONP 方法
70
+ * @param {String} url 将请求的地址
71
+ * @param {Object} data 请求参数数据
72
+ * @param {Function} callback 请求完成时回调函数
73
+ * @return {mui} mui 对象自身
74
+ **/
75
+ $.getJSONP = function(url, data, callback) {
76
+ if (!url) {
77
+ throw "mui.getJSONP URL error!";
78
+ }
79
+ var jsonpParam = getJSONPParam(url);
80
+ var callbackName = createCallbackName();
81
+ data = data || {};
82
+ callback = callback || $.noop;
83
+ url = convertUrl(url, data, jsonpParam, callbackName);
84
+ var scriptElement = null;
85
+ win[callbackName] = function(result) {
86
+ callback(result);
87
+ if (scriptElement) {
88
+ container.removeChild(scriptElement);
89
+ }
90
+ win[callbackName] = null;
91
+ delete win[callbackName];
92
+ };
93
+ scriptElement = importScript(url);
94
+ return $;
95
+ };
96
+
97
+ //为原 mui.getJSON 方法添加同 jQuery.getJSON 一样的 JSONP 支持
98
+ $.__getJSON = $.getJSON;
99
+ $.getJSON = function(url, data, callback) {
100
+ var isJSONP = getJSONPParam(url) != null;
101
+ if (isJSONP) {
102
+ return $.getJSONP(url, data, callback);
103
+ } else {
104
+ return $.__getJSON(url, data, callback);
105
+ }
106
+ };
107
+
108
+ }(mui, window, document));
@@ -0,0 +1,22 @@
1
+ /**
2
+ * mui layout(offset[,position,width,height...])
3
+ * @param {type} $
4
+ * @param {type} window
5
+ * @param {type} undefined
6
+ * @returns {undefined}
7
+ */
8
+ (function($, window, undefined) {
9
+ $.offset = function(element) {
10
+ var box = {
11
+ top : 0,
12
+ left : 0
13
+ };
14
+ if ( typeof element.getBoundingClientRect !== undefined) {
15
+ box = element.getBoundingClientRect();
16
+ }
17
+ return {
18
+ top : box.top + window.pageYOffset - element.clientTop,
19
+ left : box.left + window.pageXOffset - element.clientLeft
20
+ };
21
+ };
22
+ })(mui, window);
@@ -0,0 +1,35 @@
1
+ /**
2
+ * mui namespace(optimization)
3
+ * @param {type} $
4
+ * @returns {undefined}
5
+ */
6
+ (function($) {
7
+ $.namespace = 'mui';
8
+ $.classNamePrefix = $.namespace + '-';
9
+ $.classSelectorPrefix = '.' + $.classNamePrefix;
10
+ /**
11
+ * 返回正确的className
12
+ * @param {type} className
13
+ * @returns {String}
14
+ */
15
+ $.className = function(className) {
16
+ return $.classNamePrefix + className;
17
+ };
18
+ /**
19
+ * 返回正确的classSelector
20
+ * @param {type} classSelector
21
+ * @returns {String}
22
+ */
23
+ $.classSelector = function(classSelector) {
24
+ return classSelector.replace(/\./g, $.classSelectorPrefix);
25
+ };
26
+ /**
27
+ * 返回正确的eventName
28
+ * @param {type} event
29
+ * @param {type} module
30
+ * @returns {String}
31
+ */
32
+ $.eventName = function(event, module) {
33
+ return event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : '');
34
+ };
35
+ })(mui);
@@ -0,0 +1,93 @@
1
+ /**
2
+ * 数字输入框
3
+ * varstion 1.0.1
4
+ * by Houfeng
5
+ * Houfeng@DCloud.io
6
+ */
7
+
8
+ (function($) {
9
+
10
+ var touchSupport = ('ontouchstart' in document);
11
+ var tapEventName = touchSupport ? 'tap' : 'click';
12
+ var changeEventName = 'change';
13
+ var holderClassName = $.className('numbox');
14
+ var plusClassName = $.className('numbox-btn-plus');
15
+ var minusClassName = $.className('numbox-btn-minus');
16
+ var inputClassName = $.className('numbox-input');
17
+
18
+ var Numbox = $.Numbox = $.Class.extend({
19
+ init: function(holder, options) {
20
+ var self = this;
21
+ options = options || {};
22
+ options.step = parseInt(options.step || 1);
23
+ self.options = options;
24
+ self.holder = holder;
25
+ self.input = $.qsa('.' + inputClassName, self.holder)[0];
26
+ self.plus = $.qsa('.' + plusClassName, self.holder)[0];
27
+ self.minus = $.qsa('.' + minusClassName, self.holder)[0];
28
+ self.checkValue();
29
+ self.initEvent();
30
+ },
31
+ initEvent: function() {
32
+ var self = this;
33
+ self.plus.addEventListener(tapEventName, function(event) {
34
+ var val = parseInt(self.input.value) + self.options.step;
35
+ self.input.value = val.toString();
36
+ $.trigger(self.input, changeEventName, null);
37
+ });
38
+ self.minus.addEventListener(tapEventName, function(event) {
39
+ var val = parseInt(self.input.value) - self.options.step;
40
+ self.input.value = val.toString();
41
+ $.trigger(self.input, changeEventName, null);
42
+ });
43
+ self.input.addEventListener(changeEventName, function(event) {
44
+ self.checkValue();
45
+ });
46
+ },
47
+ checkValue: function() {
48
+ var self = this;
49
+ var val = self.input.value;
50
+ if (val == null || val == '' || isNaN(val)) {
51
+ self.input.value = self.options.min || 0;
52
+ self.minus.disabled = self.options.min != null;
53
+ } else {
54
+ var val = parseInt(val);
55
+ if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) {
56
+ val = self.options.max;
57
+ self.plus.disabled = true;
58
+ } else {
59
+ self.plus.disabled = false;
60
+ }
61
+ if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) {
62
+ val = self.options.min;
63
+ self.minus.disabled = true;
64
+ } else {
65
+ self.minus.disabled = false;
66
+ }
67
+ self.input.value = val;
68
+ }
69
+ }
70
+ });
71
+
72
+ $.fn.numbox = function(options) {
73
+ //遍历选择的元素
74
+ this.each(function(i, element) {
75
+ if (options) {
76
+ new Numbox(element, options);
77
+ } else {
78
+ var optionsText = element.getAttribute('data-numbox-options');
79
+ var options = optionsText ? JSON.parse(optionsText) : {};
80
+ options.step = element.getAttribute('data-numbox-step') || options.step;
81
+ options.min = element.getAttribute('data-numbox-min') || options.min;
82
+ options.max = element.getAttribute('data-numbox-max') || options.max;
83
+ new Numbox(element, options);
84
+ }
85
+ });
86
+ return this;
87
+ }
88
+
89
+ //自动处理 class='mui-locker' 的 dom
90
+ $.ready(function() {
91
+ $('.' + holderClassName).numbox();
92
+ });
93
+ }(mui))