diff options
| author | Rene Ae <aehtyb@gmail.com> | 2015-12-11 03:05:10 -0600 |
|---|---|---|
| committer | Rene Ae <aehtyb@gmail.com> | 2015-12-11 03:05:10 -0600 |
| commit | b1775dd32d1e0113eba81cfdb9a5626295eebc4e (patch) | |
| tree | 19a2f4ea004d11037e494e863a39ac834d364429 /StoneIsland/platforms/android | |
| parent | 3442b2821d30dd1ca6c6db1ba089ae3f5c95a758 (diff) | |
| parent | 053473394e6e0990c68a924adbb7c7d75f35973d (diff) | |
Merge branch 'android' of https://github.com/okfocus/stone-island into android
Diffstat (limited to 'StoneIsland/platforms/android')
38 files changed, 698 insertions, 85 deletions
diff --git a/StoneIsland/platforms/android/AndroidManifest.xml b/StoneIsland/platforms/android/AndroidManifest.xml index 22019d7b..bcf48a32 100755 --- a/StoneIsland/platforms/android/AndroidManifest.xml +++ b/StoneIsland/platforms/android/AndroidManifest.xml @@ -35,6 +35,27 @@ </intent-filter> </service> <service android:exported="false" android:name="com.adobe.phonegap.push.RegistrationIntentService" /> + <service android:name="com.parse.PushService" /> + <receiver android:name="com.parse.ParseBroadcastReceiver"> + <intent-filter> + <action android:name="android.intent.action.BOOT_COMPLETED" /> + <action android:name="android.intent.action.USER_PRESENT" /> + </intent-filter> + </receiver> + <receiver android:exported="false" android:name="org.apache.cordova.core.ParsePluginReceiver"> + <intent-filter> + <action android:name="com.parse.push.intent.RECEIVE" /> + <action android:name="com.parse.push.intent.DELETE" /> + <action android:name="com.parse.push.intent.OPEN" /> + </intent-filter> + </receiver> + <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> + <intent-filter> + <action android:name="com.google.android.c2dm.intent.RECEIVE" /> + <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> + <category android:name="us.okfoc.stoneisland" /> + </intent-filter> + </receiver> </application> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> @@ -45,4 +66,6 @@ <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="us.okfoc.stoneisland.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="us.okfoc.stoneisland.permission.C2D_MESSAGE" /> + <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> + <uses-permission android:name="android.permission.GET_ACCOUNTS" /> </manifest> diff --git a/StoneIsland/platforms/android/android.json b/StoneIsland/platforms/android/android.json index 23a02f95..62549cb8 100755 --- a/StoneIsland/platforms/android/android.json +++ b/StoneIsland/platforms/android/android.json @@ -47,6 +47,10 @@ { "xml": "<feature name=\"PushNotification\"><param name=\"android-package\" value=\"com.adobe.phonegap.push.PushPlugin\" /></feature>", "count": 1 + }, + { + "xml": "<feature name=\"ParsePlugin\"><param name=\"android-package\" value=\"org.apache.cordova.core.ParsePlugin\" /></feature>", + "count": 1 } ] } @@ -80,30 +84,38 @@ "/manifest": [ { "xml": "<uses-permission android:name=\"android.permission.INTERNET\" />", - "count": 1 + "count": 2 }, { "xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />", - "count": 1 + "count": 2 }, { "xml": "<uses-permission android:name=\"android.permission.WAKE_LOCK\" />", - "count": 1 + "count": 2 }, { "xml": "<uses-permission android:name=\"android.permission.VIBRATE\" />", - "count": 1 + "count": 2 }, { "xml": "<uses-permission android:name=\"com.google.android.c2dm.permission.RECEIVE\" />", - "count": 1 + "count": 2 }, { "xml": "<permission android:name=\"us.okfoc.stoneisland.permission.C2D_MESSAGE\" android:protectionLevel=\"signature\" />", - "count": 1 + "count": 2 }, { "xml": "<uses-permission android:name=\"us.okfoc.stoneisland.permission.C2D_MESSAGE\" />", + "count": 2 + }, + { + "xml": "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />", + "count": 1 + }, + { + "xml": "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\" />", "count": 1 } ], @@ -127,6 +139,36 @@ { "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.RegistrationIntentService\"></service>", "count": 1 + }, + { + "xml": "<service android:name=\"com.parse.PushService\" />", + "count": 1 + }, + { + "xml": "<receiver android:name=\"com.parse.ParseBroadcastReceiver\"><intent-filter><action android:name=\"android.intent.action.BOOT_COMPLETED\" /><action android:name=\"android.intent.action.USER_PRESENT\" /></intent-filter></receiver>", + "count": 1 + }, + { + "xml": "<receiver android:exported=\"false\" android:name=\"org.apache.cordova.core.ParsePluginReceiver\"><intent-filter><action android:name=\"com.parse.push.intent.RECEIVE\" /><action android:name=\"com.parse.push.intent.DELETE\" /><action android:name=\"com.parse.push.intent.OPEN\" /></intent-filter></receiver>", + "count": 1 + }, + { + "xml": "<receiver android:name=\"com.parse.GcmBroadcastReceiver\" android:permission=\"com.google.android.c2dm.permission.SEND\"><intent-filter><action android:name=\"com.google.android.c2dm.intent.RECEIVE\" /><action android:name=\"com.google.android.c2dm.intent.REGISTRATION\" /><category android:name=\"us.okfoc.stoneisland\" /></intent-filter></receiver>", + "count": 1 + } + ] + } + }, + "res/values/parseplugin.xml": { + "parents": { + "/*": [ + { + "xml": "<string name=\"parse_app_id\">GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB</string>", + "count": 1 + }, + { + "xml": "<string name=\"parse_client_key\">hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv</string>", + "count": 1 } ] } @@ -170,6 +212,11 @@ }, "phonegap-plugin-push": { "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "com.parse.cordova.core.pushplugin": { + "APP_ID": "GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB", + "CLIENT_KEY": "hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv", + "PACKAGE_NAME": "us.okfoc.stoneisland" } }, "dependent_plugins": {}, @@ -285,6 +332,14 @@ "clobbers": [ "PushNotification" ] + }, + { + "file": "plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js", + "id": "com.parse.cordova.core.pushplugin.ParsePlugin", + "pluginId": "com.parse.cordova.core.pushplugin", + "clobbers": [ + "window.parsePlugin" + ] } ], "plugin_metadata": { @@ -299,6 +354,7 @@ "cordova-plugin-splashscreen": "2.1.0", "cordova-plugin-whitelist": "1.0.0", "cordova-plugin-x-socialsharing": "5.0.7", - "phonegap-plugin-push": "1.4.4" + "phonegap-plugin-push": "1.4.4", + "com.parse.cordova.core.pushplugin": "0.1.0" } }
\ No newline at end of file diff --git a/StoneIsland/platforms/android/assets/www/cordova_plugins.js b/StoneIsland/platforms/android/assets/www/cordova_plugins.js index f3122075..eec97542 100755 --- a/StoneIsland/platforms/android/assets/www/cordova_plugins.js +++ b/StoneIsland/platforms/android/assets/www/cordova_plugins.js @@ -111,6 +111,14 @@ module.exports = [ "clobbers": [ "PushNotification" ] + }, + { + "file": "plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js", + "id": "com.parse.cordova.core.pushplugin.ParsePlugin", + "pluginId": "com.parse.cordova.core.pushplugin", + "clobbers": [ + "window.parsePlugin" + ] } ]; module.exports.metadata = @@ -127,7 +135,8 @@ module.exports.metadata = "cordova-plugin-splashscreen": "2.1.0", "cordova-plugin-whitelist": "1.0.0", "cordova-plugin-x-socialsharing": "5.0.7", - "phonegap-plugin-push": "1.4.4" + "phonegap-plugin-push": "1.4.4", + "com.parse.cordova.core.pushplugin": "0.1.0" } // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/android/assets/www/css/nav.css b/StoneIsland/platforms/android/assets/www/css/nav.css index 923dd85f..f76fb744 100755 --- a/StoneIsland/platforms/android/assets/www/css/nav.css +++ b/StoneIsland/platforms/android/assets/www/css/nav.css @@ -303,6 +303,7 @@ padding-bottom:0px; #selector { display: none; position: absolute; + bottom: 0; left: 0; background: #fff; z-index: 2; width:100%; diff --git a/StoneIsland/platforms/android/assets/www/js/index.js b/StoneIsland/platforms/android/assets/www/js/index.js index 0b3531dd..468c0d7e 100755 --- a/StoneIsland/platforms/android/assets/www/js/index.js +++ b/StoneIsland/platforms/android/assets/www/js/index.js @@ -3,7 +3,7 @@ var app = (function(){ app.init = function(){ - sdk.init({ env: "production" }) + sdk.init({ env: "test" }) app.bind() app.build() diff --git a/StoneIsland/platforms/android/assets/www/js/lib/account/OrdersView.js b/StoneIsland/platforms/android/assets/www/js/lib/account/OrdersView.js index e51676e0..a1b83767 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/account/OrdersView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/account/OrdersView.js @@ -8,8 +8,8 @@ var OrdersView = ScrollableView.extend({ item_template: $("#orders .item_template").html(), events: { - "touchstart .back": "back", - "touchstart .item": "load_single", + "click .back": "back", + "click .item": "load_single", }, initialize: function(){ diff --git a/StoneIsland/platforms/android/assets/www/js/lib/account/PaymentView.js b/StoneIsland/platforms/android/assets/www/js/lib/account/PaymentView.js index 03dc8cbf..8b49ed1d 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/account/PaymentView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/account/PaymentView.js @@ -34,7 +34,7 @@ var PaymentView = FormView.extend({ show: function(){ if (! auth.logged_in()) { return app.router.go("intro") } - app.footer.show("SAVE", "CANCEL") + app.footer.show("SAVE") document.body.className = "payment" this.deferScrollToTop() // this.preload() diff --git a/StoneIsland/platforms/android/assets/www/js/lib/account/ProfileView.js b/StoneIsland/platforms/android/assets/www/js/lib/account/ProfileView.js index ed2f3536..f370c055 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/account/ProfileView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/account/ProfileView.js @@ -15,7 +15,7 @@ var ProfileView = FormView.extend({ show: function(){ if (! auth.logged_in()) { return app.router.go("intro") } - app.footer.show("SAVE", "CANCEL") + app.footer.show("SAVE") document.body.className = "profile" this.preload(auth.user) this.deferScrollToTop() diff --git a/StoneIsland/platforms/android/assets/www/js/lib/account/SettingsView.js b/StoneIsland/platforms/android/assets/www/js/lib/account/SettingsView.js index 7f96bb88..0de80048 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/account/SettingsView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/account/SettingsView.js @@ -13,7 +13,7 @@ var SettingsView = FormView.extend({ show: function(){ if (! auth.logged_in()) { return app.router.go("intro") } - app.footer.show("SAVE", "CANCEL") + app.footer.show("SAVE") document.body.className = "settings" this.deferScrollToTop() }, diff --git a/StoneIsland/platforms/android/assets/www/js/lib/account/ShippingView.js b/StoneIsland/platforms/android/assets/www/js/lib/account/ShippingView.js index 39baf2aa..0bf88025 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/account/ShippingView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/account/ShippingView.js @@ -33,7 +33,7 @@ var ShippingView = FormView.extend({ show: function(){ if (! auth.logged_in()) { return app.router.go("intro") } // this.preload( this.data || this.test_data ) - app.footer.show("SAVE", "CANCEL") + app.footer.show("SAVE") document.body.className = "shipping" this.deferScrollToTop() }, diff --git a/StoneIsland/platforms/android/assets/www/js/lib/auth/LoginView.js b/StoneIsland/platforms/android/assets/www/js/lib/auth/LoginView.js index f96d1e44..8a002632 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/auth/LoginView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/auth/LoginView.js @@ -5,7 +5,7 @@ var LoginView = FormView.extend({ action: sdk.account.login, events: { - "touchstart .newuser": "new_user", + "click .newuser": "new_user", "submit form": "save", }, @@ -21,7 +21,7 @@ var LoginView = FormView.extend({ return } var msg = "* Your personal and payment<br>information will always remain private" - app.footer.show("SUBMIT", "CANCEL") + app.footer.show("SUBMIT") this.$form.get(0).reset() this.$msg.html(msg) document.body.className = "login" diff --git a/StoneIsland/platforms/android/assets/www/js/lib/auth/SignupView.js b/StoneIsland/platforms/android/assets/www/js/lib/auth/SignupView.js index 19c07c32..ff5fa6bb 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/auth/SignupView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/auth/SignupView.js @@ -20,7 +20,7 @@ var SignupView = FormView.extend({ */ events: { - "touchstart .privacy-msg": "privacy_link", + "click .privacy-msg": "privacy_link", "submit form": "save", }, @@ -36,7 +36,7 @@ var SignupView = FormView.extend({ return } var msg = "* Your personal and payment<br>information will always remain private" - app.footer.show("SUBMIT", "CANCEL") + app.footer.show("SUBMIT") this.$form.get(0).reset() this.$msg.html(msg) document.body.className = "signup" diff --git a/StoneIsland/platforms/android/assets/www/js/lib/blogs/ArchiveView.js b/StoneIsland/platforms/android/assets/www/js/lib/blogs/ArchiveView.js index 2802ab9e..254df6d1 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/blogs/ArchiveView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/blogs/ArchiveView.js @@ -5,7 +5,7 @@ var ArchiveView = ScrollableView.extend({ row_template: $("#archive .scroll .template").html(), events: { - "touchstart .item": "pick", + "click .item": "pick", "mousedown .row": "mousedown", "touchstart .row": "touchstart", "mousemove .row": "mousemove", diff --git a/StoneIsland/platforms/android/assets/www/js/lib/blogs/HubView.js b/StoneIsland/platforms/android/assets/www/js/lib/blogs/HubView.js index b2fb16db..49c05ff6 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/blogs/HubView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/blogs/HubView.js @@ -4,11 +4,11 @@ var HubView = ScrollableView.extend({ template: $("#hub .template").html(), events: { - "touchstart .share": "content-share", - "touchstart .store": "store_link", - "touchstart .gallery-left": "gallery_left", - "touchstart .gallery-right": "gallery_right", - "touchstart .play": "play_video", + "click .share": "content-share", + "click .store": "store_link", + "click .gallery-left": "gallery_left", + "click .gallery-right": "gallery_right", + "click .play": "play_video", }, initialize: function(){ diff --git a/StoneIsland/platforms/android/assets/www/js/lib/blogs/StoryView.js b/StoneIsland/platforms/android/assets/www/js/lib/blogs/StoryView.js index ee7193a6..a10c8351 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/blogs/StoryView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/blogs/StoryView.js @@ -6,7 +6,7 @@ var StoryView = ScrollableView.extend({ template: $("#story .template").html(), events: { - "touchstart .links li": "pick", + "click .links li": "pick", }, initialize: function(){ diff --git a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartConfirm.js b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartConfirm.js index f6c7f1f5..b7eb8828 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartConfirm.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartConfirm.js @@ -28,7 +28,7 @@ var CartConfirm = FormView.extend({ show: function(){ document.body.className = "cart" app.cart.el.className = "confirm" - app.footer.show("PLACE ORDER", "CANCEL") + app.footer.show("PLACE ORDER") window.location.hash = "#/cart/confirm" this.deferScrollToTop() diff --git a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartPayment.js b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartPayment.js index 7dd4db7c..ab454246 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartPayment.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartPayment.js @@ -13,8 +13,8 @@ var CartPayment = FormView.extend({ events: { "change [name=SameAsShipping]": "toggle_shipping", - "touchstart .address_dropdown": "toggle_address", - "touchstart .cc_dropdown": "toggle_cc", + "click .address_dropdown": "toggle_address", + "click .cc_dropdown": "toggle_cc", }, initialize: function(opt){ @@ -41,7 +41,7 @@ var CartPayment = FormView.extend({ show: function(){ document.body.className = "cart" app.cart.el.className = "payment" - app.footer.show("CONFIRM >", "CANCEL") + app.footer.show("CONFIRM >") window.location.hash = "#/cart/payment" this.populate() diff --git a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartShipping.js b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartShipping.js index 33b082c0..1f60307e 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartShipping.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartShipping.js @@ -10,7 +10,7 @@ var CartShipping = FormView.extend({ template: $("#cart_shipping .template").html(), events: { - "touchstart .dropdown-wrapper": "toggle_dropdown", + "click .dropdown-wrapper": "toggle_dropdown", }, initialize: function(opt){ @@ -28,7 +28,7 @@ var CartShipping = FormView.extend({ show: function(){ document.body.className = "cart" app.cart.el.className = "shipping" - app.footer.show("PAYMENT >", "CANCEL") + app.footer.show("PAYMENT >") window.location.hash = "#/cart/shipping" this.populate() this.deferScrollToTop() diff --git a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartSummary.js b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartSummary.js index 51b9cb80..01887d95 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartSummary.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartSummary.js @@ -5,7 +5,7 @@ var CartSummary = ScrollableView.extend({ template: $("#cart_summary .template").html(), events: { - "touchstart .remove": "remove_item", + "click .remove": "remove_item", }, data: null, @@ -38,7 +38,7 @@ var CartSummary = ScrollableView.extend({ load: function(){ this.el.className = "loading" - app.footer.show("SHIPPING >", "CANCEL") + app.footer.show("SHIPPING >") app.curtain.show("loading") sdk.cart.get_status({ success: this.populate.bind(this), diff --git a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartView.js b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartView.js index 0e04c025..1b08e418 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartView.js @@ -3,9 +3,9 @@ var CartView = View.extend({ el: "#cart", events: { - "touchstart .summary_step": "show_summary", - "touchstart .shipping_step": "show_shipping", - "touchstart .payment_step": "show_payment", + "click .summary_step": "show_summary", + "click .shipping_step": "show_shipping", + "click .payment_step": "show_payment", }, initialize: function(){ diff --git a/StoneIsland/platforms/android/assets/www/js/lib/nav/SearchView.js b/StoneIsland/platforms/android/assets/www/js/lib/nav/SearchView.js index f21634a5..b477d72f 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/nav/SearchView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/nav/SearchView.js @@ -6,7 +6,7 @@ var SearchView = View.extend({ }, show: function(){ - app.footer.show("SEARCH", "CANCEL") + app.footer.show("SEARCH") document.body.className = "search" }, diff --git a/StoneIsland/platforms/android/assets/www/js/lib/products/ClosedStoreView.js b/StoneIsland/platforms/android/assets/www/js/lib/products/ClosedStoreView.js index c42e1828..5f8c1e84 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/products/ClosedStoreView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/products/ClosedStoreView.js @@ -5,7 +5,7 @@ var ClosedStoreView = View.extend({ storeIsClosed: false, events: { - "touchstart .website_link": "website_link", + "click .website_link": "website_link", }, delay: 8000, diff --git a/StoneIsland/platforms/android/assets/www/js/lib/products/CollectionView.js b/StoneIsland/platforms/android/assets/www/js/lib/products/CollectionView.js index 7a020798..798920d1 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/products/CollectionView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/products/CollectionView.js @@ -49,7 +49,7 @@ var CollectionView = ScrollableView.extend({ return } this.$loader.show() - sdk.product.collection({ + sdk.product.all({ gallery_id: app.gallery_id, success: this.populate.bind(this) }) diff --git a/StoneIsland/platforms/android/assets/www/js/lib/products/ProductView.js b/StoneIsland/platforms/android/assets/www/js/lib/products/ProductView.js index 9d518b11..285e551d 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/products/ProductView.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/products/ProductView.js @@ -4,12 +4,12 @@ var ProductView = ScrollableView.extend({ el: "#product", events: { - "touchstart .fit": "scroll_to_bottom", - "touchstart .size": "select_size", - "touchstart .color": "select_color", - "touchstart .share": "share", - "touchstart .gallery-left": "gallery_left", - "touchstart .gallery-right": "gallery_right", + "click .fit": "scroll_to_bottom", + "click .size": "select_size", + "click .color": "select_color", + "click .share": "share", + "click .gallery-left": "gallery_left", + "click .gallery-right": "gallery_right", }, initialize: function(){ @@ -29,12 +29,21 @@ var ProductView = ScrollableView.extend({ }, show: function(){ - app.footer.show("ADD TO CART", "BUY NOW") + this.showFooter() document.body.className = "product" }, hide: function(){ }, + showFooter: function(){ + if (this.not_available) { + app.footer.show("SOLD OUT") + } + else { + app.footer.show("ADD TO CART", "BUY NOW") + } + }, + item: null, details: null, size: null, @@ -87,7 +96,6 @@ var ProductView = ScrollableView.extend({ } window.location.href = "#/store/" + code - console.log(data) if (data) { app.collection.items[code] = data } @@ -113,38 +121,46 @@ var ProductView = ScrollableView.extend({ var body = descriptions['EditorialDescription'].replace(/<br>/g, "<br><br>") var default_color_id = this.populate_selectors(data, details) - - var color = this.colors[default_color_id] - var color_label = color.label - var sizes = this.find_sizes_for_color(default_color_id) - var size = sizes[0] - var size_label = this.sizes[size].label - this.is_onesize = !! this.sizes[1] + if (this.not_available) { + this.$color.html("NOT AVAILABLE") + this.$size.hide() + } + else { + var color = this.colors[default_color_id] + var color_label = color.label + var sizes = this.find_sizes_for_color(default_color_id) + var size = sizes[0] + var size_label = this.sizes[size].label + + this.color = color + this.size = size + + this.is_onesize = !! this.sizes[1] + this.$size.show().html(size_label) + if (color_label) { + this.$color.html(color_label) + } + else { + this.$color.hide() + } + } + // console.log(color, color_label, size, size_label) this.item = data this.details = details['Item'] this.code = data['DefaultCode10'] - this.color = color - this.size = size - this.$num.html(num) this.$title.html(title) this.$type.html(type) this.$price.html(price) this.$body.html(body) - - this.$size.html(size_label) - if (color_label) { - this.$color.show().html(color_label) - } - else { - this.$color.hide() - } + this.showFooter() + this.deferScrollToTop() }, @@ -167,6 +183,15 @@ var ProductView = ScrollableView.extend({ populate_selectors: function(data, details){ var sizes = {}, colors = {}, size_lookup = {}, default_color + console.log(details['Item']['ModelColors'].length) + if (! details['Item']['ModelColors'].length) { + this.not_available = true + return + } + else { + this.not_available = false + } + details['Item']['ModelColors'].forEach(function(color, index){ if (! default_color || color['Code10'] == data['DefaultCode10']) { default_color = color['ColorId'] @@ -203,7 +228,7 @@ var ProductView = ScrollableView.extend({ }, select_size: function(){ - + if (this.not_available) { return } if (this.is_onesize) { return this.select_color() } if (this.item['Sizes'].length == 0) { return } var sizes = Object.keys(this.sizes).map(function(key){ @@ -217,6 +242,7 @@ var ProductView = ScrollableView.extend({ }, select_color: function(){ + if (this.not_available) { return } if (this.item['Colors'].length == 0) { return } var colors = Object.keys(this.colors).map(function(key){ return this.colors[key] @@ -224,15 +250,19 @@ var ProductView = ScrollableView.extend({ app.selector.select("style", colors, function(color){ this.code = color.code this.$color.html(color.label) + + // UPDATE GALLERY }.bind(this)) }, // ADD TO CART save: function(){ + if (this.not_available) { return } this.add_to_cart({ route: false }) }, // BUY NOW cancel: function(){ + if (this.not_available) { return } this.add_to_cart({ route: true }) }, diff --git a/StoneIsland/platforms/android/assets/www/js/lib/products/Selector.js b/StoneIsland/platforms/android/assets/www/js/lib/products/Selector.js index 1b91cf80..17278a06 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/products/Selector.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/products/Selector.js @@ -4,7 +4,7 @@ var Selector = View.extend({ template: $("#selector .template").html(), events: { - "touchstart .close": "hide", + "click .close": "hide", "click .options div": "pick", }, @@ -27,17 +27,13 @@ var Selector = View.extend({ this.$el.show() app.curtain.show("white") this.visible = true - var selectionXY = $("." + origin).offset() - var selectionWidth = $("." + origin).width() - var selectorHeight = $('#selector').height() - console.log(selectionXY.left) - console.log(selectionXY.top) - - $("#selector").css({"top":(selectionXY.top - selectorHeight),"left":selectionXY.left}) - - - - +// var selectionXY = $("." + origin).offset() +// var selectionWidth = $("." + origin).width() +// var selectorHeight = $('#selector').height() +// console.log(selectionXY.left) +// console.log(selectionXY.top) +// +// $("#selector").css({"top":(selectionXY.top - selectorHeight),"left":selectionXY.left}) }, hide: function(){ diff --git a/StoneIsland/platforms/android/assets/www/js/lib/view/Serializable.js b/StoneIsland/platforms/android/assets/www/js/lib/view/Serializable.js index 921dc275..98aa8ce3 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/view/Serializable.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/view/Serializable.js @@ -4,7 +4,7 @@ var SerializableView = View.extend({ "change select": "update_select", "change [type=date]": "update_date", "focus input": "focus_input", - "touchstart .date-wrapper": "focus_date", + "click .date-wrapper": "focus_date", "submit form": "save", }, diff --git a/StoneIsland/platforms/android/assets/www/js/lib/view/View.js b/StoneIsland/platforms/android/assets/www/js/lib/view/View.js index 70d2c7eb..fe145221 100755 --- a/StoneIsland/platforms/android/assets/www/js/lib/view/View.js +++ b/StoneIsland/platforms/android/assets/www/js/lib/view/View.js @@ -64,9 +64,9 @@ var View = (function($, _){ if (eventName === 'mouseenter' || eventName === 'mouseleave') { continue } - if (eventName === 'click') { - eventName = 'touchstart' - } + if (is_android && eventName === 'click') { + eventName = 'touchstart' + } } if (selector === '') { this.$el.on(eventName, method); diff --git a/StoneIsland/platforms/android/assets/www/js/sdk/_sdk.js b/StoneIsland/platforms/android/assets/www/js/sdk/_sdk.js index b7880e50..017df015 100755 --- a/StoneIsland/platforms/android/assets/www/js/sdk/_sdk.js +++ b/StoneIsland/platforms/android/assets/www/js/sdk/_sdk.js @@ -26,7 +26,7 @@ var sdk = (function(){ } sdk.image = function(code, size){ - return "http://cdn.yoox.biz/" + code.substr(0,2) + "/" + code.substr(0,8) + "_" + size + ".jpg" + return "http://cdn.yoox.biz/" + code.substr(0,2) + "/" + code + "_" + size + ".jpg" } $.ajaxSetup({ diff --git a/StoneIsland/platforms/android/assets/www/js/sdk/product.js b/StoneIsland/platforms/android/assets/www/js/sdk/product.js index 55f1940a..7c12e7d7 100755 --- a/StoneIsland/platforms/android/assets/www/js/sdk/product.js +++ b/StoneIsland/platforms/android/assets/www/js/sdk/product.js @@ -3,6 +3,16 @@ sdk.product = (function(){ var default_gallery = 31617 + product.all = function(opt){ + return $.ajax({ + method: "GET", + url: sdk.path("Search.API/1.2", "search.json"), + data: { format: "full", productsPerPage: 100 }, + success: opt.success, + error: opt.error, + }) + } + product.collection = function(opt){ return $.ajax({ method: "GET", diff --git a/StoneIsland/platforms/android/assets/www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js b/StoneIsland/platforms/android/assets/www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js new file mode 100644 index 00000000..e732f80d --- /dev/null +++ b/StoneIsland/platforms/android/assets/www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js @@ -0,0 +1,97 @@ +cordova.define("com.parse.cordova.core.pushplugin.ParsePlugin", function(require, exports, module) { var parsePlugin = { + + registerCallback: function(ecb, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'registerCallback', + [ecb] + ); + }, + + initialize: function(appId, clientKey, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'initialize', + [appId, clientKey] + ); + }, + + getInstallationId: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'getInstallationId', + [] + ); + }, + + getInstallationObjectId: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'getInstallationObjectId', + [] + ); + }, + + getSubscriptions: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'getSubscriptions', + [] + ); + }, + + subscribe: function(channel, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'subscribe', + [ channel ] + ); + }, + + unsubscribe: function(channel, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'unsubscribe', + [ channel ] + ); + }, + + // iOS only + resetBadge: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'resetBadge', + [] + ); + }, + + // iOS only + trackEvent: function(name, dimensions, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'trackEvent', + [ name, dimensions ] + ); + } +}; +module.exports = parsePlugin; + +}); diff --git a/StoneIsland/platforms/android/libs/Parse-1.9.0.jar b/StoneIsland/platforms/android/libs/Parse-1.9.0.jar Binary files differnew file mode 100644 index 00000000..90ab97cc --- /dev/null +++ b/StoneIsland/platforms/android/libs/Parse-1.9.0.jar diff --git a/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar b/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar Binary files differnew file mode 100644 index 00000000..d04acb3b --- /dev/null +++ b/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar diff --git a/StoneIsland/platforms/android/platform_www/cordova_plugins.js b/StoneIsland/platforms/android/platform_www/cordova_plugins.js index f3122075..eec97542 100755 --- a/StoneIsland/platforms/android/platform_www/cordova_plugins.js +++ b/StoneIsland/platforms/android/platform_www/cordova_plugins.js @@ -111,6 +111,14 @@ module.exports = [ "clobbers": [ "PushNotification" ] + }, + { + "file": "plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js", + "id": "com.parse.cordova.core.pushplugin.ParsePlugin", + "pluginId": "com.parse.cordova.core.pushplugin", + "clobbers": [ + "window.parsePlugin" + ] } ]; module.exports.metadata = @@ -127,7 +135,8 @@ module.exports.metadata = "cordova-plugin-splashscreen": "2.1.0", "cordova-plugin-whitelist": "1.0.0", "cordova-plugin-x-socialsharing": "5.0.7", - "phonegap-plugin-push": "1.4.4" + "phonegap-plugin-push": "1.4.4", + "com.parse.cordova.core.pushplugin": "0.1.0" } // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/android/platform_www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js b/StoneIsland/platforms/android/platform_www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js new file mode 100644 index 00000000..e732f80d --- /dev/null +++ b/StoneIsland/platforms/android/platform_www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js @@ -0,0 +1,97 @@ +cordova.define("com.parse.cordova.core.pushplugin.ParsePlugin", function(require, exports, module) { var parsePlugin = { + + registerCallback: function(ecb, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'registerCallback', + [ecb] + ); + }, + + initialize: function(appId, clientKey, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'initialize', + [appId, clientKey] + ); + }, + + getInstallationId: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'getInstallationId', + [] + ); + }, + + getInstallationObjectId: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'getInstallationObjectId', + [] + ); + }, + + getSubscriptions: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'getSubscriptions', + [] + ); + }, + + subscribe: function(channel, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'subscribe', + [ channel ] + ); + }, + + unsubscribe: function(channel, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'unsubscribe', + [ channel ] + ); + }, + + // iOS only + resetBadge: function(successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'resetBadge', + [] + ); + }, + + // iOS only + trackEvent: function(name, dimensions, successCallback, errorCallback) { + cordova.exec( + successCallback, + errorCallback, + 'ParsePlugin', + 'trackEvent', + [ name, dimensions ] + ); + } +}; +module.exports = parsePlugin; + +}); diff --git a/StoneIsland/platforms/android/res/values/parseplugin.xml b/StoneIsland/platforms/android/res/values/parseplugin.xml new file mode 100644 index 00000000..771d375e --- /dev/null +++ b/StoneIsland/platforms/android/res/values/parseplugin.xml @@ -0,0 +1,5 @@ +<?xml version='1.0' encoding='utf-8'?> +<resources> + <string name="parse_app_id">GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB</string> + <string name="parse_client_key">hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv</string> +</resources> diff --git a/StoneIsland/platforms/android/res/xml/config.xml b/StoneIsland/platforms/android/res/xml/config.xml index 69078b96..177e57d5 100755 --- a/StoneIsland/platforms/android/res/xml/config.xml +++ b/StoneIsland/platforms/android/res/xml/config.xml @@ -34,6 +34,9 @@ <feature name="PushNotification"> <param name="android-package" value="com.adobe.phonegap.push.PushPlugin" /> </feature> + <feature name="ParsePlugin"> + <param name="android-package" value="org.apache.cordova.core.ParsePlugin" /> + </feature> <allow-intent href="market:*" /> <name>Stone Island</name> <description> diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePlugin.java b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePlugin.java new file mode 100644 index 00000000..0ae772be --- /dev/null +++ b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePlugin.java @@ -0,0 +1,216 @@ +package org.apache.cordova.core; + +import android.app.Application; +import android.util.Log; + +import java.util.Set; + +import org.apache.cordova.CallbackContext; +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.CordovaWebView; +import org.apache.cordova.CordovaInterface; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import com.parse.Parse; +import com.parse.ParseInstallation; +import com.parse.PushService; +import com.parse.ParsePush; + +import android.util.Log; + +public class ParsePlugin extends CordovaPlugin { + + private static final String TAG = "ParsePlugin"; + private static final String ACTION_INITIALIZE = "initialize"; + private static final String ACTION_GET_INSTALLATION_ID = "getInstallationId"; + private static final String ACTION_GET_INSTALLATION_OBJECT_ID = "getInstallationObjectId"; + private static final String ACTION_GET_SUBSCRIPTIONS = "getSubscriptions"; + private static final String ACTION_SUBSCRIBE = "subscribe"; + private static final String ACTION_UNSUBSCRIBE = "unsubscribe"; + private static final String ACTION_REGISTER_CALLBACK = "registerCallback"; + + private static CordovaWebView sWebView; + private static String sEventCallback = null; + private static boolean sForeground = false; + private static JSONObject sLaunchNotification = null; + + public static void initializeParseWithApplication(Application app) { + String appId = getStringByKey(app, "parse_app_id"); + String clientKey = getStringByKey(app, "parse_client_key"); + Parse.enableLocalDatastore(app); + Log.d(TAG, "Initializing with parse_app_id: " + appId + " and parse_client_key:" + clientKey); + Parse.initialize(app, appId, clientKey); + } + + private static String getStringByKey(Application app, String key) { + int resourceId = app.getResources().getIdentifier(key, "string", app.getPackageName()); + return app.getString(resourceId); + } + + @Override + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { + if (action.equals(ACTION_REGISTER_CALLBACK)) { + this.registerCallback(callbackContext, args); + return true; + } + if (action.equals(ACTION_INITIALIZE)) { + this.initialize(callbackContext, args); + return true; + } + if (action.equals(ACTION_GET_INSTALLATION_ID)) { + this.getInstallationId(callbackContext); + return true; + } + + if (action.equals(ACTION_GET_INSTALLATION_OBJECT_ID)) { + this.getInstallationObjectId(callbackContext); + return true; + } + if (action.equals(ACTION_GET_SUBSCRIPTIONS)) { + this.getSubscriptions(callbackContext); + return true; + } + if (action.equals(ACTION_SUBSCRIBE)) { + this.subscribe(args.getString(0), callbackContext); + return true; + } + if (action.equals(ACTION_UNSUBSCRIBE)) { + this.unsubscribe(args.getString(0), callbackContext); + return true; + } + return false; + } + + private void registerCallback(final CallbackContext callbackContext, final JSONArray args) { + cordova.getThreadPool().execute(new Runnable() { + public void run() { + try { + sEventCallback = args.getString(0); + callbackContext.success(); + // if the app was opened from a notification, handle it now that the device is ready + handleLaunchNotification(); + } catch (JSONException e) { + callbackContext.error("JSONException"); + } + } + }); + } + + private void initialize(final CallbackContext callbackContext, final JSONArray args) { + cordova.getThreadPool().execute(new Runnable() { + public void run() { + try { + String appId = args.getString(0); + String clientKey = args.getString(1); + Parse.initialize(cordova.getActivity(), appId, clientKey); + ParseInstallation.getCurrentInstallation().saveInBackground(); + callbackContext.success(); + } catch (JSONException e) { + callbackContext.error("JSONException"); + } + } + }); + } + + private void getInstallationId(final CallbackContext callbackContext) { + cordova.getThreadPool().execute(new Runnable() { + public void run() { + String installationId = ParseInstallation.getCurrentInstallation().getInstallationId(); + callbackContext.success(installationId); + } + }); + } + + private void getInstallationObjectId(final CallbackContext callbackContext) { + cordova.getThreadPool().execute(new Runnable() { + public void run() { + String objectId = ParseInstallation.getCurrentInstallation().getObjectId(); + callbackContext.success(objectId); + } + }); + } + + private void getSubscriptions(final CallbackContext callbackContext) { + cordova.getThreadPool().execute(new Runnable() { + public void run() { + Set<String> subscriptions = PushService.getSubscriptions(cordova.getActivity()); + callbackContext.success(subscriptions.toString()); + } + }); + } + + private void subscribe(final String channel, final CallbackContext callbackContext) { + cordova.getThreadPool().execute(new Runnable() { + public void run() { + ParsePush.subscribeInBackground(channel); + callbackContext.success(); + } + }); + } + + private void unsubscribe(final String channel, final CallbackContext callbackContext) { + cordova.getThreadPool().execute(new Runnable() { + public void run() { + ParsePush.unsubscribeInBackground(channel); + callbackContext.success(); + } + }); + } + + /* + * Use the cordova bridge to call the jsCB and pass it jsonPayload as param + */ + public static void javascriptEventCallback(JSONObject jsonPayload) { + if (sEventCallback != null && !sEventCallback.isEmpty() && sWebView != null) { + String snippet = "javascript:" + sEventCallback + "(" + jsonPayload.toString() + ")"; + Log.v(TAG, "javascriptCB: " + snippet); + sWebView.sendJavascript(snippet); + } + } + + @Override + public void initialize(CordovaInterface cordova, CordovaWebView webView) { + super.initialize(cordova, webView); + sEventCallback = null; + sWebView = this.webView; + sForeground = true; + } + + @Override + public void onDestroy() { + super.onDestroy(); + sEventCallback = null; + sWebView = null; + sForeground = false; + } + + @Override + public void onPause(boolean multitasking) { + super.onPause(multitasking); + sForeground = false; + } + + @Override + public void onResume(boolean multitasking) { + super.onResume(multitasking); + sForeground = true; + } + + public static boolean isInForeground() { + return sForeground; + } + + public static void setLaunchNotification(JSONObject jsonPayload) { + sLaunchNotification = jsonPayload; + } + + private void handleLaunchNotification() { + if (isInForeground() && sLaunchNotification != null) { + javascriptEventCallback(sLaunchNotification); + sLaunchNotification = null; + } + } +} diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePluginReceiver.java b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePluginReceiver.java new file mode 100644 index 00000000..fa917a48 --- /dev/null +++ b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePluginReceiver.java @@ -0,0 +1,61 @@ +package org.apache.cordova.core; + +import com.parse.ParsePushBroadcastReceiver; +import com.parse.ParseAnalytics; + +import android.app.Activity; +import android.app.TaskStackBuilder; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.net.Uri; +import android.util.Log; + +import org.json.JSONObject; +import org.json.JSONException; + +public class ParsePluginReceiver extends ParsePushBroadcastReceiver +{ + private static final String TAG = "ParsePluginReceiver"; + private static final String RECEIVED_IN_FOREGROUND = "receivedInForeground"; + + @Override + protected void onPushReceive(Context context, Intent intent) { + JSONObject pushData = getPushData(intent); + + if (pushData != null) { + if (ParsePlugin.isInForeground()) { + ParsePlugin.javascriptEventCallback(pushData); + } else { + super.onPushReceive(context, intent); + } + } + } + + @Override + protected void onPushOpen(Context context, Intent intent) { + JSONObject pushData = getPushData(intent); + + if (pushData != null) { + if (ParsePlugin.isInForeground()) { + ParseAnalytics.trackAppOpened(intent); + ParsePlugin.javascriptEventCallback(pushData); + } else { + super.onPushOpen(context, intent); + ParsePlugin.setLaunchNotification(pushData); + } + } + } + + private static JSONObject getPushData(Intent intent){ + JSONObject pushData = null; + try { + pushData = new JSONObject(intent.getStringExtra("com.parse.Data")); + pushData.put(RECEIVED_IN_FOREGROUND, ParsePlugin.isInForeground()); + } catch (JSONException e) { + Log.e(TAG, "JSONException while parsing push data:", e); + } finally{ + return pushData; + } + } +} |
