Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: HazemKhaled/BasketsMap
base: 7354940c03
...
head fork: HazemKhaled/BasketsMap
compare: 44ea086a22
  • 6 commits
  • 18 files changed
  • 0 commit comments
  • 1 contributor
View
63 Resources/app.js
@@ -2,6 +2,12 @@ var apiUrl = 'http://baskets.hazemkhaled.com/api.php?';
var mapLocation = {};
Ti.Geolocation.preferredProvider = "gps";
+//include Parse module
+var parse = require('libs/parse');
+
+//create Parse Client
+var client = new parse.Client('WhemYSEgHchd4ds8bp1pNGRmrxg14TOAMeAbmYSL', 'rMvGHaeJvV0nQnaJ8idkb46eLgpZx6TVRHKNJrRl');
+
var mainWin = Titanium.UI.createWindow({
title : L('title'),
backgroundColor : '#fff'
@@ -93,15 +99,17 @@ addBtn.addEventListener('click', function() {
addBtn.addEventListener('click', function() {
- var addReq = Titanium.Network.createHTTPClient();
- addReq.open("POST", apiUrl);
-
- addReq.onload = function() {
-
- var json = this.responseText;
- var response = JSON.parse(json);
-
- if(response.result > 0) {
+ client.create({
+ className : 'points',
+ object : {
+ "title" : pinTitleFld.value,
+ "geoPoint" : {
+ "__type" : "GeoPoint",
+ "latitude" : mapLocation.latitude,
+ "longitude" : mapLocation.longitude
+ }
+ },
+ success : function(response) {
var t3 = Titanium.UI.create2DMatrix();
t3 = t3.scale(0);
@@ -111,17 +119,11 @@ addBtn.addEventListener('click', function() {
});
mapView.selectAnnotation(annotation);
annotation.title = pinTitleFld.value;
- } else {
- alert(L('add_error'));
+ },
+ error : function(response, xhr) {
+ alert(L('Error!'));
}
-
- };
- var prams = {
- latitude : mapLocation.latitude,
- longitude : mapLocation.longitude,
- title : pinTitleFld.value,
- };
- addReq.send(prams);
+ });
});
addWin.add(addBtn);
@@ -189,7 +191,7 @@ aboutBtn.addEventListener('click', function() {
aboutWin.open(a);
});
//if(Ti.Platform.osname == 'iphone' || Ti.Platform.osname == 'ipad') {
- mainWin.add(aboutBtn);
+mainWin.add(aboutBtn);
//}
var mapView = Titanium.Map.createView({
@@ -246,6 +248,27 @@ mapView.addEventListener('regionChanged', function(e) {
if(startRequestingOnServer === false) {
startRequestingOnServer = true;
+ /*client.get({
+ className : 'points',
+ payload : {
+ 'where' : JSON.stringify({
+ 'longitude' : {
+ "$gte" : e.longitude - e.longitudeDelta,
+ "$lte" : e.longitude + e.longitudeDelta
+ },
+ 'latitude' : {
+ "$gte" : e.latitude - e.latitudeDelta,
+ "$lte" : e.longitude + e.latitudeDelta
+ }
+ })
+ },
+ success : function(response) {
+ alert(JSON.stringify(response));
+ },
+ error : function(response, xhr) {
+ alert(response);
+ }
+ });*/
mapReq.open("GET", apiUrl + "longitude=" + e.longitude + "&longitudeDelta=" + e.longitudeDelta + "&latitude=" + e.latitude + "&latitudeDelta=" + e.latitudeDelta);
mapReq.send();
View
261 Resources/libs/parse.js
@@ -0,0 +1,261 @@
+//Public client interface
+function Client(applicationId, masterKey) {
+ this.applicationId = applicationId;
+ this.masterKey = masterKey;
+}
+
+exports.Client = Client;
+
+//Parse API endpoint
+var ENDPOINT = 'https://api.parse.com/1/classes/';
+
+/*
+ * Make an authenticated client request. Argument hash:
+ *
+ * url: url endpoint to hit
+ * method: HTTP method to use
+ * payload (optional): A JavaScript object to JSON-serialize
+ * success (optional): a function to be called on a successful request
+ * error (optional): a function to be called on a server error
+ */
+Client.prototype.request = function(args) {
+ var xhr = Ti.Network.createHTTPClient(), that = this;
+
+ xhr.onload = function() {
+ var response = JSON.parse(this.responseText);
+ (args.success) ? args.success(response) : Ti.API.debug('Parse Client: Request Successful');
+ };
+ xhr.onerror = function() {
+ var response = JSON.parse(this.responseText);
+ (args.error) ? args.error(response, this) : Ti.API.error('Parse Client: Request Failed: ' + args.url);
+ };
+
+ if(args.method == 'PUT' || args.method == 'POST') {
+ xhr.open(args.method, ENDPOINT + args.url);
+ var authString = Base64.encode(that.applicationId + ':' + that.masterKey);
+ xhr.setRequestHeader('Authorization', 'Basic ' + authString);
+ xhr.setRequestHeader('Content-Type', 'application/json');
+ xhr.send(JSON.stringify(args.payload));
+ } else {
+ var body = ENDPOINT + args.url + "?";
+ var paramMap = args.payload || {};
+ for(var a in paramMap) {
+ body += Titanium.Network.encodeURIComponent(a) + '=' + Titanium.Network.encodeURIComponent(paramMap[a]) + '&';
+ }
+
+ Ti.API.debug(body);
+
+ xhr.open(args.method, body);
+ var authString = Base64.encode(that.applicationId + ':' + that.masterKey);
+ xhr.setRequestHeader('Authorization', 'Basic ' + authString);
+ xhr.setRequestHeader('Content-Type', 'application/json');
+ xhr.send();
+ }
+
+};
+
+/*
+ * Create a Parse object. Argument hash:
+ *
+ * className: string name of the Parse class
+ * object: The object to save
+ * success: function to call on success
+ * error: function to call on error
+ *
+ */
+Client.prototype.create = function(args) {
+ this.request({
+ url : args.className,
+ method : 'POST',
+ payload : args.object,
+ success : args.success,
+ error : args.error
+ });
+};
+
+/*
+ * Get a Parse object. Argument hash:
+ *
+ * className: string name of the Parse class
+ * objectId: The object ID of the object you're getting
+ * success: function to call on success
+ * error: function to call on error
+ *
+ */
+Client.prototype.get = function(args) {
+ this.request({
+ url : args.className + (args.objectId ? '/' + args.objectId : ''),
+ method : 'GET',
+ payload : args.payload, //< --- NEW
+ success : function(response) {
+ args.success(response);
+ },
+ error : args.error
+ });
+};
+
+/*
+ * Update a Parse object. Argument hash:
+ *
+ * className: string name of the Parse class
+ * objectId: The object ID of the object you're getting
+ * object: the fields on the object you would like to update
+ * success: function to call on success
+ * error: function to call on error
+ *
+ */
+Client.prototype.update = function(args) {
+ this.request({
+ url : args.className + '/' + args.objectId,
+ method : 'PUT',
+ payload : args.object,
+ success : args.success,
+ error : args.error
+ });
+};
+
+/*
+ * Delete a Parse object. Argument hash:
+ *
+ * className: string name of the Parse class
+ * objectId: The object ID of the object you're deleting
+ * success: function to call on success
+ * error: function to call on error
+ *
+ */
+Client.prototype.remove = function(args) {
+ this.request({
+ url : args.className + '/' + args.objectId,
+ method : 'DELETE',
+ success : args.success,
+ error : args.error
+ });
+};
+
+//a non-jacked base 64 encode implementation
+var Base64 = {
+ // private property
+ _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
+
+ // public method for encoding
+ encode : function(input) {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = Base64._utf8_encode(input);
+
+ while(i < input.length) {
+
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if(isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if(isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ output = output + Base64._keyStr.charAt(enc1) + Base64._keyStr.charAt(enc2) + Base64._keyStr.charAt(enc3) + Base64._keyStr.charAt(enc4);
+
+ }
+
+ return output;
+ },
+
+ // public method for decoding
+ decode : function(input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+ while(i < input.length) {
+
+ enc1 = Base64._keyStr.indexOf(input.charAt(i++));
+ enc2 = Base64._keyStr.indexOf(input.charAt(i++));
+ enc3 = Base64._keyStr.indexOf(input.charAt(i++));
+ enc4 = Base64._keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if(enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if(enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+
+ }
+
+ output = Base64._utf8_decode(output);
+
+ return output;
+
+ },
+
+ // private method for UTF-8 encoding
+ _utf8_encode : function(string) {
+ string = string.replace(/\r\n/g, "\n");
+ var utftext = "";
+
+ for(var n = 0; n < string.length; n++) {
+
+ var c = string.charCodeAt(n);
+
+ if(c < 128) {
+ utftext += String.fromCharCode(c);
+ } else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ } else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ }
+
+ return utftext;
+ },
+
+ // private method for UTF-8 decoding
+ _utf8_decode : function(utftext) {
+ var string = "";
+ var i = 0;
+ var c = c1 = c2 = 0;
+
+ while(i < utftext.length) {
+
+ c = utftext.charCodeAt(i);
+
+ if(c < 128) {
+ string += String.fromCharCode(c);
+ i++;
+ } else if((c > 191) && (c < 224)) {
+ c2 = utftext.charCodeAt(i + 1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ } else {
+ c2 = utftext.charCodeAt(i + 1);
+ c3 = utftext.charCodeAt(i + 2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+
+ }
+ return string;
+ }
+};
View
4 i18n/ar/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">سلات القمامة</string>
+</resources>
View
4 i18n/de/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Baskets Karte</string>
+</resources>
View
4 i18n/en/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Baskets Map</string>
+</resources>
View
4 i18n/es/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Cestas Mapa</string>
+</resources>
View
4 i18n/fr/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Paniers Carte</string>
+</resources>
View
4 i18n/hu/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Kosarak Térkép</string>
+</resources>
View
4 i18n/it/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Cesti Mappa</string>
+</resources>
View
4 i18n/ja/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">バスケットの地図</string>
+</resources>
View
4 i18n/ko/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">바구니지도</string>
+</resources>
View
4 i18n/nl/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Manden Kaart</string>
+</resources>
View
4 i18n/pt/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Cestas Mapa</string>
+</resources>
View
4 i18n/ru/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">корзины Карта</string>
+</resources>
View
4 i18n/sv/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">Korgar Karta</string>
+</resources>
View
4 i18n/zh-CN/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">篮地图</string>
+</resources>
View
4 i18n/zh-TW/app.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+ <string name="appname">籃地圖</string>
+</resources>
View
8 tiapp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<ti:app xmlns:ti="http://ti.appcelerator.org">
- <sdk-version>1.8.1</sdk-version>
+ <sdk-version>1.8.2</sdk-version>
<deployment-targets>
<target device="mobileweb">false</target>
<target device="iphone">true</target>
@@ -10,7 +10,7 @@
</deployment-targets>
<id>com.hazemkhaled.baskets</id>
<name>Baskets Map</name>
- <version>2.0</version>
+ <version>2.1</version>
<publisher>hazemkhaled</publisher>
<url>http://baskets.hazemkhaled.com</url>
<description>find location for the nearest Garbage</description>
@@ -22,7 +22,7 @@
<statusbar-hidden>false</statusbar-hidden>
<fullscreen>false</fullscreen>
<navbar-hidden>false</navbar-hidden>
- <analytics>false</analytics>
+ <analytics>true</analytics>
<guid>f4afa00c-6e50-499c-8db8-b7525be8ec88</guid>
<iphone>
<orientations device="iphone">
@@ -35,7 +35,7 @@
<android xmlns:android="http://schemas.android.com/apk/res/android">
<tool-api-level>8</tool-api-level>
<manifest android:installLocation="preferExternal"
- android:versionCode="11" android:versionName="1.1">
+ android:versionCode="21" android:versionName="2.1">
<uses-sdk android:minSdkVersion="7"/>
</manifest>
</android>

No commit comments for this range

Something went wrong with that request. Please try again.