jqmobi-rails 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +8 -0
  3. data/LICENSE +22 -0
  4. data/README.md +29 -0
  5. data/Rakefile +68 -0
  6. data/jqmobi-rails.gemspec +17 -0
  7. data/lib/jqmobi/rails/engine.rb +6 -0
  8. data/lib/jqmobi/rails/version.rb +7 -0
  9. data/lib/jqmobi/rails.rb +7 -0
  10. data/lib/jqmobi-rails.rb +1 -0
  11. data/vendor/assets/javascripts/jq.mobi.js +1894 -0
  12. data/vendor/assets/javascripts/jq.mobi_ujs.js +393 -0
  13. data/vendor/assets/javascripts/jq.ui.js +3396 -0
  14. data/vendor/assets/javascripts/plugins/jq.actionsheet.js +99 -0
  15. data/vendor/assets/javascripts/plugins/jq.alphatable.js +136 -0
  16. data/vendor/assets/javascripts/plugins/jq.carousel.js +415 -0
  17. data/vendor/assets/javascripts/plugins/jq.css3animate.js +155 -0
  18. data/vendor/assets/javascripts/plugins/jq.drawer.js +224 -0
  19. data/vendor/assets/javascripts/plugins/jq.fx.js +110 -0
  20. data/vendor/assets/javascripts/plugins/jq.passwordBox.js +45 -0
  21. data/vendor/assets/javascripts/plugins/jq.popup.js +201 -0
  22. data/vendor/assets/javascripts/plugins/jq.scroller.js +540 -0
  23. data/vendor/assets/javascripts/plugins/jq.selectBox.js +315 -0
  24. data/vendor/assets/javascripts/plugins/jq.shake.js +39 -0
  25. data/vendor/assets/javascripts/plugins/jq.social.js +113 -0
  26. data/vendor/assets/javascripts/plugins/jq.swipe.js +121 -0
  27. data/vendor/assets/javascripts/plugins/jq.template.js +26 -0
  28. data/vendor/assets/javascripts/plugins/jq.web.min.js +66 -0
  29. data/vendor/assets/stylesheets/plugins/jq.actionsheet.css +57 -0
  30. data/vendor/assets/stylesheets/plugins/jq.popup.css +73 -0
  31. data/vendor/assets/stylesheets/plugins/jq.scroller.css +10 -0
  32. data/vendor/assets/stylesheets/plugins/jq.selectBox.css +35 -0
  33. metadata +77 -0
