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
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,3 @@
1
+ (function($) {
2
+ //TODO
3
+ })(mui);
@@ -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);