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