@@ -0,0 +1,315 @@
1
+ /*
2
+ * Copyright: AppMobi
3
+ * Description: This script will replace all drop downs with friendly select controls. Users can still interact
4
+ * with the old drop down box as normal with javascript, and this will be reflected
5
+
6
+ */
7
+ (function($) {
8
+ $['selectBox'] = {
9
+ oldSelects: {},
10
+ scroller: null,
11
+ getOldSelects: function(elID) {
12
+ if ($.os.android == false)
13
+ return;
14
+ if (!$.fn['scroller']) {
15
+ alert("This library requires jq.web.Scroller");
16
+ return;
17
+ }
18
+ var container = elID && document.getElementById(elID) ? document.getElementById(elID) : document;
19
+ if (!container) {
20
+ alert("Could not find container element for jq.web.selectBox " + elID);
21
+ return;
22
+ }
23
+ var sels = container.getElementsByTagName("select");
24
+ var that = this;
25
+ for (var i = 0; i < sels.length; i++) {
26
+ if (this.oldSelects[sels[i].id])
27
+ continue;
28
+ (function(theSel) {
29
+ var fakeInput = document.createElement("div");
30
+ var selWidth = parseInt(theSel.style.width) > 0 ? parseInt(theSel.style.width) : 100;
31
+ var selHeight = parseInt(theSel.style.height) > 0 ? parseInt(theSel.style.height) : 20;
32
+ fakeInput.style.width = selWidth + "px";
33
+ fakeInput.style.height = selHeight + "px";
34
+ fakeInput.style.position = "absolute";
35
+ fakeInput.style.left = "0px";
36
+ fakeInput.style.top = "0px";
37
+ fakeInput.style.zIndex = "1";
38
+ if (theSel.value)
39
+ fakeInput.innerHTML = theSel.options[theSel.selectedIndex].text;
40
+ fakeInput.style.background = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAeCAIAAABFWWJ4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkM1NjQxRUQxNUFEODExRTA5OUE3QjE3NjI3MzczNDAzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkM1NjQxRUQyNUFEODExRTA5OUE3QjE3NjI3MzczNDAzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzU2NDFFQ0Y1QUQ4MTFFMDk5QTdCMTc2MjczNzM0MDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QzU2NDFFRDA1QUQ4MTFFMDk5QTdCMTc2MjczNzM0MDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6YWbdCAAAAlklEQVR42mIsKChgIBGwAHFPTw/xGkpKSlggrG/fvhGjgYuLC0gyMZAOoPb8//9/0Or59+8f8XrICQN66SEnDOgcp3AgKiqKqej169dY9Hz69AnCuHv3rrKyMrIKoAhcVlBQELt/gIqwstHD4B8quH37NlAQSKKJEwg3iLbBED8kpeshoGcwh5uuri5peoBFMEluAwgwAK+5aXfuRb4gAAAAAElFTkSuQmCC') right top no-repeat";
41
+ fakeInput.style.backgroundColor = "white";
42
+ fakeInput.className = "jqmobiSelect_fakeInput " + theSel.className;
43
+ fakeInput.id = theSel.id + "_jqmobiSelect";
44
+
45
+ fakeInput.style.border = "1px solid gray";
46
+ fakeInput.style.color = "black";
47
+ fakeInput.linkId = theSel.id;
48
+ fakeInput.onclick = function(e) {
49
+ that.initDropDown(this.linkId);
50
+ };
51
+ theSel.parentNode.appendChild(fakeInput);
52
+ theSel.parentNode.style.position = "relative";
53
+ theSel.style.display = "none";
54
+ theSel.style.webkitAppearance = "none";
55
+ // Create listeners to watch when the select value has changed.
56
+ // This is needed so the users can continue to interact as normal,
57
+ // via jquery or other frameworks
58
+ for (var j = 0; j < theSel.options.length; j++) {
59
+ if (theSel.options[j].selected) {
60
+ fakeInput.value = theSel.options[j].text;
61
+ }
62
+ theSel.options[j].watch( "selected", function(prop, oldValue, newValue) {
63
+ if (newValue == true) {
64
+ that.updateMaskValue(this.parentNode.id, this.text, this.value);
65
+ this.parentNode.value = this.value;
66
+ }
67
+ return newValue;
68
+ });
69
+ }
70
+ theSel.watch("selectedIndex", function(prop, oldValue, newValue) {
71
+ if (this.options[newValue]) {
72
+ that.updateMaskValue(this.id, this.options[newValue].text, this.options[newValue].value);
73
+ this.value = this.options[newValue].value;
74
+ }
75
+ return newValue;
76
+ });
77
+
78
+ fakeInput = null;
79
+ imageMask = null;
80
+ that.oldSelects[theSel.id] = 1;
81
+
82
+
83
+ })(sels[i]);
84
+ }
85
+ that.createHtml();
86
+ },
87
+ updateDropdown: function(id) {
88
+ var el = document.getElementById(id);
89
+ if (!el)
90
+ return;
91
+ for (var j = 0; j < el.options.length; j++) {
92
+ if (el.options[j].selected)
93
+ fakeInput.value = el.options[j].text;
94
+ el.options[j].watch("selected", function(prop, oldValue, newValue) {
95
+ if (newValue == true) {
96
+ that.updateMaskValue(this.parentNode.id, this.text, this.value);
97
+ this.parentNode.value = this.value;
98
+ }
99
+ return newValue;
100
+ });
101
+ }
102
+ el = null;
103
+ },
104
+ initDropDown: function(elID) {
105
+
106
+ var that = this;
107
+ var el = document.getElementById(elID);
108
+ if (el.disabled)
109
+ return;
110
+ if (!el || !el.options || el.options.length == 0)
111
+ return;
112
+ var htmlTemplate = "";
113
+ var foundInd = 0;
114
+ document.getElementById("jqmobiSelectBoxScroll").innerHTML = "";
115
+
116
+ document.getElementById("jqmobiSelectBoxHeaderTitle").innerHTML = (el.name != undefined && el.name != "undefined" && el.name != "" ? el.name : elID);
117
+
118
+ for (var j = 0; j < el.options.length; j++) {
119
+ var currInd = j;
120
+ el.options[j].watch( "selected", function(prop, oldValue, newValue) {
121
+ if (newValue == true) {
122
+ that.updateMaskValue(this.parentNode.id, this.text, this.value);
123
+ this.parentNode.value = this.value;
124
+ }
125
+ return newValue;
126
+ });
127
+ var checked = (el.value == el.options[j].value) ? true : false;
128
+ var button = "";
129
+ var bg = "background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0.17, rgb(102,102,102)),color-stop(0.59, rgb(94,94,94)))";
130
+ var foundID;
131
+ var div = document.createElement("div");
132
+ div.className = "jqmobiSelectRow";
133
+ if (checked) {
134
+ bg = "background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0.17, rgb(8,8,8)),color-stop(0.59, rgb(38,38,38)))";
135
+ button = "checked";
136
+ foundInd = j;
137
+ foundID = "id='jqmobiSelectBox_found'";
138
+ div.className = "jqmobiSelectRowFound";
139
+ } else {
140
+ foundID = "";
141
+ }
142
+
143
+ div.id = foundID;
144
+ div.style.cssText = ";line-height:40px;font-size:14px;padding-left:10px;height:40px;width:100%;position:relative;width:100%;border-bottom:1px solid black;background:white;";
145
+ var anchor = document.createElement("a");
146
+ anchor.href = "javascript:;";
147
+ div.tmpValue = j;
148
+ div.onclick = function(e) {
149
+ that.setDropDownValue(elID, this.tmpValue);
150
+ };
151
+ anchor.style.cssText = "text-decoration:none;color:black;";
152
+ anchor.innerHTML = el.options[j].text;
153
+ var span = document.createElement("span");
154
+ span.style.cssText = "float:right;margin-right:20px;margin-top:-2px";
155
+ var rad = document.createElement("button");
156
+ if (foundID) {
157
+ rad.style.cssText = "background: #000;padding: 0px 0px;border-radius:15px;border:3px solid black;";
158
+ rad.className = "jqmobiSelectRowButtonFound";
159
+ } else {
160
+ rad.style.cssText = "background: #ffffff;padding: 0px 0px;border-radius:15px;border:3px solid black;";
161
+ rad.className = "jqmobiSelectRowButton";
162
+ }
163
+ rad.style.width = "20px";
164
+ rad.style.height = "20px";
165
+
166
+ rad.checked = button;
167
+
168
+ anchor.className = "jqmobiSelectRowText";
169
+ span.appendChild(rad);
170
+ div.appendChild(anchor);
171
+ div.appendChild(span);
172
+
173
+ document.getElementById("jqmobiSelectBoxScroll").appendChild(div);
174
+
175
+ span = null;
176
+ rad = null;
177
+ anchor = null;
178
+ }
179
+ try {
180
+ document.getElementById("jqmobiSelectModal").style.display = 'block';
181
+ } catch (e) {
182
+ console.log("Error showing div " + e);
183
+ }
184
+ try {
185
+ if (div) {
186
+ var scrollThreshold = numOnly(div.style.height);
187
+ var offset = numOnly(document.getElementById("jqmobiSelectBoxHeader").style.height);
188
+
189
+ if (foundInd * scrollThreshold + offset >= numOnly(document.getElementById("jqmobiSelectBoxFix").clientHeight) - offset)
190
+ var scrollToPos = (foundInd) * -scrollThreshold + offset;
191
+ else
192
+ scrollToPos = 0;
193
+ this.scroller.scrollTo({
194
+ x: 0,
195
+ y: scrollToPos
196
+ });
197
+ }
198
+ } catch (e) {
199
+ console.log("error init dropdown" + e);
200
+ }
201
+ div = null;
202
+ el = null;
203
+ },
204
+ updateMaskValue: function(elID, value, val2) {
205
+
206
+ var el = document.getElementById(elID + "_jqmobiSelect");
207
+ var el2 = document.getElementById(elID);
208
+ if (el)
209
+ el.innerHTML = value;
210
+ if (typeof (el2.onchange) == "function")
211
+ el2.onchange(val2);
212
+ el = null;
213
+ el2 = null;
214
+ },
215
+ setDropDownValue: function(elID, value) {
216
+
217
+ var el = document.getElementById(elID);
218
+ if (el) {
219
+ el.selectedIndex = value;
220
+ $(el).trigger("change");
221
+ }
222
+ this.scroller.scrollTo({
223
+ x: 0,
224
+ y: 0
225
+ });
226
+ this.hideDropDown();
227
+ el = null;
228
+ },
229
+ hideDropDown: function() {
230
+ document.getElementById("jqmobiSelectModal").style.display = 'none';
231
+ document.getElementById("jqmobiSelectBoxScroll").innerHTML = "";
232
+ },
233
+ createHtml: function() {
234
+ var that = this;
235
+ if (document.getElementById("jqmobiSelectBoxContainer")) {
236
+ return;
237
+ }
238
+ var modalDiv = document.createElement("div");
239
+
240
+ modalDiv.style.cssText = "position:absolute;top:0px;bottom:0px;left:0px;right:0px;background:rgba(0,0,0,.7);z-index:200000;display:none;";
241
+ modalDiv.id = "jqmobiSelectModal";
242
+
243
+ var myDiv = document.createElement("div");
244
+ myDiv.id = "jqmobiSelectBoxContainer";
245
+ myDiv.style.cssText = "position:absolute;top:8%;bottom:10%;display:block;width:90%;margin:auto;margin-left:5%;height:90%px;background:white;color:black;border:1px solid black;border-radius:6px;";
246
+ myDiv.innerHTML = "<div id='jqmobiSelectBoxHeader' style=\"display:block;font-family:'Eurostile-Bold', Eurostile, Helvetica, Arial, sans-serif;color:#fff;font-weight:bold;font-size:18px;line-height:34px;height:34px; text-transform:uppercase;text-align:left;text-shadow:rgba(0,0,0,.9) 0px -1px 1px; padding: 0px 8px 0px 8px; border-top-left-radius:5px; border-top-right-radius:5px; -webkit-border-top-left-radius:5px; -webkit-border-top-right-radius:5px; background:#39424b; margin:1px;\"><div style='float:left;' id='jqmobiSelectBoxHeaderTitle'></div><div style='float:right;width:60px;margin-top:-5px'><div id='jqmobiSelectClose' class='button' style='width:60px;height:32px;line-height:32px;'>Close</div></div></div>";
247
+ myDiv.innerHTML += '<div id="jqmobiSelectBoxFix" style="position:relative;height:90%;background:white;overflow:hidden;width:100%;"><div id="jqmobiSelectBoxScroll"></div></div>';
248
+ var that = this;
249
+ modalDiv.appendChild(myDiv);
250
+
251
+ $(document).ready(function() {
252
+
253
+ if(jq("#jQUi"))
254
+ jq("#jQUi").append(modalDiv);
255
+ else
256
+ document.body.appendChild(modalDiv);
257
+ var close = $("#jqmobiSelectClose").get();
258
+ close.onclick = function() {
259
+ that.hideDropDown();
260
+ };
261
+
262
+ var styleSheet = $("<style>.jqselectscrollBarV{opacity:1 !important;}</style>").get();
263
+ document.body.appendChild(styleSheet);
264
+ try {
265
+ that.scroller = $("#jqmobiSelectBoxScroll").scroller({
266
+ scroller: false,
267
+ verticalScroll: true,
268
+ vScrollCSS: "jqselectscrollBarV"
269
+ });
270
+
271
+ } catch (e) {
272
+ console.log("Error creating select html " + e);
273
+ }
274
+ modalDiv = null;
275
+ myDiv = null;
276
+ styleSheet = null;
277
+ });
278
+ }
279
+ };
280
+ //The following is based off Eli Grey's shim
281
+ //https://gist.github.com/384583
282
+ //We use HTMLElement to not cause problems with other objects
283
+ if (!HTMLElement.prototype.watch) {
284
+ HTMLElement.prototype.watch = function (prop, handler) {
285
+ var oldval = this[prop], newval = oldval,
286
+ getter = function () {
287
+ return newval;
288
+ },
289
+ setter = function (val) {
290
+ oldval = newval;
291
+ return newval = handler.call(this, prop, oldval, val);
292
+ };
293
+ if (delete this[prop]) { // can't watch constants
294
+ if (HTMLElement.defineProperty) { // ECMAScript 5
295
+ HTMLElement.defineProperty(this, prop, {
296
+ get: getter,
297
+ set: setter,
298
+ enumerable: false,
299
+ configurable: true
300
+ });
301
+ } else if (HTMLElement.prototype.__defineGetter__ && HTMLElement.prototype.__defineSetter__) { // legacy
302
+ HTMLElement.prototype.__defineGetter__.call(this, prop, getter);
303
+ HTMLElement.prototype.__defineSetter__.call(this, prop, setter);
304
+ }
305
+ }
306
+ };
307
+ }
308
+ if (!HTMLElement.prototype.unwatch) {
309
+ HTMLElement.prototype.unwatch = function (prop) {
310
+ var val = this[prop];
311
+ delete this[prop]; // remove accessors
312
+ this[prop] = val;
313
+ };
314
+ }
315
+ })(jq);
@@ -0,0 +1,39 @@
1
+ /**
2
+ * jq.web.shake - a library to detect shake events for AppMobi Apps
3
+ & Copyright 2011 - AppMobi
4
+ */
5
+ (function ($) {
6
+ $['shake'] = function (callback, threshold) {
7
+ var accelCounter = 0;
8
+ var timer;
9
+ var prevX = 0;
10
+ var prevY = 0;
11
+ var prevZ = 0;
12
+ if (!threshold) threshold = 5;
13
+ var suc = function (a) {
14
+
15
+ if ((Math.abs(a.x - prevX)) > 0.8) {
16
+ accelCounter++;
17
+ } else if ((Math.abs(a.y - prevY)) > 0.8) {
18
+ accelCounter++;
19
+ } else if ((Math.abs(a.z - prevZ)) > 0.8) {
20
+ accelCounter++;
21
+ }
22
+ prevX = a.x;
23
+ prevY = a.y;
24
+ prevZ = a.z;
25
+ if (accelCounter >= (threshold)) {
26
+ callback();
27
+ accelCounter = 0;
28
+ }
29
+ };
30
+
31
+ if (callback && typeof (callback) == "function") {
32
+ // create the options object and set the frequency to receive samples
33
+ var opt = new AppMobi.AccelerationOptions();
34
+ opt.frequency = 100;
35
+ // use the special timer variable which will send the samples back
36
+ timer = AppMobi.accelerometer.watchAcceleration(suc, opt);
37
+ }
38
+ }
39
+ })(jq)
@@ -0,0 +1,113 @@
1
+ /**
2
+ * jq.web.social - A wrapper library for oAuth requests
3
+ * Copyright 2011 - AppMobi
4
+ */
5
+
6
+ (function($){
7
+ $['social'] = function(serviceName) {
8
+ if (!this instanceof social) {
9
+ return new social(serviceName);
10
+ }
11
+ this.serviceName = serviceName;
12
+ var that = this;
13
+
14
+ document.addEventListener("appMobi.oauth.busy", function(e) {
15
+ if (e.id == that.serviceID)
16
+ that.error(e, "oAuth is busy");
17
+ }, false);
18
+ document.addEventListener("appMobi.oauth.unavailable", function(e) {
19
+ if (e.id == that.serviceID)
20
+ that.error(e, "oAuth is unavailable");
21
+ }, false);
22
+ document.addEventListener("appMobi.oauth.protected.data", function(e) {
23
+ if (e.id == that.serviceID)
24
+ that.processRequest(e);
25
+ }, false);
26
+ };
27
+
28
+ social.prototype = {
29
+ callBacks : {},
30
+ serviceName : null,
31
+ serviceID : null,
32
+ makeRequest : function(serviceUrl, serviceID, method, callback, body,headers) {
33
+ if (!serviceUrl) {
34
+ alert("Please provide a request url");
35
+ return;
36
+ }
37
+ if (!serviceID)
38
+ serviceID = "";
39
+ this.serviceID = this.serviceName + "_" + serviceID;
40
+
41
+ if (!method)
42
+ method = "GET";
43
+ if (!body)
44
+ body = "";
45
+ if (!headers)
46
+ headers = "";
47
+ if (callback) {
48
+ this.callBacks[this.serviceID] = callback;
49
+ }
50
+ try {
51
+ var params = new AppMobi.OAuth.ProtectedDataParameters();
52
+ params.service = this.serviceName;
53
+ params.url = serviceUrl;
54
+ params.id = this.serviceID;
55
+ params.method = method;
56
+ params.body = body;
57
+ params.headers = headers;
58
+
59
+ var rqStr = "";
60
+ for ( var j in params) {
61
+ rqStr += j + " = " + params[j] + "\n";
62
+ }
63
+ AppMobi.oauth.getProtectedData(params);
64
+ } catch (e) {
65
+ alert("Error " + e.message);
66
+ }
67
+ },
68
+ error : function(msg, errorMsg) {
69
+ var rqStr = "";
70
+ for ( var j in errorMsg) {
71
+ rqStr += j + " " + errorMsg[j] + "\n";
72
+ }
73
+ alert("Error with oAuth request " + this.serviceID + " " + rqStr
74
+ + " " + errorMsg);
75
+ },
76
+ processRequest : function(evt) {
77
+ try {
78
+ if (this.callBacks[evt.id]) {
79
+ this.callBacks[evt.id](evt);
80
+ }
81
+ } catch (e) {
82
+ alert("error with cb " + e);
83
+ }
84
+ },
85
+ deAuthorizeService : function(cb) {
86
+
87
+ try {
88
+ var that = this;
89
+ if (cb) {
90
+ that.tmpCB = cb;
91
+ document.addEventListener("appMobi.oauth.unauthorize.service",
92
+ this.deAuthorizeCB, false);
93
+ }
94
+ AppMobi.oauth.unauthorizeService(this.serviceName);
95
+
96
+ } catch (ex) {
97
+ alert("Error removing " + ex);
98
+ }
99
+ },
100
+ deAuthorizeCB : function(evt) {
101
+ if (evt.service == this.serviceName) {
102
+ if (evt.success == false)
103
+ alert(evt.error);
104
+ else if (this.tmpCB) {
105
+ this.tmpCB();
106
+ delete this["tmpCB"];
107
+ }
108
+ }
109
+ document.removeEventListener("appMobi.oauth.unauthorize.service",this.deAuthorizeCB);
110
+ }
111
+ };
112
+ return social;
113
+ })(jq);
@@ -0,0 +1,121 @@
1
+ /**
2
+ * $().swipe - a library to detect swipe events for jqMobi apps
3
+ * Copyright 2011 - AppMobi
4
+ * Executes a callback function and passes in the direction return
5
+ * @string (left,right,up,down)
6
+ */
7
+ (function($) {
8
+ var cache = [];
9
+ $.fn["swipeListener"] = function(opts) {
10
+
11
+ if (opts === undefined && this.length > 0)
12
+ {
13
+ return cache[this[0].id] ? cache[this[0].id] : null;
14
+ }
15
+ for (var i = 0; i < this.length; i++) {
16
+ tmp = new swipeListener(this[i], opts);
17
+ if (this[i].id)
18
+ cache[this[i].id] = tmp;
19
+ }
20
+ return this.length == 1 ? tmp : this;
21
+ };
22
+ var swipeListener = (function() {
23
+ var swipeListener = function(elID, opts) {
24
+ var that = this;
25
+ if (typeof (elID) == "string")
26
+ this.el = document.getElementById(elID);
27
+ else
28
+ this.el = elID
29
+ if (!this.el) {
30
+ alert("Error adding swipe listener for " + elID);
31
+ return;
32
+ }
33
+ this.el.addEventListener('touchmove', function(e) {
34
+ that.touchMove(e);
35
+ }, false);
36
+ this.el.addEventListener('touchend', function(e) {
37
+ that.touchEnd(e);
38
+ }, false);
39
+ for (j in opts) {
40
+ this[j] = opts[j];
41
+ }
42
+ };
43
+
44
+ swipeListener.prototype = {
45
+ startX: 0,
46
+ startY: 0,
47
+ movingX: 0,
48
+ movingY: 0,
49
+ vthreshold: 50,
50
+ hthreshold: 50,
51
+ movingElement: false,
52
+ swipeDirection: {
53
+ up: false,
54
+ down: false,
55
+ left: false,
56
+ right: false
57
+ },
58
+ callBack: null,
59
+
60
+ cancel: function() {
61
+ this.startX = 0;
62
+ this.startY = 0;
63
+ this.movingX = 0;
64
+ this.movingY = 0;
65
+ this.movingElement = false;
66
+ this.swipeDirection = {
67
+ up: false,
68
+ down: false,
69
+ left: false,
70
+ right: false
71
+ };
72
+ },
73
+ touchStart: function(event) {
74
+ if (event.touches[0].target && event.touches[0].target.type != undefined) {
75
+ return;
76
+ }
77
+ if (event.touches.length == 1) {
78
+ this.movingElement = true;
79
+ this.startX = event.touches[0].pageX;
80
+ this.startY = event.touches[0].pageY;
81
+ event.preventDefault();
82
+ }
83
+ },
84
+ touchMove: function(event) {
85
+ if (this.movingElement == false)
86
+ this.touchStart(event);
87
+ event.preventDefault();
88
+ if (event.touches.length > 1 || !this.movingElement) {
89
+ this.cancel();
90
+ return;
91
+ }
92
+ this.movingX = event.touches[0].pageX - this.startX;
93
+ this.movingY = event.touches[0].pageY - this.startY;
94
+ },
95
+ touchEnd: function(event) {
96
+ if (!this.movingElement)
97
+ return;
98
+ event.preventDefault();
99
+ var swiped = false;
100
+ if (Math.abs(this.movingX) > this.hthreshold) {
101
+ this.swipeDirection.right = this.movingX > 0;
102
+ this.swipeDirection.left = this.movingX < 0;
103
+ swiped = true;
104
+ }
105
+ if (Math.abs(this.movingY) > this.vthreshold) {
106
+ this.swipeDirection.up = this.movingY < 0;
107
+ this.swipeDirection.down = this.movingY > 0;
108
+ swiped = true;
109
+ }
110
+ if (swiped && typeof (this.callBack == "function"))
111
+ this.callBack(this.swipeDirection);
112
+
113
+ this.cancel();
114
+ }
115
+ };
116
+ return swipeListener;
117
+ })();
118
+
119
+ // Helper function to get only
120
+
121
+ })(jq);
@@ -0,0 +1,26 @@
1
+ /**
2
+ * jq.web.template - a javascript template library
3
+ * Templating from John Resig - http://ejohn.org/ - MIT Licensed
4
+ */
5
+ (function($) {
6
+ $["template"] = function(tmpl, data) {
7
+ return (template(tmpl, data));
8
+ };
9
+ $["tmpl"] = function(tmpl, data) {
10
+ return $(template(tmpl, data));
11
+ };
12
+ var template = function(str, data) {
13
+ //If there's no data, let's pass an empty object so the user isn't forced to.
14
+ if (!data)
15
+ data = {};
16
+ return tmpl(str, data);
17
+ };
18
+
19
+ (function() {
20
+ var cache = {};
21
+ this.tmpl = function tmpl(str, data) {
22
+ var fn = !/\W/.test(str) ? cache[str] = cache[str] || tmpl(document.getElementById(str).innerHTML) : new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" + "with(obj){p.push('" + str.replace(/[\r\t\n]/g, " ").replace(/'(?=[^%]*%>)/g, "\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g, "',$1,'").split("<%").join("');").split("%>").join("p.push('") + "');}return p.join('');");
23
+ return data ? fn(data) : fn;
24
+ };
25
+ })();
26
+ })(jq);