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,441 @@
1
+ /**
2
+ * mui.init 5+
3
+ * @param {type} $
4
+ * @returns {undefined}
5
+ */
6
+ (function($) {
7
+ var defaultOptions = {
8
+ swipeBack: false,
9
+ preloadPages: [], //5+ lazyLoad webview
10
+ preloadLimit: 10, //预加载窗口的数量限制(一旦超出,先进先出)
11
+ keyEventBind: {
12
+ backbutton: true,
13
+ menubutton: true
14
+ }
15
+ };
16
+
17
+ //默认页面动画
18
+ var defaultShow = {
19
+ autoShow: true,
20
+ duration: $.os.ios ? 200 : 100,
21
+ aniShow: 'slide-in-right'
22
+ };
23
+ //若执行了显示动画初始化操作,则要覆盖默认配置
24
+ if ($.options.show) {
25
+ defaultShow = $.extend(true, defaultShow, $.options.show);
26
+ }
27
+
28
+ $.currentWebview = null;
29
+ $.isHomePage = false;
30
+
31
+ $.extend(true, $.global, defaultOptions);
32
+ $.extend(true, $.options, defaultOptions);
33
+ /**
34
+ * 等待动画配置
35
+ * @param {type} options
36
+ * @returns {Object}
37
+ */
38
+ $.waitingOptions = function(options) {
39
+ return $.extend({
40
+ autoShow: true,
41
+ title: ''
42
+ }, options);
43
+ };
44
+ /**
45
+ * 窗口显示配置
46
+ * @param {type} options
47
+ * @returns {Object}
48
+ */
49
+ $.showOptions = function(options) {
50
+ return $.extend(defaultShow, options);
51
+ };
52
+ /**
53
+ * 窗口默认配置
54
+ * @param {type} options
55
+ * @returns {Object}
56
+ */
57
+ $.windowOptions = function(options) {
58
+ return $.extend({
59
+ scalable: false,
60
+ bounce: "" //vertical
61
+ }, options);
62
+ };
63
+ /**
64
+ * plusReady
65
+ * @param {type} callback
66
+ * @returns {_L6.$}
67
+ */
68
+ $.plusReady = function(callback) {
69
+ if (window.plus) {
70
+ callback();
71
+ } else {
72
+ document.addEventListener("plusready", function() {
73
+ callback();
74
+ }, false);
75
+ }
76
+ return this;
77
+ };
78
+ /**
79
+ * 5+ event(5+没提供之前我自己实现)
80
+ * @param {type} webview
81
+ * @param {type} eventType
82
+ * @param {type} data
83
+ * @returns {undefined}
84
+ */
85
+ $.fire = function(webview, eventType, data) {
86
+ if (webview) {
87
+ webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "','" + JSON.stringify(data || {}).replace(/\'/g, "\\u0027").replace(/\\/g, "\\u005c") + "')");
88
+ }
89
+ };
90
+ /**
91
+ * 5+ event(5+没提供之前我自己实现)
92
+ * @param {type} eventType
93
+ * @param {type} data
94
+ * @returns {undefined}
95
+ */
96
+ $.receive = function(eventType, data) {
97
+ if (eventType) {
98
+ data = JSON.parse(data);
99
+ $.trigger(document, eventType, data);
100
+ }
101
+ };
102
+ var triggerPreload = function(webview) {
103
+ if (!webview.preloaded) {
104
+ $.fire(webview, 'preload');
105
+ var list = webview.children();
106
+ for (var i = 0; i < list.length; i++) {
107
+ $.fire(list[i], 'preload');
108
+ }
109
+ webview.preloaded = true;
110
+ }
111
+ };
112
+ var trigger = function(webview, eventType, timeChecked) {
113
+ if (timeChecked) {
114
+ if (!webview[eventType + 'ed']) {
115
+ $.fire(webview, eventType);
116
+ var list = webview.children();
117
+ for (var i = 0; i < list.length; i++) {
118
+ $.fire(list[i], eventType);
119
+ }
120
+ webview[eventType + 'ed'] = true;
121
+ }
122
+ } else {
123
+ $.fire(webview, eventType);
124
+ var list = webview.children();
125
+ for (var i = 0; i < list.length; i++) {
126
+ $.fire(list[i], eventType);
127
+ }
128
+ }
129
+
130
+ };
131
+ /**
132
+ * 打开新窗口
133
+ * @param {string} url 要打开的页面地址
134
+ * @param {string} id 指定页面ID
135
+ * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}}
136
+ */
137
+ $.openWindow = function(url, id, options) {
138
+
139
+ if (!window.plus) {
140
+ return;
141
+ }
142
+ if (typeof url === 'object') {
143
+ options = url;
144
+ url = options.url;
145
+ id = options.id || url;
146
+ } else {
147
+ if (typeof id === 'object') {
148
+ options = id;
149
+ id = url;
150
+ } else {
151
+ id = id || url;
152
+ }
153
+ }
154
+ options = options || {};
155
+ var params = options.params || {};
156
+ var webview, nShow, nWaiting;
157
+ if ($.webviews[id]) { //已缓存
158
+ var webviewCache = $.webviews[id];
159
+ webview = webviewCache.webview;
160
+ //需要处理用户手动关闭窗口的情况,此时webview应该是空的;
161
+ if (!webview || !webview.getURL()) {
162
+ //再次新建一个webview;
163
+ options = $.extend(options, {
164
+ id: id,
165
+ url: url,
166
+ preload: true
167
+ }, true);
168
+ webview = $.createWindow(options);
169
+ }
170
+ //每次show都需要传递动画参数;
171
+ //预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置;
172
+ nShow = webviewCache.show;
173
+ nShow = options.show ? $.extend(nShow, options.show) : nShow;
174
+ webview.show(nShow.aniShow, nShow.duration, function() {
175
+ triggerPreload(webview);
176
+ trigger(webview, 'pagebeforeshow', false);
177
+ });
178
+
179
+ webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
180
+ return webview;
181
+ } else { //新窗口
182
+ //显示waiting
183
+ var waitingConfig = $.waitingOptions(options.waiting);
184
+ if (waitingConfig.autoShow) {
185
+ nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);
186
+ }
187
+ //创建页面
188
+ options = $.extend(options, {
189
+ id: id,
190
+ url: url
191
+ });
192
+ webview = $.createWindow(options);
193
+ //显示
194
+ nShow = $.showOptions(options.show);
195
+ if (nShow.autoShow) {
196
+ webview.addEventListener("loaded", function() {
197
+ //关闭等待框
198
+ if (nWaiting) {
199
+ nWaiting.close();
200
+ }
201
+ //显示页面
202
+ webview.show(nShow.aniShow, nShow.duration, function() {
203
+ triggerPreload(webview);
204
+ trigger(webview, 'pagebeforeshow', false);
205
+ });
206
+ webview.showed = true;
207
+ options.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
208
+ }, false);
209
+ }
210
+ }
211
+ return webview;
212
+ };
213
+ /**
214
+ * 根据配置信息创建一个webview
215
+ * @param {type} options
216
+ * @param {type} isCreate
217
+ * @returns {webview}
218
+ */
219
+ $.createWindow = function(options, isCreate) {
220
+ if (!window.plus) {
221
+ return;
222
+ }
223
+ var id = options.id || options.url;
224
+ var webview;
225
+ if (options.preload) {
226
+ if ($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache
227
+ webview = $.webviews[id].webview;
228
+ } else { //新增预加载窗口
229
+ //preload
230
+ webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({
231
+ preload: true
232
+ }, options.extras));
233
+ if (options.subpages) {
234
+ $.each(options.subpages, function(index, subpage) {
235
+ //TODO 子窗口也可能已经创建,比如公用模板的情况;
236
+ var subWebview = plus.webview.create(subpage.url, subpage.id || subpage.url, $.windowOptions(subpage.styles), $.extend({
237
+ preload: true
238
+ }, subpage.extras));
239
+ webview.append(subWebview);
240
+ });
241
+ }
242
+ }
243
+
244
+ //TODO 理论上,子webview也应该计算到预加载队列中,但这样就麻烦了,要退必须退整体,否则可能出现问题;
245
+ $.webviews[id] = {
246
+ webview: webview, //目前仅preload的缓存webview
247
+ preload: true,
248
+ show: $.showOptions(options.show),
249
+ afterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯
250
+ };
251
+ //索引该预加载窗口
252
+ var preloads = $.data.preloads;
253
+ var index = preloads.indexOf(id);
254
+ if (~index) { //删除已存在的(变相调整插入位置)
255
+ preloads.splice(index, 1);
256
+ }
257
+ preloads.push(id);
258
+ if (preloads.length > $.options.preloadLimit) {
259
+ //先进先出
260
+ var first = $.data.preloads.shift();
261
+ var webviewCache = $.webviews[first];
262
+ if (webviewCache && webviewCache.webview) {
263
+ //需要将自己打开的所有页面,全部close;
264
+ //关闭该预加载webview
265
+ $.closeAll(webviewCache.webview);
266
+ }
267
+ //删除缓存
268
+ delete $.webviews[first];
269
+ }
270
+ } else {
271
+ if (isCreate !== false) { //直接创建非预加载窗口
272
+ webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras);
273
+ if (options.subpages) {
274
+ $.each(options.subpages, function(index, subpage) {
275
+ var subWebview = plus.webview.create(subpage.url, subpage.id || subpage.url, $.windowOptions(subpage.styles), subpage.extras);
276
+ webview.append(subWebview);
277
+ });
278
+ }
279
+ }
280
+ }
281
+ return webview;
282
+ };
283
+
284
+ /**
285
+ * 预加载
286
+ */
287
+ $.preload = function(options) {
288
+ //调用预加载函数,不管是否传递preload参数,强制变为true
289
+ if (!options.preload) {
290
+ options.preload = true;
291
+ }
292
+ return $.createWindow(options);
293
+ };
294
+
295
+ /**
296
+ *关闭当前webview打开的所有webview;
297
+ */
298
+ $.closeOpened = function(webview) {
299
+ var opened = webview.opened();
300
+ if (opened) {
301
+ for (var i = 0, len = opened.length; i < len; i++) {
302
+ var openedWebview = opened[i];
303
+ var open_open = openedWebview.opened();
304
+ if (open_open && open_open.length > 0) {
305
+ $.closeOpened(openedWebview);
306
+ } else {
307
+ //如果直接孩子节点,就不用关闭了,因为父关闭的时候,会自动关闭子;
308
+ if (openedWebview.parent() !== webview) {
309
+ openedWebview.close('none');
310
+ }
311
+ }
312
+ }
313
+ }
314
+ };
315
+ $.closeAll = function(webview, aniShow) {
316
+ $.closeOpened(webview);
317
+ if (aniShow) {
318
+ webview.close(aniShow);
319
+ } else {
320
+ webview.close();
321
+ }
322
+ };
323
+
324
+ /**
325
+ * 批量创建webview
326
+ * @param {type} options
327
+ * @returns {undefined}
328
+ */
329
+ $.createWindows = function(options) {
330
+ $.each(options, function(index, option) {
331
+ //初始化预加载窗口(创建)和非预加载窗口(仅配置,不创建)
332
+ $.createWindow(option, false);
333
+ });
334
+ };
335
+ /**
336
+ * 创建当前页面的子webview
337
+ * @param {type} options
338
+ * @returns {webview}
339
+ */
340
+ $.appendWebview = function(options) {
341
+ if (!window.plus) {
342
+ return;
343
+ }
344
+ var id = options.id || options.url;
345
+ var webview;
346
+ if (!$.webviews[id]) { //保证执行一遍
347
+ //TODO 这里也有隐患,比如某个webview不是作为subpage创建的,而是作为target webview的话;
348
+ webview = plus.webview.create(options.url, id, options.styles, options.extras);
349
+ //之前的实现方案:子窗口loaded之后再append到父窗口中;
350
+ //问题:部分子窗口loaded事件发生较晚,此时执行父窗口的children方法会返回空,导致父子通讯失败;
351
+ // 比如父页面执行完preload事件后,需触发子页面的preload事件,此时未append的话,就无法触发;
352
+ //修改方式:不再监控loaded事件,直接append
353
+ //by chb@20150521
354
+ // webview.addEventListener('loaded', function() {
355
+ plus.webview.currentWebview().append(webview);
356
+ // });
357
+ $.webviews[id] = options;
358
+ }
359
+ return webview;
360
+ };
361
+
362
+ //全局webviews
363
+ $.webviews = {};
364
+ //预加载窗口索引
365
+ $.data.preloads = [];
366
+ //$.currentWebview
367
+ $.plusReady(function() {
368
+ $.currentWebview = plus.webview.currentWebview();
369
+ });
370
+ $.registerInit({
371
+ name: '5+',
372
+ index: 100,
373
+ handle: function() {
374
+ var options = $.options;
375
+ var subpages = options.subpages || [];
376
+ if ($.os.plus) {
377
+ $.plusReady(function() {
378
+ //TODO 这里需要判断一下,最好等子窗口加载完毕后,再调用主窗口的show方法;
379
+ //或者:在openwindow方法中,监听实现;
380
+ $.each(subpages, function(index, subpage) {
381
+ $.appendWebview(subpage);
382
+ });
383
+ //判断是否首页
384
+ if (plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) {
385
+ $.isHomePage = true;
386
+ //首页需要自己激活预加载;
387
+ //timeout因为子页面loaded之后才append的,防止子页面尚未append、从而导致其preload未触发的问题;
388
+ setTimeout(function() {
389
+ triggerPreload(plus.webview.currentWebview());
390
+ }, 300);
391
+ }
392
+ //设置ios顶部状态栏颜色;
393
+ if ($.os.ios && $.options.statusBarBackground) {
394
+ plus.navigator.setStatusBarBackground($.options.statusBarBackground);
395
+ }
396
+ if ($.os.android && parseFloat($.os.version) < 4.4) {
397
+ //解决Android平台4.4版本以下,resume后,父窗体标题延迟渲染的问题;
398
+ if (plus.webview.currentWebview().parent() == null) {
399
+ document.addEventListener("resume", function() {
400
+ var body = document.body;
401
+ body.style.display = 'none';
402
+ setTimeout(function() {
403
+ body.style.display = '';
404
+ }, 10);
405
+ });
406
+ }
407
+ }
408
+ });
409
+ } else {
410
+ if (subpages.length > 0) {
411
+ var err = document.createElement('div');
412
+ err.className = 'mui-error';
413
+ //文字描述
414
+ var span = document.createElement('span');
415
+ span.innerHTML = '在该浏览器下,不支持创建子页面,具体参考';
416
+ err.appendChild(span);
417
+ var a = document.createElement('a');
418
+ a.innerHTML = '"mui框架适用场景"';
419
+ a.href = 'http://ask.dcloud.net.cn/article/113';
420
+ err.appendChild(a);
421
+ document.body.appendChild(err);
422
+ console.log('在该浏览器下,不支持创建子页面');
423
+ }
424
+
425
+ }
426
+
427
+ }
428
+ });
429
+ window.addEventListener('preload', function() {
430
+ //处理预加载部分
431
+ var webviews = $.options.preloadPages || [];
432
+ $.plusReady(function() {
433
+ $.each(webviews, function(index, webview) {
434
+ $.createWindow($.extend(webview, {
435
+ preload: true
436
+ }));
437
+ });
438
+
439
+ });
440
+ });
441
+ })(mui);
@@ -0,0 +1,100 @@
1
+ /**
2
+ * mui.init
3
+ * @param {type} $
4
+ * @returns {undefined}
5
+ */
6
+ (function($) {
7
+ $.global = $.options = {
8
+ gestureConfig: {
9
+ tap: true,
10
+ doubletap: false,
11
+ longtap: false,
12
+ hold: false,
13
+ flick: true,
14
+ swipe: true,
15
+ drag: true
16
+ }
17
+ };
18
+ /**
19
+ *
20
+ * @param {type} options
21
+ * @returns {undefined}
22
+ */
23
+ $.initGlobal = function(options) {
24
+ $.options = $.extend(true, $.global, options);
25
+ return this;
26
+ };
27
+ var inits = {};
28
+
29
+ var isInitialized = false;
30
+ //TODO 自动调用init?因为用户自己调用init的时机可能不确定,如果晚于自动init,则会有潜在问题
31
+ // $.ready(function() {
32
+ // setTimeout(function() {
33
+ // if (!isInitialized) {
34
+ // $.init();
35
+ // }
36
+ // }, 300);
37
+ // });
38
+ /**
39
+ * 单页配置 初始化
40
+ * @param {object} options
41
+ */
42
+ $.init = function(options) {
43
+ isInitialized = true;
44
+ $.options = $.extend(true, $.global, options || {});
45
+ $.ready(function() {
46
+ $.each($.inits, function(index, init) {
47
+ var isInit = !!(!inits[init.name] || init.repeat);
48
+ if (isInit) {
49
+ init.handle.call($);
50
+ inits[init.name] = true;
51
+ }
52
+ });
53
+ });
54
+ return this;
55
+ };
56
+
57
+ /**
58
+ * 增加初始化执行流程
59
+ * @param {function} init
60
+ */
61
+ $.registerInit = function(init) {
62
+ return $.registerHandler('inits', init);
63
+ };
64
+ $(function() {
65
+ var classList = document.body.classList;
66
+ var os = [];
67
+ if ($.os.ios) {
68
+ os.push({
69
+ os: 'ios',
70
+ version: $.os.version
71
+ });
72
+ classList.add($.className('ios'));
73
+ } else if ($.os.android) {
74
+ os.push({
75
+ os: 'android',
76
+ version: $.os.version
77
+ });
78
+ classList.add($.className('android'));
79
+ }
80
+ if ($.os.wechat) {
81
+ os.push({
82
+ os: 'wechat',
83
+ version: $.os.wechat.version
84
+ });
85
+ classList.add($.className('wechat'));
86
+ }
87
+ if (os.length) {
88
+ $.each(os, function(index, osObj) {
89
+ var version = '';
90
+ var classArray = [];
91
+ if (osObj.version) {
92
+ $.each(osObj.version.split('.'), function(i, v) {
93
+ version = version + (version ? '-' : '') + v;
94
+ classList.add($.className(osObj.os + '-' + version));
95
+ });
96
+ }
97
+ });
98
+ }
99
+ });
100
+ })(mui);
@@ -0,0 +1,57 @@
1
+ /**
2
+ * mui.init pulldownRefresh
3
+ * @param {type} $
4
+ * @returns {undefined}
5
+ */
6
+ (function($) {
7
+ $.registerInit({
8
+ name: 'pullrefresh',
9
+ index: 1000,
10
+ handle: function() {
11
+ var options = $.options;
12
+ var pullRefreshOptions = options.pullRefresh || {};
13
+ var hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback');
14
+ var hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback');
15
+ if (hasPulldown || hasPullup) {
16
+ var container = pullRefreshOptions.container;
17
+ if (container) {
18
+ var $container = $(container);
19
+ if ($container.length === 1) {
20
+ if ($.os.plus && $.os.android) { //android 5+
21
+ $.plusReady(function() {
22
+ var webview = plus.webview.currentWebview();
23
+ if (hasPullup) {
24
+ //当前页面初始化pullup
25
+ var upOptions = {};
26
+ upOptions.up = pullRefreshOptions.up;
27
+ upOptions.webviewId = webview.id || webview.getURL();
28
+ $container.pullRefresh(upOptions);
29
+ }
30
+ if (hasPulldown) {
31
+ var parent = webview.parent();
32
+ var id = webview.id || webview.getURL();
33
+ if (parent) {
34
+ if (!hasPullup) { //如果没有上拉加载,需要手动初始化一个默认的pullRefresh,以便当前页面容器可以调用endPulldownToRefresh等方法
35
+ $container.pullRefresh({
36
+ webviewId: id
37
+ });
38
+ }
39
+ var downOptions = {
40
+ webviewId: id
41
+ };
42
+ downOptions.down = $.extend({}, pullRefreshOptions.down);
43
+ downOptions.down.callback = '_CALLBACK';
44
+ //父页面初始化pulldown
45
+ parent.evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify(downOptions) + "')");
46
+ }
47
+ }
48
+ });
49
+ } else {
50
+ $container.pullRefresh(pullRefreshOptions);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ });
57
+ })(mui);