Permalink
Browse files

Initial Commit

  • Loading branch information...
0 parents commit 5b43c07f3a6fd29a82fdab39cd0f0b5b31c43a15 @blounty committed Sep 9, 2011
@@ -0,0 +1,5 @@
+Ext.regApplication
+ name: 'app',
+ launch: ->
+ @launched = true
+ @views.viewport = new @views.Viewport()
@@ -0,0 +1,55 @@
+window.Parse = class Parse
+ constructor: (applicationId, masterKey) ->
+ @applicationId = applicationId
+ @masterKey = masterKey
+ @endpoint = 'https://api.parse.com/1/classes/'
+ create: (args) ->
+ Ext.Ajax.request {
+ url: @endpoint + args.className
+ method: 'POST'
+ jsonData: args.object
+ success: ((result) -> args.success (JSON.parse result.responseText))
+ error: args.error
+ headers : { Authorization : "Basic " + (Base64.encode @applicationId + ":" + @masterKey) }
+ }
+ get: (args) ->
+ Ext.Ajax.request {
+ url: @endpoint + args.className + '/' + args.objectId
+ method: 'GET'
+ success: ((result) -> args.success (JSON.parse result.responseText))
+ error: args.error
+ headers : { Authorization : "Basic " + (Base64.encode @applicationId + ":" + @masterKey) }
+ }
+ update: (args) ->
+ Ext.Ajax.request {
+ url: @endpoint + args.className + '/' + args.objectId
+ method: 'POST'
+ jsonData: args.object
+ success: ((result) -> args.success (JSON.parse result.responseText))
+ error: args.error
+ headers:
+ {
+ Authorization : "Basic " + (Base64.encode @applicationId + ":" + @masterKey)
+ 'X-HTTP-Method-Override' : 'PUT'
+ }
+ }
+ delete: (args) ->
+ Ext.Ajax.request {
+ url: @endpoint + args.className + '/' + args.objectId
+ method: 'POST'
+ success: ((result) -> args.success (JSON.parse result.responseText))
+ error: args.error
+ headers:
+ {
+ Authorization : "Basic " + (Base64.encode @applicationId + ":" + @masterKey)
+ 'X-HTTP-Method-Override' : 'DELETE'
+ }
+ }
+
+
+
+
+
+
+
+
@@ -0,0 +1,95 @@
+app.views.Home = Ext.extend Ext.Panel, {
+ id: 'home'
+ fullscreen: true
+ dockedItems: [
+ dock: 'top'
+ xtype: 'toolbar'
+ title: 'Sencha and Parse'
+ items:[
+ {
+ xtype: 'spacer'
+ }
+ ]
+ ]
+ items:[
+ {
+ html: 'Hello Parse from Sencha'
+ }
+ {
+ xtype: 'button'
+ text: 'create person'
+ handler: ->
+ app.views.Home.lastObject = {
+ gender: 'male'
+ firstName: 'James'
+ lastName: 'Jones'
+ }
+ parse = app.views.Home.getParseClient()
+ parse.create {
+ object: app.views.Home.lastObject
+ success: app.views.Home.objectCreated
+ error: app.views.Home.objectCreatedError
+ className: 'Person'
+ }
+ }
+ {
+ xtype: 'button'
+ text: 'get last person'
+ handler: ->
+ parse = app.views.Home.getParseClient()
+ parse.get {
+ objectId: app.views.Home.lastObjectId
+ success: app.views.Home.objectRetrieved
+ error: app.views.Home.objectRetrievedError
+ className: 'Person'
+ }
+ }
+ {
+ xtype: 'button'
+ text: 'update last person'
+ handler: ->
+ parse = app.views.Home.getParseClient()
+ app.views.Home.lastObject.firstName = 'Alex'
+ parse.update {
+ objectId: app.views.Home.lastObjectId
+ object: app.views.Home.lastObject
+ success: app.views.Home.objectUpdated
+ error: app.views.Home.objectUpdatedError
+ className: 'Person'
+ }
+ }
+ {
+ xtype: 'button'
+ text: 'delete last person'
+ handler: ->
+ parse = app.views.Home.getParseClient()
+ parse.delete {
+ objectId: app.views.Home.lastObjectId
+ success: app.views.Home.objectDeleted
+ error: app.views.Home.objectDeletedError
+ className: 'Person'
+ }
+ }
+ ]
+ getParseClient: ->
+ if !app.views.Home.parse
+ app.views.Home.parse = new Parse 'YourApplicationID', 'YourMasterKey'
+ app.views.Home.parse
+ objectCreated: (result) ->
+ app.views.Home.lastObjectId = result.objectId
+ alert "objectId created " + app.views.Home.lastObjectId
+ objectCreatedError: (result) ->
+ alert "A creation error occured"
+ objectRetrieved: (result) ->
+ alert result.firstName + ' ' + result.lastName
+ objectRetrievedError: (result) ->
+ alert "A retrieval error occured"
+ objectUpdated: (result) ->
+ alert app.views.Home.lastObject.firstName + ' ' + app.views.Home.lastObject.lastName
+ objectUpdatedError: (result) ->
+ alert "An update error occured"
+ objectDeleted: (result) ->
+ alert "object " + app.views.Home.lastObjectId + " deleted"
+ objectUpdatedError: (result) ->
+ alert "A delete error occured"
+}
@@ -0,0 +1,15 @@
+app.views.Viewport = Ext.extend Ext.Panel, {
+ fullscreen: true,
+ layout: 'card',
+ cardSwitchAnimation: 'slide',
+ initComponent: ->
+ Ext.apply app.views, {
+ Home: new app.views.Home()
+ }
+ Ext.apply @, {
+ items: [
+ app.views.Home
+ ]
+ }
+ app.views.Viewport.superclass.initComponent.apply @, arguments
+}
@@ -0,0 +1,21 @@
+<!DOCTYPE html >
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Sencha and Parse</title>
+ <script src="js/sencha-touch.js" type="text/javascript"></script>
+ <script src="js/app.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/base64.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/parse.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/views/viewport.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/views/home.js" type="text/javascript" charset="utf-8"></script>
+
+
+ <link href="css/sencha-touch.css" rel="stylesheet" type="text/css"></link>
+
+</head>
+<body>
+
+</body>
+</html>
@@ -0,0 +1,9 @@
+(function() {
+ Ext.regApplication({
+ name: 'app',
+ launch: function() {
+ this.launched = true;
+ return this.views.viewport = new this.views.Viewport();
+ }
+ });
+}).call(this);
@@ -0,0 +1,128 @@
+window.Base64 = function() {
+ return {
+ // private property
+ _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
+
+ // 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;
+ },
+ // public method for encoding
+ encode : function (input) {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = this._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 +
+ this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
+ this._keyStr.charAt(enc3) + this._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 = this._keyStr.indexOf(input.charAt(i++));
+ enc2 = this._keyStr.indexOf(input.charAt(i++));
+ enc3 = this._keyStr.indexOf(input.charAt(i++));
+ enc4 = this._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 = this._utf8_decode(output);
+ return output;
+ }
+ };
+}();
Oops, something went wrong. Retry.

0 comments on commit 5b43c07

Please sign in to comment.