mui_app_rails 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +34 -0
- data/app/assets/fonts/mui.ttf +0 -0
- data/app/assets/javascripts/mui_app_rails/actions.js +26 -0
- data/app/assets/javascripts/mui_app_rails/ajax.plugin.js +3 -0
- data/app/assets/javascripts/mui_app_rails/input.plugin.js +232 -0
- data/app/assets/javascripts/mui_app_rails/modals.js +37 -0
- data/app/assets/javascripts/mui_app_rails/mui.active.js +30 -0
- data/app/assets/javascripts/mui_app_rails/mui.ajax.5+.js +27 -0
- data/app/assets/javascripts/mui_app_rails/mui.ajax.js +277 -0
- data/app/assets/javascripts/mui_app_rails/mui.animation.js +39 -0
- data/app/assets/javascripts/mui_app_rails/mui.animationframe.js +72 -0
- data/app/assets/javascripts/mui_app_rails/mui.back.5+.js +108 -0
- data/app/assets/javascripts/mui_app_rails/mui.back.js +56 -0
- data/app/assets/javascripts/mui_app_rails/mui.class.js +40 -0
- data/app/assets/javascripts/mui_app_rails/mui.class.scroll.js +894 -0
- data/app/assets/javascripts/mui_app_rails/mui.class.scroll.pullrefresh.js +150 -0
- data/app/assets/javascripts/mui_app_rails/mui.class.scroll.slider.js +361 -0
- data/app/assets/javascripts/mui_app_rails/mui.class.scroll.slider.old.js +332 -0
- data/app/assets/javascripts/mui_app_rails/mui.detect.5+.js +18 -0
- data/app/assets/javascripts/mui_app_rails/mui.detect.js +50 -0
- data/app/assets/javascripts/mui_app_rails/mui.dialog.alert.js +27 -0
- data/app/assets/javascripts/mui_app_rails/mui.dialog.confirm.js +27 -0
- data/app/assets/javascripts/mui_app_rails/mui.dialog.prompt.js +33 -0
- data/app/assets/javascripts/mui_app_rails/mui.dialog.toast.js +20 -0
- data/app/assets/javascripts/mui_app_rails/mui.event.js +160 -0
- data/app/assets/javascripts/mui_app_rails/mui.fixed.animation.js +22 -0
- data/app/assets/javascripts/mui_app_rails/mui.fixed.classlist.js +50 -0
- data/app/assets/javascripts/mui_app_rails/mui.fixed.fastclick.js +64 -0
- data/app/assets/javascripts/mui_app_rails/mui.fixed.js +40 -0
- data/app/assets/javascripts/mui_app_rails/mui.fixed.keyboard.js +56 -0
- data/app/assets/javascripts/mui_app_rails/mui.gestures.drag.js +48 -0
- data/app/assets/javascripts/mui_app_rails/mui.gestures.flick.js +30 -0
- data/app/assets/javascripts/mui_app_rails/mui.gestures.hold.js +41 -0
- data/app/assets/javascripts/mui_app_rails/mui.gestures.js +207 -0
- data/app/assets/javascripts/mui_app_rails/mui.gestures.longtap.js +43 -0
- data/app/assets/javascripts/mui_app_rails/mui.gestures.swipe.js +29 -0
- data/app/assets/javascripts/mui_app_rails/mui.gestures.tap.js +40 -0
- data/app/assets/javascripts/mui_app_rails/mui.init.5+.js +441 -0
- data/app/assets/javascripts/mui_app_rails/mui.init.js +100 -0
- data/app/assets/javascripts/mui_app_rails/mui.init.pullrefresh.js +57 -0
- data/app/assets/javascripts/mui_app_rails/mui.js +396 -0
- data/app/assets/javascripts/mui_app_rails/mui.jsonp.js +108 -0
- data/app/assets/javascripts/mui_app_rails/mui.layout.js +22 -0
- data/app/assets/javascripts/mui_app_rails/mui.namespace.js +35 -0
- data/app/assets/javascripts/mui_app_rails/mui.number.js +93 -0
- data/app/assets/javascripts/mui_app_rails/mui.offcanvas.js +497 -0
- data/app/assets/javascripts/mui_app_rails/mui.pullrefresh.js +157 -0
- data/app/assets/javascripts/mui_app_rails/mui.target.js +58 -0
- data/app/assets/javascripts/mui_app_rails/mui.view.js +172 -0
- data/app/assets/javascripts/mui_app_rails/popovers.js +278 -0
- data/app/assets/javascripts/mui_app_rails/pullrefresh.5+.js +238 -0
- data/app/assets/javascripts/mui_app_rails/push.js +479 -0
- data/app/assets/javascripts/mui_app_rails/segmented-controllers.js +99 -0
- data/app/assets/javascripts/mui_app_rails/sliders.js +362 -0
- data/app/assets/javascripts/mui_app_rails/switches.js +165 -0
- data/app/assets/javascripts/mui_app_rails/tableviews.js +512 -0
- data/app/assets/javascripts/mui_app_rails.js +1 -0
- data/app/assets/stylesheets/mui_app_rails/badges.scss +88 -0
- data/app/assets/stylesheets/mui_app_rails/bars.scss +312 -0
- data/app/assets/stylesheets/mui_app_rails/base.scss +196 -0
- data/app/assets/stylesheets/mui_app_rails/buttons.scss +205 -0
- data/app/assets/stylesheets/mui_app_rails/cards.scss +62 -0
- data/app/assets/stylesheets/mui_app_rails/forms.scss +452 -0
- data/app/assets/stylesheets/mui_app_rails/fullscreen.scss +35 -0
- data/app/assets/stylesheets/mui_app_rails/grid.scss +75 -0
- data/app/assets/stylesheets/mui_app_rails/hack.scss +14 -0
- data/app/assets/stylesheets/mui_app_rails/icon.scss +170 -0
- data/app/assets/stylesheets/mui_app_rails/iscroll.scss +43 -0
- data/app/assets/stylesheets/mui_app_rails/loadings.scss +111 -0
- data/app/assets/stylesheets/mui_app_rails/mixins.scss +212 -0
- data/app/assets/stylesheets/mui_app_rails/modals.scss +34 -0
- data/app/assets/stylesheets/mui_app_rails/mui.scss +46 -0
- data/app/assets/stylesheets/mui_app_rails/normalize.scss +425 -0
- data/app/assets/stylesheets/mui_app_rails/number.scss +70 -0
- data/app/assets/stylesheets/mui_app_rails/off-canvas.scss +84 -0
- data/app/assets/stylesheets/mui_app_rails/os.scss +12 -0
- data/app/assets/stylesheets/mui_app_rails/pagination.scss +155 -0
- data/app/assets/stylesheets/mui_app_rails/popovers.scss +198 -0
- data/app/assets/stylesheets/mui_app_rails/pullrefreshs.scss +98 -0
- data/app/assets/stylesheets/mui_app_rails/push.scss +63 -0
- data/app/assets/stylesheets/mui_app_rails/scroll.scss +95 -0
- data/app/assets/stylesheets/mui_app_rails/segmented-controls.scss +150 -0
- data/app/assets/stylesheets/mui_app_rails/slider-cell.scss +20 -0
- data/app/assets/stylesheets/mui_app_rails/sliders.scss +133 -0
- data/app/assets/stylesheets/mui_app_rails/switches.scss +115 -0
- data/app/assets/stylesheets/mui_app_rails/table-views.scss +482 -0
- data/app/assets/stylesheets/mui_app_rails/toast.scss +16 -0
- data/app/assets/stylesheets/mui_app_rails/type.scss +23 -0
- data/app/assets/stylesheets/mui_app_rails/variables.scss +64 -0
- data/app/assets/stylesheets/mui_app_rails.css +3 -0
- data/lib/mui_app_rails/engine.rb +5 -0
- data/lib/mui_app_rails/version.rb +3 -0
- data/lib/mui_app_rails.rb +5 -0
- 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);
|