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,99 @@
1
+ /**
2
+ * segmented-controllers
3
+ * @param {type} $
4
+ * @param {type} window
5
+ * @param {type} document
6
+ * @param {type} undefined
7
+ * @returns {undefined}
8
+ */
9
+ (function($, window, document, name, undefined) {
10
+
11
+ var CLASS_CONTROL_ITEM = $.className('control-item');
12
+ var CLASS_SEGMENTED_CONTROL = $.className('segmented-control');
13
+ var CLASS_CONTROL_CONTENT = $.className('control-content');
14
+ var CLASS_TAB_BAR = $.className('bar-tab');
15
+ var CLASS_TAB_ITEM = $.className('tab-item');
16
+ var CLASS_SLIDER_ITEM = $.className('slider-item');
17
+
18
+ var handle = function(event, target) {
19
+ if (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) {
20
+ event.preventDefault(); //stop hash change
21
+ // if (target.hash) {
22
+ return target;
23
+ // }
24
+ }
25
+ return false;
26
+ };
27
+
28
+ $.registerTarget({
29
+ name: name,
30
+ index: 80,
31
+ handle: handle,
32
+ target: false
33
+ });
34
+
35
+ window.addEventListener('tap', function(e) {
36
+
37
+ var targetTab = $.targets.tab;
38
+ if (!targetTab) {
39
+ return;
40
+ }
41
+ var activeTab;
42
+ var activeBodies;
43
+ var targetBody;
44
+ var className = $.className('active');
45
+ var classSelector = '.' + className;
46
+ var segmentedControl = targetTab.parentNode;
47
+
48
+ for (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) {
49
+ if (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) {
50
+ activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM);
51
+ break;
52
+ } else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) {
53
+ activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM);
54
+ }
55
+ }
56
+
57
+
58
+ if (activeTab) {
59
+ activeTab.classList.remove(className);
60
+ }
61
+
62
+ var isLastActive = targetTab === activeTab;
63
+ if (targetTab) {
64
+ targetTab.classList.add(className);
65
+ }
66
+
67
+ if (!targetTab.hash) {
68
+ return;
69
+ }
70
+
71
+ targetBody = document.getElementById(targetTab.hash.replace('#', ''));
72
+
73
+ if (!targetBody) {
74
+ return;
75
+ }
76
+ if (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover
77
+ targetTab.classList[isLastActive ? 'remove' : 'add'](className);
78
+ return;
79
+ }
80
+ if (isLastActive) { //same
81
+ return;
82
+ }
83
+ var parentNode = targetBody.parentNode;
84
+ activeBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector);
85
+ for (var i = 0; i < activeBodies.length; i++) {
86
+ var activeBody = activeBodies[i];
87
+ activeBody.parentNode === parentNode && activeBody.classList.remove(className);
88
+ }
89
+
90
+ targetBody.classList.add(className);
91
+
92
+ var contents = targetBody.parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT);
93
+ $.trigger(targetBody, $.eventName('shown', name), {
94
+ tabNumber: Array.prototype.indexOf.call(contents, targetBody)
95
+ });
96
+ e.detail && e.detail.gesture.preventDefault(); //fixed hashchange
97
+ });
98
+
99
+ })(mui, window, document, 'tab');
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Slider (TODO resize)
3
+ * @param {type} $
4
+ * @param {type} window
5
+ * @returns {undefined}
6
+ */
7
+ (function($, window) {
8
+ var CLASS_SLIDER = $.className('slider');
9
+ var CLASS_SLIDER_GROUP = $.className('slider-group');
10
+ var CLASS_SLIDER_LOOP = $.className('slider-loop');
11
+ var CLASS_SLIDER_INDICATOR = $.className('slider-indicator');
12
+ var CLASS_ACTION_PREVIOUS = $.className('action-previous');
13
+ var CLASS_ACTION_NEXT = $.className('action-next');
14
+ var CLASS_SLIDER_ITEM = $.className('slider-item');
15
+
16
+ var SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;
17
+ var SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;
18
+ var SELECTOR_SLIDER_PROGRESS_BAR = $.classSelector('.slider-progress-bar');
19
+
20
+
21
+ var Slider = function(element, options) {
22
+ this.element = element;
23
+ this.options = $.extend({
24
+ slideshowDelay: 0, //设置为0,则不定时轮播
25
+ factor: 1
26
+ }, options);
27
+
28
+ this.init();
29
+ };
30
+ Slider.prototype.init = function() {
31
+ // this.initDuplicate();
32
+ this.initEvent();
33
+ this.initTimer();
34
+ };
35
+ Slider.prototype.refresh = function(options) {
36
+ var newOptions = $.extend({
37
+ slideshowDelay: 0, //设置为0,则不定时轮播
38
+ factor: 1
39
+ }, options);
40
+ if (this.options.slideshowDelay !== newOptions.slideshowDelay) {
41
+ this.options.slideshowDelay = newOptions.slideshowDelay;
42
+ if (this.options.slideshowDelay) {
43
+ this.nextItem();
44
+ }
45
+ }
46
+ };
47
+ //TODO 暂时不做自动clone
48
+ // Slider.prototype.initDuplicate = function() {
49
+ // var self = this;
50
+ // var element = self.element;
51
+ // if (element.classList.contains(CLASS_SLIDER_LOOP)) {
52
+ // var duplicates = element.getElementsByClassName(CLASS_SLIDER_ITEM_DUPLICATE);
53
+ // }
54
+ // };
55
+ Slider.prototype.initEvent = function() {
56
+ var self = this;
57
+ var element = self.element;
58
+ var slider = element.parentNode;
59
+ self.translateX = 0;
60
+ self.sliderWidth = element.offsetWidth;
61
+ self.isLoop = element.classList.contains(CLASS_SLIDER_LOOP);
62
+ self.sliderLength = element.querySelectorAll(SELECTOR_SLIDER_ITEM).length;
63
+ self.progressBarWidth = 0;
64
+ self.progressBar = slider.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);
65
+ if (self.progressBar) {
66
+ self.progressBarWidth = self.progressBar.offsetWidth;
67
+ }
68
+ //slider
69
+ var isDragable = false;
70
+ self.isSwipeable = false;
71
+ slider.addEventListener('dragstart', function(event) {
72
+ var detail = event.detail;
73
+ var direction = detail.direction;
74
+ if (direction === 'left' || direction === 'right') { //reset
75
+ isDragable = true;
76
+ self.translateX = self.lastTranslateX = 0;
77
+ self.scrollX = self.getScroll();
78
+ self.sliderWidth = element.offsetWidth;
79
+ self.isLoop = element.classList.contains(CLASS_SLIDER_LOOP);
80
+ self.sliderLength = element.querySelectorAll(SELECTOR_SLIDER_ITEM).length;
81
+ if (self.progressBar) {
82
+ self.progressBarWidth = self.progressBar.offsetWidth;
83
+ }
84
+ self.maxTranslateX = ((self.sliderLength - 1) * self.sliderWidth);
85
+ event.detail.gesture.preventDefault();
86
+ var isStopPropagation = true;
87
+ if (!self.isLoop) {
88
+ if (direction === 'right' && self.scrollX === 0) {
89
+ isStopPropagation = false;
90
+ } else if (direction === 'left' && self.scrollX === -self.maxTranslateX) {
91
+ isStopPropagation = false;
92
+ }
93
+ }
94
+ isStopPropagation && event.stopPropagation();
95
+ }
96
+ });
97
+ slider.addEventListener('drag', function(event) {
98
+ if (isDragable) {
99
+ self.dragItem(event);
100
+ event.stopPropagation();
101
+ }
102
+
103
+ });
104
+ slider.addEventListener('dragend', function(event) {
105
+ if (isDragable) {
106
+ self.gotoItem(self.getSlideNumber());
107
+ isDragable = self.isSwipeable = false;
108
+ event.stopPropagation();
109
+ }
110
+ });
111
+ // slider.addEventListener('flick', $.stopPropagation);
112
+ slider.addEventListener('swipeleft', function(event) {
113
+ if (self.isSwipeable) {
114
+ //stop dragend
115
+ $.gestures.stoped = true;
116
+ self.nextItem();
117
+ isDragable = self.isSwipeable = false;
118
+ }
119
+ event.stopPropagation();
120
+ });
121
+ slider.addEventListener('swiperight', function(event) {
122
+ if (self.isSwipeable) {
123
+ //stop dragend
124
+ $.gestures.stoped = true;
125
+ self.prevItem();
126
+ isDragable = self.isSwipeable = false;
127
+ }
128
+ event.stopPropagation();
129
+ });
130
+ slider.addEventListener('slide', function(e) {
131
+ var detail = e.detail;
132
+ detail.slideNumber = detail.slideNumber || 0;
133
+ var number = slider.querySelector($.classSelector('.slider-indicator .number span'));
134
+ if (number) {
135
+ number.innerText = (detail.slideNumber + 1);
136
+ }
137
+
138
+ var indicators = slider.querySelectorAll($.classSelector('.slider-indicator .indicator'));
139
+ for (var i = 0, len = indicators.length; i < len; i++) {
140
+ indicators[i].classList[i === detail.slideNumber ? 'add' : 'remove']($.className('active'));
141
+ }
142
+
143
+ var controlItems = slider.querySelectorAll($.classSelector('.control-item'));
144
+ for (var i = 0, len = controlItems.length; i < len; i++) {
145
+ controlItems[i].classList[i === detail.slideNumber ? 'add' : 'remove']($.className('active'));
146
+ }
147
+ e.stopPropagation();
148
+ });
149
+ slider.addEventListener($.eventName('shown', 'tab'), function(e) { //tab
150
+ self.gotoItem(-(e.detail.tabNumber || 0));
151
+ });
152
+ //indicator
153
+ var indicator = element.parentNode.querySelector(SELECTOR_SLIDER_INDICATOR);
154
+ if (indicator) {
155
+ indicator.addEventListener('tap', function(event) {
156
+ var target = event.target;
157
+ if (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {
158
+ self[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();
159
+ event.stopPropagation();
160
+ }
161
+ });
162
+ }
163
+ };
164
+ Slider.prototype.dragItem = function(event) {
165
+ var self = this;
166
+ var detail = event.detail;
167
+
168
+ if (detail.deltaX !== detail.lastDeltaX) {
169
+ var translate = (detail.deltaX * self.options.factor + self.scrollX);
170
+ self.element.style['-webkit-transition-duration'] = '0';
171
+ var min = 0;
172
+ var max = -self.maxTranslateX;
173
+ if (self.isLoop) {
174
+ min = self.sliderWidth;
175
+ max = max + min;
176
+ }
177
+ if (translate > min || translate < max) {
178
+ self.isSwipeable = false;
179
+ return;
180
+ }
181
+ if (!self.requestAnimationFrame) {
182
+ self.updateTranslate();
183
+ }
184
+ self.isSwipeable = true;
185
+ self.translateX = translate;
186
+ }
187
+ if (self.timer) {
188
+ clearTimeout(self.timer);
189
+ }
190
+ self.timer = setTimeout(function() {
191
+ self.initTimer();
192
+ }, 100);
193
+
194
+ };
195
+ Slider.prototype.updateTranslate = function() {
196
+ var self = this;
197
+ if (self.lastTranslateX !== self.translateX) {
198
+ self.setTranslate(self.translateX);
199
+ self.lastTranslateX = self.translateX;
200
+ }
201
+ self.requestAnimationFrame = requestAnimationFrame(function() {
202
+ self.updateTranslate();
203
+ });
204
+ };
205
+ Slider.prototype.setTranslate = function(x) {
206
+ this.element.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';
207
+ this.updateProcess(x);
208
+ };
209
+ Slider.prototype.updateProcess = function(translate) {
210
+ var progressBarWidth = this.progressBarWidth;
211
+ if (progressBarWidth) {
212
+ translate = Math.abs(translate);
213
+ this.setProcess(translate * (progressBarWidth / this.sliderWidth));
214
+ }
215
+ };
216
+ Slider.prototype.setProcess = function(translate) {
217
+ var progressBar = this.progressBar;
218
+ if (progressBar) {
219
+ progressBar.style.webkitTransform = 'translate3d(' + translate + 'px,0,0)';
220
+ }
221
+ };
222
+ /**
223
+ * 下一个轮播
224
+ * @returns {Number}
225
+ */
226
+ Slider.prototype.nextItem = function() {
227
+ this.gotoItem(this.getCurrentSlideNumber('next') - 1);
228
+ };
229
+ /**
230
+ * 上一个轮播
231
+ * @returns {Number}
232
+ */
233
+ Slider.prototype.prevItem = function() {
234
+ this.gotoItem(this.getCurrentSlideNumber('prev') + 1);
235
+ };
236
+ /**
237
+ * 滑动到指定轮播
238
+ * @param {type} slideNumber
239
+ * @returns {undefined}
240
+ */
241
+ Slider.prototype.gotoItem = function(slideNumber) {
242
+ if (!(slideNumber === 1 && this.getSlideNumber() === slideNumber)) {
243
+ slideNumber = slideNumber > 0 ? -slideNumber : slideNumber;
244
+ }
245
+ var self = this;
246
+ var slider = self.element;
247
+ var slideLength = self.sliderLength;
248
+ if (self.isLoop) { //循环轮播需减去2个过渡元素
249
+ slideLength = slideLength - 2;
250
+ } else {
251
+ slideLength = slideLength - 1;
252
+ slideNumber = Math.min(0, slideNumber);
253
+ slideNumber = Math.max(slideNumber, -slideLength);
254
+ }
255
+ if (self.requestAnimationFrame) {
256
+ cancelAnimationFrame(self.requestAnimationFrame);
257
+ self.requestAnimationFrame = null;
258
+ }
259
+ var offsetX = Math.max(slideNumber, -slideLength) * slider.offsetWidth;
260
+ slider.style['-webkit-transition-duration'] = '.2s';
261
+ self.setTranslate(offsetX);
262
+ // slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)';
263
+ // self.updateProcess(offsetX);
264
+ var fixedLoop = function() {
265
+ slider.style['-webkit-transition-duration'] = '0';
266
+ slider.style.webkitTransform = 'translate3d(' + (slideNumber * slider.offsetWidth) + 'px,0,0)';
267
+ slider.removeEventListener('webkitTransitionEnd', fixedLoop);
268
+ };
269
+ slider.removeEventListener('webkitTransitionEnd', fixedLoop);
270
+ if (self.isLoop) { //循环轮播自动重新定位
271
+ if (slideNumber === 1 || slideNumber === -slideLength) {
272
+ slideNumber = slideNumber === 1 ? (-slideLength + 1) : 0;
273
+ slider.addEventListener('webkitTransitionEnd', fixedLoop);
274
+ }
275
+ }
276
+ $.trigger(slider.parentNode, 'slide', {
277
+ slideNumber: Math.abs(slideNumber)
278
+ });
279
+ this.initTimer();
280
+ };
281
+
282
+ /**
283
+ * 计算轮播应该处于的位置(四舍五入)
284
+ * @returns {Number}
285
+ */
286
+ Slider.prototype.getSlideNumber = function() {
287
+ return (Math.round(this.getScroll() / this.sliderWidth));
288
+ };
289
+ /**
290
+ * 当前所处位置
291
+ * @param {type} type
292
+ * @returns {unresolved}
293
+ */
294
+ Slider.prototype.getCurrentSlideNumber = function(type) {
295
+ return (Math[type === 'next' ? 'ceil' : 'floor'](this.getScroll() / this.sliderWidth));
296
+ };
297
+ /**
298
+ * 获取当前滚动位置
299
+ * @returns {Number}
300
+ */
301
+ Slider.prototype.getScroll = function() {
302
+ var slider = this.element;
303
+ var scroll = 0;
304
+ if ('webkitTransform' in slider.style) {
305
+ var result = $.parseTranslate(slider.style.webkitTransform);
306
+ scroll = result ? result.x : 0;
307
+ }
308
+ return scroll;
309
+ };
310
+ /**
311
+ * 自动轮播
312
+ * @returns {undefined}
313
+ */
314
+ Slider.prototype.initTimer = function() {
315
+ var self = this;
316
+ var slideshowDelay = self.options.slideshowDelay;
317
+ if (slideshowDelay) {
318
+ var slider = self.element;
319
+ var slidershowTimer = slider.getAttribute('data-slidershowTimer');
320
+ slidershowTimer && window.clearTimeout(slidershowTimer);
321
+ slidershowTimer = window.setTimeout(function() {
322
+ if (!slider) {
323
+ return;
324
+ }
325
+ //仅slider显示状态进行自动轮播
326
+ if (!!(slider.offsetWidth || slider.offsetHeight)) {
327
+ self.nextItem();
328
+ //下一个
329
+ }
330
+ self.initTimer();
331
+ }, slideshowDelay);
332
+ slider.setAttribute('data-slidershowTimer', slidershowTimer);
333
+ }
334
+
335
+ };
336
+
337
+ $.fn.slider = function(options) {
338
+ //新增定时轮播 重要:remove该轮播时,请获取data-slidershowTimer然后手动clearTimeout
339
+ var slider = null;
340
+ this.each(function() {
341
+ var sliderGroup = this;
342
+ if (this.classList.contains(CLASS_SLIDER)) {
343
+ sliderGroup = this.querySelector('.' + CLASS_SLIDER_GROUP);
344
+ }
345
+ var id = sliderGroup.getAttribute('data-slider');
346
+ if (!id) {
347
+ id = ++$.uuid;
348
+ $.data[id] = slider = new Slider(sliderGroup, options);
349
+ sliderGroup.setAttribute('data-slider', id);
350
+ } else {
351
+ slider = $.data[id];
352
+ if (slider && options) {
353
+ slider.refresh(options);
354
+ }
355
+ }
356
+ });
357
+ return slider;
358
+ };
359
+ $.ready(function() {
360
+ $($.classSelector('.slider-group')).slider();
361
+ });
362
+ })(mui, window);
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Toggles switch
3
+ * @param {type} $
4
+ * @param {type} window
5
+ * @param {type} name
6
+ * @returns {undefined}
7
+ */
8
+ (function($, window, name) {
9
+
10
+ var CLASS_SWITCH = $.className('switch');
11
+ var CLASS_SWITCH_HANDLE = $.className('switch-handle');
12
+ var CLASS_ACTIVE = $.className('active');
13
+ var CLASS_DRAGGING = $.className('dragging');
14
+
15
+ var CLASS_DISABLED = $.className('disabled');
16
+
17
+ var SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE;
18
+
19
+ var handle = function(event, target) {
20
+ if (target.classList && target.classList.contains(CLASS_SWITCH)) {
21
+ return target;
22
+ }
23
+ return false;
24
+ };
25
+
26
+ $.registerTarget({
27
+ name: name,
28
+ index: 100,
29
+ handle: handle,
30
+ target: false
31
+ });
32
+
33
+
34
+ var Toggle = function(element) {
35
+ this.element = element;
36
+ this.classList = this.element.classList;
37
+ this.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE);
38
+ this.init();
39
+ this.initEvent();
40
+ };
41
+ Toggle.prototype.init = function() {
42
+ this.toggleWidth = this.element.offsetWidth;
43
+ this.handleWidth = this.handle.offsetWidth;
44
+ this.handleX = this.toggleWidth - this.handleWidth - 3;
45
+ };
46
+ Toggle.prototype.initEvent = function() {
47
+ this.element.addEventListener('touchstart', this);
48
+ this.element.addEventListener('drag', this);
49
+ this.element.addEventListener('swiperight', this);
50
+ this.element.addEventListener('touchend', this);
51
+ this.element.addEventListener('touchcancel', this);
52
+
53
+ };
54
+ Toggle.prototype.handleEvent = function(e) {
55
+ if (this.classList.contains(CLASS_DISABLED)) {
56
+ return;
57
+ }
58
+ switch (e.type) {
59
+ case 'touchstart':
60
+ this.start(e);
61
+ break;
62
+ case 'drag':
63
+ this.drag(e);
64
+ break;
65
+ case 'swiperight':
66
+ this.swiperight();
67
+ break;
68
+ case 'touchend':
69
+ case 'touchcancel':
70
+ this.end(e);
71
+ break;
72
+ }
73
+ };
74
+ Toggle.prototype.start = function(e) {
75
+ this.classList.add(CLASS_DRAGGING);
76
+ if (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时,width为0,需要重新初始化
77
+ this.init();
78
+ }
79
+ };
80
+ Toggle.prototype.drag = function(e) {
81
+ var detail = e.detail;
82
+ if (!this.isDragging) {
83
+ if (detail.direction === 'left' || detail.direction === 'right') {
84
+ this.isDragging = true;
85
+ this.lastChanged = undefined;
86
+ this.initialState = this.classList.contains(CLASS_ACTIVE);
87
+ }
88
+ }
89
+ if (this.isDragging) {
90
+ this.setTranslateX(detail.deltaX);
91
+ e.stopPropagation();
92
+ detail.gesture.preventDefault();
93
+ }
94
+ };
95
+ Toggle.prototype.swiperight = function(e) {
96
+ if (this.isDragging) {
97
+ e.stopPropagation();
98
+ }
99
+ };
100
+ Toggle.prototype.end = function(e) {
101
+ this.classList.remove(CLASS_DRAGGING);
102
+ if (this.isDragging) {
103
+ this.isDragging = false;
104
+ e.stopPropagation();
105
+ $.trigger(this.element, 'toggle', {
106
+ isActive: this.classList.contains(CLASS_ACTIVE)
107
+ });
108
+ } else {
109
+ this.toggle();
110
+ }
111
+ };
112
+ Toggle.prototype.toggle = function() {
113
+ var classList = this.classList;
114
+ if (classList.contains(CLASS_ACTIVE)) {
115
+ classList.remove(CLASS_ACTIVE);
116
+ this.handle.style.webkitTransform = 'translate3d(0,0,0)';
117
+ } else {
118
+ classList.add(CLASS_ACTIVE);
119
+ this.handle.style.webkitTransform = 'translate3d(' + this.handleX + 'px,0,0)';
120
+ }
121
+ $.trigger(this.element, 'toggle', {
122
+ isActive: this.classList.contains(CLASS_ACTIVE)
123
+ });
124
+ };
125
+ Toggle.prototype.setTranslateX = $.animationFrame(function(x) {
126
+ if (!this.isDragging) {
127
+ return;
128
+ }
129
+ var isChanged = false;
130
+ if ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) {
131
+ isChanged = true;
132
+ }
133
+ if (this.lastChanged !== isChanged) {
134
+ if (isChanged) {
135
+ this.handle.style.webkitTransform = 'translate3d(' + (this.initialState ? 0 : this.handleX) + 'px,0,0)';
136
+ this.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE);
137
+ } else {
138
+ this.handle.style.webkitTransform = 'translate3d(' + (this.initialState ? this.handleX : 0) + 'px,0,0)';
139
+ this.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE);
140
+ }
141
+ this.lastChanged = isChanged;
142
+ }
143
+
144
+ });
145
+
146
+ $.fn['switch'] = function(options) {
147
+ var switchApis = [];
148
+ this.each(function() {
149
+ var switchApi = null;
150
+ var id = this.getAttribute('data-switch');
151
+ if (!id) {
152
+ id = ++$.uuid;
153
+ $.data[id] = new Toggle(this);
154
+ this.setAttribute('data-switch', id);
155
+ } else {
156
+ switchApi = $.data[id];
157
+ }
158
+ switchApis.push(switchApi);
159
+ });
160
+ return switchApis.length > 1 ? switchApis : switchApis[0];
161
+ };
162
+ $.ready(function() {
163
+ $('.' + CLASS_SWITCH)['switch']();
164
+ });
165
+ })(mui, window, 'toggle');