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,332 @@
1
+ (function($, window) {
2
+ var CLASS_SLIDER = $.className('slider');
3
+ var CLASS_SLIDER_GROUP = $.className('slider-group');
4
+ var CLASS_SLIDER_LOOP = $.className('slider-loop');
5
+ var CLASS_SLIDER_INDICATOR = $.className('slider-indicator');
6
+ var CLASS_ACTION_PREVIOUS = $.className('action-previous');
7
+ var CLASS_ACTION_NEXT = $.className('action-next');
8
+ var CLASS_SLIDER_ITEM = $.className('slider-item');
9
+
10
+ var CLASS_ACTIVE = $.className('active');
11
+
12
+ var SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;
13
+ var SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;
14
+ var SELECTOR_SLIDER_PROGRESS_BAR = $.classSelector('.slider-progress-bar');
15
+
16
+
17
+ var Slider = $.Scroll.extend({
18
+ init: function(element, options) {
19
+ this._super(element, $.extend(true, {
20
+ interval: 0, //设置为0,则不定时轮播
21
+ scrollY: false,
22
+ scrollX: true,
23
+ indicators: false,
24
+ bounceTime: 200,
25
+ startX: false
26
+ }, options));
27
+ if (this.options.startX) {
28
+ $.trigger(this.wrapper, 'scrollend', this);
29
+ }
30
+ },
31
+ _init: function() {
32
+ var scrollers = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP);
33
+ for (var i = 0, len = scrollers.length; i < len; i++) {
34
+ if (scrollers[i].parentNode === this.wrapper) {
35
+ this.scroller = scrollers[i];
36
+ break;
37
+ }
38
+ }
39
+ if (this.scroller) {
40
+ this.scrollerStyle = this.scroller.style;
41
+ this.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);
42
+ if (this.progressBar) {
43
+ this.progressBarWidth = this.progressBar.offsetWidth;
44
+ this.progressBarStyle = this.progressBar.style;
45
+ }
46
+ //忘记这个代码是干什么的了?
47
+ // this.x = this._getScroll();
48
+ // if (this.options.startX === false) {
49
+ // this.options.startX = this.x;
50
+ // }
51
+ //根据active修正startX
52
+
53
+ this._super();
54
+ this._initTimer();
55
+ }
56
+ },
57
+ _initEvent: function() {
58
+ var self = this;
59
+ self._super();
60
+ self.wrapper.addEventListener('swiperight', $.stopPropagation);
61
+ self.wrapper.addEventListener('scrollend', function() {
62
+ self.isInTransition = false;
63
+ var oldSlideNumber = self.slideNumber;
64
+ self.slideNumber = self._getSlideNumber();
65
+ var slideNumber = self.slideNumber;
66
+ if (self.loop) {
67
+ if (self.slideNumber === 0) {
68
+ self.slideNumber = self.itemLength - 2;
69
+ self.setTranslate(-self.wrapperWidth * (self.itemLength - 2), 0);
70
+ } else if (self.slideNumber === (self.itemLength - 1)) {
71
+ self.slideNumber = 1;
72
+ self.setTranslate(-self.wrapperWidth, 0);
73
+ }
74
+ slideNumber = self.slideNumber - 1;
75
+ }
76
+ self.slideNumber = slideNumber;
77
+ if (oldSlideNumber !== self.slideNumber) {
78
+ $.trigger(self.wrapper, 'slide', {
79
+ slideNumber: slideNumber
80
+ });
81
+ }
82
+
83
+ });
84
+ self.wrapper.addEventListener('slide', function(e) {
85
+ if (e.target !== self.wrapper) {
86
+ return;
87
+ }
88
+ var detail = e.detail;
89
+ detail.slideNumber = detail.slideNumber || 0;
90
+ var items = self.wrapper.querySelectorAll(SELECTOR_SLIDER_ITEM);
91
+ var _slideNumber = detail.slideNumber;
92
+ if (self.loop) {
93
+ _slideNumber += 1;
94
+ }
95
+ for (var i = 0, len = items.length; i < len; i++) {
96
+ var item = items[i];
97
+ if (item.parentNode === self.scroller) {
98
+ if (i === _slideNumber) {
99
+ item.classList.add(CLASS_ACTIVE);
100
+ } else {
101
+ item.classList.remove(CLASS_ACTIVE);
102
+ }
103
+ }
104
+ }
105
+ if (self.wrapper.classList.contains($.className('segmented-control'))) { //segmented and slider
106
+ var controlItem = self.scroller.querySelector('.' + CLASS_ACTIVE + '.' + CLASS_SLIDER_ITEM + ' .' + $.className('control-item'));
107
+ if (controlItem) {
108
+ $.trigger(controlItem, 'touchstart'); //targets实现机制太麻烦,后续必须重构
109
+ $.trigger(controlItem, 'tap');
110
+ }
111
+ }
112
+ var indicatorWrap = self.wrapper.querySelector($.classSelector('.slider-indicator'));
113
+ if (indicatorWrap) {
114
+ // if (indicatorWrap.classList.contains(CLASS_SLIDER)) { //indicator is a slider
115
+ // var indicatorSliderItems = indicatorWrap.querySelectorAll(CLASS_SLIDER_ITEM);
116
+ // Math.ceil(self.itemLength / indicatorSliderItems.length);
117
+ // }
118
+ var indicators = indicatorWrap.querySelectorAll($.classSelector('.indicator'));
119
+ if (indicators.length > 0) { //图片轮播
120
+ for (var i = 0, len = indicators.length; i < len; i++) {
121
+ indicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);
122
+ }
123
+ } else {
124
+ var number = indicatorWrap.querySelector($.classSelector('.number span'));
125
+ if (number) { //图文表格
126
+ number.innerText = (detail.slideNumber + 1);
127
+ } else { //segmented controls
128
+ var controlItems = self.wrapper.querySelectorAll($.classSelector('.control-item'));
129
+ for (var i = 0, len = controlItems.length; i < len; i++) {
130
+ controlItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ e.stopPropagation();
136
+ });
137
+
138
+ self.wrapper.addEventListener($.eventName('shown', 'tab'), function(e) { //tab
139
+ console.log('e.detail.tabNumber:::' + e.detail.tabNumber);
140
+ self.gotoItem((e.detail.tabNumber || 0), self.options.bounceTime);
141
+ });
142
+ //indicator
143
+ var indicator = self.wrapper.querySelector(SELECTOR_SLIDER_INDICATOR);
144
+ if (indicator) {
145
+ indicator.addEventListener('tap', function(event) {
146
+ var target = event.target;
147
+ if (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {
148
+ self[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();
149
+ event.stopPropagation();
150
+ }
151
+ });
152
+ }
153
+ },
154
+ _drag: function(e) {
155
+ this._super(e);
156
+ var direction = e.detail.direction;
157
+ if (direction === 'left' || direction === 'right') {
158
+ e.stopPropagation();
159
+ }
160
+ },
161
+ _initTimer: function() {
162
+ var self = this;
163
+ var slider = self.wrapper;
164
+ var interval = self.options.interval;
165
+ var slidershowTimer = slider.getAttribute('data-slidershowTimer');
166
+ slidershowTimer && window.clearTimeout(slidershowTimer);
167
+ if (interval) {
168
+ slidershowTimer = window.setTimeout(function() {
169
+ if (!slider) {
170
+ return;
171
+ }
172
+ //仅slider显示状态进行自动轮播
173
+ if (!!(slider.offsetWidth || slider.offsetHeight)) {
174
+ self.nextItem(true);
175
+ //下一个
176
+ }
177
+ self._initTimer();
178
+ }, interval);
179
+ slider.setAttribute('data-slidershowTimer', slidershowTimer);
180
+ }
181
+ },
182
+ _reLayout: function() {
183
+ this.hasHorizontalScroll = true;
184
+ this.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP);
185
+ //以防slider类嵌套使用
186
+ var items = this.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM);
187
+ this.itemLength = 0;
188
+ var current = 0;
189
+ for (var i = 0, len = items.length; i < len; i++) {
190
+ if (items[i].parentNode === this.scroller) {
191
+ if (items[i].classList.contains(CLASS_ACTIVE)) {
192
+ current = this.itemLength;
193
+ }
194
+ this.itemLength++;
195
+ }
196
+ }
197
+ current = current === 0 ? (this.loop ? 1 : 0) : current;
198
+ //根据active修正startX
199
+ this.options.startX = current ? -this.scrollerWidth * current : 0;
200
+ this.scrollerWidth = this.itemLength * this.scrollerWidth;
201
+ this.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);
202
+ this.slideNumber = this._getSlideNumber();
203
+ this._super();
204
+ },
205
+ _getScroll: function() {
206
+ var result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));
207
+ return result ? result.x : 0;
208
+ },
209
+ _getSlideNumber: function() {
210
+ return Math.abs(Math.round(Math.abs(this.x) / this.wrapperWidth));
211
+ },
212
+ _transitionEnd: function(e) {
213
+ if (e.target !== this.scroller || !this.isInTransition) {
214
+ return;
215
+ }
216
+ this._transitionTime();
217
+ this.isInTransition = false;
218
+ $.trigger(this.wrapper, 'scrollend', this);
219
+ },
220
+ _flick: function(e) {
221
+ var detail = e.detail;
222
+ var direction = detail.direction;
223
+ this._clearRequestAnimationFrame();
224
+ this.isInTransition = true;
225
+ if (direction === 'up' || direction === 'down') {
226
+ this.resetPosition(this.options.bounceTime);
227
+ return;
228
+ }
229
+ if (e.type === 'flick') {
230
+ if (detail.touchTime < 200) { //flick,太容易触发,额外校验一下touchtime
231
+ this.x = -(this.slideNumber + (direction === 'left' ? 1 : -1)) * this.wrapperWidth;
232
+ }
233
+ this.resetPosition(this.options.bounceTime);
234
+ } else if (e.type === 'dragend' && !detail.flick) {
235
+ this.resetPosition(this.options.bounceTime);
236
+ }
237
+ e.stopPropagation();
238
+ },
239
+ _gotoItem: function(slideNumber, time) {
240
+ this.scrollTo(-slideNumber * this.wrapperWidth, 0, time, this.options.bounceEasing);
241
+ if (time === 0) {
242
+ $.trigger(this.wrapper, 'scrollend', this);
243
+ }
244
+ this._initTimer();
245
+ },
246
+ _fixedSlideNumber: function(slideNumber) {
247
+ if (!this.loop) {
248
+ if (slideNumber < 0) {
249
+ slideNumber = 0;
250
+ } else if (slideNumber >= this.itemLength) {
251
+ slideNumber = this.itemLength - 1;
252
+ }
253
+ }
254
+ return slideNumber;
255
+ },
256
+ //API
257
+ setTranslate: function(x, y) {
258
+ this._super(x, y);
259
+ var progressBar = this.progressBar;
260
+ if (progressBar) {
261
+ this.progressBarStyle.webkitTransform = 'translate3d(' + (-x * (this.progressBarWidth / this.wrapperWidth)) + 'px,0,0)';
262
+ }
263
+ },
264
+ resetPosition: function(time) {
265
+ time = time || 0;
266
+ if (this.x > 0) {
267
+ this.x = 0;
268
+ } else if (this.x < this.maxScrollX) {
269
+ this.x = this.maxScrollX;
270
+ }
271
+ this._gotoItem(this._getSlideNumber(), time);
272
+ return true;
273
+ },
274
+ gotoItem: function(slideNumber, time) {
275
+ this._gotoItem(this._fixedSlideNumber(this.loop ? (slideNumber + 1) : slideNumber), time || this.options.bounceEasing);
276
+ },
277
+ nextItem: function(auto) {
278
+ var slideNumber = this._fixedSlideNumber(this.slideNumber + 1);
279
+ var bounceTime = this.options.bounceTime;
280
+ if (auto && !this.loop) {
281
+ if (this.slideNumber + 1 >= this.itemLength) {
282
+ bounceTime = slideNumber = 0;
283
+ }
284
+ }
285
+ this._gotoItem(slideNumber, bounceTime);
286
+ // if (!auto) { //TODO 这个设置后续还得仔细过一遍
287
+ // this.isInTransition = false;
288
+ // }
289
+ },
290
+ prevItem: function() {
291
+ this._gotoItem(this._fixedSlideNumber(this.slideNumber - 1), this.options.bounceTime);
292
+ },
293
+ refresh: function(options) {
294
+ if (options) {
295
+ $.extend(this.options, options);
296
+ this._super();
297
+ this._gotoItem(this._getSlideNumber() + 1, this.options.bounceTime);
298
+ } else {
299
+ this._super();
300
+ }
301
+ }
302
+ });
303
+ $.fn.slider = function(options) {
304
+ var slider = null;
305
+ this.each(function() {
306
+ var sliderElement = this;
307
+ if (!this.classList.contains(CLASS_SLIDER)) {
308
+ sliderElement = this.querySelector('.' + CLASS_SLIDER);
309
+ }
310
+ if (sliderElement) {
311
+ var id = sliderElement.getAttribute('data-slider');
312
+ if (!id) {
313
+ id = ++$.uuid;
314
+ $.data[id] = slider = new Slider(sliderElement, options);
315
+ sliderElement.setAttribute('data-slider', id);
316
+ } else {
317
+ slider = $.data[id];
318
+ if (slider && options) {
319
+ slider.refresh(options);
320
+ }
321
+ }
322
+ }
323
+ });
324
+ return slider;
325
+ };
326
+ $.ready(function() {
327
+ // setTimeout(function() {
328
+ $($.classSelector('.slider')).slider();
329
+ // }, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的)
330
+
331
+ });
332
+ })(mui, window);
@@ -0,0 +1,18 @@
1
+ /**
2
+ * $.os.plus
3
+ * @param {type} $
4
+ * @returns {undefined}
5
+ */
6
+ (function($, document) {
7
+ function detect(ua) {
8
+ this.os = this.os || {};
9
+ var plus = ua.match(/Html5Plus/i); //TODO 5\+Browser?
10
+ if (plus) {
11
+ this.os.plus = true;
12
+ $(function() {
13
+ document.body.classList.add($.className('plus'));
14
+ });
15
+ }
16
+ }
17
+ detect.call($, navigator.userAgent);
18
+ })(mui, document);
@@ -0,0 +1,50 @@
1
+ /**
2
+ * $.os
3
+ * @param {type} $
4
+ * @returns {undefined}
5
+ */
6
+ (function($, window) {
7
+ function detect(ua) {
8
+ this.os = {};
9
+ var funcs = [
10
+
11
+ function() { //wechat
12
+ var wechat = ua.match(/(MicroMessenger)\/([\d\.]+)/i);
13
+ if (wechat) { //wechat
14
+ this.os.wechat = {
15
+ version: wechat[2].replace(/_/g, '.')
16
+ };
17
+ }
18
+ return false;
19
+ },
20
+ function() { //android
21
+ var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
22
+ if (android) {
23
+ this.os.android = true;
24
+ this.os.version = android[2];
25
+
26
+ this.os.isBadAndroid = !(/Chrome\/\d/.test(window.navigator.appVersion));
27
+ }
28
+ return this.os.android === true;
29
+ },
30
+ function() { //ios
31
+ var iphone = ua.match(/(iPhone\sOS)\s([\d_]+)/);
32
+ if (iphone) { //iphone
33
+ this.os.ios = this.os.iphone = true;
34
+ this.os.version = iphone[2].replace(/_/g, '.');
35
+ } else {
36
+ var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
37
+ if (ipad) { //ipad
38
+ this.os.ios = this.os.ipad = true;
39
+ this.os.version = ipad[2].replace(/_/g, '.');
40
+ }
41
+ }
42
+ return this.os.ios === true;
43
+ }
44
+ ];
45
+ [].every.call(funcs, function(func) {
46
+ return !func.call($);
47
+ });
48
+ }
49
+ detect.call($, navigator.userAgent);
50
+ })(mui, window);
@@ -0,0 +1,27 @@
1
+ (function($, window) {
2
+ /**
3
+ * 警告消息框
4
+ */
5
+ $.alert = function(message,title,btnValue,callback) {
6
+ if ($.os.plus) {
7
+ if(typeof message === undefined){
8
+ return;
9
+ }else{
10
+ if(typeof title ==='function'){
11
+ callback = title;
12
+ title = null;
13
+ btnValue = '确定';
14
+ }else if(typeof btnValue ==='function'){
15
+ callback = btnValue;
16
+ btnValue = null;
17
+ }
18
+ plus.nativeUI.alert(message,callback,title,btnValue);
19
+ }
20
+
21
+ }else{
22
+ //TODO H5版本
23
+ window.alert(message);
24
+ }
25
+ };
26
+
27
+ })(mui, window);
@@ -0,0 +1,27 @@
1
+ (function($, window) {
2
+ /**
3
+ * 确认消息框
4
+ */
5
+ $.confirm = function(message,title,btnArray,callback) {
6
+ if ($.os.plus) {
7
+ if(typeof message === undefined){
8
+ return;
9
+ }else{
10
+ if(typeof title ==='function'){
11
+ callback = title;
12
+ title = null;
13
+ btnArray = null;
14
+ }else if(typeof btnArray ==='function'){
15
+ callback = btnArray;
16
+ btnArray = null;
17
+ }
18
+ plus.nativeUI.confirm(message,callback,title,btnArray);
19
+ }
20
+
21
+ }else{
22
+ //TODO H5版本
23
+ window.confirm(message);
24
+ }
25
+ };
26
+
27
+ })(mui, window);
@@ -0,0 +1,33 @@
1
+ (function($, window) {
2
+ /**
3
+ * 输入对话框
4
+ */
5
+ $.prompt = function(text,defaultText,title,btnArray,callback) {
6
+ if ($.os.plus) {
7
+ if(typeof message === undefined){
8
+ return;
9
+ }else{
10
+
11
+ if(typeof defaultText ==='function'){
12
+ callback = defaultText;
13
+ defaultText = null;
14
+ title = null;
15
+ btnArray = null;
16
+ }else if(typeof title === 'function'){
17
+ callback = title;
18
+ title = null;
19
+ btnArray = null;
20
+ }else if(typeof btnArray ==='function'){
21
+ callback = btnArray;
22
+ btnArray = null;
23
+ }
24
+ plus.nativeUI.prompt(text,callback,title,defaultText,btnArray);
25
+ }
26
+
27
+ }else{
28
+ //TODO H5版本
29
+ window.prompt(text);
30
+ }
31
+ };
32
+
33
+ })(mui, window);
@@ -0,0 +1,20 @@
1
+ (function($, window) {
2
+ /**
3
+ * 自动消失提示框
4
+ */
5
+ $.toast = function(message) {
6
+ if($.os.plus){
7
+ //默认显示在底部;
8
+ plus.nativeUI.toast(message,{verticalAlign:'bottom'});
9
+ }else{
10
+ var toast = document.createElement('div');
11
+ toast.classList.add($.className('toast-container'));
12
+ toast.innerHTML = '<div class="'+$.className('toast-message')+'">'+message+'</div>';
13
+ document.body.appendChild(toast);
14
+ setTimeout(function(){
15
+ document.body.removeChild(toast);
16
+ },2000);
17
+ }
18
+ };
19
+
20
+ })(mui, window);
@@ -0,0 +1,160 @@
1
+ /**
2
+ * 仅提供简单的on,off(仅支持事件委托,不支持当前元素绑定,当前元素绑定请直接使用addEventListener,removeEventListener)
3
+ * @param {Object} $
4
+ */
5
+ (function($) {
6
+
7
+ var _mid = 1;
8
+ var delegates = {};
9
+ //需要wrap的函数
10
+ var eventMethods = {
11
+ preventDefault: 'isDefaultPrevented',
12
+ stopImmediatePropagation: 'isImmediatePropagationStopped',
13
+ stopPropagation: 'isPropagationStopped'
14
+ };
15
+ //默认true返回函数
16
+ var returnTrue = function() {
17
+ return true
18
+ };
19
+ //默认false返回函数
20
+ var returnFalse = function() {
21
+ return false
22
+ };
23
+ //wrap浏览器事件
24
+ var compatible = function(event, target) {
25
+ if (!event.detail) {
26
+ event.detail = {
27
+ currentTarget: target
28
+ };
29
+ } else {
30
+ event.detail.currentTarget = target;
31
+ }
32
+ $.each(eventMethods, function(name, predicate) {
33
+ var sourceMethod = event[name];
34
+ event[name] = function() {
35
+ this[predicate] = returnTrue;
36
+ return sourceMethod && sourceMethod.apply(event, arguments)
37
+ }
38
+ event[predicate] = returnFalse;
39
+ });
40
+ return event;
41
+ };
42
+ //简单的wrap对象_mid
43
+ var mid = function(obj) {
44
+ return obj._mid || (obj._mid = _mid++);
45
+ };
46
+ //事件委托对象绑定的事件回调列表
47
+ var delegateFns = {};
48
+ //返回事件委托的wrap事件回调
49
+ var delegateFn = function(element, event, selector, callback) {
50
+ return function(e) {
51
+ //same event
52
+ var callbackObjs = delegates[element._mid][event];
53
+ var handlerQueue = [];
54
+ var target = e.target;
55
+ var selectorAlls = {};
56
+ for (; target && target !== document; target = target.parentNode) {
57
+ if (target === element) {
58
+ break;
59
+ }
60
+ if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains($.className('disabled')))) {
61
+ break;
62
+ }
63
+ var matches = {};
64
+ $.each(callbackObjs, function(selector, callbacks) { //same selector
65
+ if (~(selectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element))).indexOf(target)) {
66
+ if (!matches[selector]) {
67
+ matches[selector] = callbacks;
68
+ }
69
+ }
70
+ });
71
+ if (!$.isEmptyObject(matches)) {
72
+ handlerQueue.push({
73
+ element: target,
74
+ handlers: matches
75
+ });
76
+ }
77
+ }
78
+ selectorAlls = null;
79
+ e = compatible(e); //compatible event
80
+ $.each(handlerQueue, function(index, handler) {
81
+ target = handler.element;
82
+ var tagName = target.tagName;
83
+ if (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {
84
+ e.preventDefault();
85
+ e.detail && e.detail.gesture && e.detail.gesture.preventDefault();
86
+ }
87
+ $.each(handler.handlers, function(index, handler) {
88
+ $.each(handler, function(index, callback) {
89
+ if (callback.call(target, e) === false) {
90
+ e.preventDefault();
91
+ e.stopPropagation();
92
+ }
93
+ });
94
+ })
95
+ if (e.isPropagationStopped()) {
96
+ return false;
97
+ }
98
+ });
99
+ };
100
+ };
101
+ /**
102
+ * mui delegate events
103
+ * @param {type} event
104
+ * @param {type} selector
105
+ * @param {type} callback
106
+ * @returns {undefined}
107
+ */
108
+ $.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用,类似mouse,focus之类暂不封装支持
109
+ return this.each(function() {
110
+ var element = this;
111
+ mid(element);
112
+ mid(callback);
113
+ var isAddEventListener = false;
114
+ var delegateEvents = delegates[element._mid] || (delegates[element._mid] = {});
115
+ var delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {}));
116
+ if ($.isEmptyObject(delegateCallbackObjs)) {
117
+ isAddEventListener = true;
118
+ }
119
+ var delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []);
120
+ delegateCallbacks.push(callback);
121
+ if (isAddEventListener) {
122
+ delegateFns[mid(element)] = delegateFn(element, event, selector, callback);
123
+ element.addEventListener(event, delegateFns[mid(element)]);
124
+ if (event === 'tap') { //TODO 需要找个更好的解决方案
125
+ element.addEventListener('click', function(e) {
126
+ if (e.target) {
127
+ var tagName = e.target.tagName;
128
+ if (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT') {
129
+ e.preventDefault();
130
+ }
131
+ }
132
+ });
133
+ }
134
+ }
135
+ });
136
+ };
137
+ $.fn.off = function(event, selector, callback) {
138
+ return this.each(function() {
139
+ var _mid = mid(this);
140
+ if (!callback) {
141
+ if (delegates[_mid] && delegates[_mid][event]) {
142
+ delete delegates[_mid][event][selector];
143
+ }
144
+ } else {
145
+ var delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector];
146
+ $.each(delegateCallbacks, function(index, delegateCallback) {
147
+ if (mid(delegateCallback) === mid(callback)) {
148
+ delegateCallbacks.splice(index, 1);
149
+ return false;
150
+ }
151
+ });
152
+ }
153
+ //如果off掉了所有当前element的指定的event事件,则remove掉当前element的delegate回调
154
+ if (delegates[_mid] && $.isEmptyObject(delegates[_mid][event])) {
155
+ this.removeEventListener(event, delegateFns[_mid]);
156
+ delete delegateFns[_mid];
157
+ }
158
+ })
159
+ };
160
+ })(mui);
@@ -0,0 +1,22 @@
1
+ /**
2
+ * mui fixed requestAnimationFrame
3
+ * @param {type} window
4
+ * @returns {undefined}
5
+ */
6
+ (function(window) {
7
+ if (!window.requestAnimationFrame) {
8
+ var lastTime = 0;
9
+ window.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) {
10
+ var currTime = new Date().getTime();
11
+ var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));
12
+ var id = window.setTimeout(function() {
13
+ callback(currTime + timeToCall);
14
+ }, timeToCall);
15
+ lastTime = currTime + timeToCall;
16
+ return id;
17
+ };
18
+ window.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) {
19
+ clearTimeout(id);
20
+ };
21
+ };
22
+ }(window));