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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a878628587b89fdd9513fde1d79af4204308c421
|
4
|
+
data.tar.gz: 166ef6dd5788da1499ffda6dc0c64826370f2a44
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7ebec06eca54e807b0bf08eb299b0119897bbc5d810c053d146c4e43a86c4c4ae759c06bc24440d93e74b03740efce1761bea00336da214303f481b491f201cd
|
7
|
+
data.tar.gz: 11430bf459db6c08d5ae94b373e5a008ed89e9e3b8ad52e3b6424e313d424ea349e62141e03841bd2e052b56baefbe290c5520f3a2c2346bc6178da5893e7a80
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'MuiAppRails'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
Bundler::GemHelper.install_tasks
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
|
26
|
+
Rake::TestTask.new(:test) do |t|
|
27
|
+
t.libs << 'lib'
|
28
|
+
t.libs << 'test'
|
29
|
+
t.pattern = 'test/**/*_test.rb'
|
30
|
+
t.verbose = false
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
task default: :test
|
Binary file
|
@@ -0,0 +1,26 @@
|
|
1
|
+
/**
|
2
|
+
* actions
|
3
|
+
* @param {type} $
|
4
|
+
* @param {type} name
|
5
|
+
* @returns {undefined}
|
6
|
+
*/
|
7
|
+
(function($, name) {
|
8
|
+
var CLASS_ACTION = $.className('action');
|
9
|
+
|
10
|
+
var handle = function(event, target) {
|
11
|
+
if (target.className && ~target.className.indexOf(CLASS_ACTION)) {
|
12
|
+
event.preventDefault();
|
13
|
+
return target;
|
14
|
+
}
|
15
|
+
return false;
|
16
|
+
};
|
17
|
+
|
18
|
+
$.registerTarget({
|
19
|
+
name: name,
|
20
|
+
index: 50,
|
21
|
+
handle: handle,
|
22
|
+
target: false,
|
23
|
+
isContinue: true
|
24
|
+
});
|
25
|
+
|
26
|
+
})(mui, 'action');
|
@@ -0,0 +1,232 @@
|
|
1
|
+
/**
|
2
|
+
* Input(TODO resize)
|
3
|
+
* @param {type} $
|
4
|
+
* @param {type} window
|
5
|
+
* @param {type} document
|
6
|
+
* @returns {undefined}
|
7
|
+
*/
|
8
|
+
(function($, window, document) {
|
9
|
+
var CLASS_ICON = $.className('icon');
|
10
|
+
var CLASS_ICON_CLEAR = $.className('icon-clear');
|
11
|
+
var CLASS_ICON_SPEECH = $.className('icon-speech');
|
12
|
+
var CLASS_ICON_SEARCH = $.className('icon-search');
|
13
|
+
var CLASS_INPUT_ROW = $.className('input-row');
|
14
|
+
var CLASS_PLACEHOLDER = $.className('placeholder');
|
15
|
+
var CLASS_TOOLTIP = $.className('tooltip');
|
16
|
+
var CLASS_HIDDEN = $.className('hidden');
|
17
|
+
var CLASS_FOCUSIN = $.className('focusin');
|
18
|
+
var SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR;
|
19
|
+
var SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH;
|
20
|
+
var SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER;
|
21
|
+
var SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP;
|
22
|
+
|
23
|
+
var findRow = function(target) {
|
24
|
+
for (; target && target !== document; target = target.parentNode) {
|
25
|
+
if (target.classList && target.classList.contains(CLASS_INPUT_ROW)) {
|
26
|
+
return target;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
return null;
|
30
|
+
};
|
31
|
+
var Input = function(element, options) {
|
32
|
+
this.element = element;
|
33
|
+
this.options = options || {
|
34
|
+
actions: 'clear'
|
35
|
+
};
|
36
|
+
if (~this.options.actions.indexOf('slider')) { //slider
|
37
|
+
this.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN;
|
38
|
+
this.sliderActionSelector = SELECTOR_TOOLTIP;
|
39
|
+
} else { //clear,speech,search
|
40
|
+
if (~this.options.actions.indexOf('clear')) {
|
41
|
+
this.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + (element.value ? '' : (' ' + CLASS_HIDDEN));
|
42
|
+
this.clearActionSelector = SELECTOR_ICON_CLOSE;
|
43
|
+
}
|
44
|
+
if (~this.options.actions.indexOf('speech')) { //only for 5+
|
45
|
+
this.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH;
|
46
|
+
this.speechActionSelector = SELECTOR_ICON_SPEECH;
|
47
|
+
}
|
48
|
+
if (~this.options.actions.indexOf('search')) {
|
49
|
+
this.searchActionClass = CLASS_PLACEHOLDER;
|
50
|
+
this.searchActionSelector = SELECTOR_PLACEHOLDER;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
this.init();
|
54
|
+
};
|
55
|
+
Input.prototype.init = function() {
|
56
|
+
this.initAction();
|
57
|
+
this.initElementEvent();
|
58
|
+
};
|
59
|
+
Input.prototype.initAction = function() {
|
60
|
+
var self = this;
|
61
|
+
|
62
|
+
var row = self.element.parentNode;
|
63
|
+
if (row) {
|
64
|
+
if (self.sliderActionClass) {
|
65
|
+
self.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector);
|
66
|
+
} else {
|
67
|
+
if (self.searchActionClass) {
|
68
|
+
self.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector);
|
69
|
+
self.searchAction.addEventListener('tap', function(e) {
|
70
|
+
$.focus(self.element);
|
71
|
+
e.stopPropagation();
|
72
|
+
});
|
73
|
+
}
|
74
|
+
if (self.speechActionClass) {
|
75
|
+
self.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector);
|
76
|
+
self.speechAction.addEventListener('click', $.stopPropagation);
|
77
|
+
self.speechAction.addEventListener('tap', function(event) {
|
78
|
+
self.speechActionClick(event);
|
79
|
+
});
|
80
|
+
}
|
81
|
+
if (self.clearActionClass) {
|
82
|
+
self.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector);
|
83
|
+
self.clearAction.addEventListener('tap', function(event) {
|
84
|
+
self.clearActionClick(event);
|
85
|
+
});
|
86
|
+
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
};
|
91
|
+
Input.prototype.createAction = function(row, actionClass, actionSelector) {
|
92
|
+
var action = row.querySelector(actionSelector);
|
93
|
+
if (!action) {
|
94
|
+
var action = document.createElement('span');
|
95
|
+
action.className = actionClass;
|
96
|
+
if (actionClass === this.searchActionClass) {
|
97
|
+
action.innerHTML = '<span class="' + CLASS_ICON + ' ' + CLASS_ICON_SEARCH + '"></span>' + this.element.getAttribute('placeholder');
|
98
|
+
this.element.setAttribute('placeholder', '');
|
99
|
+
if (this.element.value.trim()) {
|
100
|
+
row.classList.add($.className('active'));
|
101
|
+
}
|
102
|
+
}
|
103
|
+
row.insertBefore(action, this.element.nextSibling);
|
104
|
+
}
|
105
|
+
return action;
|
106
|
+
};
|
107
|
+
Input.prototype.initElementEvent = function() {
|
108
|
+
var element = this.element;
|
109
|
+
|
110
|
+
if (this.sliderActionClass) {
|
111
|
+
var tooltip = this.sliderAction;
|
112
|
+
//TODO resize
|
113
|
+
var offsetLeft = element.offsetLeft;
|
114
|
+
var width = element.offsetWidth - 28;
|
115
|
+
var tooltipWidth = tooltip.offsetWidth;
|
116
|
+
var distince = Math.abs(element.max - element.min);
|
117
|
+
|
118
|
+
var timer = null;
|
119
|
+
var showTip = function() {
|
120
|
+
tooltip.classList.remove(CLASS_HIDDEN);
|
121
|
+
tooltipWidth = tooltipWidth || tooltip.offsetWidth;
|
122
|
+
var scaleWidth = Math.abs(element.value) / distince * width;
|
123
|
+
tooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px';
|
124
|
+
tooltip.innerText = element.value;
|
125
|
+
if (timer) {
|
126
|
+
clearTimeout(timer);
|
127
|
+
}
|
128
|
+
timer = setTimeout(function() {
|
129
|
+
tooltip.classList.add(CLASS_HIDDEN);
|
130
|
+
}, 1000);
|
131
|
+
};
|
132
|
+
element.addEventListener('input', showTip);
|
133
|
+
element.addEventListener('tap', showTip);
|
134
|
+
element.addEventListener('touchmove', function(e) {
|
135
|
+
e.stopPropagation();
|
136
|
+
});
|
137
|
+
} else {
|
138
|
+
if (this.clearActionClass) {
|
139
|
+
var action = this.clearAction;
|
140
|
+
if (!action) {
|
141
|
+
return;
|
142
|
+
}
|
143
|
+
$.each(['keyup', 'change', 'input', 'focus', 'blur', 'cut', 'paste'], function(index, type) {
|
144
|
+
(function(type) {
|
145
|
+
element.addEventListener(type, function() {
|
146
|
+
action.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN);
|
147
|
+
});
|
148
|
+
})(type);
|
149
|
+
});
|
150
|
+
}
|
151
|
+
if (this.searchActionClass) {
|
152
|
+
element.addEventListener('focus', function() {
|
153
|
+
element.parentNode.classList.add($.className('active'));
|
154
|
+
});
|
155
|
+
element.addEventListener('blur', function() {
|
156
|
+
if (!element.value.trim()) {
|
157
|
+
element.parentNode.classList.remove($.className('active'));
|
158
|
+
}
|
159
|
+
});
|
160
|
+
}
|
161
|
+
}
|
162
|
+
};
|
163
|
+
Input.prototype.clearActionClick = function(event) {
|
164
|
+
var self = this;
|
165
|
+
self.element.value = '';
|
166
|
+
$.focus(self.element);
|
167
|
+
self.clearAction.classList.add(CLASS_HIDDEN);
|
168
|
+
event.preventDefault();
|
169
|
+
};
|
170
|
+
Input.prototype.speechActionClick = function(event) {
|
171
|
+
if (window.plus) {
|
172
|
+
var self = this;
|
173
|
+
var oldValue = self.element.value;
|
174
|
+
self.element.value = '';
|
175
|
+
document.body.classList.add(CLASS_FOCUSIN);
|
176
|
+
plus.speech.startRecognize({
|
177
|
+
engine: 'iFly'
|
178
|
+
}, function(s) {
|
179
|
+
self.element.value += s;
|
180
|
+
$.focus(self.element);
|
181
|
+
plus.speech.stopRecognize();
|
182
|
+
$.trigger(self.element, 'recognized', {
|
183
|
+
value: self.element.value
|
184
|
+
});
|
185
|
+
if (oldValue !== self.element.value) {
|
186
|
+
$.trigger(self.element, 'change');
|
187
|
+
$.trigger(self.element, 'input');
|
188
|
+
}
|
189
|
+
// document.body.classList.remove(CLASS_FOCUSIN);
|
190
|
+
}, function(e) {
|
191
|
+
document.body.classList.remove(CLASS_FOCUSIN);
|
192
|
+
});
|
193
|
+
} else {
|
194
|
+
alert('only for 5+');
|
195
|
+
}
|
196
|
+
event.preventDefault();
|
197
|
+
};
|
198
|
+
$.fn.input = function(options) {
|
199
|
+
this.each(function() {
|
200
|
+
var actions = [];
|
201
|
+
var row = findRow(this.parentNode);
|
202
|
+
if (this.type === 'range' && row.classList.contains($.className('input-range'))) {
|
203
|
+
actions.push('slider');
|
204
|
+
} else {
|
205
|
+
var classList = this.classList;
|
206
|
+
if (classList.contains($.className('input-clear'))) {
|
207
|
+
actions.push('clear');
|
208
|
+
}
|
209
|
+
if (classList.contains($.className('input-speech'))) {
|
210
|
+
actions.push('speech');
|
211
|
+
}
|
212
|
+
if (this.type === 'search' && row.classList.contains($.className('search'))) {
|
213
|
+
actions.push('search');
|
214
|
+
}
|
215
|
+
}
|
216
|
+
var id = this.getAttribute('data-input-' + actions[0]);
|
217
|
+
if (!id) {
|
218
|
+
id = ++$.uuid;
|
219
|
+
$.data[id] = new Input(this, {
|
220
|
+
actions: actions.join(',')
|
221
|
+
});
|
222
|
+
for (var i = 0, len = actions.length; i < len; i++) {
|
223
|
+
this.setAttribute('data-input-' + actions[i], id);
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
});
|
228
|
+
};
|
229
|
+
$.ready(function() {
|
230
|
+
$($.classSelector('.input-row input')).input();
|
231
|
+
});
|
232
|
+
})(mui, window, document);
|
@@ -0,0 +1,37 @@
|
|
1
|
+
/**
|
2
|
+
* Modals
|
3
|
+
* @param {type} $
|
4
|
+
* @param {type} window
|
5
|
+
* @param {type} document
|
6
|
+
* @param {type} name
|
7
|
+
* @returns {undefined}
|
8
|
+
*/
|
9
|
+
(function($, window, document, name) {
|
10
|
+
var CLASS_MODAL = $.className('modal');
|
11
|
+
|
12
|
+
var handle = function(event, target) {
|
13
|
+
if (target.tagName === 'A' && target.hash) {
|
14
|
+
var modal = document.getElementById(target.hash.replace('#', ''));
|
15
|
+
if (modal && modal.classList.contains(CLASS_MODAL)) {
|
16
|
+
return modal;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
return false;
|
20
|
+
};
|
21
|
+
|
22
|
+
$.registerTarget({
|
23
|
+
name: name,
|
24
|
+
index: 50,
|
25
|
+
handle: handle,
|
26
|
+
target: false,
|
27
|
+
isReset: false,
|
28
|
+
isContinue: true
|
29
|
+
});
|
30
|
+
|
31
|
+
window.addEventListener('tap', function(event) {
|
32
|
+
if ($.targets.modal) {
|
33
|
+
event.detail.gesture.preventDefault(); //fixed hashchange
|
34
|
+
$.targets.modal.classList.toggle($.className('active'));
|
35
|
+
}
|
36
|
+
});
|
37
|
+
})(mui, window, document, 'modal');
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/**
|
2
|
+
* TODO mui active
|
3
|
+
*/
|
4
|
+
(function(window) {
|
5
|
+
var active;
|
6
|
+
window.addEventListener('touchstart', function(event) {
|
7
|
+
var target = event.target;
|
8
|
+
var isCellDisabled = false;
|
9
|
+
for (; target && target !== document; target = target.parentNode) {
|
10
|
+
if (target.classList) {
|
11
|
+
var classList = target.classList;
|
12
|
+
if (classList.contains(CLASS_DISABLED)) { //normal
|
13
|
+
isCellDisabled = true;
|
14
|
+
} else if (target.tagName === 'INPUT' || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN)) {
|
15
|
+
isCellDisabled = true;
|
16
|
+
}
|
17
|
+
if (classList.contains(CLASS_TABLE_VIEW_CELL)) {
|
18
|
+
if (!isCellDisabled) {
|
19
|
+
active = target;
|
20
|
+
var link = cell.querySelector('a');
|
21
|
+
if (link && link.parentNode === cell) { //li>a
|
22
|
+
active = link;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
break;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
});
|
30
|
+
})(window);
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/**
|
2
|
+
* 5+ ajax
|
3
|
+
*/
|
4
|
+
(function($) {
|
5
|
+
var originAnchor = document.createElement('a');
|
6
|
+
originAnchor.href = window.location.href;
|
7
|
+
$.plusReady(function() {
|
8
|
+
$.ajaxSettings = $.extend($.ajaxSettings, {
|
9
|
+
xhr: function(settings) {
|
10
|
+
if (settings.crossDomain) { //强制使用plus跨域
|
11
|
+
return new plus.net.XMLHttpRequest();
|
12
|
+
}
|
13
|
+
//仅在webview的url为远程文件,且ajax请求的资源不同源下使用plus.net.XMLHttpRequest
|
14
|
+
if (originAnchor.protocol !== 'file:') {
|
15
|
+
var urlAnchor = document.createElement('a');
|
16
|
+
urlAnchor.href = settings.url;
|
17
|
+
urlAnchor.href = urlAnchor.href;
|
18
|
+
settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host);
|
19
|
+
if (settings.crossDomain) {
|
20
|
+
return new plus.net.XMLHttpRequest();
|
21
|
+
}
|
22
|
+
}
|
23
|
+
return new window.XMLHttpRequest();
|
24
|
+
}
|
25
|
+
});
|
26
|
+
});
|
27
|
+
})(mui);
|
@@ -0,0 +1,277 @@
|
|
1
|
+
/**
|
2
|
+
* mui ajax
|
3
|
+
* @param {type} $
|
4
|
+
* @returns {undefined}
|
5
|
+
*/
|
6
|
+
(function($, window, undefined) {
|
7
|
+
|
8
|
+
var jsonType = 'application/json';
|
9
|
+
var htmlType = 'text/html';
|
10
|
+
var rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
|
11
|
+
var scriptTypeRE = /^(?:text|application)\/javascript/i;
|
12
|
+
var xmlTypeRE = /^(?:text|application)\/xml/i;
|
13
|
+
var blankRE = /^\s*$/;
|
14
|
+
|
15
|
+
$.ajaxSettings = {
|
16
|
+
type: 'GET',
|
17
|
+
beforeSend: $.noop,
|
18
|
+
success: $.noop,
|
19
|
+
error: $.noop,
|
20
|
+
complete: $.noop,
|
21
|
+
context: null,
|
22
|
+
xhr: function(protocol) {
|
23
|
+
return new window.XMLHttpRequest();
|
24
|
+
},
|
25
|
+
accepts: {
|
26
|
+
script: 'text/javascript, application/javascript, application/x-javascript',
|
27
|
+
json: jsonType,
|
28
|
+
xml: 'application/xml, text/xml',
|
29
|
+
html: htmlType,
|
30
|
+
text: 'text/plain'
|
31
|
+
},
|
32
|
+
timeout: 0,
|
33
|
+
processData: true,
|
34
|
+
cache: true
|
35
|
+
};
|
36
|
+
var ajaxBeforeSend = function(xhr, settings) {
|
37
|
+
var context = settings.context
|
38
|
+
if (settings.beforeSend.call(context, xhr, settings) === false) {
|
39
|
+
return false;
|
40
|
+
}
|
41
|
+
};
|
42
|
+
var ajaxSuccess = function(data, xhr, settings) {
|
43
|
+
settings.success.call(settings.context, data, 'success', xhr);
|
44
|
+
ajaxComplete('success', xhr, settings);
|
45
|
+
};
|
46
|
+
// type: "timeout", "error", "abort", "parsererror"
|
47
|
+
var ajaxError = function(error, type, xhr, settings) {
|
48
|
+
settings.error.call(settings.context, xhr, type, error);
|
49
|
+
ajaxComplete(type, xhr, settings);
|
50
|
+
};
|
51
|
+
// status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
|
52
|
+
var ajaxComplete = function(status, xhr, settings) {
|
53
|
+
settings.complete.call(settings.context, xhr, status);
|
54
|
+
};
|
55
|
+
|
56
|
+
var serialize = function(params, obj, traditional, scope) {
|
57
|
+
var type, array = $.isArray(obj),
|
58
|
+
hash = $.isPlainObject(obj);
|
59
|
+
$.each(obj, function(key, value) {
|
60
|
+
type = $.type(value);
|
61
|
+
if (scope) {
|
62
|
+
key = traditional ? scope :
|
63
|
+
scope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']';
|
64
|
+
}
|
65
|
+
// handle data in serializeArray() format
|
66
|
+
if (!scope && array) {
|
67
|
+
params.add(value.name, value.value);
|
68
|
+
}
|
69
|
+
// recurse into nested objects
|
70
|
+
else if (type === "array" || (!traditional && type === "object")) {
|
71
|
+
serialize(params, value, traditional, key);
|
72
|
+
} else {
|
73
|
+
params.add(key, value);
|
74
|
+
}
|
75
|
+
});
|
76
|
+
};
|
77
|
+
var serializeData = function(options) {
|
78
|
+
if (options.processData && options.data && typeof options.data !== "string") {
|
79
|
+
options.data = $.param(options.data, options.traditional);
|
80
|
+
}
|
81
|
+
if (options.data && (!options.type || options.type.toUpperCase() === 'GET')) {
|
82
|
+
options.url = appendQuery(options.url, options.data);
|
83
|
+
options.data = undefined;
|
84
|
+
}
|
85
|
+
};
|
86
|
+
var appendQuery = function(url, query) {
|
87
|
+
if (query === '') {
|
88
|
+
return url;
|
89
|
+
}
|
90
|
+
return (url + '&' + query).replace(/[&?]{1,2}/, '?');
|
91
|
+
};
|
92
|
+
var mimeToDataType = function(mime) {
|
93
|
+
if (mime) {
|
94
|
+
mime = mime.split(';', 2)[0];
|
95
|
+
}
|
96
|
+
return mime && (mime === htmlType ? 'html' :
|
97
|
+
mime === jsonType ? 'json' :
|
98
|
+
scriptTypeRE.test(mime) ? 'script' :
|
99
|
+
xmlTypeRE.test(mime) && 'xml') || 'text';
|
100
|
+
};
|
101
|
+
var parseArguments = function(url, data, success, dataType) {
|
102
|
+
if ($.isFunction(data)) {
|
103
|
+
dataType = success, success = data, data = undefined;
|
104
|
+
}
|
105
|
+
if (!$.isFunction(success)) {
|
106
|
+
dataType = success, success = undefined;
|
107
|
+
}
|
108
|
+
return {
|
109
|
+
url: url,
|
110
|
+
data: data,
|
111
|
+
success: success,
|
112
|
+
dataType: dataType
|
113
|
+
};
|
114
|
+
};
|
115
|
+
$.ajax = function(url, options) {
|
116
|
+
if (typeof url === "object") {
|
117
|
+
options = url;
|
118
|
+
url = undefined;
|
119
|
+
}
|
120
|
+
var settings = options || {};
|
121
|
+
settings.url = url || settings.url;
|
122
|
+
for (var key in $.ajaxSettings) {
|
123
|
+
if (settings[key] === undefined) {
|
124
|
+
settings[key] = $.ajaxSettings[key];
|
125
|
+
}
|
126
|
+
}
|
127
|
+
serializeData(settings);
|
128
|
+
var dataType = settings.dataType;
|
129
|
+
|
130
|
+
if (settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) {
|
131
|
+
settings.url = appendQuery(settings.url, '_=' + $.now());
|
132
|
+
}
|
133
|
+
var mime = settings.accepts[dataType];
|
134
|
+
var headers = {};
|
135
|
+
var setHeader = function(name, value) {
|
136
|
+
headers[name.toLowerCase()] = [name, value];
|
137
|
+
};
|
138
|
+
var protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol;
|
139
|
+
var xhr = settings.xhr(settings);
|
140
|
+
var nativeSetHeader = xhr.setRequestHeader;
|
141
|
+
var abortTimeout;
|
142
|
+
|
143
|
+
setHeader('X-Requested-With', 'XMLHttpRequest');
|
144
|
+
setHeader('Accept', mime || '*/*');
|
145
|
+
if (!!(mime = settings.mimeType || mime)) {
|
146
|
+
if (mime.indexOf(',') > -1) {
|
147
|
+
mime = mime.split(',', 2)[0];
|
148
|
+
}
|
149
|
+
xhr.overrideMimeType && xhr.overrideMimeType(mime);
|
150
|
+
}
|
151
|
+
if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) {
|
152
|
+
setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');
|
153
|
+
}
|
154
|
+
if (settings.headers) {
|
155
|
+
for (var name in settings.headers)
|
156
|
+
setHeader(name, settings.headers[name]);
|
157
|
+
}
|
158
|
+
xhr.setRequestHeader = setHeader;
|
159
|
+
|
160
|
+
xhr.onreadystatechange = function() {
|
161
|
+
if (xhr.readyState === 4) {
|
162
|
+
xhr.onreadystatechange = $.noop;
|
163
|
+
clearTimeout(abortTimeout);
|
164
|
+
var result, error = false;
|
165
|
+
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && protocol === 'file:')) {
|
166
|
+
dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));
|
167
|
+
result = xhr.responseText;
|
168
|
+
try {
|
169
|
+
// http://perfectionkills.com/global-eval-what-are-the-options/
|
170
|
+
if (dataType === 'script') {
|
171
|
+
(1, eval)(result);
|
172
|
+
} else if (dataType === 'xml') {
|
173
|
+
result = xhr.responseXML;
|
174
|
+
} else if (dataType === 'json') {
|
175
|
+
result = blankRE.test(result) ? null : $.parseJSON(result);
|
176
|
+
}
|
177
|
+
} catch (e) {
|
178
|
+
error = e;
|
179
|
+
}
|
180
|
+
|
181
|
+
if (error) {
|
182
|
+
ajaxError(error, 'parsererror', xhr, settings);
|
183
|
+
} else {
|
184
|
+
ajaxSuccess(result, xhr, settings);
|
185
|
+
}
|
186
|
+
} else {
|
187
|
+
ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
};
|
191
|
+
if (ajaxBeforeSend(xhr, settings) === false) {
|
192
|
+
xhr.abort();
|
193
|
+
ajaxError(null, 'abort', xhr, settings);
|
194
|
+
return xhr;
|
195
|
+
}
|
196
|
+
|
197
|
+
if (settings.xhrFields) {
|
198
|
+
for (var name in settings.xhrFields) {
|
199
|
+
xhr[name] = settings.xhrFields[name];
|
200
|
+
}
|
201
|
+
}
|
202
|
+
|
203
|
+
var async = 'async' in settings ? settings.async : true;
|
204
|
+
|
205
|
+
xhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password);
|
206
|
+
|
207
|
+
for (var name in headers) {
|
208
|
+
nativeSetHeader.apply(xhr, headers[name]);
|
209
|
+
}
|
210
|
+
if (settings.timeout > 0) {
|
211
|
+
abortTimeout = setTimeout(function() {
|
212
|
+
xhr.onreadystatechange = $.noop;
|
213
|
+
xhr.abort();
|
214
|
+
ajaxError(null, 'timeout', xhr, settings);
|
215
|
+
}, settings.timeout);
|
216
|
+
}
|
217
|
+
xhr.send(settings.data ? settings.data : null);
|
218
|
+
return xhr;
|
219
|
+
};
|
220
|
+
|
221
|
+
|
222
|
+
$.param = function(obj, traditional) {
|
223
|
+
var params = [];
|
224
|
+
params.add = function(k, v) {
|
225
|
+
this.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));
|
226
|
+
};
|
227
|
+
serialize(params, obj, traditional);
|
228
|
+
return params.join('&').replace(/%20/g, '+');
|
229
|
+
};
|
230
|
+
$.get = function( /* url, data, success, dataType */ ) {
|
231
|
+
return $.ajax(parseArguments.apply(null, arguments));
|
232
|
+
};
|
233
|
+
|
234
|
+
$.post = function( /* url, data, success, dataType */ ) {
|
235
|
+
var options = parseArguments.apply(null, arguments);
|
236
|
+
options.type = 'POST';
|
237
|
+
return $.ajax(options);
|
238
|
+
};
|
239
|
+
|
240
|
+
$.getJSON = function( /* url, data, success */ ) {
|
241
|
+
var options = parseArguments.apply(null, arguments);
|
242
|
+
options.dataType = 'json';
|
243
|
+
return $.ajax(options);
|
244
|
+
};
|
245
|
+
|
246
|
+
$.fn.load = function(url, data, success) {
|
247
|
+
if (!this.length)
|
248
|
+
return this;
|
249
|
+
var self = this,
|
250
|
+
parts = url.split(/\s/),
|
251
|
+
selector,
|
252
|
+
options = parseArguments(url, data, success),
|
253
|
+
callback = options.success;
|
254
|
+
if (parts.length > 1)
|
255
|
+
options.url = parts[0], selector = parts[1];
|
256
|
+
options.success = function(response) {
|
257
|
+
if (selector) {
|
258
|
+
var div = document.createElement('div');
|
259
|
+
div.innerHTML = response.replace(rscript, "");
|
260
|
+
var selectorDiv = document.createElement('div');
|
261
|
+
var childs = div.querySelectorAll(selector);
|
262
|
+
if (childs && childs.length > 0) {
|
263
|
+
for (var i = 0, len = childs.length; i < len; i++) {
|
264
|
+
selectorDiv.appendChild(childs[i]);
|
265
|
+
}
|
266
|
+
}
|
267
|
+
self[0].innerHTML = selectorDiv.innerHTML;
|
268
|
+
} else {
|
269
|
+
self[0].innerHTML = response;
|
270
|
+
}
|
271
|
+
callback && callback.apply(self, arguments);
|
272
|
+
};
|
273
|
+
$.ajax(options);
|
274
|
+
return this;
|
275
|
+
};
|
276
|
+
|
277
|
+
})(mui, window);
|