mui_app_rails 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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))