summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2016-11-08 12:37:03 -0500
committerJules Laplace <jules@okfoc.us>2016-11-08 12:37:03 -0500
commitef4f212fc1482136dba1e690ec589b315b4a377f (patch)
tree0b7e16d72567fafcfd3e08d7c5c591ad07a63458
parent5fa81da81260d65113f57a293b6256d334fe8e2d (diff)
build 0.7.0
-rwxr-xr-xStoneIsland/config.xml2
-rwxr-xr-xStoneIsland/icon.pngbin0 -> 113797 bytes
-rwxr-xr-xStoneIsland/platforms/android/AndroidManifest.xml31
-rwxr-xr-xStoneIsland/platforms/android/android.json225
-rwxr-xr-xStoneIsland/platforms/android/assets/www/cordova_plugins.js121
-rwxr-xr-xStoneIsland/platforms/android/assets/www/css/account.css4
-rwxr-xr-xStoneIsland/platforms/android/assets/www/css/blogs.css2
-rwxr-xr-xStoneIsland/platforms/android/assets/www/css/cart.css2
-rwxr-xr-xStoneIsland/platforms/android/assets/www/css/nav.css65
-rwxr-xr-xStoneIsland/platforms/android/assets/www/css/products.css18
-rwxr-xr-xStoneIsland/platforms/android/assets/www/db.json485
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-568h@2x~iphone.pngbin34225 -> 101919 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-667h.pngbin57532 -> 104550 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-736h.pngbin80929 -> 192301 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape-736h.pngbin79491 -> 195426 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape@2x~ipad.pngbin212234 -> 246786 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape~ipad.pngbin91810 -> 107960 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait@2x~ipad.pngbin212860 -> 244661 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait~ipad.pngbin91713 -> 107123 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default@2x~iphone.pngbin29475 -> 100977 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/img/Resources/splash/Default~iphone.pngbin10394 -> 46074 bytes
-rwxr-xr-xStoneIsland/platforms/android/assets/www/index.html14
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/index.js53
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/_router.js2
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/account/AccountView.js62
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/account/OrdersView.js5
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/account/PaymentView.js19
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/account/ProfileView.js5
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/account/SettingsView.js5
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/account/ShippingView.js14
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/auth/LoginView.js2
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/auth/SignupView.js9
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/blogs/ArchiveView.js6
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/blogs/BlogView.js32
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/blogs/HubView.js163
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/blogs/StoryView.js20
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/cart/CartConfirm.js4
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/cart/CartPayment.js5
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/cart/CartShipping.js1
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/cart/CartSummary.js4
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/cart/CartThanks.js5
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/cart/CartView.js6
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/etc/backup_db.js551
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/etc/geo.js8
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/etc/push.js1
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/nav/AddressView.js5
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/nav/HeaderView.js4
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/nav/NavView.js7
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/products/ClosedStoreView.js17
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/products/CollectionView.js56
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/products/GalleryView.js4
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/products/ProductView.js81
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/products/Selector.js21
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/view/Scrollable.js2
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/lib/view/Serializable.js10
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/sdk/address.js4
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/sdk/auth.js44
-rwxr-xr-xStoneIsland/platforms/android/assets/www/js/sdk/product.js25
-rwxr-xr-xStoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/console-via-logger.js189
-rwxr-xr-xStoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/logger.js357
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js26
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js4
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js60
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-geolocation/www/PositionError.js (renamed from StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js)27
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-geolocation/www/android/geolocation.js73
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js155
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/Connection.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/network.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js16
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/ionic-plugin-keyboard/www/android/keyboard.js62
-rwxr-xr-xStoneIsland/platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js231
-rwxr-xr-xStoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle21
-rwxr-xr-xStoneIsland/platforms/android/platform_www/cordova_plugins.js121
-rwxr-xr-xStoneIsland/platforms/android/platform_www/plugins/com.ionic.keyboard/www/keyboard.js39
-rwxr-xr-xStoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js189
-rwxr-xr-xStoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/logger.js357
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js26
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js4
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/android/notification.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/notification.js60
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js (renamed from StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js)27
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-geolocation/www/android/geolocation.js73
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js155
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/Connection.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/network.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-splashscreen/www/splashscreen.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js16
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/ionic-plugin-keyboard/www/android/keyboard.js62
-rwxr-xr-xStoneIsland/platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js231
-rwxr-xr-xStoneIsland/platforms/android/project.properties3
-rw-r--r--StoneIsland/platforms/android/res/drawable-hdpi/ic_action_next_item.pngbin0 -> 593 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-hdpi/ic_action_previous_item.pngbin0 -> 599 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-hdpi/ic_action_remove.pngbin0 -> 438 bytes
-rwxr-xr-xStoneIsland/platforms/android/res/drawable-hdpi/icon.pngbin10523 -> 7963 bytes
-rwxr-xr-xStoneIsland/platforms/android/res/drawable-ldpi/icon.pngbin5732 -> 3204 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-mdpi/ic_action_next_item.pngbin0 -> 427 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-mdpi/ic_action_previous_item.pngbin0 -> 438 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-mdpi/ic_action_remove.pngbin0 -> 328 bytes
-rwxr-xr-xStoneIsland/platforms/android/res/drawable-mdpi/icon.pngbin7158 -> 4631 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_next_item.pngbin0 -> 727 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_previous_item.pngbin0 -> 744 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_remove.pngbin0 -> 536 bytes
-rwxr-xr-xStoneIsland/platforms/android/res/drawable-xhdpi/icon.pngbin14330 -> 11662 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_next_item.pngbin0 -> 1021 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_previous_item.pngbin0 -> 1038 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_remove.pngbin0 -> 681 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xxhdpi/icon.pngbin0 -> 20810 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable-xxxhdpi/icon.pngbin0 -> 32451 bytes
-rw-r--r--StoneIsland/platforms/android/res/drawable/icon.pngbin0 -> 11662 bytes
-rwxr-xr-xStoneIsland/platforms/android/res/xml/config.xml49
-rwxr-xr-xStoneIsland/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java603
-rwxr-xr-xStoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java53
-rwxr-xr-xStoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java70
-rwxr-xr-xStoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java27
-rwxr-xr-xStoneIsland/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java294
-rwxr-xr-xStoneIsland/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java42
-rwxr-xr-xStoneIsland/platforms/android/src/com/ionic/keyboard/IonicKeyboard.java96
-rw-r--r--StoneIsland/platforms/android/src/io/ionic/keyboard/IonicKeyboard.java130
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/nl/xservices/plugins/LaunchMyApp.java49
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/nl/xservices/plugins/SocialSharing.java280
-rw-r--r--StoneIsland/platforms/android/src/org/apache/cordova/BuildHelper.java70
-rw-r--r--StoneIsland/platforms/android/src/org/apache/cordova/PermissionHelper.java138
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/org/apache/cordova/device/Device.java19
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/org/apache/cordova/dialogs/Notification.java50
-rw-r--r--StoneIsland/platforms/android/src/org/apache/cordova/geolocation/Geolocation.java107
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowser.java294
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowserDialog.java1
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppChromeClient.java0
-rwxr-xr-xStoneIsland/platforms/android/src/org/apache/cordova/networkinformation/NetworkManager.java72
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/org/apache/cordova/splashscreen/SplashScreen.java187
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java4
-rw-r--r--StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/CordovaLib.xcscheme80
-rw-r--r--StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist22
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj275
-rw-r--r--StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/xcuserdata/jules.xcuserdatad/UserInterfaceState.xcuserstatebin0 -> 13419 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/Stone Island.xcscheme91
-rw-r--r--StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist22
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40.pngbin4082 -> 3680 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40@2x.pngbin7411 -> 9184 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50.pngbin4874 -> 4781 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50@2x.pngbin9611 -> 12245 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60.pngbin0 -> 6263 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@2x.pngbin11924 -> 15800 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@3x.pngbin30083 -> 29356 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72.pngbin4944 -> 7963 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72@2x.pngbin11706 -> 20810 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76.pngbin7025 -> 8495 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76@2x.pngbin15262 -> 22709 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.pngbin20563 -> 26504 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small.pngbin3294 -> 2293 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@2x.pngbin5608 -> 6014 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@3x.pngbin7040 -> 10331 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon.pngbin3902 -> 5877 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon@2x.pngbin7869 -> 14616 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.pngbin34225 -> 101919 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-667h.pngbin57532 -> 104550 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-736h.pngbin80929 -> 192301 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.pngbin79491 -> 195426 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.pngbin212234 -> 246786 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.pngbin91810 -> 107960 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.pngbin212860 -> 244661 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.pngbin91713 -> 107123 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.pngbin29475 -> 100977 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default~iphone.pngbin10394 -> 46074 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.h4
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.m109
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.m0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.m51
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.m95
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.m65
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.h1
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.m86
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.m31
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.m6
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.h2
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.m181
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVViewController+SplashScreen.m7
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.h5
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.m30
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.h3
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.m157
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/ionic-plugin-keyboard/IonicKeyboard.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/ios/IonicKeyboard.h)3
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Plugins/ionic-plugin-keyboard/IonicKeyboard.m (renamed from StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/IonicKeyboard.m)54
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.h21
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.m167
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.h62
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.m347
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/Stone Island/Resources/CDVNotification.bundle/beep.wavbin8114 -> 8114 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist8
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/config.xml33
-rwxr-xr-xStoneIsland/platforms/ios/cordova/build-extras.xcconfig22
-rw-r--r--StoneIsland/platforms/ios/frameworks.json3
-rw-r--r--StoneIsland/platforms/ios/ios.json192
-rw-r--r--StoneIsland/platforms/ios/platform_www/cordova_plugins.js143
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js1
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/logger.js1
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-device/www/device.js4
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-dialogs/www/notification.js60
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/Position.js2
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js6
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/geolocation.js6
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js155
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js14
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js (renamed from StoneIsland/platforms/ios/www/plugins/com.ionic.keyboard/www/keyboard.js)9
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/phonegap-plugin-push/www/push.js232
-rw-r--r--StoneIsland/platforms/ios/www/cordova_plugins.js143
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/console-via-logger.js1
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/logger.js1
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-device/www/device.js4
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-dialogs/www/notification.js60
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/Position.js2
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/PositionError.js6
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/geolocation.js6
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js155
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js14
-rw-r--r--[-rwxr-xr-x]StoneIsland/platforms/ios/www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js (renamed from StoneIsland/platforms/android/assets/www/plugins/com.ionic.keyboard/www/keyboard.js)10
-rw-r--r--StoneIsland/platforms/ios/www/plugins/phonegap-plugin-push/www/push.js232
-rwxr-xr-xStoneIsland/plugins/android.json34
-rwxr-xr-xStoneIsland/plugins/com.ionic.keyboard/package.json19
-rwxr-xr-xStoneIsland/plugins/com.ionic.keyboard/plugin.xml55
-rwxr-xr-xStoneIsland/plugins/com.ionic.keyboard/src/android/IonicKeyboard.java96
-rwxr-xr-xStoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.h4
-rwxr-xr-xStoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.m109
-rw-r--r--StoneIsland/plugins/cordova-plugin-compat/README.md31
-rw-r--r--StoneIsland/plugins/cordova-plugin-compat/RELEASENOTES.md29
-rw-r--r--StoneIsland/plugins/cordova-plugin-compat/package.json32
-rw-r--r--StoneIsland/plugins/cordova-plugin-compat/plugin.xml37
-rw-r--r--StoneIsland/plugins/cordova-plugin-compat/src/android/BuildHelper.java70
-rw-r--r--StoneIsland/plugins/cordova-plugin-compat/src/android/PermissionHelper.java138
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/LICENSE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/NOTICE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/README.md65
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/RELEASENOTES.md116
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/de/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/de/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/es/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/es/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/it/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/it/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/package.json18
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/plugin.xml53
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.m0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/tests/tests.js12
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/www/console-via-logger.js1
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-console/www/logger.js1
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/LaunchMyApp-PhoneGap-Plugin.iws1242
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/README.md41
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/atlassian-ide-plugin.xml5
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/package.json4
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-customurlscheme/plugin.xml52
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/src/android/nl/xservices/plugins/LaunchMyApp.java49
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/src/windows/hooks/prepare-manifest.js30
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CompositeUriMapper.cs46
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CustomUriMapperCommand.cs9
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/ICustomUriMapper.cs7
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js80
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js26
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/www/wp8/LaunchMyApp.js12
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/CONTRIBUTING.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/LICENSE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/NOTICE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/README.md221
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/RELEASENOTES.md182
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/de/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/de/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/es/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/es/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/fr/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/fr/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/it/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/it/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/ja/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/ja/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/ko/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/ko/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/pl/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/pl/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/ru/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/zh/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/doc/zh/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/package.json24
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/plugin.xml15
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/android/Device.java19
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/blackberry10/index.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/browser/DeviceProxy.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/firefoxos/DeviceProxy.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.m51
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/osx/CDVDevice.h (renamed from StoneIsland/plugins/cordova-plugin-whitelist/src/ios/CDVNavigationWhitelistPlugin.h)9
-rw-r--r--StoneIsland/plugins/cordova-plugin-device/src/osx/CDVDevice.m113
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/tizen/DeviceProxy.js1
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.cpp0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.js3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/windows/DeviceProxy.js68
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/src/wp/Device.cs100
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/tests/plugin.xml2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/tests/tests.js34
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-device/www/device.js4
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/CONTRIBUTING.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/LICENSE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/NOTICE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/README.md17
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/RELEASENOTES.md221
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/de/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/de/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/es/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/es/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/it/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/it/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/ru/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/package.json18
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/plugin.xml24
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/android/Notification.java50
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/blackberry10/index.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/firefoxos/notification.js9
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.bundle/beep.wavbin8114 -> 8114 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.m95
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.cpp0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.qml0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/windows/NotificationProxy.js92
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/wp/Notification.cs0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml.cs0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/src/wp/notification-beep.wavbin16630 -> 16630 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/tests/plugin.xml2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/tests/tests.js61
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/android/notification.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/beep.js32
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/notification-beep.wavbin16630 -> 16630 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/browser/notification.js30
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger-press.pngbin1015 -> 1015 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger.pngbin1031 -> 1031 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/default.pngbin1014 -> 1014 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/gradient.pngbin3713 -> 3713 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/notification.css0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/pattern.pngbin6851 -> 6851 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/recommend.pngbin1020 -> 1020 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-dialogs/www/notification.js60
-rw-r--r--StoneIsland/plugins/cordova-plugin-dialogs/www/windows/notification.css84
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/CONTRIBUTING.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/LICENSE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/NOTICE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/README.md479
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/RELEASENOTES.md214
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/de/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/de/index.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/es/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/es/index.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/index.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/it/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/it/index.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/index.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/ru/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/README.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/index.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/package.json18
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/plugin.xml38
-rw-r--r--StoneIsland/plugins/cordova-plugin-geolocation/src/android/Geolocation.java107
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/src/firefoxos/GeolocationProxy.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.m65
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.cpp34
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/src/windows/GeolocationProxy.js172
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/src/wp/GeoLocation.cs0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/tests/plugin.xml3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/tests/tests.js281
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/www/Coordinates.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/www/Position.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/www/PositionError.js6
-rw-r--r--StoneIsland/plugins/cordova-plugin-geolocation/www/android/geolocation.js71
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/www/blackberry10/GeolocationProxy.js0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-geolocation/www/geolocation.js6
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/CONTRIBUTING.md29
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/LICENSE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/NOTICE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/README.md312
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/RELEASENOTES.md66
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ru/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/package.json25
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/plugin.xml2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppBrowser.java0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppChromeClient.java0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowser.java294
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowserDialog.java1
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppChromeClient.java0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_next_item.pngbin593 -> 593 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_previous_item.pngbin599 -> 599 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_remove.pngbin438 -> 438 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_next_item.pngbin427 -> 427 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_previous_item.pngbin438 -> 438 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_remove.pngbin328 -> 328 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_next_item.pngbin727 -> 727 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_previous_item.pngbin744 -> 744 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_remove.pngbin536 -> 536 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_next_item.pngbin1021 -> 1021 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_previous_item.pngbin1038 -> 1038 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_remove.pngbin681 -> 681 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/de/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/es/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/fr/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/it/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ja/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ko/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/pl/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/zh/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/browser/InAppBrowserProxy.js35
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/firefoxos/InAppBrowserProxy.js24
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h1
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m86
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser.qml0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser_escapeScript.js3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/close.pngbin461 -> 461 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.cpp0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/windows/InAppBrowserProxy.js420
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/src/wp/InAppBrowser.cs0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/plugin.xml4
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.css0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.html0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.html0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.pdfbin8568 -> 8568 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/video.html3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/tests/tests.js155
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.css74
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js155
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-inappbrowser/www/windows8/InAppBrowserProxy.js5
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/CONTRIBUTING.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/LICENSE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/NOTICE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/README.md187
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/RELEASENOTES.md177
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/de/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/de/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/es/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/es/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/fr/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/fr/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/it/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/it/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/ja/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/ja/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/ko/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/ko/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/pl/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/pl/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/ru/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/zh/README.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/doc/zh/index.md0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/package.json18
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/plugin.xml12
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-network-information/src/android/NetworkManager.java72
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/blackberry10/index.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/browser/network.js (renamed from StoneIsland/plugins/cordova-plugin-whitelist/whitelist.js)33
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/firefoxos/NetworkProxy.js7
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.m31
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.m6
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/tizen/NetworkProxy.js3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.cpp0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.h0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/windows/NetworkInfoProxy.js7
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/src/wp/NetworkStatus.cs0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/tests/plugin.xml2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/tests/tests.js3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js0
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js92
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-network-information/www/network.js0
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/README.md221
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md45
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/package.json29
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/plugin.xml3
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/src/android/SplashScreen.java187
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/src/blackberry10/index.js2
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js6
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.h2
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m181
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVViewController+SplashScreen.m7
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/src/tizen/SplashScreenProxy.js2
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/tests/ios/package.json8
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/tests/plugin.xml2
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/tests/tests.js8
-rw-r--r--StoneIsland/plugins/cordova-plugin-splashscreen/www/windows/SplashScreenProxy.js48
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/CONTRIBUTING.md2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/LICENSE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/NOTICE0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/README.md69
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/RELEASENOTES.md39
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/de/README.md148
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/es/README.md148
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/fr/README.md148
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/it/README.md148
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/ja/README.md148
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/ko/README.md148
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/pl/README.md148
-rw-r--r--StoneIsland/plugins/cordova-plugin-whitelist/doc/zh/README.md148
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/package.json28
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/plugin.xml13
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java4
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-whitelist/src/ios/CDVNavigationWhitelistPlugin.m89
-rw-r--r--StoneIsland/plugins/cordova-plugin-x-socialsharing/MIT21
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/README.md104
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/package.json4
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-x-socialsharing/plugin.xml7
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-android-share.pngbin142454 -> 142454 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios6-share.pngbin48752 -> 48752 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-ipad-share.pngbin47118 -> 47118 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-share.pngbin342109 -> 342109 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-wp8-share.jpgbin33347 -> 33347 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshots-ios7-shareconfig.pngbin183133 -> 183133 bytes
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/src/android/nl/xservices/plugins/SocialSharing.java280
-rw-r--r--StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.h5
-rw-r--r--StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.m30
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.h3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m157
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/src/windows/SocialSharingProxy.js86
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/src/wp8/SocialSharing.cs4
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/plugin.xml0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/test.js2
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js17
-rwxr-xr-xStoneIsland/plugins/fetch.json78
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/LICENSE (renamed from StoneIsland/plugins/com.ionic.keyboard/LICENSE)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/README.md (renamed from StoneIsland/plugins/com.ionic.keyboard/README.md)23
-rw-r--r--StoneIsland/plugins/ionic-plugin-keyboard/package.json30
-rw-r--r--StoneIsland/plugins/ionic-plugin-keyboard/plugin.xml71
-rw-r--r--StoneIsland/plugins/ionic-plugin-keyboard/src/android/IonicKeyboard.java130
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/index.js (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/index.js)50
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/.cproject (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/.cproject)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/.project (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/.project)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/autolink.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/autolink.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/config.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/config.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/features.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/features.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/forwards.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/forwards.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/json.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/json.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/reader.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/reader.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/value.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/value.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/writer.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/writer.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_batchallocator.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_batchallocator.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_internalarray.inl (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_internalarray.inl)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_internalmap.inl (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_internalmap.inl)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_reader.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_reader.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_value.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_value.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_valueiterator.inl (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_valueiterator.inl)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_writer.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_writer.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/plugin.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/plugin.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/plugin.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/plugin.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/tokenizer.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/tokenizer.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/tokenizer.h (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/tokenizer.h)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/Logger.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/Logger.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/Logger.hpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/Logger.hpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_js.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_js.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_js.hpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_js.hpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_ndk.cpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_ndk.cpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_ndk.hpp (renamed from StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_ndk.hpp)0
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/ios/IonicKeyboard.h (renamed from StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/IonicKeyboard.h)3
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/src/ios/IonicKeyboard.m (renamed from StoneIsland/plugins/com.ionic.keyboard/src/ios/IonicKeyboard.m)54
-rw-r--r--StoneIsland/plugins/ionic-plugin-keyboard/src/windows/KeyboardProxy.js37
-rw-r--r--StoneIsland/plugins/ionic-plugin-keyboard/www/android/keyboard.js60
-rw-r--r--[-rwxr-xr-x]StoneIsland/plugins/ionic-plugin-keyboard/www/browser/keyboard.js (renamed from StoneIsland/plugins/com.ionic.keyboard/www/keyboard.js)13
-rw-r--r--StoneIsland/plugins/ionic-plugin-keyboard/www/ios/keyboard.js (renamed from StoneIsland/platforms/ios/platform_www/plugins/com.ionic.keyboard/www/keyboard.js)10
-rw-r--r--StoneIsland/plugins/ios.json29
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/CHANGELOG.md215
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE20
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/README.md694
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/beep.wavbin11400 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/css/index.css115
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/css/materialize.min.css16
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/LICENSE.txt428
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.eotbin141748 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.svg751
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.ttfbin141528 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woffbin141604 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woff2bin37396 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.ttfbin127744 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woffbin62876 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woff2bin49976 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.ttfbin126792 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woffbin62316 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woff2bin49380 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.ttfbin127488 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woffbin62980 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woff2bin50224 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.ttfbin126072 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woffbin61736 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woff2bin49236 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.ttfbin127584 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woffbin61628 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woff2bin48524 -> 0 bytes
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/index.html56
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/js/index.js77
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/js/jquery-2.1.1.min.js4
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/example/www/js/materialize.min.js10
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/package.json48
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/plugin.xml127
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/push.gradle21
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/spec/helper/cordova.js83
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js210
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/GCMIntentService.java603
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushConstants.java53
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushHandlerActivity.java70
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushInstanceIDListenerService.java27
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushPlugin.java294
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/RegistrationIntentService.java42
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.h21
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.m167
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h62
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m347
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js86
-rwxr-xr-xStoneIsland/plugins/phonegap-plugin-push/www/push.js230
673 files changed, 12378 insertions, 15001 deletions
diff --git a/StoneIsland/config.xml b/StoneIsland/config.xml
index 3249fc69..f7144632 100755
--- a/StoneIsland/config.xml
+++ b/StoneIsland/config.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<widget id="us.okfoc.stoneisland" version="0.6.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+<widget id="us.okfoc.stoneisland" version="0.7.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Stone Island</name>
<description>
Stone Island
diff --git a/StoneIsland/icon.png b/StoneIsland/icon.png
new file mode 100755
index 00000000..58e214f8
--- /dev/null
+++ b/StoneIsland/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/AndroidManifest.xml b/StoneIsland/platforms/android/AndroidManifest.xml
index 9dd17db8..da0336cf 100755
--- a/StoneIsland/platforms/android/AndroidManifest.xml
+++ b/StoneIsland/platforms/android/AndroidManifest.xml
@@ -1,8 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
-<manifest android:hardwareAccelerated="true" android:versionCode="500" android:versionName="0.5.0" package="us.okfoc.stoneisland" xmlns:android="http://schemas.android.com/apk/res/android">
+<manifest android:hardwareAccelerated="true" android:versionCode="700" android:versionName="0.7.0" package="us.okfoc.stoneisland" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
@@ -11,10 +10,16 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="stoneisland" />
+ </intent-filter>
+ <intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
+ <data android:host=" " android:pathPrefix="/" android:scheme=" " />
</intent-filter>
</activity>
<service android:name="com.parse.PushService" />
@@ -38,24 +43,6 @@
<category android:name="us.okfoc.stoneisland" />
</intent-filter>
</receiver>
- <activity android:exported="true" android:name="com.adobe.phonegap.push.PushHandlerActivity" />
- <receiver android:exported="true" android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND">
- <intent-filter>
- <action android:name="com.google.android.c2dm.intent.RECEIVE" />
- <category android:name="us.okfoc.stoneisland" />
- </intent-filter>
- </receiver>
- <service android:exported="false" android:name="com.adobe.phonegap.push.GCMIntentService">
- <intent-filter>
- <action android:name="com.google.android.c2dm.intent.RECEIVE" />
- </intent-filter>
- </service>
- <service android:exported="false" android:name="com.adobe.phonegap.push.PushInstanceIDListenerService">
- <intent-filter>
- <action android:name="com.google.android.gms.iid.InstanceID" />
- </intent-filter>
- </service>
- <service android:exported="false" android:name="com.adobe.phonegap.push.RegistrationIntentService" />
</application>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="22" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
@@ -65,7 +52,9 @@
<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.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-feature android:name="android.hardware.location.gps" />
</manifest>
diff --git a/StoneIsland/platforms/android/android.json b/StoneIsland/platforms/android/android.json
index 1612e00a..587c7239 100755
--- a/StoneIsland/platforms/android/android.json
+++ b/StoneIsland/platforms/android/android.json
@@ -9,27 +9,27 @@
"parents": {
"/*": [
{
- "xml": "<feature name=\"Keyboard\"><param name=\"android-package\" value=\"com.ionic.keyboard.IonicKeyboard\" /><param name=\"onload\" value=\"true\" /></feature>",
+ "xml": "<feature name=\"ParsePlugin\"><param name=\"android-package\" value=\"org.apache.cordova.core.ParsePlugin\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"ParsePlugin\"><param name=\"android-package\" value=\"org.apache.cordova.core.ParsePlugin\" /></feature>",
+ "xml": "<feature name=\"InAppBrowser\"><param name=\"android-package\" value=\"org.apache.cordova.inappbrowser.InAppBrowser\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"LaunchMyApp\"><param name=\"android-package\" value=\"nl.xservices.plugins.LaunchMyApp\" /></feature>",
+ "xml": "<feature name=\"SocialSharing\"><param name=\"android-package\" value=\"nl.xservices.plugins.SocialSharing\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"Device\"><param name=\"android-package\" value=\"org.apache.cordova.device.Device\" /></feature>",
+ "xml": "<feature name=\"LaunchMyApp\"><param name=\"android-package\" value=\"nl.xservices.plugins.LaunchMyApp\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"Notification\"><param name=\"android-package\" value=\"org.apache.cordova.dialogs.Notification\" /></feature>",
+ "xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"InAppBrowser\"><param name=\"android-package\" value=\"org.apache.cordova.inappbrowser.InAppBrowser\" /></feature>",
+ "xml": "<feature name=\"Device\"><param name=\"android-package\" value=\"org.apache.cordova.device.Device\" /></feature>",
"count": 1
},
{
@@ -37,19 +37,19 @@
"count": 1
},
{
- "xml": "<feature name=\"SplashScreen\"><param name=\"android-package\" value=\"org.apache.cordova.splashscreen.SplashScreen\" /><param name=\"onload\" value=\"true\" /></feature>",
+ "xml": "<feature name=\"Notification\"><param name=\"android-package\" value=\"org.apache.cordova.dialogs.Notification\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
+ "xml": "<feature name=\"SplashScreen\"><param name=\"android-package\" value=\"org.apache.cordova.splashscreen.SplashScreen\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"SocialSharing\"><param name=\"android-package\" value=\"nl.xservices.plugins.SocialSharing\" /></feature>",
+ "xml": "<feature name=\"Geolocation\"><param name=\"android-package\" value=\"org.apache.cordova.geolocation.Geolocation\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"PushNotification\"><param name=\"android-package\" value=\"com.adobe.phonegap.push.PushPlugin\" /></feature>",
+ "xml": "<feature name=\"Keyboard\"><param name=\"android-package\" value=\"io.ionic.keyboard.IonicKeyboard\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
}
]
@@ -73,40 +73,20 @@
{
"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
- },
- {
- "xml": "<activity android:exported=\"true\" android:name=\"com.adobe.phonegap.push.PushHandlerActivity\" />",
- "count": 1
- },
- {
- "xml": "<receiver android:exported=\"true\" android:name=\"com.google.android.gms.gcm.GcmReceiver\" android:permission=\"com.google.android.c2dm.permission.SEND\"><intent-filter><action android:name=\"com.google.android.c2dm.intent.RECEIVE\" /><category android:name=\"us.okfoc.stoneisland\" /></intent-filter></receiver>",
- "count": 1
- },
- {
- "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.GCMIntentService\"><intent-filter><action android:name=\"com.google.android.c2dm.intent.RECEIVE\" /></intent-filter></service>",
- "count": 1
- },
- {
- "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.PushInstanceIDListenerService\"><intent-filter><action android:name=\"com.google.android.gms.iid.InstanceID\" /></intent-filter></service>",
- "count": 1
- },
- {
- "xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.RegistrationIntentService\"></service>",
- "count": 1
}
],
"/manifest": [
{
"xml": "<uses-permission android:name=\"android.permission.INTERNET\" />",
- "count": 2
+ "count": 1
},
{
"xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",
- "count": 2
+ "count": 1
},
{
"xml": "<uses-permission android:name=\"android.permission.WAKE_LOCK\" />",
- "count": 2
+ "count": 1
},
{
"xml": "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />",
@@ -114,7 +94,7 @@
},
{
"xml": "<uses-permission android:name=\"android.permission.VIBRATE\" />",
- "count": 2
+ "count": 1
},
{
"xml": "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\" />",
@@ -122,25 +102,28 @@
},
{
"xml": "<uses-permission android:name=\"com.google.android.c2dm.permission.RECEIVE\" />",
- "count": 2
+ "count": 1
},
{
"xml": "<permission android:name=\"us.okfoc.stoneisland.permission.C2D_MESSAGE\" android:protectionLevel=\"signature\" />",
- "count": 2
+ "count": 1
},
{
"xml": "<uses-permission android:name=\"us.okfoc.stoneisland.permission.C2D_MESSAGE\" />",
- "count": 2
- }
- ],
- "/*/application/activity": [
- {
- "xml": "<intent-filter><data android:scheme=\"stoneisland\" /><action android:name=\"android.intent.action.VIEW\" /><category android:name=\"android.intent.category.DEFAULT\" /><category android:name=\"android.intent.category.BROWSABLE\" /></intent-filter>",
"count": 1
}
],
+ "/*/application/activity": [],
"/*": [
{
+ "xml": "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",
+ "count": 1
+ },
+ {
+ "xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",
+ "count": 1
+ },
+ {
"xml": "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",
"count": 1
},
@@ -149,11 +132,17 @@
"count": 1
},
{
- "xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",
+ "xml": "<uses-feature android:name=\"android.hardware.location.gps\" />",
+ "count": 1
+ }
+ ],
+ "/manifest/application/activity": [
+ {
+ "xml": "<intent-filter><action android:name=\"android.intent.action.VIEW\" /><category android:name=\"android.intent.category.DEFAULT\" /><category android:name=\"android.intent.category.BROWSABLE\" /><data android:scheme=\"stoneisland\" /></intent-filter>",
"count": 1
},
{
- "xml": "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",
+ "xml": "<intent-filter><action android:name=\"android.intent.action.VIEW\" /><category android:name=\"android.intent.category.DEFAULT\" /><category android:name=\"android.intent.category.BROWSABLE\" /><data android:host=\" \" android:pathPrefix=\"/\" android:scheme=\" \" /></intent-filter>",
"count": 1
}
]
@@ -176,60 +165,55 @@
}
},
"installed_plugins": {
- "com.ionic.keyboard": {
- "PACKAGE_NAME": "us.okfoc.stoneisland"
- },
"com.parse.cordova.core.pushplugin": {
"APP_ID": "GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB",
"CLIENT_KEY": "hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-console": {
+ "cordova-plugin-inappbrowser": {
+ "PACKAGE_NAME": "us.okfoc.stoneisland"
+ },
+ "cordova-plugin-x-socialsharing": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "stoneisland",
+ "ANDROID_SCHEME": " ",
+ "ANDROID_HOST": " ",
+ "ANDROID_PATHPREFIX": "/",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-device": {
+ "cordova-plugin-whitelist": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-dialogs": {
+ "cordova-plugin-console": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-geolocation": {
+ "cordova-plugin-device": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-inappbrowser": {
+ "cordova-plugin-network-information": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-network-information": {
+ "cordova-plugin-dialogs": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
"cordova-plugin-splashscreen": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-whitelist": {
+ "cordova-plugin-compat": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-x-socialsharing": {
+ "cordova-plugin-geolocation": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "phonegap-plugin-push": {
+ "ionic-plugin-keyboard": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
"dependent_plugins": {},
"modules": [
{
- "file": "plugins/com.ionic.keyboard/www/keyboard.js",
- "id": "com.ionic.keyboard.keyboard",
- "pluginId": "com.ionic.keyboard",
- "clobbers": [
- "cordova.plugins.Keyboard"
- ]
- },
- {
"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",
@@ -238,19 +222,20 @@
]
},
{
- "file": "plugins/cordova-plugin-console/www/logger.js",
- "id": "cordova-plugin-console.logger",
- "pluginId": "cordova-plugin-console",
+ "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
+ "id": "cordova-plugin-inappbrowser.inappbrowser",
+ "pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
- "cordova.logger"
+ "cordova.InAppBrowser.open",
+ "window.open"
]
},
{
- "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
- "id": "cordova-plugin-console.console",
- "pluginId": "cordova-plugin-console",
+ "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
+ "id": "cordova-plugin-x-socialsharing.SocialSharing",
+ "pluginId": "cordova-plugin-x-socialsharing",
"clobbers": [
- "console"
+ "window.plugins.socialsharing"
]
},
{
@@ -270,31 +255,6 @@
]
},
{
- "file": "plugins/cordova-plugin-dialogs/www/notification.js",
- "id": "cordova-plugin-dialogs.notification",
- "pluginId": "cordova-plugin-dialogs",
- "merges": [
- "navigator.notification"
- ]
- },
- {
- "file": "plugins/cordova-plugin-dialogs/www/android/notification.js",
- "id": "cordova-plugin-dialogs.notification_android",
- "pluginId": "cordova-plugin-dialogs",
- "merges": [
- "navigator.notification"
- ]
- },
- {
- "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
- "id": "cordova-plugin-inappbrowser.inappbrowser",
- "pluginId": "cordova-plugin-inappbrowser",
- "clobbers": [
- "cordova.InAppBrowser.open",
- "window.open"
- ]
- },
- {
"file": "plugins/cordova-plugin-network-information/www/network.js",
"id": "cordova-plugin-network-information.network",
"pluginId": "cordova-plugin-network-information",
@@ -312,6 +272,22 @@
]
},
{
+ "file": "plugins/cordova-plugin-dialogs/www/notification.js",
+ "id": "cordova-plugin-dialogs.notification",
+ "pluginId": "cordova-plugin-dialogs",
+ "merges": [
+ "navigator.notification"
+ ]
+ },
+ {
+ "file": "plugins/cordova-plugin-dialogs/www/android/notification.js",
+ "id": "cordova-plugin-dialogs.notification_android",
+ "pluginId": "cordova-plugin-dialogs",
+ "merges": [
+ "navigator.notification"
+ ]
+ },
+ {
"file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
"id": "cordova-plugin-splashscreen.SplashScreen",
"pluginId": "cordova-plugin-splashscreen",
@@ -320,41 +296,42 @@
]
},
{
- "file": "plugins/cordova-plugin-whitelist/whitelist.js",
- "id": "cordova-plugin-whitelist.whitelist",
- "pluginId": "cordova-plugin-whitelist",
- "runs": true
- },
- {
- "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
- "id": "cordova-plugin-x-socialsharing.SocialSharing",
- "pluginId": "cordova-plugin-x-socialsharing",
+ "file": "plugins/cordova-plugin-geolocation/www/android/geolocation.js",
+ "id": "cordova-plugin-geolocation.geolocation",
+ "pluginId": "cordova-plugin-geolocation",
"clobbers": [
- "window.plugins.socialsharing"
+ "navigator.geolocation"
]
},
{
- "file": "plugins/phonegap-plugin-push/www/push.js",
- "id": "phonegap-plugin-push.PushNotification",
- "pluginId": "phonegap-plugin-push",
+ "file": "plugins/cordova-plugin-geolocation/www/PositionError.js",
+ "id": "cordova-plugin-geolocation.PositionError",
+ "pluginId": "cordova-plugin-geolocation",
+ "runs": true
+ },
+ {
+ "file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
+ "id": "ionic-plugin-keyboard.keyboard",
+ "pluginId": "ionic-plugin-keyboard",
"clobbers": [
- "PushNotification"
- ]
+ "cordova.plugins.Keyboard"
+ ],
+ "runs": true
}
],
"plugin_metadata": {
- "com.ionic.keyboard": "1.0.4",
"com.parse.cordova.core.pushplugin": "0.1.0",
- "cordova-plugin-console": "1.0.1",
- "cordova-plugin-customurlscheme": "4.0.0",
- "cordova-plugin-device": "1.0.1",
- "cordova-plugin-dialogs": "1.1.1",
- "cordova-plugin-geolocation": "1.0.1",
- "cordova-plugin-inappbrowser": "1.1.0",
- "cordova-plugin-network-information": "1.0.1",
- "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"
+ "cordova-plugin-inappbrowser": "1.5.0",
+ "cordova-plugin-x-socialsharing": "5.1.3",
+ "cordova-plugin-customurlscheme": "4.2.0",
+ "cordova-plugin-whitelist": "1.3.0",
+ "cordova-plugin-console": "1.0.4",
+ "cordova-plugin-device": "1.1.3",
+ "cordova-plugin-network-information": "1.3.0",
+ "cordova-plugin-dialogs": "1.3.0",
+ "cordova-plugin-splashscreen": "4.0.0",
+ "cordova-plugin-compat": "1.1.0",
+ "cordova-plugin-geolocation": "2.4.0",
+ "ionic-plugin-keyboard": "2.2.1"
}
} \ 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 90fa7c51..a2734881 100755
--- a/StoneIsland/platforms/android/assets/www/cordova_plugins.js
+++ b/StoneIsland/platforms/android/assets/www/cordova_plugins.js
@@ -1,14 +1,6 @@
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
- "file": "plugins/com.ionic.keyboard/www/keyboard.js",
- "id": "com.ionic.keyboard.keyboard",
- "pluginId": "com.ionic.keyboard",
- "clobbers": [
- "cordova.plugins.Keyboard"
- ]
- },
- {
"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",
@@ -17,19 +9,20 @@ module.exports = [
]
},
{
- "file": "plugins/cordova-plugin-console/www/logger.js",
- "id": "cordova-plugin-console.logger",
- "pluginId": "cordova-plugin-console",
+ "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
+ "id": "cordova-plugin-inappbrowser.inappbrowser",
+ "pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
- "cordova.logger"
+ "cordova.InAppBrowser.open",
+ "window.open"
]
},
{
- "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
- "id": "cordova-plugin-console.console",
- "pluginId": "cordova-plugin-console",
+ "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
+ "id": "cordova-plugin-x-socialsharing.SocialSharing",
+ "pluginId": "cordova-plugin-x-socialsharing",
"clobbers": [
- "console"
+ "window.plugins.socialsharing"
]
},
{
@@ -49,31 +42,6 @@ module.exports = [
]
},
{
- "file": "plugins/cordova-plugin-dialogs/www/notification.js",
- "id": "cordova-plugin-dialogs.notification",
- "pluginId": "cordova-plugin-dialogs",
- "merges": [
- "navigator.notification"
- ]
- },
- {
- "file": "plugins/cordova-plugin-dialogs/www/android/notification.js",
- "id": "cordova-plugin-dialogs.notification_android",
- "pluginId": "cordova-plugin-dialogs",
- "merges": [
- "navigator.notification"
- ]
- },
- {
- "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
- "id": "cordova-plugin-inappbrowser.inappbrowser",
- "pluginId": "cordova-plugin-inappbrowser",
- "clobbers": [
- "cordova.InAppBrowser.open",
- "window.open"
- ]
- },
- {
"file": "plugins/cordova-plugin-network-information/www/network.js",
"id": "cordova-plugin-network-information.network",
"pluginId": "cordova-plugin-network-information",
@@ -91,6 +59,22 @@ module.exports = [
]
},
{
+ "file": "plugins/cordova-plugin-dialogs/www/notification.js",
+ "id": "cordova-plugin-dialogs.notification",
+ "pluginId": "cordova-plugin-dialogs",
+ "merges": [
+ "navigator.notification"
+ ]
+ },
+ {
+ "file": "plugins/cordova-plugin-dialogs/www/android/notification.js",
+ "id": "cordova-plugin-dialogs.notification_android",
+ "pluginId": "cordova-plugin-dialogs",
+ "merges": [
+ "navigator.notification"
+ ]
+ },
+ {
"file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
"id": "cordova-plugin-splashscreen.SplashScreen",
"pluginId": "cordova-plugin-splashscreen",
@@ -99,44 +83,45 @@ module.exports = [
]
},
{
- "file": "plugins/cordova-plugin-whitelist/whitelist.js",
- "id": "cordova-plugin-whitelist.whitelist",
- "pluginId": "cordova-plugin-whitelist",
- "runs": true
- },
- {
- "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
- "id": "cordova-plugin-x-socialsharing.SocialSharing",
- "pluginId": "cordova-plugin-x-socialsharing",
+ "file": "plugins/cordova-plugin-geolocation/www/android/geolocation.js",
+ "id": "cordova-plugin-geolocation.geolocation",
+ "pluginId": "cordova-plugin-geolocation",
"clobbers": [
- "window.plugins.socialsharing"
+ "navigator.geolocation"
]
},
{
- "file": "plugins/phonegap-plugin-push/www/push.js",
- "id": "phonegap-plugin-push.PushNotification",
- "pluginId": "phonegap-plugin-push",
+ "file": "plugins/cordova-plugin-geolocation/www/PositionError.js",
+ "id": "cordova-plugin-geolocation.PositionError",
+ "pluginId": "cordova-plugin-geolocation",
+ "runs": true
+ },
+ {
+ "file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
+ "id": "ionic-plugin-keyboard.keyboard",
+ "pluginId": "ionic-plugin-keyboard",
"clobbers": [
- "PushNotification"
- ]
+ "cordova.plugins.Keyboard"
+ ],
+ "runs": true
}
];
module.exports.metadata =
// TOP OF METADATA
{
- "com.ionic.keyboard": "1.0.4",
"com.parse.cordova.core.pushplugin": "0.1.0",
- "cordova-plugin-console": "1.0.1",
- "cordova-plugin-customurlscheme": "4.0.0",
- "cordova-plugin-device": "1.0.1",
- "cordova-plugin-dialogs": "1.1.1",
- "cordova-plugin-geolocation": "1.0.1",
- "cordova-plugin-inappbrowser": "1.1.0",
- "cordova-plugin-network-information": "1.0.1",
- "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"
+ "cordova-plugin-inappbrowser": "1.5.0",
+ "cordova-plugin-x-socialsharing": "5.1.3",
+ "cordova-plugin-customurlscheme": "4.2.0",
+ "cordova-plugin-whitelist": "1.3.0",
+ "cordova-plugin-console": "1.0.4",
+ "cordova-plugin-device": "1.1.3",
+ "cordova-plugin-network-information": "1.3.0",
+ "cordova-plugin-dialogs": "1.3.0",
+ "cordova-plugin-splashscreen": "4.0.0",
+ "cordova-plugin-compat": "1.1.0",
+ "cordova-plugin-geolocation": "2.4.0",
+ "ionic-plugin-keyboard": "2.2.1"
}
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/android/assets/www/css/account.css b/StoneIsland/platforms/android/assets/www/css/account.css
index b77cd428..f5b6079a 100755
--- a/StoneIsland/platforms/android/assets/www/css/account.css
+++ b/StoneIsland/platforms/android/assets/www/css/account.css
@@ -458,6 +458,9 @@ input.switch:checked + label:after {
width: calc(100vw - 10px);
border: 1px solid #a9a9a9;
}
+.date-wrapper span {
+ display: block;
+}
.half-input .select-wrapper {
width: 50%;
border: 0;
@@ -476,6 +479,7 @@ input.switch:checked + label:after {
position: absolute;
top: -5px;
left: -1px;
+ width: 1px; height: 1px;
}
.select-wrapper select {
opacity: 0;
diff --git a/StoneIsland/platforms/android/assets/www/css/blogs.css b/StoneIsland/platforms/android/assets/www/css/blogs.css
index 8b27dda9..4823fbef 100755
--- a/StoneIsland/platforms/android/assets/www/css/blogs.css
+++ b/StoneIsland/platforms/android/assets/www/css/blogs.css
@@ -131,7 +131,6 @@ animation: mfadein 0.6s;
display:block;
animation: gallery-fade 4s forwards;
}
-
.gallery-right {
border:1px solid black;
background:rgba(255,255,255,1);
@@ -195,6 +194,7 @@ animation: mfadein 0.6s;
#story img {
box-sizing:border-box;
width:calc(100vw + 150px);
+ max-height:100vw;
position:relative;
left:-75px;
}
diff --git a/StoneIsland/platforms/android/assets/www/css/cart.css b/StoneIsland/platforms/android/assets/www/css/cart.css
index 5c910eb4..58e712b0 100755
--- a/StoneIsland/platforms/android/assets/www/css/cart.css
+++ b/StoneIsland/platforms/android/assets/www/css/cart.css
@@ -358,5 +358,5 @@ color:#000;
}
#cart .scroll, #payment .scroll, #shipping .scroll, #signup .scroll {
- min-height:calc(100% + 100px)
+ min-height:calc(100% + 250px)
} \ 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 05e4aedc..30f1af18 100755
--- a/StoneIsland/platforms/android/assets/www/css/nav.css
+++ b/StoneIsland/platforms/android/assets/www/css/nav.css
@@ -219,19 +219,23 @@ padding-bottom:0px;
padding: 9px 10px 5px;
}
-#header .cart {
+#header .cart_rapper {
display: inline-block;
+ position: relative;
+ float: right;
+ width: 40px; height: 40px;
+}
+#header .cart {
+ position: relative;
float: right;
width: 18px;
top: 15px;
height: 18px;
- margin-right:18px;
- background: #fff;
+ margin-right: 18px;
+ background: #fff;
background-image:url(../img/cart-box.png);
background-size:100%;
background-repeat:no-repeat;
- position: relative;
-
}
.cart .cart_count {
@@ -243,7 +247,7 @@ padding-bottom:0px;
font-size:12.35px;
}
-.cart::before {
+#header .cart::before {
position: absolute;
content: '';
left: 50%;
@@ -321,7 +325,6 @@ padding-bottom:0px;
#selector {
display: none;
position: absolute;
- background: #fff;
z-index: 2;
box-sizing:border-box;
min-width:100px;
@@ -338,7 +341,7 @@ padding-bottom:0px;
}
}
-#selector .options div {
+#selector:not(.selector-outer-wrap) .options div {
background: white;
text-align: center;
padding: 7px 12px;
@@ -347,22 +350,54 @@ padding-bottom:0px;
border-left:1px solid black;
border-right:1px solid black;
border-top:1px solid black;
-
}
-#selector .options div:last-of-type {
+#selector:not(.selector-outer-wrap) .options div:last-of-type {
border-bottom:1px solid black
}
.selector-full {
- width: 100% !important;
- box-sizing:border-box
+ width: 100% !important;
+ box-sizing:border-box
}
.selector-full > div > div {
- padding: 12px 0 !important;
+ padding: 12px 0 !important;
+}
+
+.selector-outer-wrap {
+ max-width:250px!important;
+ min-width:250px!important;
+ box-sizing:border-box!important;
+ font-size: 0!important;
+}
+
+.selector-outer-wrap .options div {
+ width:120px!important;
+ border-bottom:1px solid black!important;
+ display:inline-block!important;
+ box-sizing:border-box!important;
+ margin:0!important;
+ background: white;
+ text-align: center;
+ padding: 7px 12px;
+ font-size:14px!important;
+}
+
+.selector-outer-wrap .options div:nth-of-type(odd){
+ border-left:1px solid black!important;
+ border-right:1px solid black!important;
+}
+
+.selector-outer-wrap .options div:nth-of-type(even){
+ border-right:1px solid black!important;
+}
+
+.selector-outer-wrap .options div:nth-of-type(-n+2){
+ border-top:1px solid black!important;
}
+
/* CONTENT */
#story, #hub, #archive, .page,
@@ -377,6 +412,10 @@ padding-bottom:0px;
width: 100%;
overflow: hidden;
}
+#collection.single {
+ height: -webkit-calc(100% - 43px);
+ height: calc(100% - 43px);
+}
#story, #hub, #archive, .page, #closed {
/* these things do not have a footer */
height: -webkit-calc(100% - 43px);
diff --git a/StoneIsland/platforms/android/assets/www/css/products.css b/StoneIsland/platforms/android/assets/www/css/products.css
index 52de76d0..e067e05a 100755
--- a/StoneIsland/platforms/android/assets/www/css/products.css
+++ b/StoneIsland/platforms/android/assets/www/css/products.css
@@ -16,6 +16,15 @@
background: rgba(245,245,245,1.0);
}
+#collection.single .item {
+ max-width: 98vw;
+}
+#collection.single .item img {
+ width: 98vw;
+ height: 126vw;
+}
+
+
.product #product { display: block }
#product {
display: none;
@@ -49,6 +58,14 @@
background-repeat: no-repeat;
}
+.gallery .item iframe {
+ width: 100%;
+ height: 100%;
+ border: 0;
+ padding: 0;
+ margin: 0;
+}
+
.search #search { display: block }
#search {
display: none;
@@ -60,6 +77,7 @@
background-size: cover;
background-position: center;
background-repeat: no-repeat;
+ background-color: #eee;
transition: background 0.5s ease-in;
}
#closed .closed_store_msg {
diff --git a/StoneIsland/platforms/android/assets/www/db.json b/StoneIsland/platforms/android/assets/www/db.json
deleted file mode 100755
index 65e63d9c..00000000
--- a/StoneIsland/platforms/android/assets/www/db.json
+++ /dev/null
@@ -1,485 +0,0 @@
-{
- "story": [
- {
- "id": "philosophy",
- "title": "Philosophy",
- "image": {
- "uri": "http://cdn3.yoox.biz/stoneisland/wp-content/uploads/2013/11/philosophy1.jpg",
- "caption": ""
- },
- "body": "A culture of research, experimentation, function and use are the matrixes that have always defined Stone Island: the sportswear brand established in 1982, designed to become a symbol of extreme research on fibers and textiles, applied to an innovative design. Season after season, it is through the study of form and the “manipulation†of the matter that Stone Island has found its own language with the aim of establishing new boundaries in the world of garment making. \r\n\r\nThe study of uniforms and of work wear, its evolution according to new requirements of use, has become Stone Island’s observation post for defining a project in which the clothing item’s function is never just aesthetic.\r\n\r\nAn ongoing investigation, thorough and without frontiers, on the processing and ennobling of fibers and textiles, leading to discover materials and production techniques never used before in the clothing industry.\r\n\r\nJackets constructed in nylon monofilament, deriving from the water filtering technology. Highly reflective or thermo-sensitive fabrics, changing color with the variation of temperature. Featherweight polyester cloth vacuum- coated with a 100% stainless steel film used in aviation technology to protect the on-board computers. Non-woven materials, Kevlar® and polyester felt, rhomboidal nets in polyester used in the construction industry and coated in polyurethane. These are some examples of materials conceived by Stone Island philosophy.\r\n\r\nStone Island’s strength is also based on the unique ability to intervene on the finished item, through the continuous tests on dyeing and treatments carried out in the Sportswear Company’s laboratory of color. A department able to combine advanced technology, experience and human capacity and that has developed more than 60,000 different recipes of dyes throughout the years.\r\n\r\nAll the accumulated knowledge and experience, an inalienable heritage, on which great part of Stone Island’s know-how is based, is kept in the historical archive that collects the trial tests, and the recipes for textile dyeing and handling that have been developed by all those people who have worked on this project with passion.",
- "__index": "0",
- "dateCreated": "Thu, 05 Nov 2015 00:24:44 GMT"
- },
- {
- "id": "history",
- "title": "History",
- "image": {
- "uri": "https://ltho.s3.amazonaws.com/ce68408c-34b3-40ca-8ddf-c10cd1412c5f.jpg",
- "caption": ""
- },
- "body": "Stone Island, the Italian brand that reinvented the concept of casual wear, was founded in 1982 out of the passion and brilliant research into textile finishing performed by its creator and art director, intellectual from Bologna, Massimo Osti. It was Osti, in the mid-Seventies, who researched thousands of uniforms and pieces of work clothing and catalogued their functional characteristics. In Ravarino, in the province of Modena, he created a company whose hub was a full-scale center of research into materials and treatments became a sophisticated laboratory for garment and experimental dyeing.\r\n\r\nThe story of Stone Island began, almost by chance, with research into a special material, a thick truck tarpaulin, the outstanding feature of which was that it had been resin-treated in red on one side and blue on the other. The first prototype was too stiff, so it was washed for a long period in water with pumice stones to break down the structure of the material. The result was surprising, a worn-look garment with great appeal. It was therefore decided to create seven jackets in that unique fabric called Tela Stella, and to give this product a name. The strong identity of the project called for an important name, which was identified by analyzing the most commonly occurring words in Joseph Conrad’s novels: the words Stone and Island were chosen.\r\n\r\nStone Island has a marine feel, conjuring up old oilskins corroded by the sea and a military feel, which is drawn from the fund of research completed until that time. The name also evokes a love of the sea and that first treatment selected to “process†the garments. The badge, the detachable fabric label that has distinguished Stone Island garments since the first season, showed a Compass Rose, displayed like a military badge.\r\n\r\nThe reaction is immediate. Stone Island became a success phenomenon, with no set plan or marketing research behind it: a uniquely Italian mix of creativity, intuition and entrepreneurial spirit. A star was born.",
- "__index": "1",
- "dateCreated": "Thu, 05 Nov 2015 00:27:25 GMT"
- },
- {
- "id": "carlo-rivetti",
- "title": "Carlo Rivetti",
- "image": {
- "uri": "https://ltho.s3.amazonaws.com/2fe16d85-e85f-4f12-ae55-72622c8efafd.jpg",
- "caption": ""
- },
- "body": "Lorem ipsum dolor sit amet, has eu oblique rationibus, at sea salutandi expetendis reformidans. Vix iuvaret accumsan deseruisse at, at liber dolor voluptaria pro. Sit assum dicunt menandri in, dolorem postulant erroribus at per. Nemore virtute cu eos, no duo partem luptatum. Reque voluptua dissentiunt vel an, usu vidit feugiat cotidieque te.\r\n\r\nNisl quaerendum cum ei. Oratio conceptam intellegam no usu, pri ancillae suavitate ut. Nam ad maiorum noluisse corrumpit, vis in nostro iracundia vituperata, nec ad noster assueverit. Ex sit elitr ancillae, moderatius incorrupte complectitur eum an. At quo diam laudem adipiscing, alii nibh semper nec ad, eos at graecis delicatissimi. Urbanitas conceptam consequuntur in cum. Ut periculis maluisset scribentur vel, et debitis copiosae officiis mel.\r\n\r\nPlatonem suavitate ullamcorper eu vim, usu erat accumsan gloriatur an. Ne vix dico facilisis, an sit harum dicit aperiam. Invidunt intellegam dissentiet mel no, duo aperiam malorum elaboraret id, has in volumus officiis. Case dolores te pri, reque movet dolores eos no, iuvaret feugait consectetuer vim an.\r\n\r\nSed fierent facilisis ei. Quem dicit option ex vix. Ne invidunt efficiantur mea. Meliore assentior vituperata eu mei, odio verear vis et, ad sale denique vim. Mea ut ceteros fastidii splendide, diceret fuisset eu mel, vix no volumus efficiantur.\r\n\r\nHas in erat choro fabulas. No brute option vim, corrumpit torquatos sed ad, ex tota phaedrum pri. Paulo dignissim moderatius eu mei, duo ea tempor tamquam deserunt. Mea indoctum argumentum disputationi an. Mea et delicata consequuntur, duo ea choro homero. Sea ad modo fabulas omittam, vim id graece tibique efficiendi. Te cibo ridens quo, ne utroque democritum has, saepe quidam instructior no usu.",
- "__index": 2,
- "dateCreated": "Thu, 05 Nov 2015 00:27:38 GMT"
- }
- ],
- "archive": [
- {
- "id": "-010-015",
- "title": "'010-'015",
- "images": [
- {
- "uri": "https://ltho.s3.amazonaws.com/2bafd7a2-fbbb-4904-8e64-ff394888fd24.png",
- "label": "LIQUID REFLECTIVE",
- "code": "5315 42944",
- "caption": "Fabric that is highly reflective owing to its coating made up\r\nof thousands of glass microspheres. Each finished garment\r\nis hand sprayed individually and individually baked dry.\r\nThe varying intensity of the reflective element and varying\r\nintensity of colour, the dribbling and speckled effect, are\r\nowing to the high level of craftsmanship involved in the\r\nprocess, making each garment unique and unrepeatable.\r\nLining in quilted microfiber with polyester padding.\r\nStone Island badge with white embroidery, reserved for\r\ngarments that are made using advanced research into\r\nfabrics or processes."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/a0714935-2800-425f-9b34-63fdc4a7fc78.png",
- "label": "30/30 Jacket",
- "code": "5715 4TTY2",
- "caption": "The 30/30 jacket is a cross section of the state of the art of Stone Island. A testament to three decades of exploration and development, it has been designed to embody the spirit of Stone Island’s endless creativity. Linked by the signature looped rigging system, both the jacket shell and jacket liner are reversible. These can be worn, either together or alone, in a total of 10 different ways. The transformative\r\nproperties of the fabrics mean that these 10 ways can each be worn in 3 different modes: Ice, Reflective,\r\nand Normal; resulting in a total of 30 different jacket states.\r\nThis piece features is our 30th anniversary special edition badge.\r\nJACKET /SHELL _ RASO GOMMATO PRISMATIC COVER.\r\nSatin weave cotton of military origin bonded on the inside to a a shiny transparent fine-grained polyurethane film reflecting the light, magnifying the colour effects and bestowing the surface with a three-dimensional and ‘liquid’ appearance.\r\nJACKET/ LINER_ THERMO REFLECTIVE / ENGINEERED WOOL\r\nThis material merges two of Stone Island’s most avant-garde research paths. It explores the interaction between light refraction and thermosensitivity technologies. The resins used to coat the nylon substrate host both the glass microspheres allowing fabric refraction and the micro-encapsulated pigments modifying the passage of light and thus enabling colour changes in relation to temperature. The final effect is an organic and dynamic interaction of light and colour. On the reverse side, an engineered wool face made with a double knit machine."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/d51dce63-d467-45ea-88a6-5b077ffe3c3c.png",
- "label": "REFLECTIVE KNIT WITH WINDSTOPPER® 3L",
- "code": "5715 587Y5",
- "caption": "To celebrate the thirtieth anniversary of Stone Island, a yarn has been engineered that represents the\r\nheight of our tireless research. The President’S Knit 5715 has been created in Reflective yarn, made\r\nup of micro plates coated with glass microspheres trapped inside a polyester mesh. The structure of\r\nthe jumper has been made double, reflective on the outside and wool on the inside. The outer face\r\nhas then been printed in a darker shade using heat and pressure sublimation printing to amalgamate\r\nthe fibres, obtain an even surface and reduce the strong reflective appearance.\r\nThe detachable padded and quilted lining has been created in a polyester jersey laminated with a\r\nWindstopper® membrane, which provides an unbeatable balance between protection and comfort.\r\nThis piece features is our 30th anniversary special edition badge."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/5883b275-a2eb-4a34-890f-69b30250a62b.png",
- "label": "RASO HAND PAINTED TORTOISE SHELL",
- "code": "70565",
- "caption": "Trench coat in a satin-weave cotton fabric of military origin. The garment has been dyed and then faded in selected areas with a corrosive paste. The bleached parts have then been hand-painted with a tortoiseshell-inspired motif also appearing on the Stone Island badge on the left sleeve. This extraordinary manual process makes each piece unique and unrepeatable. Detachable hood in garment-dyed padded iridescent nylon. Detachable lining in GARMENT-DYED DOWN_26 GR X SQM_N, an ultra-light nylon weighing only 26 grams per square metre, filled with the finest down specially treated to bear the stress of the garment dyeing procedure. Garment-dyed with special dye recipes. It is secured to the outer garment by the iconic Stone Island fastening system."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/a25cc013-5c2c-4221-974a-987b8fd00ab4.png",
- "label": "HAND PAINTED SHEEPSKIN",
- "code": "6115 00379",
- "caption": "Sheepskin parka. The finished piece has been hand-sprayed on the outer face with a resin based product and then hand waxed to achieve a softer feel. Hood edged by fur trim. "
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/fa5ed231-8b04-4ecc-b126-7a5543d5614a.png",
- "label": "ICE JACKET THERMO-SENSITIVE FABRIC",
- "code": "6115 43098",
- "caption": "Hooded jacket in thermo sensitive fabric. A water- and wind-resistant polyurethane film is embedded with micro-encapsulated pigments. The molecules of these pigments modify the path of light and change colour according to the temperature. The garment is then padded with the finest down.\r\nTwo chest patch pockets, with snap-flap fastening and second pocket with vertical zip fastening. Adjustable elastic at cuffs. Cotton terry lined hood. Hidden zip and button fastening."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/bfd9defc-a1ef-4322-9e53-9505ec606ed9.png",
- "label": "RASO GOMMATO REVERSE COLOUR PROCESS",
- "code": "6215 42338",
- "caption": "Jacket in Raso Gommato -rubberised satin- a mil. spec. cotton satin bonded with a polyurethane cover making the fabric wind and water resistant. In this version, the transparent cover is bonded to a previously piece dyed and printed the cotton satin. The finished garment undergoes an exclusive procedure named Reverse Colour Process, a fading technique followed by an overdyeing process on the finished garment, owing to the piece unparalleled shaded print effects, resist print areas and residual colour deposits, unique to each single item."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/390b68f3-7f9a-41af-a09c-bd15ac7008a3.png",
- "label": "POLYPROPYLENE TELA",
- "code": "40534",
- "caption": "Down filled parka in polypropylene tela treated with an anti-drop agent. Polypropylene, a material with antibacterial properties, is the lightest man-made fibre. Even very bulky garments astonish for their specific lightness. The paste coloured yarn is texturized to obtain a cotton looking opaque aspect. "
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/cc9f8c72-bbac-4d34-9762-4eae85374abf.png",
- "label": "HIDDEN REFLECTIVE",
- "code": "G0598",
- "caption": "Vest in a reflective, water and wind resistant polyester fabric owing its features to a coating made of thousands of glass microspheres. An opaque black plating totally covers the refraction of the material which is unveiled when photographed in flash mode. The reflective features will be revealed through usage, with diverse effects and intensities from piece to piece, depending on its wearer usage. Stone Island logo on the back obtained through laser printing. Filled with the finest down. Sheepskin over collar. "
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/512029b0-f4a3-469a-9d7d-1cd7fc15c1c8.png",
- "label": "POLY COVER COMPOSITE + POLY FUR SILVER DETACHABLE LINING",
- "code": "491Y1",
- "caption": "Hooded jacket in Poly Cover Composite, a matte, colourless and opaque two-component water and wind resistant film. The garment dyeing technique colours the film without affecting its transparency. Completely heat sealed seams.\r\nDetachable hooded lining in Poly Fur, a synthetic fur with external silver coloured coating. Snap fastening on nylon tape."
- }
- ],
- "__index": "4",
- "dateCreated": "Thu, 05 Nov 2015 01:48:39 GMT"
- },
- {
- "id": "-000-009",
- "title": "'000-'009",
- "images": [
- {
- "uri": "https://ltho.s3.amazonaws.com/725e1b3f-58ee-49f6-8413-0a7e3dc9890f.png",
- "label": "KEVLAR®",
- "code": "3315 4031",
- "caption": "Kevlar® felt. Five times more robust than steel given the same weight, Kevlar® is lightweight and\r\nhighly insulating. It is resistant to even extreme changes in temperature and to both fresh and salt\r\nwater. Owing to its qualities, it is used in the aerospace field, in competitive sailing and for Formula\r\n1 racing. With its soft yellow colour, dyeing this material is usually impossible, but with Stone Island\r\ngarment dyeing expertise, laminating the hydro-cohered Kevlar® fibres to an invisible nylon mesh and\r\na polyurethane coating on the outer side and a simple polyurethane coating on the inside this has been\r\nmade possible.\r\nDetachable lining in triple woven fabric, two nylon honeycomb patterns have been machine raised\r\nwith a further nylon yarn. The detachable lining is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world. Stone Island badge with white embroidery, reserved for\r\ngarments that are made using advanced research into fabrics or processes."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/c1c9db4f-5aa9-4698-9fe3-04a58a631653.png",
- "label": "MONOFILAMENT-S",
- "code": "3715 4316",
- "caption": "Nylon twill monofilament mesh. On the inside, a cotton muslin\r\nlayer is laminated on the outer face with a black breathable\r\nand water resistant membrane, with the application of\r\nwhite polyester taped seams. The monofilament mesh has\r\na protecting function for the inner membrane. From the\r\naesthetical point of view, its transparency is designed to reveal\r\nthe internal construction of the garment. The piece is lined in\r\na brushed cotton fabric quilted with polyester padding. The\r\nfinished garment is over-dyed with a double cotton and nylon\r\nrecipe."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/4f1783c2-1ff7-4054-9d18-faebbd617305.png",
- "label": "LIGHT",
- "code": "3715 4Q30",
- "caption": "Stone Island anticipated the use of light in clothing. Also for safety purposes in cases of\r\ndiminished visibility. The beginning of the Nineties, saw the introduction of the Reflective\r\nJacket - the first reflective garment ever - and in ‘002, to mark its twentieth anniversary,\r\nthe use of light went from being passive to active and self-generated with the use of optical\r\nfibres.\r\nThe fabric’s cotton warp is woven with polyester yarns as well as with optical fibre\r\nfilaments forming a band of light along the front fastening and around the edge of the hood.\r\nThe light is switched on using a small battery hidden inside the garment.\r\nHooded detachable lining in microfiber quilted to a polyester padding, attached to the\r\nouter garment using a system of ties, adapted from those used in the sailing world."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/c62f3de3-a639-4818-988c-3aba9db057e5.png",
- "label": "COMPACT",
- "code": "3915 4N40",
- "caption": "Compact treated linen felt. The Compact process is the transfer to finished garments of a textile process that is usually used to cleanse the natural fibres of their impurities. The garments are boiled at 130°C under pressure, with special additives. In the finished garments the material shrinks approximately 50%, the material becomes extraordinarily compact, the hand of the fabrics becomes dryer and naturally elastic. The fabrics take on an uneven, hand crafted appearance, as if they had been woven on antique looms. The fabric volume reduction involved with the Compact treatment creates very important pattern making complexities. The garment can be fitted to the body with a strings and loops system on the sides, front and hood. This system is inspired by anti-G suits of military aviators. Garment dyed; Compact pieces are very receptive to the garment dyeing recipes, the colours result far more intense than those of untreated garments.\r\nDetachable lining in peached microfiber, quilted with polyester padding. The detachable lining is attached to the outer garment using a system of ties, adapted from those used in the sailing world."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/ba287902-7b92-4128-867f-69d6b1e40cc0.png",
- "label": "OPAQUE NYLON TELA",
- "code": "4315 4C24 30GR",
- "caption": "Japanese featherweight nylon canvas, weighing just 30 grams per square\r\nmetre. The Stone Island badge is ultra light, in embroidered nylon mesh in\r\norder to avoid weighing down the sleeve. The garment is padded with the\r\nfinest down. The lightweight construction of the down bags and the direct\r\ninjection of feathers heightens the lightness of the garments.\r\n4315 G083 DIAGONAL COVER\r\nMulti-pocket vest in diagonal nylon backed by a PVC cover. The back side\r\nis in a technical polyester mesh with nylon twill tapings. Bib with zip fastening\r\ncompartments that contain pockets and the fold-away hood. Patch\r\nbellows pockets on the sides."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/320c3a59-c8ae-4dec-b863-15b15ccc368a.png",
- "label": "4515 4H24",
- "code": "OPAQUE NYLON CANVAS",
- "caption": "Japanese featherweight nylon canvas, weighing just 37 grams\r\nper square metre. The Stone Island badge is ultra light, in\r\nembroidered nylon mesh in order to avoid weighing down the\r\nsleeve. The garment is padded with direct injection finest down.\r\nApart from highlighting the lightness of the fabric, the black\r\nedging under the fabric underscores the removal of the feather\r\nbags to increase the lightness of the garment. The yoke on the\r\nchest is disguised by the horizontal quilting motive. Inside the\r\nhood of the garment, an extra fabric hood with external coating\r\nand PVC print may be laced up by loops."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/35f9ec2a-fc52-42e5-b015-899e40ae9e89.png",
- "label": "DAVID-TC SUBLIMATION PRINT",
- "code": "4615 4C44",
- "caption": "Reversible garment. Star-shaped cross-section polyester / polyamide\r\nJapanese microfiber. During garment dyeing under pressure at 130°C,\r\nthe heat transforms the structure and hand of the material radically.\r\nBeyond the depth of colour and despite maintaining an industrial\r\nappearance, the David-TC garments take on an appearance and\r\nhand that grant a unique tactile experience, similar to both chamois\r\nleather and non-woven coagulated fabric. One of the two faces has\r\nbeen over printed on the finished garment with a dark colour, using\r\na hot sublimation / pressure printing technique that reveals the\r\nconstruction details of both sides of the garment."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/03785345-d63c-4c18-addf-fb7461949cec.png",
- "label": "ANTIQUED REFLECTIVE",
- "code": "47157423",
- "caption": "Cotton Batavia with a coating made up of thousands of glass microspheres. Antiqued Reflective fabric\r\nhas a strong capacity to reflect even the weakest light sources and is enhanced by a colour patina that is\r\nparticularly evident in the folds of the garment, granting to the piece a three-dimensional appearance.\r\nThe shape and details of the garment have been deliberately designed with a retro style in order to\r\ncreate a contrast with the modernity of the reflective face. The hood is lined in a khaki coloured wool\r\nwith parallel stripes, reminiscent of military blankets.\r\nDetachable lining in microfiber quilted to a thin polyester padding. The lining is attached to the outer\r\ngarment using a system of ties, adapted from those used in the sailing world.\r\nStone Island badge with white embroidery, reserved for garments that are made using advanced\r\nresearch into fabrics or processes."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/b7b6db65-3688-4472-839d-38852b074790.png",
- "label": "RASO GOMMATO - HAND PAINTED CAMOUFLAGE",
- "code": "4915",
- "caption": "Drawing inspiration from the actions of soldiers during the First World War, who\r\nused earth from the trenches to make their uniforms dirty, thus inventing the\r\nconcept of camouflage, the fabric base in black satin weave cotton of military\r\norigin bonded to a black polyurethane cover on the inner face, has been faded\r\nwith a corrosive paste and then hand painted on the finished garment to create\r\na camouflage effect. By means of this manual process, each garment is rendered\r\nunique and unrepeatable.\r\nThe detachable quilted nylon lining with polyester padding, with front edging\r\nand collar in felted wool, is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/9a25ed8c-2293-4d6e-b63a-c17580113d63.png",
- "label": "WAXED ICE - THERMO SENSITIVE FABRIC",
- "code": "5115 7498",
- "caption": "Cotton moleskin with a resin treatment containing themo sensitive\r\nquartz. The colour of the garment ranges from bright yellow at\r\nroom temperature to a deeper and deeper shade of olive green as\r\nthe temperature drops. The garment is washed and then waxed.\r\nThe detachable black woollen lining with Stone Island logo in the\r\ncentre is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world.\r\nStone Island badge with white embroidery, reserved for garments\r\nthat are made using advanced research into fabrics or processes."
- }
- ],
- "__index": "3",
- "dateCreated": "Thu, 05 Nov 2015 01:49:03 GMT"
- },
- {
- "id": "-990-999",
- "title": "'990-'999",
- "images": [
- {
- "uri": "https://ltho.s3.amazonaws.com/f58db57f-a469-4c7b-b248-6cab5a927c8a.png",
- "label": "RASO GOMMATO COLOURED COVER",
- "code": "05 4001",
- "caption": "Satin weave cotton of military origin bonded to a\r\nmustard yellow polyurethane cover on the outside\r\nand white on the hood. The inner fabric face takes its\r\ncolouring from garment dyeing. Double parallel row\r\nof snap fasteners mounted on small rubber disks\r\nallow the garment to be tightened or loosened to fit."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/56189889-630b-4293-95e9-2c747d1209fe.png",
- "label": "ICE JACKET CAMOUFLAGE THERMO-SENSITIVE FABRIC",
- "code": "05 4N06",
- "caption": "Cotton poplin with a camouflage print in a thermo-sensitive\r\ncoating with liquid crystals that change colour based on\r\nthe temperature. Over dyed on the finished garment. As the\r\ntemperature drops, the fabric print gradually disappears\r\nas it takes on the same shade as the solid colour of the\r\ngarment dye."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/d46fc981-d51c-4001-a72a-7d5bc3bedc15.png",
- "label": "RUBBERISED SATIN SILVER COVER",
- "code": "35 4405",
- "caption": "Satin weave cotton of military origin bonded to a silver\r\npolyurethane cover on the outside. Padded with goose down.\r\nDouble parallel row of snap fasteners mounted on small rubber\r\ndisks allow the garment to be tightened or loosened to fit.\r\nLining in coloured peached polyester microfiber. Hood in the\r\nRaso Gommato Silver Cover garment dyed, with detachable wolf\r\nfur edging."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/65a6a008-a634-4155-8dba-0e2f22e1dc74.png",
- "label": "REFLECTIVE JACKET",
- "code": "1815 4N02",
- "caption": "Owing to a coating made up of thousands of glass\r\nmicrospheres on a polyester base, the Reflective\r\nfabric has a strong capacity to reflect even the\r\nweakest light sources. It reflects and intensifies\r\nthe brightness of the colour of the fabric itself,\r\nparticularly if placed in the dark. If it is photographed\r\nusing a flash, it detracts light from the other\r\ncomponents in the shot, which show up as black.\r\nPocket linings in cotton mesh."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/7011fe4a-22de-4bf0-bd4d-4440c49d8409.png",
- "label": "WQR WATER RESISTANT QUILTING",
- "code": "2515 6L51",
- "caption": "Nylon jersey quilted with polyester padding,\r\nwith a special external coating used to close\r\nall the needle holes produced in the quilting\r\nprocess, rendering the garment totally\r\nwaterproof. The garment takes its final\r\ncolouring from garment dyeing."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/ca0447d1-3bd3-4702-a7d5-f1da98764ffb.png",
- "label": "LINO GOMMATO REVERSE COLOUR PROCESS",
- "code": "28154P49",
- "caption": "Black linen canvas bonded to a transparent polyurethane\r\ncover on the outside. By means of an exclusive process\r\ncarried out on the finished garment, the original colour of\r\nthe fabric is corroded, with the exclusion of the Stone Island\r\nlettering, of the two parallel stripes and of the name of the\r\nprocess on the left sleeve. The collar, placket, pocket flaps,\r\ncuffs and bottom hem are less faded owing to the double\r\nlayer of fabric and the seams. Light garment over dye."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/23b746d9-311b-4f9f-b356-d1f49046bda9.png",
- "label": "THE PRESIDENT’S KNIT",
- "code": "2915 5784",
- "caption": "The President’s Knit is the name of a knitted garment introduced in the autumn winter ‘998-’999\r\nseason and then retaken with different processes in the years that followed. It is an innovative knitted\r\ngarment that takes on the functions of a jacket owing to its detachable lining.\r\nThe first of these garments was created in a double face knit, nylon chenille on the outside, cotton on\r\nthe inside. Three black nylon parallel stripes on the cuff. Ends of the sleeves and bottom hem as well\r\nin black nylon. The garment takes its final colouring from garment dyeing.\r\nDetachable lightweight nylon fabric lining with water resistant polyurethane resin finish, quilted\r\nwith polyester padding. The detachable lining is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/ebaf6ae8-f465-4a8d-b6d0-ff45a93f0350.png",
- "label": "LAMINATE - NOC 1",
- "code": "3015 4C41",
- "caption": "Two ultra light cotton gauzes laminated by means of a\r\nmatte coloured resin. This slightly stretch fabric provides\r\ntechnical features owing to its light lamination. This fabric\r\nhas a natural appearance but high-tech performance and\r\nis waterproof, windproof and breathable. Fully thermotaped\r\nseams on the inside.\r\nInjection moulded PVC NOC 1 hood. The shape of the\r\nhood is taken by the shape of gas masks. A research by\r\nStone Island into the making of non-fabric components."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/a39caa9e-4dbe-4c31-8bda-41ebc2a508b4.png",
- "label": "PURE METAL SHELL – BRONZE",
- "code": "3115 4T43",
- "caption": "100% bronze mesh applied to a black nylon jersey base. The polyurethane adhesive\r\nprovides a light protection for the mesh. A Teflon® treatment makes the garment water\r\nresistant. The metal mesh is a living material with the features of metallic materials when\r\nused untreated, and therefore they are subject to oxidation over time, losing its shine.\r\nThe worn look, creases and breaks that form on the surface are features that make each\r\ngarment different from the next.\r\nDetachable woollen lining with raw cut edging, attached to the outer garment using a\r\nsystem of ties adapted from those used in the sailing world.\r\nThe Autumn Winter ´999-´000 collection saw the introduction of the Stone Island badge\r\nwith white embroidery, dedicated to garments created using advanced research into\r\nfabrics or processes."
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/f221b596-7cc0-493c-9cea-6755f64d1641.png",
- "label": "PURE METAL SHELL - SILVER SPRAY",
- "code": "3115 4U39",
- "caption": "Ultra light polyester fabric with the application, through\r\na patented procedure, of a micro stainless steel film in a\r\nvacuum and sterile environment. This Japanese fabric,\r\nused in aeroplanes to shield the on-board computers from\r\nelectromagnetic radiation. Cotton canvas lining. The garment is\r\npadded with goose down.\r\nThe Autumn Winter ´999-´000 collection saw the introduction\r\nof the Stone Island badge with white embroidery for pieces\r\ninvolving advanced research."
- }
- ],
- "__index": "2",
- "dateCreated": "Thu, 05 Nov 2015 01:49:20 GMT"
- },
- {
- "id": "-982-989",
- "title": "'982-'989",
- "__index": "1",
- "dateCreated": "Wed, 02 Dec 2015 05:15:20 GMT",
- "images": [
- {
- "uri": "https://ltho.s3.amazonaws.com/e486c7c7-798e-4bf7-9e67-973f2cb02368.png",
- "label": "TELA STELLA",
- "code": "45 4NN",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/757164f9-0699-482a-9187-e7d097f84319.png",
- "label": "TELA STELA DUAL COATED",
- "code": "65 404",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/eb9cadb6-9712-41cf-9984-086518c7c391.png",
- "label": "TELA STELLA DUAL COATED",
- "code": "65 410",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/8237f317-5272-4760-a6ab-b56c475b50d3.png",
- "label": "JOCK-23",
- "code": "75 436",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/c790cbf7-0a92-449e-8557-f6174946ab68.png",
- "label": "JOCK-23",
- "code": "75 460",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/1062f397-c1d7-4012-ae8d-9ddf13363743.png",
- "label": "JOCK-23",
- "code": "75 409",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/5f315b73-1572-460c-abfe-cda498886abe.png",
- "label": "RASO GOMMATO BLACK COVER",
- "code": "35 4NN",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/cd370f63-4fab-41e1-bbb6-d9e4955d068e.png",
- "label": "GLAZED SILK LIGHT",
- "code": "55 4910",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/417e64df-f318-4500-977b-2eaed1668bc4.png",
- "label": "RASO GOMMATO BLACK COVER",
- "code": "65 4A10",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/93d8d8fa-ad6e-4fe5-9182-c9e45c7e4ff5.png",
- "label": "NYLON RIP-STOP COVER",
- "code": "75 4503",
- "caption": ""
- }
- ]
- }
- ],
- "hub": [
- {
- "id": "stone-island-x-nike-co-lab",
- "date": "Wed, 09 Dec 2015 12:00:00 GMT",
- "title": "Stone Island x Nike Co-Lab",
- "subtitle": "Subtitle",
- "body": "Lorem ipsum dolor sit amet, eu has alterum adipisci, vero eloquentiam ei pro, ex appetere repudiare usu. Commune postulant eum ei, verear instructior mediocritatem mea ei. Tota postea fabellas his et, pro scaevola expetenda cotidieque an. Ex nam utamur sanctus. Ne regione nostrum vix, dicunt recusabo ex sea. Dicit persius posidonium vis no.\r\n\r\nPosse ocurreret mel an. In est alii esse nihil. Nam quod minim eu, pro et harum accumsan philosophia. Legendos pericula et sit. Vix in eruditi fastidii. Sale omittam te mea.\r\n\r\nUt pro possit tamquam consequat, no dico omnis dissentias sit, habemus eleifend liberavisse per te. An ancillae mediocritatem usu. Te eam nostro integre. Sea eu fierent iracundia argumentum. Augue adolescens dissentiunt eu nec. Eu nec legere facilisi, sed consetetur consectetuer ne.\r\n\r\nPostea indoctum at qui, vel ne debet simul tractatos. Ut est suavitate theophrastus, viris viderer mea an. Nec id delicata vituperatoribus, putent adipisci sed id. Nostro labitur ne eum, sea atqui aliquam id. Te aeterno democritum has, vix choro nostrud eligendi id, et illum argumentum est.\r\n",
- "link": "http://stoneisland.com/",
- "image": [
- {
- "uri": "https://ltho.s3.amazonaws.com/9369ec1a-9375-4b96-b3c8-550d1882f670.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/2910c67b-2c6a-4db1-84f9-862cc8b8663a.png",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/2db3dbf8-19df-4e5e-b912-4a413a478d8e.png",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/d28ca1f8-82be-4826-8192-2817ba50a28f.png",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/6a734bdc-8327-4e5d-bc41-020766cc01c1.png",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/1702488f-7aa6-40e8-92cd-dcc67050f919.png",
- "caption": ""
- }
- ],
- "__index": "0",
- "dateCreated": "Thu, 05 Nov 2015 04:46:29 GMT",
- "store": "true"
- },
- {
- "id": "multiple-images",
- "date": "Mon, 09 Nov 2015 12:00:00 GMT",
- "title": "Multiple Images",
- "subtitle": "Lookin' good",
- "body": "Lorem ipsum dolor sit amet, quis interpretaris pri at, eos fuisset invidunt euripidis no. Movet appetere vivendum id sit, eros ipsum in vim, qui ei vidit doming vituperatoribus. Harum voluptua dissentiunt mel ut, mel no duis inermis, cu eros solum mel. Vidit consulatu eloquentiam vix ei, mei ea nullam patrioque contentiones. Est ei nobis laudem, alii definitionem ea vis.\r\n\r\nPropriae deseruisse reprimique at mei, no unum epicuri postulant pri, error consul reprehendunt cum te. Dicit liberavisse pro te, mel debet adipisci eu, sint vidit aliquid no ius. Sanctus deterruisset mei no, enim homero eleifend mel ad. Odio elit et pri, eu consul dicunt equidem sed, vis ex nulla sonet dicant.\r\n\r\nVis sonet ignota neglegentur et, utinam iuvaret per et. Ea tincidunt temporibus usu. Et oportere iracundia pro, ad ocurreret comprehensam eam. Quo ad velit putant, choro aperiam insolens cu pri. Ex movet aliquid inermis pro.",
- "link": "http://okfoc.us/",
- "image": [
- {
- "uri": "https://ltho.s3.amazonaws.com/c16bd113-343f-4b99-b70d-b7a750236b57.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/f15c3393-ed7e-4e8e-88ef-30037b2af4c4.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/6ba29fc8-80fa-4c35-84f6-155cf2f409f7.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/15aab5f6-737d-4577-82a0-b2879687d269.jpg",
- "caption": ""
- }
- ],
- "__index": "1",
- "dateCreated": "Fri, 06 Nov 2015 00:46:56 GMT",
- "store": "false"
- },
- {
- "id": "video-post",
- "date": "Wed, 18 Nov 2015 12:00:00 GMT",
- "title": "Video Post",
- "subtitle": "Test",
- "body": "Lorem ipsum dolor sit amet, id tacimates scribentur quo, pro at autem incorrupte quaerendum. Vim homero scaevola in, eos ad nibh bonorum, ex vero deserunt has. Accusam dignissim instructior at cum, postea mediocritatem no vis. Diam veniam vivendum ut nec, nec putant insolens ex.\r\n\r\nMel te nostrum deterruisset. Dicat eripuit ut nam, at adolescens concludaturque sit. Error legendos ex pro. Est doming democritum at, dicat euripidis ne pri, liber quaerendum ut mea. Eirmod meliore habemus ius eu, modus nostro efficiantur vim in. At mea bonorum deseruisse, stet recteque mea ad.\r\n\r\nHas ne dicta vocent pertinax. Ut regione accommodare vim, an sit iudico appareat facilisis. Te quem vitae has, petentium maluisset vim ut. Te nostrud fuisset nec, in mea esse nostrum. Eu ius ullum paulo debitis.\r\n",
- "link": "https://www.youtube.com/watch?v=NBd_4JErW3k",
- "image": [
- {
- "uri": "https://ltho.s3.amazonaws.com/460ad69c-0ca2-4caf-92e0-aeb2710d75e2.jpg",
- "caption": ""
- }
- ],
- "__index": "2",
- "dateCreated": "Fri, 06 Nov 2015 00:53:21 GMT",
- "store": "false"
- }
- ],
- "page": [
- {
- "id": "terms-and-conditions",
- "title": "Terms and Conditions",
- "image": {
- "uri": "",
- "caption": ""
- },
- "body": "Welcome to www.stoneisland.com. These terms and conditions (the “General Terms and Conditions of Useâ€) govern your use of, access to, and purchase of products from the United States section of www.stoneisland.com (the \"US Site\"). By using the US Site, you agree to comply with and be bound by these General Terms and Conditions of Use. If you do not agree to these General Terms and Conditions of Use, please do not use the US Site.\r\n\r\n<b>1. GENERAL</b>\r\nwww.stoneisland.com is the property of SPORTSWEAR COMPANY, a company having an address at Galleria Cavour 4, 40124 Bologna, Italy (\"STONE ISLAND and STONE ISLAND DENIMS\") and is operated under license by YOOX Corporation, a Delaware corporation having an address at 148 Lafayette Street, 10th Floor, New York, NY, 10013, United States of America (the \"Provider\"). \r\n\r\n<b>2. OTHER SITE POLICIES</b>\r\nPlease review our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/saleterms&â€>General Terms and Conditions of Sale</a>, <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/returnpolicy& “>Return Policy</a> and <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/privacypolicy&â€>Privacy Policy</a> (collectively, the “Site Policies\"). All Site Policies are incorporated in these General Terms and Conditions of Use by this reference and, therefore, apply to your access to, use of and purchase of products from the US Site. If you do not agree to our Site Policies, please do not use the US Site. We reserve the right to make changes to the US Site, the Site Policies, and these General Terms and Conditions of Use at any time. If any of these conditions shall be deemed invalid, void, or for any reason unenforceable, that condition shall be deemed severable and shall not affect the validity and enforceability of any remaining condition. \r\n\r\n<b>3. PURCHASE FOR PERSONAL USE ONLY</b>\r\nYou may purchase products on the US Site only for personal use and not for resale. By placing your order, you certify that you are purchasing products for personal use only and not for resale and you accept our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/saleterms&â€>General Terms and Conditions of Sale</a>. WE RESERVE THE RIGHT TO REFUSE ORDERS FOR ANY REASON WITHOUT EXPLANATION. \r\n\r\n<b>4. USER'S SUBMISSIONS</b>\r\nWe welcome your comments and feedback regarding the US Site, our products and our services. We do not, however, accept confidential or proprietary information. Accordingly, all comments, feedback, reviews, ideas, suggestions, materials, images, information and other submissions (collectively, the “Submissionsâ€) disclosed, submitted or offered to the Provider via the US Site, or otherwise, are not confidential. You represent and warrant that any Submissions that you submit to the Provider are made in compliance with applicable laws, do not violate any right of any third party, including privacy and intellectual property rights. By disclosing, submitting or offering any Submissions to the Provider, you grant the Provider and STONE ISLAND and STONE ISLAND DENIMS a nonexclusive, royalty-free, perpetual, irrevocable, and fully sublicensable right to use, reproduce, modify, adapt, publish, translate, create derivative work from, distribute, display such Material throughout the world in any media. You are and shall remain solely responsible for any Submissions you disclose, submit or offer to the Provider or STONE ISLAND and STONE ISLAND DENIMS. \r\n\r\n<b>5. PRIVACY</b>\r\nWe recommend that you read our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/privacypolicy&â€>Privacy Policy</a>, which explains our online privacy practices. \r\n\r\n<b>6. COPYRIGHT</b>\r\nAll content included on www.stoneisland.com US Site, such as works, images, pictures, dialogues, music, sounds, videos, documents, drawings, figures, logos, menus, web pages, graphics, colors, schemes, tools, fonts, designs, diagrams, layouts, methods, processes, functions and software (collectively, the \"Content\"), is the property of STONE ISLAND and STONE ISLAND DENIMS or its content suppliers and is protected by national and international copyright and other intellectual property laws. You may not reproduce, publish, distribute, display, modify, create derivative work from, or exploit in any way, in whole or in part, the Content without the prior express written consent of STONE ISLAND and STONE ISLAND DENIMS, or its content suppliers, as the case may be. STONE ISLAND and STONE ISLAND DENIMS and its content suppliers shall have the exclusive right to authorize or prohibit in their sole discretion any reproduction, publication, distribution, display, modification, creation of derivative work from, or exploitation in any way of, in whole or in part, the Content. STONE ISLAND and STONE ISLAND DENIMS and its content suppliers shall have the right, at any time, to claim the authorship of any Content posted on the US Site and to object to any use, distortion or other modification of such Content. Any reproduction, publication, distribution, display, modification, creation of derivative work from, or exploitation in any way of, the Content expressly authorized in writing by STONE ISLAND and STONE ISLAND DENIMS or its content suppliers shall be carried out by you for lawful purposes only and in compliance with all applicable laws. \r\n\r\n<b>7. LICENSE AND SITE ACCESS</b>\r\nThe viewing, printing or downloading of any Content from the US Site grants you only a limited, nonexclusive and nontransferable license for use solely by you for your own personal use and not for republication, distribution, assignment, sublicense, sale, preparation of derivative works or other use. No part of any Content may be reproduced in any form or incorporated into any information system, electronic or mechanical, other than for your personal use (but not for resale or redistribution). Any unauthorized use of the US Site and the Content immediately terminates the license granted by the Provider. \r\nYou will be solely responsible for all damages and other harm resulting from your use of the US Site and the Content. STONE ISLAND and STONE ISLAND DENIMS and the Provider shall not be deemed liable for any use of the US Site and the Content made by you in violation of any applicable laws and regulations and these General Terms and Conditions of Use. \r\n\r\n<b>8. COPYRIGHT COMPLAINTS</b>\r\nWe respect the intellectual property of others. If you believe that your work has been copied in a way that constitutes copyright infringement, please contact a STONE ISLAND and STONE ISLAND DENIMS copyright representative for further information at <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>. \r\n\r\n<b>9. LINKS TO OTHER WEB SITES</b>\r\nThe US Site may provide hyperlinks to third party websites (“Third Party Websites\"). The Provider and STONE ISLAND and STONE ISLAND DENIMS do not operate, control, endorse or guarantee any Third Party Websites. You agree that the Provider and STONE ISLAND and STONE ISLAND DENIMS are not responsible for any content, services and/or products provided by any Third Party Website, nor are the Provider and STONE ISLAND and STONE ISLAND DENIMS responsible for any practice followed by such Third Party Website with respect to the collection and processing of personal data of their users. When you access any Third Party Website through a hyperlink posted on the US Site, please carefully read the terms and conditions of use, privacy policy and other policies of such Third Party Website. Our policies do not apply to any Third Party Website. \r\nYou The Provider provides hyperlinks to Third Party Websites only for the convenience of its users. By providing hyperlinks to Third Party Websites, the Provider does not recommend that its users access such Third Party Websites. \r\n\r\nYOU AGREE THAT YOUR USE OF ANY THIRD PARTY WEBSITE IS AT YOUR SOLE RISK AND WITHOUT WARRANTIES OF ANY KIND BY THE PROVIDER, EXPRESSED, IMPLIED OR OTHERWISE, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY OR NONINFRINGEMENT. UNDER NO CIRCUMSTANCES ARE THE PROVIDER AND/OR STONE ISLAND and STONE ISLAND DENIMS LIABLE FOR DAMAGES ARISING FROM ANY TRANSACTION BETWEEN YOU AND ANY THIRD PARTY WEBSITE OR FOR ANY INFORMATION APPEARING ON THIRD PARTY WEBSITES. \r\n\r\n<b>10. GOVERNING LAW AND CHOICE OF FORUM</b>\r\nThe laws of the State of New York (without giving effect to its conflicts of law principles) govern all matters arising out of or relating to these General Terms and Conditions of Sale, including, without limitation, their validity, interpretation, construction, performance, and enforcement. All legal proceedings arising out of or in connection with these General Terms and Conditions of Sale shall be brought solely in the City of New York, State of New York. \r\n\r\n<b>11. DISCLAIMER OF WARRANTIES AND LIMITATION OF LIABILITY</b>\r\nTHE US SITE AND ALL INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) AND SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE ARE PROVIDED BY THE PROVIDER ON AN \"AS IS\" AND \"AS AVAILABLE\" BASIS, UNLESS OTHERWISE SPECIFIED IN WRITING. THE PROVIDER MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE OPERATION OF THIS SITE OR THE INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) OR SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE, UNLESS OTHERWISE SPECIFIED IN WRITING. YOU EXPRESSLY AGREE THAT YOUR USE OF THIS SITE IS AT YOUR SOLE RISK. \r\n\r\nTO THE FULL EXTENT PERMISSIBLE BY APPLICABLE LAW, THE PROVIDER DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE PROVIDER DOES NOT WARRANT THAT THIS SITE; INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) OR SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE; THEIR SERVERS; OR E-MAIL SENT FROM THE PROVIDER ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. THE PROVIDER WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THIS SITE OR FROM ANY INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) OR SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE, INCLUDING, BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE, AND CONSEQUENTIAL DAMAGES, UNLESS OTHERWISE SPECIFIED IN WRITING. \r\n\r\nCERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS.\r\n\r\nThe following General Terms and Conditions of Sale govern the sale of merchandise by YOOX Corporation, an affiliate of YOOX NET-A-PORTER GROUP S.p.A. (the \"Provider\" or \"we\") to you through the US section of www.stoneisland.com (\"US Site\"). The US Site is available only for purchases made and delivered within the United States. Your use of the US Site to purchase merchandise indicates your agreement to follow and to be bound by these General Terms and Conditions of Sale.\r\n\r\n<b>1. ORDERS & PRODUCTS</b>\r\nAll orders are subject to e-mail confirmation by us. Please note that the products displayed on the US Site may be out-of-stock or discontinued, and availability is not guaranteed. Please note that while we have tried to accurately display the colors of products, the actual colors you see will depend on your monitor and may not be accurate. \r\n\r\n<b>2. PRICES</b>\r\nAll prices are in US Dollars. Prices may change without notice from time to time. The total amount due is inclusive of sales tax applied in accordance with applicable state and local regulations based on your shipping address. The applicable sales tax amount is indicated on the payment page of the cart.\r\n\r\nThe amount of sales tax charged on your order will depend upon various factors, including type of item purchased, sales price and destination of the shipment. Sales tax regulations may change between the time you place an order and the time of credit card charge authorization and this may affect the calculation of sales taxes. The amount appearing on your payment page of the cart may differ from the sales taxes ultimately charged as indicated in the invoice you will receive with the shipping confirmation e-mail.\r\n\r\nAll prices are inclusive of customs and import duties.\r\n\r\n<b>3. SHIPPING COSTS</b>\r\nYou are responsible for the shipping costs associated with the delivery of the products you purchase on the US Site as specified on your order confirmation. \r\n\r\n<b>4. SHIPMENTS AND DELIVERY</b>\r\nYou bear all risks of loss and damage to the products from the time the same have cleared our fulfillment house. Delivery is deemed complete and title to the products passes to you upon acceptance of shipment by a common carrier.\r\n\r\n<b>5. RETURNS AND REFUNDS</b>\r\nPlease refer to our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/returnpolicy&“>Return and Refund Policy</a>, which forms an integral part of these General Terms and Conditions of Sale. \r\n\r\n<b>6. BINDING AGREEMENT</b>\r\nOur order confirmation, these General Terms and Conditions of Sale and our other Site Policies shall be deemed the final and integrated agreement between you and us on the matters contained in these General Terms and Conditions of Sale. \r\n\r\n<b>7. GOVERNING LAW AND CHOICE OF FORUM</b>\r\nThe laws of the State of New York (without giving effect to its conflicts of law principles) govern all matters arising out of or relating to these General Terms and Conditions of Sale, including, without limitation, their validity, interpretation, construction, performance, and enforcement. All legal proceedings arising out of or in connection with these General Terms and Conditions of Sale shall be brought solely in the City of New York, State of New York. \r\n\r\n<b>8. DISCLAIMERS AND LIMITATIONS OF LIABILITY</b>\r\nTHE PROVIDER MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE PRODUCTS INCLUDED IN THE www.stoneisland.com US SITE NOR AS TO THE MERCHANDISE BEING SOLD TO YOU. TO THE FULLEST EXTENT PERMISSIBLE BY APPLICABLE LAW, THE PROVIDER DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT, AND THERE ARE NO WARRANTIES, EXPRESS OR IMPLIED, WHICH EXTEND BEYOND THE DESCRIPTION OF THE MERCHANDISE CONTAINED ON OUR ORDER CONFIRMATION. THE PROVIDER WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THE US SITE, INCLUDING BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE AND CONSEQUENTIAL DAMAGES \r\nCERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS.\r\n\r\n<b>9. SEVERABILITY</b>\r\nIf any provision of these General Terms and Conditions of Sale is determined to be invalid, illegal or unenforceable, the remaining provisions of these General Terms and Conditions of Sale remain in full force to the extent permitted by law.\r\n\r\n<b>10. PRIVACY</b>\r\nThe terms and conditions of the our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/privacypolicy&â€>Privacy Policy</a> govern the processing of all personal data collected from you in connection with your purchase of products through the US Site.\r\n\r\n<b>11. FORCE MAJEURE</b>\r\nProvider shall not be liable for any delay or failure in performance caused by circumstances beyond its reasonable control.\r\n\r\n<b>12. ERRORS AND INACCURACIES</b>\r\nOur goal is to provide complete, accurate, and up-to-date information on our website. Unfortunately, it is not possible to ensure that any website is completely free of human or technological errors. This website may contain typographical mistakes, inaccuracies, or omissions, some of which may relate to pricing and availability, and product information. We reserve the right to correct any errors, inaccuracies or omissions, including after an order has been submitted, and to change or update information at any time without prior notice.\r\n",
- "__index": "1",
- "dateCreated": "Tue, 17 Nov 2015 20:31:52 GMT",
- "tag": "terms"
- },
- {
- "id": "privacy-policy",
- "title": "Privacy Policy",
- "image": {
- "uri": "",
- "caption": ""
- },
- "body": "Welcome to www.stoneisland.com. Please read our Privacy Policy carefully. This Privacy Policy applies when you visit and surf the United States section of www.stoneisland.com (the \"www.stoneisland.com US Site\") regardless of whether you purchase products or not, when you register with the www.stoneisland.com US Site, and when you use our services. By using the www.stoneisland.com US Site, you accept the practices described in this Privacy Policy. If you do not want to accept the practices described in this Privacy Policy, please do not use the www.stoneisland.com US Site. \r\nThe www.stoneisland.com US Site is operated under license by , a Delaware corporation having an address at 148 Lafayette Street, 10th Floor, New York, NY, 10013, United States of America (\"YOOX USA\"). YOOX USA is a subsidiary of YOOX NET-A-PORTER GROUP S.p.A., an Italian company having its registered address at via Morimondo, 17 – Milano 20143 (\"YOOX\") and controls the personal data of users and customers of the www.stoneisland.com US Site together with SPORTSWEAR COMPANY, having address at Galleria Cavour 4, 40124 Bologna, Italy, Italy, VAT, 01046470371 (jointly referred to as \"YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY\"). \r\nSince personal data of users and customers of the www.stoneisland.com US Site may be processed in Italy, any such processing of personal data will be conducted in compliance with applicable US law as well as the Italian Data Protection Code (Legislative Decree no. 196 dated June 30, 2003). Pursuant to the Italian Data Protection Code, YOOX USA is the controller of personal data of users and customers of the www.stoneisland.com US Site. As controller of personal data, YOOX USA independently determines the purposes and means by which your personal data are processed, including all security measures. As required by the Italian Data Protection Code, YOOX USA has appointed YOOX NET-A-PORTER GROUP as its data protection representative in Italy. As our data protection representative in Italy, YOOX, together with SPORTSWEAR COMPANY, independently ensures that personal data are processed in Italy in a correct and lawful manner and in accordance with good practice.\r\n\r\n<b>1. OUR POLICY</b>\r\nEveryone has the right to the protection of his/her personal data. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY respect our users' right to be informed about the collection and processing of their personal data. The www.stoneisland.com US Site has been designed in such a way that the use of your personal data will be minimal and will not exceed the original purpose for which your personal data are collected and/or processed. In particular, we do not disclose your identity when the purpose for which your personal data are being processed can be achieved by using anonymous aggregate information. This Privacy Policy is intended to provide you with all the information you need in order to understand our privacy practices.\r\nHowever, if you have any questions regarding our privacy practices and this Privacy Policy, please contact us at the following e-mail address:<a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>.\r\nThe www.stoneisland.com US Site is not directed at, nor do we knowingly collect personally identifiable information from children under the age of 13, although we may sell children's products or services for purchase by adults. If you are under 18, you may use the www.stoneisland.com US Site only with the involvement of a parent or guardian. \r\n\r\n<b>2. WHO PROCESSES YOUR PERSONAL DATA</b>\r\nFor organizational and operational purposes only, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY have appointed certain entities that will also process personal data of users and customers of the www.stoneisland.com US Site. Such purposes are strictly connected to the performance of services provided on the www.stoneisland.com US Site by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY, including the sale of products.\r\nThe above-mentioned data processors have been chosen by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY because of their experience in processing personal data, their sufficient guarantees with respect to compliance with applicable laws and regulations, including the Italian Data Protection Code (Legislative Decree no. 196 of 30 June 2003) as well as the technical security measures adopted by them in connection with the processing of personal data. In processing personal data of the users of the www.stoneisland.com US Site, our processors will act only in accordance with instructions provided by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY. We regularly verify that our processors comply with our instructions and that they provide sufficient guarantees with respect to their compliance with applicable laws and regulations. The following is a list of the companies primarily involved in the processing of personal data of users and customers of the www.stoneisland.com US Site:\r\n\t•\t<a href=“https://www.ups.com/“>United Parcel Service S.p.A.(“UPS\")</a>. We provide UPS, by electronic means, with customers' addresses and other personal data for the purpose of shipping, delivering and returning products purchased on the www.stoneisland.com US Site;\r\n\t•\tBT Italia S.p.A., for purposes related to the maintenance of YOOX NET-A-PORTER GROUP servers;\r\n\t•\t<a href=“http://www.yoox.com/“>YOOX NET-A-PORTER GROUP Italy</a>. We provide YOOX NET-A-PORTER GROUP Italy with personal data of users and customers for purposes related to direct marketing services of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY and in connection with other services provided by YOOX NET-A-PORTER GROUP Italy to YOOX USA, such as call center and help desk services.\r\nPlease contact our Customer Care or send us an e-mail at <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a> if you would like to receive a full list of our data processors.\r\n\r\n<b>3. HOW DO WE USE PERSONAL DATA AND FOR WHAT PURPOSES</b>\r\nYour personal data are collected and processed by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY for purposes which are strictly connected to the use of the www.stoneisland.com US Site, its services and the purchase of products on the www.stoneisland.com US Site. However, your personal data may also be used for other processing operations within the limits of such purposes. In particular, your personal data may be processed for the following purposes:\r\n\t•\twhen you register with the www.stoneisland.com US Site we collect your personal data (for example, your personal information, e-mail address, gender) through the relevant registration form (My Account) in order to provide you with services in reserved access areas of the www.stoneisland.com US Site and in order to send you our Newsletter, when specifically requested;\r\n\t•\twhen you request Customer Care services, we collect your personal data (for example, your password) for purposes strictly necessary to provide you with customer care services relevant to the US Site and to the purchase of products on the US Site;\r\n\t•\twhen you request Customer Service assistance, we collect your personal data (for example, your first and last names, e-mail address and password) for purposes strictly necessary to provide you with Customer Service relevant to the www.stoneisland.com US Site and to the purchase of products on the www.stoneisland.com US Site;\r\n\t•\twhen you are executing purchasing procedures for products sold on the www.stoneisland.com US Site, including conclusion of an agreement for the purchase of products, we collect your personal data (for example, personal information, e-mail address, address, Credit Card numbers, bank account number and telephone number) on your order form only for the purpose of selling the products ordered by you;\r\n\t•\twhen you request technical assistance, we collect your personal data in order to provide you with information on net-surfing, Internet browsing or viewing and downloading web pages;\r\n\t•\twhen creating your Wish List, we process your personal data in order to customize our services for the purchase of products on the www.stoneisland.com US Site.\r\nYour personal data are generally processed by electronic means; however, in certain circumstances, paper-based means may be used (for example, when the processing of your personal data is required for the prevention of fraud against us). Your personal data are stored in a way which allows YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY to identify you for the period that is strictly necessary for the original purposes for which such personal data are collected and subsequently processed, all in accordance with applicable laws.\r\nPlease report any changes to your personal data to the e-mail address <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a> in order to ensure that your personal data are always accurate and kept up-to-date.\r\nYour personal data will not be disclosed to third parties for purposes not permitted by law or without your explicit consent. Your personal data may only be disclosed to third parties when it is necessary to process an order placed by you. For example, your personal data are disclosed to Banca Sella S.p.A. for the performance electronic payment services, through Credit/Debit Cards. Moreover, your personal data may be disclosed to the police or to judicial authorities, in compliance with applicable laws and regulations and upon a formal request by such authorities for the purposes of preventing a fraud against us (anti-fraud services). Data processors will also have access to your personal data, as stated in Section 2 of this Privacy Policy, for the specific purposes stated in that Section. In all the above circumstances, your consent for data processing will not be specifically requested.\r\nYour personal data will not be transferred to any countries outside the United States and Italy if such countries do not provide for an adequate level of protection of the privacy of individuals. Should the above be necessary in order to supply services to you or to execute contracts for the purchase of products, the transfer of your personal data to any such countries will be carried out only after the execution of specific contracts between YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY and all parties involved, in accordance with applicable laws and regulations.\r\nWe wish to inform you that YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY process users' personal data for purposes that are strictly connected to the supply of services through the www.stoneisland.com US Site, the execution of contracts related to the sale and purchase of products on the www.stoneisland.com US Site and, after receiving your consent, in order to send you information on new commercial initiatives which are strictly related to the www.stoneisland.com US Site's activities and services. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY process your personal data for direct marketing purposes, including by e-mail, only after receiving your consent.\r\nYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may have access to third parties' personal data which is directly disclosed by their users to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY, for instance when the user buys a product to be sent to a friend, when the user who pays the purchase price for a product is different from the recipient of such product, or when a user wishes to recommend to a friend a service provided through the www.stoneisland.com US Site or the sale of a particular product posted on the www.stoneisland.com US Site.\r\nIn all cases involving the disclosure of information of a third party, you must obtain the consent of such individuals before disclosing their personal data to YOOX USA, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY and have informed said individuals about this Privacy Policy. You will be the only person liable in connection with the disclosure of information and data relevant to such third parties and with any other incompatible and unlawful use of such data if they have not provided you with their consent. You agree to indemnify, defend and hold each of YOOX USA, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY harmless from any liability, claims and expenses, including reasonable attorneys' fees, arising from or related to any unauthorized disclosure of personally identifiable information of third parties.\r\n\r\n<b>4. WHAT HAPPENS IF YOU DO NOT DISCLOSE YOUR PERSONAL DATA</b>\r\nThe personal data we request you to provide to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY, including your e-mail address, your address, your Credit/Debit Card numbers, bank account number and your telephone number, is necessary for the processing of your order for the purchase of products on the www.stoneisland.com US Site, to supply other services provided on the www.stoneisland.com US Site upon your request, or to carry out obligations arising out of applicable laws and regulations.\r\nYour refusal to provide certain personal data to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may prevent YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY from processing your order for the purchase of products sold on the www.stoneisland.com US Site or from providing other services through the www.stoneisland.com US Site, such as Customer Services, sending the Newsletter, use of the Wish List, recommending a product to a friend.\r\nYour failure to provide personal data to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may prevent the processing of your order for the purchase of products sold or to provide services through the www.stoneisland.com US Site. \r\nThe disclosure of personal data to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY other than that required in order to fulfill legal or contractual obligations or to provide the services requested by you is optional and does not have any effect on the use of the www.stoneisland.com US Site and its services or on the purchase of products on the www.stoneisland.com US Site. We will inform you if the personal data we ask you to provide is necessary or optional by marking with an asterisk (*) the information that is necessary. Your failure to disclose optional personal data will not pose any obligation or disadvantage to you, except to the extent that we may no be able to offer you some of our optional, personalized features of the www.stoneisland.com US Site. \r\n\r\n<b>5. TO WHOM YOUR PERSONAL DATA WILL BE DISCLOSED</b> \r\nYour personal data may be disclosed to third parties who provide specific services as Data Processors on behalf of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY or who autonomously process personal data collected by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY in connection with the performance of a contract for the purchase of products on the www.stoneisland.com US Site (for example, Banca Sella, S.p.A.). \r\nAny such disclosure will be conducted, in each instance, without exceeding the original purposes for which your personal data were collected and subsequently processed. In addition, your personal data may be disclosed to third parties in order to (1) comply with applicable laws, (2) respond to governmental and judiciary inquiries, (3) comply with valid legal process, and (4) protect the rights or property of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY. \r\nAny third party information disclosed to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY in accordance with this Privacy Policy will not be used for any purpose other than as required to technically operate the service, to complete a transaction, or as otherwise required by law. \r\nIn the event there is a change in the corporate structure of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY including, without limitation, by merger, consolidation, sale, liquidation, or transfer of substantial assets, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may, in their sole discretion, transfer, sell or assign personal data collected on and through the www.stoneisland.com US Site, including, without limitation, personally identifiable information and aggregate information concerning users and customers, to one or more affiliated or unaffiliated third parties. \r\nIn any event, your personal data will not be disclosed to third parties without you being informed or without your consent, when such consent is required by law.\r\n\r\n<b>6. HOW DO WE COLLECT YOUR DATA ON www.stoneisland.com</b> \r\nCookies\r\nWhen you are using the www.stoneisland.com US Site, some personal data may be collected automatically through so-called \"cookies\". A cookie is a device transmitted to the hard drive of an Internet user. While cookies do not contain intelligible information, they allow us to link an Internet user to personal information provided by such user through the www.stoneisland.com US Site. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY process information collected by cookies in a collective and anonymous way, in order to optimize our services and the www.stoneisland.com US Site for the needs and preferences of its users. We use cookies to collect users' IP addresses and other information regarding users' data traffic or preferences in the choice of services provided and products purchased through the www.stoneisland.com US Site.\r\nWe disseminate cookies in connection with functions such as browsing the catalogue, purchasing products on-line and supplying \"My Account\" services.\r\nAs you may know, each Internet browser allows the deletion of cookies after each session. Your Internet browser contains instructions on how to carry out these procedures of deletion. Please access the appropriate instructions section on your Internet browser if you wish to delete cookies. \r\nYour acceptance of our automatic procedures of collection of data and the use of cookies is necessary to take advantage of many features and services offered by the www.stoneisland.com US Site, including the purchase of products. If you set your browser to block or delete cookies, we cannot guarantee that you will have access to all the features and services offered by the US Site (for example, your computer may not be able to display the image of the product you are in the process of purchasing).\r\nOther Methods of Collecting User Information. \r\nYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY directly collect personal data and information from users when they register on-line with the www.stoneisland.com US Site or when they send purchase orders for products sold on the www.stoneisland.com US Site in order to finalize their transactions.\r\n\r\n<b>7. SECURITY MEASURES</b>\r\nWe have adopted security measures to protect personal data against accidental or unlawful destruction, loss, alteration, unauthorized disclosure or access and against other unlawful forms of data processing, as provided in our Privacy Policy. \r\nNevertheless, YYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY cannot guarantee that the security measures adopted for the protection of the www.stoneisland.com US Site and the transmission of data and information through the www.stoneisland.com US Site will prevent or exclude any risk of unauthorized access to or loss of data. It is advisable that your computer be equipped with software devices for the protection of network data transmission and receipt (such as, updated antivirus systems) and that your Internet service provider take appropriate measures for the security of network data transmission (such as, firewalls and anti-spam filtering).\r\n\r\n<b>8. OPT-IN/OPT OUT</b> Advertising material and direct marketing or other commercial communications which are not specifically requested by you or necessary to provide a service you requested, including the purchase of products on the US Site, will be sent to you only after we receive your consent. Please note that each time your consent is required, we will inform you in advance and we will give you the option to either provide or refuse your consent by selecting the appropriate box.\r\nYOOX and STONE ISLAND and STONE ISLAND DENIMS may process your personal data without your consent when such processing is necessary to comply with applicable laws and regulations or to provide you with services you requested, including the purchase of products on the US Site.\r\nEven when your prior consent is not necessary, you may exercise, at any time, your right not to receive future communications regarding services you requested, such as the Newsletter.\r\n\r\n<b>9. YOUR RIGHT TO ACCESS PERSONAL DATA AND FURTHER RIGHTS</b>\r\nYou are entitled to obtain, at any time, confirmation from YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY as to whether or not data relating to you is being processed, even if not yet registered, and the communication of any such data in an intelligible form. \r\nMoreover, you are entitled to receive from YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY information on the source from which we received your personal data; the purposes and means of processing your personal data; the logic involved in any electronic data processing; information regarding the data controller and the data processors and the names of subjects and categories of subjects to whom your personal data may be disclosed or who may access your personal data (for example, the names of data processors). You can also find the above information in our Privacy Policy. \r\nYou are entitled to obtain at any time from YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY:\r\n\t•\tthe updating, rectification or integration of your personal data;\r\n\t•\tthe deletion, transformation into anonymous form or blocking of your personal data, which are processed in violation of the law, including when the storage of data is not necessary for the purposes for which it has been collected and subsequently processed;\r\n\t•\tthe confirmation that the operations under letters a) and b) have been reported to whom the data were disclosed or disseminated, except when it becomes impossible to do so or if it means exceeding the protection of the right you are claiming.\r\nYou are entitled to object, in all or in part:\r\n\t•\tfor legitimate reasons, to the processing of your personal data, even if it is related to the purposes for which it was collected;\r\n\t•\tto the processing of your personal data for advertising or direct marketing purposes or in order to carry out marketing research or commercial communications.\r\nYou may freely and at any time exercise your rights, provided that you do so in compliance with applicable laws and regulations, by sending your request to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY at the following e-mail address: <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>.\r\n\r\n<b>10. LINKS TO OTHER WEB SITES</b>\r\nThe www.stoneisland.com US Site may provide hyperlinks to third party websites (the \"Third Party Websites\"). YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY do not operate, control, endorse or guarantee any Third Party Websites. You agree that and SPORTSWEAR COMPANY are not responsible for any content, services and/or products provided by any Third Party Website, nor are YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY responsible for any practice followed by such Third Party Website with respect to the collection and processing of personal data of their users. When you access any Third Party Website through a hyperlink posted on the www.stoneisland.com US Site, please carefully read the Privacy Policy and other policies of such Third Party Website.\r\nOur Privacy Policy and other policies do not apply to any Third Party Website. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY provide hyperlinks to Third Party Websites only for the convenience of our users. By providing hyperlinks to Third Party Websites, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY do not recommend that users access such Third Party Websites.\r\nYOU AGREE THAT YOUR USE OF ANY THIRD PARTY WEBSITE IS AT YOUR SOLE RISK AND WITHOUT WARRANTIES OF ANY KIND BY YOOX, YOOX USA, AND/OR SPORTSWEAR COMPANY, EXPRESSED, IMPLIED OR OTHERWISE, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY OR NONINFRINGEMENT. UNDER NO CIRCUMSTANCES ARE YOOX, YOOX USA, AND/OR SPORTSWEAR COMPANY LIABLE FOR DAMAGES ARISING FROM ANY TRANSACTION BETWEEN YOU AND ANY THIRD PARTY WEBSITE OR FOR ANY INFORMATION APPEARING ON THIRD PARTY WEBSITES. \r\n\r\n<b>11. CONTACTS</b>\r\nIf you wish to receive further information regarding our privacy practices, please contact us at the following e-mail address: <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>. For more information regarding your rights under the Italian Data Protection Code, please go to the web site of the Italian Data Protection Authority at <a href=“http://www.garanteprivacy.it/ “>www.garanteprivacy.it</a>. \r\n\r\n<b>12. GOVERNING LAW</b>\r\nThe processing of personal data by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY will be conducted in compliance with applicable US laws. The laws of Italy, including the Italian Personal Data Protection Code (Legislative Decree no. 196 dated June 30, 2003), also apply to the processing of personal data carried out by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY (see the Companies of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY Group). The Italian Personal Data Protection Code guarantees that the processing of your personal data will be carried out in compliance with the fundamental rights and freedoms of individuals and their dignity, with particular reference to confidentiality, identity and the right to personal data protection. \r\n\r\n<b>13. MODIFICATION AND UPDATING</b>\r\nYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may amend or update from time to time all or any part of this Privacy Policy, whether or not required by a change in the applicable laws and regulation. Our users will be notified of any amendment to or update of our Privacy Policy on our homepage. All amendments and updates will become effective upon publication on this section of the www.stoneisland.com US Site. You should regularly access this section of the www.stoneisland.com US Site in order to review the most recent and updated version of our Privacy Policy.",
- "__index": "2",
- "dateCreated": "Tue, 17 Nov 2015 20:32:07 GMT",
- "tag": "privacy"
- },
- {
- "id": "returns-policy",
- "title": "Returns Policy",
- "image": {
- "uri": "",
- "caption": ""
- },
- "body": "\r\nWe want to make sure that you are completely satisfied with your purchases on this Site. If, for any reason, you are not satisfied with your order, you may return any UNUSED products within twenty (20) days from the date of delivery. Before sending any products back to us, please make sure that all of the following conditions have been correctly satisfied. \r\nThe product you wish to return:\r\ncan be sent back to us only after you have completed and submitted the online <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=help/return&â€>Return Form</a> available on the www.stoneisland.com US Site within twenty (20) days of delivery; by completing and submitting our online return form you will receive your Return Number, which you must include on your return shipping label;\r\nmust be unused, unworn, unwashed and in the same condition in which it was received by you;\r\nmust have all disposable seals still attached with the disposable seal that must still be intact;\r\nmust be returned complete with all of its parts and accessories;\r\nmust be sent in its original packaging;\r\nmust be shipped back to our fulfillment house within twenty (20) days of the date of delivery;\r\nmust be sent in one single shipment; products that belong to the same order must be returned to us at the same time; and\r\nmust be shipped from the United States.\r\nIf all of these conditions are satisfied, we will refund the value of the returned product(s), Sales Tax included, less any original shipping costs. If you send the package with UPS, return shipping costs charged to the customer will correspond to $6.00. If you prefer you can send the return at your expense, with a courier of your choice. We will not issue any refunds for returns that do not satisfy all of the conditions indicated above; provided, however, that you will have the option to request within thirty (30) days of being notified that you are not entitled to a refund that your merchandise be shipped back to you, at your own cost, in the condition in which it was received by Provider’s fulfillment house.\r\nIf you do not request the return of your merchandise within said thirty-day period, you authorize Provider, and any of its affiliates or agents, to dispose of such merchandise as it sees fit. \r\n\r\nSALES OF BEACHWEAR AND UNDERWEAR ARE FINAL. WE RESERVE THE RIGHT TO DESIGNATE ON THE SITE OTHER NON-RETURNABLE MERCHANDISE. ANY SUCH DESIGNATION WILL BE NOTED ON THE DETAIL PAGE OF THE MERCHANDISE WHICH IS NON-RETURNABLE. \r\n\r\n<b>REFUND POLICY</b>\r\nRefunds are processed within approximately three (3) business days of our receipt of your merchandise. Your refund will be credited back to the same payment method used to make the original purchase on the US Site. If you paid by credit card, refund times will depend on the credit or debit card company’s policies. Be aware that the refund date for the credit will coincide with the date of the original payment, therefore you will not be charged any interest fees. If you paid by PayPal (where available), refunds will be credited to your PayPal account and will be visible immediately. The date of reimbursement to the credit card associated with your PayPal account depends on the company that issued the card. WE OFFER NO REFUNDS ON ANY PRODUCTS DESIGNATED ON THIS SITE AS NON-RETURNABLE. \r\n\r\n<b>IDENTIFICATION TAG</b>\r\nAll of our products come with an identification tag with a disposable seal. Please try your item on before removing the tag and seal, since we do not accept returns once the disposable seal has been removed, broken or damaged in any way. Shoes come with a sticker under the sole; if you remove or alter this sticker, you may no longer return your purchase. \r\n\r\n<b>UPS</b>\r\nYour return can be sent to us by UPS, using the pre-printed label which you can find within the original shipment. If you send the package with UPS, return shipping costs charged to the customer will correspond to $6.00. Please visit <a href=“https://www.ups.com/dropoff?loc=en_US “>http://www.ups.com/dropoff?loc=en_US</a> to find the UPS drop-off location nearest to you. If you prefer you can send the return at your expense, with a courier of your choice. We are not responsible for any loss or damage to products if you ship your return without using UPS. \r\n\r\nWE OFFER NO EXCHANGES ON MERCHANDISE PURCHASED ON THE www.stoneisland.com US SITE\r\n\r\nDISCLAIMER OF WARRANTIES AND LIMITATION OF LIABILITY\r\n\r\nPROVIDER MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE PRODUCTS INCLUDED ON THE SITE NOR AS TO THE MERCHANDISE BEING SOLD TO YOU. TO THE FULLEST EXTENT PERMISSIBLE BY APPLICABLE LAW, PROVIDER DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT, AND THERE ARE NO WARRANTIES, EXPRESS OR IMPLIED, WHICH EXTEND BEYOND THE DESCRIPTION OF THE MERCHANDISE CONTAINED ON OUR ORDER CONFIRMATION. PROVIDER WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THE SITE, INCLUDING BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE AND CONSEQUENTIAL DAMAGES. \r\n\r\nCERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS.\r\n\r\n<b>Force Majeure</b>\r\nProvider shall not be liable for any delay or failure in performance caused by circumstances beyond its reasonable control.",
- "__index": "3",
- "dateCreated": "Tue, 17 Nov 2015 21:03:44 GMT",
- "tag": "returns"
- },
- {
- "id": "customer-care",
- "title": "Customer Care",
- "image": {
- "uri": "",
- "caption": ""
- },
- "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam blandit in risus sit amet maximus. Phasellus ullamcorper auctor fermentum. Aenean diam libero, rhoncus vel efficitur sed, dictum vel neque. Aliquam mollis leo vitae est vehicula, non pulvinar elit congue. Phasellus sit amet mauris neque. Integer volutpat nisl est, vel finibus purus lacinia vehicula. Proin dapibus velit quis sapien ultricies accumsan. Sed accumsan dui id porta efficitur.\r\n\r\nCurabitur pretium ut libero a varius. Morbi in lacinia felis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam dolor justo, consequat eu lectus at, interdum sollicitudin arcu. Nunc accumsan velit volutpat, venenatis leo eu, rhoncus nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus semper consequat ipsum, sed fringilla ligula tincidunt at.\r\n\r\nMauris vehicula, purus ut iaculis facilisis, mi leo dignissim libero, at lobortis lectus odio consequat urna. Etiam accumsan volutpat nibh, eget ultricies mi feugiat eu. Duis id aliquam enim. Pellentesque quis enim eu dolor bibendum interdum. Cras ultrices erat velit, eu volutpat erat consequat non. Nam ut nibh facilisis, egestas sapien vitae, scelerisque sapien. Nullam tortor ex, convallis vel nisi vitae, efficitur dapibus nunc. In hac habitasse platea dictumst. Nam posuere ligula lorem, sit amet ultricies odio tristique in. Etiam gravida tincidunt mollis. Duis quis nulla ligula. Etiam ut vehicula tellus. Sed ipsum lacus, tincidunt sit amet velit et, aliquet hendrerit erat. Nam sed velit dapibus, congue odio non, ultrices ligula. Suspendisse at quam eu lorem finibus ultricies id tempus lorem. Nulla vel quam luctus, viverra nulla cursus, faucibus tellus.\r\n\r\nPraesent magna ex, posuere at hendrerit varius, auctor a nisl. Nullam sodales erat ut nisl vestibulum luctus. Donec id sagittis orci. Cras imperdiet, erat non dictum feugiat, elit turpis viverra neque, interdum cursus mi turpis vitae dolor. Suspendisse potenti. Aenean et auctor diam, vel eleifend eros. Praesent viverra felis at enim elementum fermentum. Etiam convallis, elit porta molestie condimentum, arcu ligula vestibulum nisi, et aliquet massa tellus quis eros. Aliquam a dignissim tellus, non ullamcorper purus. Phasellus in risus mattis dui vehicula cursus in at urna.\r\n\r\nCurabitur laoreet lorem eu euismod volutpat. Suspendisse vulputate aliquet tempor. Pellentesque purus augue, eleifend a maximus eu, commodo nec felis. Mauris mattis turpis nec volutpat tincidunt. Mauris imperdiet ante at orci mollis sagittis. Etiam lacus risus, consectetur ut dui non, pulvinar pulvinar libero. Aliquam ut rhoncus justo, quis sollicitudin nisi. Proin et iaculis sem. Pellentesque id tempor elit, et tincidunt nunc. Quisque laoreet et massa quis imperdiet. Morbi dapibus, felis sed auctor porttitor, massa nunc sollicitudin urna, non congue odio enim eget nisi. Suspendisse semper vehicula nisl vitae vehicula. Maecenas sed justo quis nisi auctor ultrices. Nam vel dolor fringilla, accumsan nulla eu, rutrum ex. Donec ante quam, molestie vel ex eget, dictum luctus nunc. Phasellus tincidunt libero non quam finibus, at convallis sem laoreet.\r\n\r\nDonec consequat, leo tincidunt elementum consectetur, nisl augue sollicitudin dolor, vel fringilla dui lorem non enim. Morbi id arcu felis. Integer malesuada ex enim, sed consectetur massa condimentum id. In mollis libero eu neque sollicitudin, sit amet interdum orci bibendum. Curabitur tincidunt purus vel vestibulum placerat. Aliquam erat volutpat. Praesent ac eros diam. Mauris ultrices euismod sodales. Vestibulum dui leo, auctor sit amet finibus eu, suscipit eu diam. Cras ac rhoncus turpis, at sagittis mi. Praesent urna metus, euismod vitae nunc eget, suscipit auctor lectus. Pellentesque maximus arcu justo. Duis mi arcu, rutrum et vulputate nec, mattis sit amet risus. Donec posuere velit sed enim accumsan, eu lobortis nulla sagittis.\r\n\r\nDonec viverra consectetur turpis sit amet malesuada. Sed sit amet urna luctus, sodales est porta, aliquam mi. Curabitur et ullamcorper odio, dapibus facilisis nisl. Fusce tortor leo, mattis sit amet massa ut, ultrices aliquam massa. Pellentesque consectetur metus in molestie egestas. Quisque vehicula at mauris ut eleifend. Duis eu ipsum quis ipsum bibendum luctus.\r\n\r\nSed sed viverra diam. Quisque lacinia nisl orci. Fusce vulputate dui ut nunc vulputate feugiat. Praesent felis quam, semper nec dapibus eget, venenatis vitae leo. Maecenas rutrum egestas dapibus. Vestibulum sodales molestie varius. Ut ac laoreet est, nec posuere ipsum. Cras ac eros sapien. Quisque eu dui lorem. Donec congue varius tortor ac ullamcorper. Curabitur vulputate faucibus finibus. Donec tellus neque, euismod ac aliquet at, vehicula in mauris. Vivamus justo nulla, maximus sit amet quam ac, vulputate dapibus purus. Mauris ante urna, posuere varius vehicula sed, fringilla sed quam. In eget ex tincidunt, ultrices elit id, congue quam. Suspendisse congue tristique dolor, rhoncus venenatis purus tempor at.\r\n\r\nVivamus efficitur, odio in tempor rutrum, quam nunc congue orci, non posuere lorem lacus et arcu. Aenean sit amet diam quis dui dapibus semper ac vitae est. Aenean ornare arcu justo, id sodales odio maximus interdum. Curabitur sit amet augue pretium metus bibendum imperdiet vitae vitae nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc euismod ante eu justo mollis dignissim. Maecenas et velit eu lorem laoreet ornare. Sed accumsan est nec rutrum dignissim.\r\n\r\nIn bibendum mattis ligula. Pellentesque gravida felis sed congue viverra. Nam volutpat quam at velit sodales, nec egestas dolor consectetur. Etiam id tortor tincidunt, sollicitudin risus ut, lacinia diam. Morbi consequat euismod justo vitae sagittis. Pellentesque interdum orci ligula, tincidunt maximus nulla sollicitudin sed. Duis finibus odio eros, eget consequat ante tristique ac. Suspendisse at interdum leo. Nunc sagittis ante ac felis iaculis fermentum. Sed elementum dictum dictum. Aliquam eget metus molestie, varius mi ac, auctor quam.",
- "__index": "4",
- "dateCreated": "Tue, 17 Nov 2015 21:03:57 GMT",
- "tag": "care"
- }
- ],
- "store": [
- {
- "id": "stone-island",
- "title": "Stone Island",
- "StoreIsOpen": "false",
- "ClosedStoreImages": [
- {
- "uri": "https://ltho.s3.amazonaws.com/27b2926b-e9a9-4c7f-9065-697f4eefec84.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/b9bbf830-a130-4b50-8850-c831d1922312.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/45d74d7a-a48f-48b5-99ff-aab2936e78d8.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/4ec8dfae-a1e4-42dd-ad62-8d30def7811d.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/7ea1a112-d06f-483c-8f13-afc05f36bba6.jpg",
- "caption": ""
- },
- {
- "uri": "https://ltho.s3.amazonaws.com/46593109-646d-459f-86ac-8da950a27841.jpg",
- "caption": ""
- }
- ],
- "__index": "0",
- "dateCreated": "Fri, 20 Nov 2015 00:45:03 GMT",
- "collection": "STONE ISLAND FW_'015 '016",
- "FitsLarge": "false",
- "BackgroundIsGray": "true",
- "CollectionId": "8822"
- }
- ]
-} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-568h@2x~iphone.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-568h@2x~iphone.png
index 10ed683c..47079c45 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-568h@2x~iphone.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-568h@2x~iphone.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-667h.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-667h.png
index d9bcf61d..57a8f40e 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-667h.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-667h.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-736h.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-736h.png
index 1fcef229..2f00da21 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-736h.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-736h.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape-736h.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape-736h.png
index eae0792d..fc6512f7 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape-736h.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape-736h.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape@2x~ipad.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape@2x~ipad.png
index 1fc8c7db..f0fa0658 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape@2x~ipad.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape@2x~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape~ipad.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape~ipad.png
index 58ea2fbd..89964903 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape~ipad.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Landscape~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait@2x~ipad.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait@2x~ipad.png
index 1570b37d..9002f6f3 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait@2x~ipad.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait@2x~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait~ipad.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait~ipad.png
index 223e75d0..2916e875 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait~ipad.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default-Portrait~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default@2x~iphone.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default@2x~iphone.png
index 0098dc73..13ada67a 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default@2x~iphone.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default@2x~iphone.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default~iphone.png b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default~iphone.png
index 42b8fdea..19d2b2ae 100755
--- a/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default~iphone.png
+++ b/StoneIsland/platforms/android/assets/www/img/Resources/splash/Default~iphone.png
Binary files differ
diff --git a/StoneIsland/platforms/android/assets/www/index.html b/StoneIsland/platforms/android/assets/www/index.html
index b9dd0a91..768e3140 100755
--- a/StoneIsland/platforms/android/assets/www/index.html
+++ b/StoneIsland/platforms/android/assets/www/index.html
@@ -12,7 +12,7 @@
-->
-<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; object-src * 'unsafe-inline' 'unsafe-eval'; style-src * 'unsafe-inline' 'unsafe-eval'; img-src * 'unsafe-inline' 'unsafe-eval'; media-src * 'unsafe-inline' 'unsafe-eval'; frame-src * 'unsafe-inline' 'unsafe-eval'; font-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline' 'unsafe-eval'">
+<meta http-equiv="Content-Security-Policy" content="default-src * gap: 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; object-src * 'unsafe-inline' 'unsafe-eval'; style-src * 'unsafe-inline' 'unsafe-eval'; img-src * 'unsafe-inline' 'unsafe-eval'; media-src * 'unsafe-inline' 'unsafe-eval'; frame-src * gap: 'unsafe-inline' 'unsafe-eval'; font-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline' 'unsafe-eval'">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
@@ -103,13 +103,13 @@
<div class="story">STORY</div>
<div class="archive">ARCHIVE</div>
<div class="alert"></div>
- <span class="latlng">+40&deg; 58' 90" -74&deg; 04' 46"</span>
+ <span class="latlng">+40&deg; 58' 90.9" N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;74&deg; 04' 46.3" W</span>
</div>
<div id="header">
<span class="burger ion-android-menu"></span>
<span class="logo"></span>
- <span class="cart"><span class="cart_count">0</span></span>
+ <span class="cart_rapper"><span class="cart"><span class="cart_count">0</span></span></span>
</div>
<div id="footer">
@@ -229,7 +229,7 @@
<div id="collection">
<div class="scroll">
- <h1>COLLECTION NAME</h1>
+ <h1>LOADING...</h1>
<div class="loader"></div>
<div class="content">
<script type="text/html" class="template">
@@ -295,6 +295,9 @@
<h3>
THIS STORE IS CURRENTLY CLOSED
</h3>
+ <h4>
+ WE WILL REOPEN FEBRUARY 1ST
+ </h4>
<div class="website_link">
visit<br>
<b>www.stoneisland.com</b>
@@ -1052,7 +1055,7 @@
-->
</div>
</div>
- <input type="text" name="Phone" placeholder="PHONE NUMBER">
+ <input type="number" name="Phone" placeholder="PHONE NUMBER">
<!--
<div class="checkbox-container save_as_default">
<div class="checkbox-row">
@@ -1096,6 +1099,7 @@
<script src="js/lib/etc/push.js"></script>
<script src="js/lib/etc/deeplink.js"></script>
<script src="js/lib/etc/geo.js"></script>
+<script src="js/lib/etc/backup_db.js"></script>
<script src="js/lib/view/View.js"></script>
<script src="js/lib/view/Router.js"></script>
diff --git a/StoneIsland/platforms/android/assets/www/js/index.js b/StoneIsland/platforms/android/assets/www/js/index.js
index 73af443a..6bea75d0 100755
--- a/StoneIsland/platforms/android/assets/www/js/index.js
+++ b/StoneIsland/platforms/android/assets/www/js/index.js
@@ -1,9 +1,10 @@
var app = (function(){
var app = {}
- app.init = function(){
+ app.init = function(){
+ console.log("init")
- sdk.init({ env: "test" })
+ sdk.init({ env: "production" })
app.bind()
app.build()
@@ -63,29 +64,56 @@ var app = (function(){
}
app.ready = function(){
+ console.log(">> READY")
if (window.cordova) {
document.addEventListener('pause', app.paused, false)
document.addEventListener('resume', app.resumed, false)
+ document.addEventListener('online', app.online, false)
+ document.addEventListener('offline', app.offline, false)
cordova.plugins.Keyboard.disableScroll(true)
geo.fetch()
+ var image = new Image
+ image.src = "./img/compass-logo.png"
}
app.view = null
app.router = new SiteRouter ()
-// if (sdk.env == "test") {
-// app.router.launch()
-// }
-// else {
- push.init()
- app.account.connect( app.router.launch.bind(app.router) )
-// }
+
+// if (sdk.env == "test") {
+// app.router.launch()
+// }
+// else {
+// }
+
+ if (navigator.onLine) {
+ app.account.connect()
+ app.blog.fetch(function(){
+ app.router.initial_route = "/intro"
+ app.router.launch()
+ })
+ }
+ else {
+ console.log(">> LAUNCHED WHILE OFFLINE")
+ app.router.go("intro")
+ app.finished_launching()
+ }
+ push.init()
+ }
+
+ app.finished_launching = function(){
+ console.log(">> FINISHED LAUNCHING")
+ if (window.cordova) {
+ navigator.splashscreen.hide()
+ }
$("body").removeClass("loading")
}
var refresh_time = +Date.now()
app.paused = function(){}
app.resumed = function(){
+ console.log( "app is ready?", app.is_ready )
+
geo.fetch()
var now = +Date.now()
if (now - refresh_time > 60 * 60 * 1000) {
@@ -94,6 +122,13 @@ var app = (function(){
}
}
+ app.online = function(){
+ console.log(">> ONLINE")
+ }
+ app.offline = function(){
+ console.log(">> OFFLINE")
+ }
+
return app
})()
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/_router.js b/StoneIsland/platforms/android/assets/www/js/lib/_router.js
index b1fa1c97..9927712a 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/_router.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/_router.js
@@ -58,6 +58,8 @@ var SiteRouter = Router.extend({
this.route()
}
this.initial_route = null
+
+ app.finished_launching()
},
go: function(url){
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/account/AccountView.js b/StoneIsland/platforms/android/assets/www/js/lib/account/AccountView.js
index 7d3b719a..9e6f1714 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/account/AccountView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/account/AccountView.js
@@ -21,11 +21,16 @@ var AccountView = View.extend({
ccs: [],
ccLookup: {},
- listAddresses: function(cb){
+ listAddresses: function(opt){
sdk.address.list({
success: function(data){
- this.populateAddresses(data, cb)
- }.bind(this)
+ this.populateAddresses(data, opt.success)
+ }.bind(this),
+ error: function(data){
+ console.log("error listing addresses!")
+ console.log(data.responseText)
+ opt.error && opt.error()
+ }.bind(this),
})
},
@@ -53,6 +58,7 @@ var AccountView = View.extend({
}.bind(this))
app.cart.shipping.populate()
+ app.cart.payment.populate()
cb && cb()
},
@@ -98,25 +104,45 @@ var AccountView = View.extend({
}
if ( ! auth.has_cart() ) {
app.curtain.show("loading")
- auth.create_cart(function(){
- if (auth.deferred_product) {
- auth.add_deferred_product_to_cart(function(){
- app.router.go("cart")
- setTimeout(function(){
- app.curtain.hide("loading")
- }, 500)
- })
- }
- else {
- app.router.go("account/profile")
- app.curtain.hide("loading")
- }
+ auth.create_cart({
+ success: function(){
+ if (auth.deferred_product) {
+ auth.add_deferred_product_to_cart({
+ success: function(){
+ app.router.go("cart")
+ setTimeout(function(){
+ app.curtain.hide("loading")
+ }, 500)
+ },
+ error: function(){
+ // TODO: should not be called because cart was just created
+ console.log("ERROR ADDING PRODUCT TO NEW CART")
+ },
+ })
+ }
+ else {
+ app.router.go("account/profile")
+ app.curtain.hide("loading")
+ }
+ },
+ error: function(){
+ // error CREATING cart...
+ console.log("ERROR CREATING CART")
+ auth.log_out()
+ app.account.logged_out()
+ },
})
}
else {
if (auth.deferred_product) {
- auth.add_deferred_product_to_cart(function(){
- app.router.go("cart")
+ auth.add_deferred_product_to_cart({
+ success: function(){
+ app.router.go("cart")
+ },
+ error: function(){
+ // TODO: cart might be invalid..
+ console.log("CALLED LOGGED_IN, HAD DEFERRED PRODUCT")
+ },
})
}
else {
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 a1b83767..b3ff3e7a 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/account/OrdersView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/account/OrdersView.js
@@ -31,6 +31,11 @@ var OrdersView = ScrollableView.extend({
show: function(){
if (! auth.logged_in()) { return app.router.go("intro") }
+ if (! navigator.onLine) {
+ app.closed.showElement()
+ app.closed.setMessage("PLEASE GO ONLINE TO VIEW<br>YOUR ORDERS.", "")
+ return
+ }
app.header.set_back(false)
app.footer.hide()
document.body.className = "orders"
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 8b49ed1d..f773c05b 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/account/PaymentView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/account/PaymentView.js
@@ -34,6 +34,11 @@ var PaymentView = FormView.extend({
show: function(){
if (! auth.logged_in()) { return app.router.go("intro") }
+ if (! navigator.onLine) {
+ app.closed.showElement()
+ app.closed.setMessage("PLEASE GO ONLINE TO CHANGE<br>YOUR PAYMENT INFO.", "")
+ return
+ }
app.footer.show("SAVE")
document.body.className = "payment"
this.deferScrollToTop()
@@ -50,8 +55,8 @@ var PaymentView = FormView.extend({
if (this.cc.data && this.cc.data.Guid) {
sdk.payment.delete_credit_card({
guid: this.cc.data.Guid,
- success: function(){},
- error: function(){},
+ success: function(){ console.log("deleted credit card") },
+ error: function(){ console.log("error deleting credit card") },
})
}
@@ -67,12 +72,18 @@ var PaymentView = FormView.extend({
success: function(data){
app.curtain.show("loading")
- app.account.listAddresses(function(){
- app.curtain.hide("loading")
+ app.account.listAddresses({
+ success: function(){
+ app.curtain.hide("loading")
+ },
+ error: function(){
+ app.curtain.hide("loading")
+ },
})
},
error: function(data){
+ console.log("ERROR WITH PAYMENT")
console.log(data)
},
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 d36f7f38..df6bc865 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/account/ProfileView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/account/ProfileView.js
@@ -15,6 +15,11 @@ var ProfileView = FormView.extend({
show: function(){
if (! auth.logged_in()) { return app.router.go("intro") }
+ if (! navigator.onLine) {
+ app.closed.showElement()
+ app.closed.setMessage("PLEASE GO ONLINE TO<br>EDIT YOUR PROFILE.", "")
+ return
+ }
app.footer.show("SAVE")
document.body.className = "profile"
if (auth.user.BirthDay.match(/T/)) {
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 0d6fa807..f6eae13c 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/account/SettingsView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/account/SettingsView.js
@@ -17,6 +17,11 @@ var SettingsView = FormView.extend({
show: function(){
if (! auth.logged_in()) { return app.router.go("intro") }
+ if (! navigator.onLine) {
+ app.closed.showElement()
+ app.closed.setMessage("PLEASE GO ONLINE TO CHANGE<br>YOUR NOTIFICATION SETTINGS.", "")
+ return
+ }
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 0bf88025..71cd9eef 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/account/ShippingView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/account/ShippingView.js
@@ -32,6 +32,11 @@ var ShippingView = FormView.extend({
show: function(){
if (! auth.logged_in()) { return app.router.go("intro") }
+ if (! navigator.onLine) {
+ app.closed.showElement()
+ app.closed.setMessage("PLEASE GO ONLINE TO<br>EDIT YOUR SHIPPING INFO.", "")
+ return
+ }
// this.preload( this.data || this.test_data )
app.footer.show("SAVE")
document.body.className = "shipping"
@@ -61,8 +66,13 @@ var ShippingView = FormView.extend({
success: function(data){
app.curtain.show("loading")
- app.account.listAddresses(function(){
- app.curtain.hide("loading")
+ app.account.listAddresses({
+ success: function(){
+ app.curtain.hide("loading")
+ },
+ error: function(){
+ app.curtain.hide("loading")
+ },
})
},
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 504827c8..d7968c22 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/auth/LoginView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/auth/LoginView.js
@@ -33,7 +33,7 @@ var LoginView = FormView.extend({
},
forgot_password: function(){
- window.open("http://www.stoneisland.co.uk/pages/forgotten-password", '_system')
+ window.open("http://www.stoneisland.com/", '_system')
},
validate_presence: {
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 4645d4d9..8d9cf52d 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/auth/SignupView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/auth/SignupView.js
@@ -103,7 +103,14 @@ var SignupView = FormView.extend({
app.signup.show_errors([[ 'Name', data['Error']['Description'] ]])
}
catch (e) {
- app.signup.show_errors([[ 'Name', "There was an unknown error." ]])
+ switch (data.status) {
+ case 409:
+ app.signup.show_errors([[ 'Email', "Email is already in use." ]])
+ break
+ default:
+ app.signup.show_errors([[ 'Name', "There was an unknown error." ]])
+ break
+ }
}
},
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 e7211036..12aaf7de 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/blogs/ArchiveView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/blogs/ArchiveView.js
@@ -44,6 +44,9 @@ var ArchiveView = ScrollableView.extend({
app.footer.hide()
this.back()
document.body.className = "archive"
+ if (! this.populated) {
+ this.populate( BACKUP_DB.archive )
+ }
},
populate: function(data){
@@ -109,6 +112,9 @@ var ArchiveView = ScrollableView.extend({
}.bind(this))
this.deferRefresh()
+ setTimeout(function(){
+ this.deferScrollToTop()
+ }.bind(this), 100)
},
// ['transformProp'] = "translateZ(0) translateX(-50%) translateY(-50%) ";
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/blogs/BlogView.js b/StoneIsland/platforms/android/assets/www/js/lib/blogs/BlogView.js
index 02491b32..b7c80520 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/blogs/BlogView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/blogs/BlogView.js
@@ -4,15 +4,17 @@ var BlogView = View.extend({
loaded: false,
initialize: function(){
this.loader = new Loader ()
- this.fetch()
},
- fetch: function(){
+ fetch: function(fn){
$.ajax({
method: "GET",
-// url: sdk.env == 'test' ? '/db.json' : "http://stone.sup.land/db.json",
- url: "http://stone.sup.land/db.json",
- success: this.success.bind(this),
+// url: sdk.env == 'test' ? '/db.json' : "https://stone.sup.land/db.json",
+ url: "https://stone.sup.land/db.json",
+ success: function(data){
+ this.success(data)
+ fn && fn()
+ }.bind(this),
cache: true,
})
},
@@ -35,11 +37,8 @@ var BlogView = View.extend({
break
case "closed":
app.closed.storeIsClosed = true
- app.closed.storeOpenDate = null
- break
- case "openson":
- app.closed.storeIsClosed = true
- app.closed.storeOpenDate = moment(data.store[0].OpensOn)
+ app.closed.storeClosedMessageOne = data.store[0].StoreClosedMessageOne
+ app.closed.storeClosedMessageTwo = data.store[0].StoreClosedMessageTwo
break
}
@@ -48,7 +47,9 @@ var BlogView = View.extend({
}
else {
app.gallery_id = data.store[0].CollectionId
+ app.department_id = data.store[0].DepartmentId
app.collection.setCollectionName( data.store[0].collection )
+ app.collection.loaded = false
app.collection.fetch()
}
@@ -70,10 +71,13 @@ var BlogView = View.extend({
console.log(data.store[0].StoreStatus)
- var fits_large = (data.store[0].FitsLarge === "true")
- app.product.$fit.toggle( fits_large )
- app.product.$sizing.toggle( fits_large )
-
+ app.product.fitLargeCodes = {}
+ if (data.store[0].FittingCodes.length) {
+ data.store[0].FittingCodes.split("\n").forEach(function(code){
+ app.product.fitLargeCodes[code] = true
+ })
+ }
+
if (data.store[0].BackgroundIsGray === "true") {
app.collection.$el.addClass("gray")
app.product.gallery.$el.addClass("gray")
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 4ed05bb8..1657d295 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/blogs/HubView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/blogs/HubView.js
@@ -15,87 +15,102 @@ var HubView = ScrollableView.extend({
this.$content = this.$(".content")
this.$loader = this.$(".loader")
this.scroller = new IScroll('#hub', app.iscroll_options)
+ HubLoader.init(this)
},
show: function(){
this.deferScrollToTop()
app.footer.hide()
document.body.className = "hub"
+ if (! this.populated) {
+ this.populate( BACKUP_DB.hub )
+ }
},
galleries: {},
+ populated: false,
populate: function(data){
// sort posts by date, reversed
+ this.populated = true
this.data = data.map(function(s){
return [ +moment(s.date), s ]
}).sort(function(a,b){
return a[0] > b[0] ? -1 : a[0] == b[0] ? 0 : 1
}).map(function(pair){
- console.log(pair[1])
+ // console.log(pair[1])
return pair[1]
})
this.$loader.hide()
this.$content.empty()
this.galleries = {}
+ HubLoader.add(this.data)
+
+ this.deferScrollToTop()
+ },
+
+ append: function(row){
// id date subtitle body link store image[uri caption]
- this.data.forEach(function(row){
- // console.log(row)
- console.log(moment(row.date))
- var t = this.template.replace(/{{id}}/g, row.id)
- .replace(/{{date}}/, moment(row.date).format("MM.DD.YYYY"))
- .replace(/{{title}}/, row.title)
- .replace(/{{subtitle}}/, row.subtitle)
- .replace(/{{link}}/, row.link)
- .replace(/{{body}}/, row.body.replace(/\n/g, "<br>"))
- var $t = $(t)
- if (row.store != "true") {
- $t.find(".store").remove()
- }
- this.$content.append($t)
-
- if (row.image.length > 1) {
- // image gallery
- var $gallery = $(".gallery-" + row.id)
- row.image.forEach(function(img){
- var el = document.createElement("div")
- el.style.backgroundImage = "url(" + img.uri + ")"
- el.className = "item"
- $gallery.append(el)
- })
- this.galleries[row.id] = new Flickity( ".gallery-" + row.id, {
- selector: '.item',
- cellAlign: 'center',
- autoPlay: false,
- freeScroll: false,
- wrapAround: true,
- imagesLoaded: true,
- prevNextButtons: false,
- pageDots: false,
- contain: true,
- draggable: true,
- })
- }
- else {
- // single image
+ // console.log(row)
+ // console.log(moment(row.date))
+ var t = this.template.replace(/{{id}}/g, row.id)
+ .replace(/{{date}}/, moment(row.date).format("MM.DD.YYYY"))
+ .replace(/{{title}}/, row.title)
+ .replace(/{{subtitle}}/, row.subtitle)
+ .replace(/{{link}}/, row.link)
+ .replace(/{{body}}/, row.body.replace(/\n/g, "<br>"))
+ var $t = $(t)
+ if (row.store != "true") {
+ $t.find(".store").remove()
+ }
+ this.$content.append($t)
+
+ if (row.image && row.image.length > 1) {
+ // image gallery
+ var $gallery = $(".gallery-" + row.id)
+ row.image.forEach(function(img){
var el = document.createElement("div")
- el.style.backgroundImage = "url(" + row.image[0].uri + ")"
+ el.style.backgroundImage = "url(" + img.uri + ")"
el.className = "item"
- $(".gallery-" + row.id).append(el)
- $(".gallery-" + row.id).data("row", row)
-
- // video, append play button
- if (row.link.match(/youtube|youtu.be|vimeo/)) {
- var play = document.createElement("div")
- play.className = "play"
- $(".gallery-" + row.id).append(play)
- }
- $t.find(".gallery-left").remove()
- $t.find(".gallery-right").remove()
+ $gallery.append(el)
+ })
+ this.galleries[row.id] = new Flickity( ".gallery-" + row.id, {
+ selector: '.item',
+ cellAlign: 'center',
+ autoPlay: false,
+ freeScroll: false,
+ wrapAround: true,
+ imagesLoaded: true,
+ prevNextButtons: false,
+ pageDots: false,
+ contain: true,
+ draggable: true,
+ })
+ }
+ else {
+ // single image
+ var el = document.createElement("div")
+ if (row.image && row.image.length) {
+ el.style.backgroundImage = "url(" + row.image[0].uri + ")"
}
+ el.className = "item"
+ $(".gallery-" + row.id).append(el)
+ $(".gallery-" + row.id).data("row", row)
- }.bind(this))
-
- this.deferScrollToTop()
+ // video, append play button
+ if (row.link.match(/youtube|youtu.be|vimeo/)) {
+ var play = document.createElement("div")
+ play.className = "play"
+ $(".gallery-" + row.id).append(play)
+ $(".gallery-" + row.id).addClass("gallery-video-post")
+ if (! row.image) {
+ var url = row.link
+ var ytid = (url.match(/v=([-_a-zA-Z0-9]{11})/i) || url.match(/youtu.be\/([-_a-zA-Z0-9]{11})/i) || url.match(/embed\/([-_a-zA-Z0-9]{11})/i))[1].split('&')[0];
+ e.style.backgroundImage = "url(https://i.ytimg.com/vi/" + ytid + "/maxresdefault.jpg"
+ }
+ }
+ $t.find(".gallery-left").remove()
+ $t.find(".gallery-right").remove()
+ }
},
store_link: function(){
@@ -118,7 +133,41 @@ var HubView = ScrollableView.extend({
share: function(e){
var title = $(e.currentTarget).parent().find(".title").text()
console.log("share", title)
- window.plugins.socialsharing.share(title, null, null, "http://stoneisland.com/" )
+ window.plugins.socialsharing.share(title, null, null, "http://deeplink.me/www.stoneisland.com/hub" )
},
-}) \ No newline at end of file
+})
+
+var HubLoader = (function(){
+ var queue, view, item, loader
+ var HubLoader = {}
+ var loader
+ HubLoader.init = function(v){
+ view = v
+ }
+ HubLoader.add = function(items){
+ queue = items
+ this.load()
+ }
+ HubLoader.load = function(){
+ item = queue.shift()
+ if (! item) return
+ if (item.image && item.image.length) {
+ loader = new Loader (HubLoader.build)
+ images = item.image.map(function(img){
+ return img.uri.replace("http:","https:")
+ }).filter(function(img){
+ return img.uri
+ })
+ loader.preloadImages(images)
+ }
+ else {
+ HubLoader.build()
+ }
+ }
+ HubLoader.build = function(){
+ view.append(item)
+ setTimeout(HubLoader.load, 20)
+ }
+ return HubLoader
+})()
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 73b7b83b..5a7a56d1 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/blogs/StoryView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/blogs/StoryView.js
@@ -23,6 +23,9 @@ var StoryView = ScrollableView.extend({
this.deferScrollToTop()
app.footer.hide()
document.body.className = "story"
+ if (! this.loaded) {
+ this.populate( BACKUP_DB.story )
+ }
},
populate: function(data){
@@ -52,18 +55,21 @@ var StoryView = ScrollableView.extend({
},
set_active: function(id){
- this.$links.find(".active").removeClass("active")
- this.$links.find("[data-id=" + id + "]").addClass("active")
+ this.$(".active").removeClass("active")
- this.$content.find(".active").removeClass("active")
+ this.$links.find("[data-id=" + id + "]").addClass("active")
this.$content.find("[data-id=" + id + "]").addClass("active")
var section = this.sections[id]
- var $replace = this.$img
- this.$img.fadeTo(110,0.65, function() {
- $replace.attr("src", section.image.uri)
- }).fadeTo(130,1)
+ if (navigator.onLine) {
+ var $replace = this.$img
+
+ this.$img.stop().fadeTo(110,0.65, function() {
+ $replace.attr("src", section.image.uri)
+ }).fadeTo(130,1)
+ }
+
this.deferScrollToTop()
},
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 b7eb8828..a82509af 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartConfirm.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartConfirm.js
@@ -32,6 +32,7 @@ var CartConfirm = FormView.extend({
window.location.hash = "#/cart/confirm"
this.deferScrollToTop()
+ app.view = this
app.curtain.show("loading")
promise(sdk.cart.get_status).then( this.populate.bind(this) )
},
@@ -127,9 +128,12 @@ var CartConfirm = FormView.extend({
},
save: function(){
+ app.curtain.show("loading")
promise(sdk.cart.finalize, {}).then(function(){
+ app.curtain.hide("loading")
app.router.go('cart/thanks')
}.bind(this)).error(function(data){
+ app.curtain.hide("loading")
// {"Header":{"StatusCode":403,"Description":"403 Forbidden"},"Error":{"Description":"GenericApiError:CartAlreadyClosed"}}
// {"Header":{"StatusCode":409,"Description":"304 NotModified"},"Error":{"Description":"FinalizationError:\\"Item has been removed from cart because it is no longer available.\\"\\n235"}}'
// {"Header":{"StatusCode":409,"Description":"304 NotModified"},"Error":{"Description":"FinalizationError:\"The cart cannot be empty.\"\n233"}}
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 ab454246..a19e69a5 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartPayment.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartPayment.js
@@ -44,6 +44,7 @@ var CartPayment = FormView.extend({
app.footer.show("CONFIRM &gt;")
window.location.hash = "#/cart/payment"
+ app.view = this
this.populate()
this.deferScrollToTop()
},
@@ -138,7 +139,9 @@ var CartPayment = FormView.extend({
this.success()
}.bind(this)).error(function(data){
app.curtain.hide("loading")
+ console.log("card payment error")
console.log(data)
+ app.cart.payment.show_errors([["","There was a problem with your credit card."]])
}.bind(this))
return
@@ -173,6 +176,7 @@ var CartPayment = FormView.extend({
},
error: function(data){
+ console.log("card payment error")
console.log(data)
app.cart.payment.show_errors([["Number","There was a problem with your credit card."]])
},
@@ -181,5 +185,4 @@ var CartPayment = FormView.extend({
app.router.go('cart/shipping')
},
-
}) \ No newline at end of file
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 1f60307e..fd227324 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartShipping.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartShipping.js
@@ -30,6 +30,7 @@ var CartShipping = FormView.extend({
app.cart.el.className = "shipping"
app.footer.show("PAYMENT &gt;")
window.location.hash = "#/cart/shipping"
+ app.view = this
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 01887d95..9b5da7b7 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartSummary.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartSummary.js
@@ -28,6 +28,7 @@ var CartSummary = ScrollableView.extend({
document.body.className = "cart"
app.cart.el.className = "summary"
window.location.hash = "#/cart/summary"
+ app.view = this
if (auth.has_cart()) {
this.load()
}
@@ -170,6 +171,9 @@ var CartSummary = ScrollableView.extend({
remove_item: function(e){
var $el = $( e.currentTarget ).closest(".cart_item_row")
var data = $el.data()
+
+ console.log("REMOVE FROM CART")
+ console.log(data.size + " " + data.code)
console.log(this.data.Cart)
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartThanks.js b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartThanks.js
index eb95197b..03a45d4d 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartThanks.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartThanks.js
@@ -12,10 +12,13 @@ var CartThanks = View.extend({
show: function(){
document.body.className = "cart"
app.cart.el.className = "thanks"
+ app.header.set_cart_count(0)
app.footer.show("&lt; BACK TO COLLECTION")
app.footer.hide()
-
+
app.orders.loaded = false
+
+ sdk.auth.clear_cart()
},
ok: function(){
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 1b08e418..6ed8238f 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/cart/CartView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/cart/CartView.js
@@ -30,11 +30,17 @@ var CartView = View.extend({
}.bind(this),
error: function(data){
console.log(data)
+ auth.clear_cart()
},
})
},
show: function(){
+ if (! navigator.onLine) {
+ app.closed.showElement()
+ app.closed.setMessage("PLEASE GO ONLINE TO<br>VIEW YOUR CART.", "")
+ return
+ }
document.body.className = "cart"
this.show_summary()
},
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/etc/backup_db.js b/StoneIsland/platforms/android/assets/www/js/lib/etc/backup_db.js
new file mode 100755
index 00000000..eec5c415
--- /dev/null
+++ b/StoneIsland/platforms/android/assets/www/js/lib/etc/backup_db.js
@@ -0,0 +1,551 @@
+var BACKUP_DB = {
+ "story": [
+ {
+ "id": "philosophy",
+ "title": "Philosophy",
+ "image": {
+ "uri": "http://cdn3.yoox.biz/stoneisland/wp-content/uploads/2013/11/philosophy1.jpg",
+ "caption": ""
+ },
+ "body": "A culture of research, experimentation, function and use are the matrixes that have always defined Stone Island: the sportswear brand established in 1982, designed to become a symbol of extreme research on fibers and textiles, applied to an innovative design. Season after season, it is through the study of form and the “manipulation†of the matter that Stone Island has found its own language with the aim of establishing new boundaries in the world of garment making. \r\n\r\nThe study of uniforms and of work wear, its evolution according to new requirements of use, has become Stone Island’s observation post for defining a project in which the clothing item’s function is never just aesthetic.\r\n\r\nAn ongoing investigation, thorough and without frontiers, on the processing and ennobling of fibers and textiles, leading to discover materials and production techniques never used before in the clothing industry.\r\n\r\nJackets constructed in nylon monofilament, deriving from the water filtering technology. Highly reflective or thermo-sensitive fabrics, changing color with the variation of temperature. Featherweight polyester cloth vacuum- coated with a 100% stainless steel film used in aviation technology to protect the on-board computers. Non-woven materials, Kevlar® and polyester felt, rhomboidal nets in polyester used in the construction industry and coated in polyurethane. These are some examples of materials conceived by Stone Island philosophy.\r\n\r\nStone Island’s strength is also based on the unique ability to intervene on the finished item, through the continuous tests on dyeing and treatments carried out in the Sportswear Company’s laboratory of color. A department able to combine advanced technology, experience and human capacity and that has developed more than 60,000 different recipes of dyes throughout the years.\r\n\r\nAll the accumulated knowledge and experience, an inalienable heritage, on which great part of Stone Island’s know-how is based, is kept in the historical archive that collects the trial tests, and the recipes for textile dyeing and handling that have been developed by all those people who have worked on this project with passion.",
+ "__index": "0",
+ "dateCreated": "Thu, 05 Nov 2015 00:24:44 GMT"
+ },
+ {
+ "id": "history",
+ "title": "History",
+ "image": {
+ "uri": "https://ltho.s3.amazonaws.com/ce68408c-34b3-40ca-8ddf-c10cd1412c5f.jpg",
+ "caption": ""
+ },
+ "body": "Stone Island, the Italian brand that reinvented the concept of casual wear, was founded in 1982 out of the passion and brilliant research into textile finishing performed by its creator and art director, intellectual from Bologna, Massimo Osti. It was Osti, in the mid-Seventies, who researched thousands of uniforms and pieces of work clothing and catalogued their functional characteristics. In Ravarino, in the province of Modena, he created a company whose hub was a full-scale center of research into materials and treatments became a sophisticated laboratory for garment and experimental dyeing.\r\n\r\nThe story of Stone Island began, almost by chance, with research into a special material, a thick truck tarpaulin, the outstanding feature of which was that it had been resin-treated in red on one side and blue on the other. The first prototype was too stiff, so it was washed for a long period in water with pumice stones to break down the structure of the material. The result was surprising, a worn-look garment with great appeal. It was therefore decided to create seven jackets in that unique fabric called Tela Stella, and to give this product a name. The strong identity of the project called for an important name, which was identified by analyzing the most commonly occurring words in Joseph Conrad’s novels: the words Stone and Island were chosen.\r\n\r\nStone Island has a marine feel, conjuring up old oilskins corroded by the sea and a military feel, which is drawn from the fund of research completed until that time. The name also evokes a love of the sea and that first treatment selected to “process†the garments. The badge, the detachable fabric label that has distinguished Stone Island garments since the first season, showed a Compass Rose, displayed like a military badge.\r\n\r\nThe reaction is immediate. Stone Island became a success phenomenon, with no set plan or marketing research behind it: a uniquely Italian mix of creativity, intuition and entrepreneurial spirit. A star was born.",
+ "__index": "1",
+ "dateCreated": "Thu, 05 Nov 2015 00:27:25 GMT"
+ },
+ {
+ "id": "carlo-rivetti",
+ "title": "Carlo Rivetti",
+ "image": {
+ "uri": "https://ltho.s3.amazonaws.com/2fe16d85-e85f-4f12-ae55-72622c8efafd.jpg",
+ "caption": ""
+ },
+ "body": "My family has deep roots within the clothing industry. In the 19th century, Giuseppe Rivetti – son of Giovanni Battista, Italy’s first carding machine operator, inherited his father’s passion and in order to fund his own wool factory he secretly sold cows from the family farms to buy looms. By 1872 he had his own wool factory: “Giuseppe Rivetti e Figliâ€, which later merged with the Turin based GFT group (Gruppo Finanziario Tessile). There, my uncle Pinot had the unique idea of rubberizing wool fabrics to increase their performance.
This fondness for research also drove my father, Silvio. In the immediate post-war period, he set off for the United States where he found the Palm Beach Incorporated company, who produced something that didn’t yet exist in Europe: clothing constructed on theoretical measurements; what we now know as sizes.
My father was stunned, working for six months as a laborer, before returning and convincing his brothers to give up their shares in the wool factories in order to buy out GFT. \r\n\r\nIn the early 1950’s GFT measured more than 25,000 Italians, which allowed them to effectively dress the whole nation for the first time with non-tailored garments. \r\n\r\nThe 1973 oil crisis brought severe yet swift recession, and something had to be done to recover sales. My cousin, Marco Rivetti, noticed a French couturier working in a women’s outerwear firm we’d acquired one year earlier. He would design and fit the garments, write orders in Paris and then use our company to manufacture them. He was Emanuel Ungaro. This led us to realize that in order to re-launch the sector we needed to add a fundamental ingredient to the clothing industry: fashion.
As a result, GFT became a licensee of the rising stars of Italian fashion, including Giorgio Armani and Valentino. The rise of Italian-made Prêt à Porter was due to the ability to combine entrepreneurial ability with creativity.\r\n\r\nI joined GFT in 1975. Towards the end of that decade, I had the idea to start a new area within the group; to generate something more timeless: sportswear. In the early 1980’s, I discovered C.P. Company, a firm known for being innovative and cutting edge in this field. The company was owned by Trabaldo Togna and Massimo Osti, a graphic artist by profession and the firm’s designer and art director. We bought first 50% in 1983 and later on the entire company.
That was the beginning of my journey. In 1993 I left GFT and, together with my sister Cristina, acquired 100% of the firm which is known today as Sportswear Company.
\r\n\r\nIt was in 1983 that I got to know Massimo Osti, who had brought Stone Island into existence almost by chance, a year earlier. A special fabric named ‘Tela Stella’ had arrived in the company: a cloth that had a different color on each side, used to make truck tarpaulins. The effect was very interesting but had little to do with the existing C.P. Company line. Osti decided to do something special with that fabric and created a collection of just seven jackets. The collection strongly referenced military style with the now iconic badge inspired by military insignia. The compass symbolized love for the sea and an aim for constant research.\r\n\r\nMassimo was at least ten years ahead of others in his field. He saw himself as a producer rather than a fashion designer.
His achievement establishing Stone Island was not only appealing and saleable, but also true to his core belief in informal wear. His ideas were drawn from military and work wear, accompanying them with endless textile research.\r\n\r\nIn the mid-nineties, Massimo our paths eventually came apart, and I found myself with the difficult task of finding someone to design Stone Island.
In 1994 as I wandered through a Munich trade fair I came across the work of designer Paul Harvey, an English designer who lived in Sant’Arcangelo di Romagna, Italy. I was struck by a strange feeling of familiarity and cried out: “so here’s the Stone of the 21st Century!â€. From 1996, with Paul, we embarked on the second era of our brand.\r\n\r\nPaul designed 24 collections, each consistent in the evolution and research that has always set Stone Island apart.
He is another extraordinary character. After graduating Central Saint Martins, he decided fashion was not his career path and worked as a truck driver! Only after marrying a fantastic Italian lady and moving to Italy did he start designing clothes.
His approach to design has functionality in its blood, which allowed him to interpret Stone Island perfectly. He led the brand masterfully into the new century. \r\n\r\nAfter 12 marvelous years, Paul needed to leave the fashion world to “do something for the Planetâ€. With such a noble ambition, I could only accept and support his decision.
In that moment, facing another crucial decision, I came to the conclusion the era of “one man at the helm†was over.
Times had changed. It was necessary to be multicultural in order to be truly contemporary.
I built a design team. I felt that in this era it is this possible to face all aspects of a world only with several minds and several visions: and this has been Stone Island from 2008 to today.
\r\n\r\nI feel like the coach. I choose which men to send onto the pitch, depending upon who we have to play: We need to be more sensitive, faster, and ready to grasp the signs of strength and weakness.
As a result, we need multi-cultural people that travel the world and observe it from different viewpoints: people of different ages and from different cultures.\r\n\r\nThis, in short, is my story. I like to think there’s a common thread that binds us all. A desire for continual experimentation and research, not without a touch of healthy insanity: that special something that makes our Stone Island much more than a just a clothing brand.\r\n\r\n<i>Carlo Rivetti,\r\nPresident and Creative Director, Stone Island</i>",
+ "__index": "2",
+ "dateCreated": "Thu, 05 Nov 2015 00:27:38 GMT"
+ }
+ ],
+ "archive": [
+ {
+ "id": "-010-015",
+ "title": "'010'015",
+ "images": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/2bafd7a2-fbbb-4904-8e64-ff394888fd24.png",
+ "label": "LIQUID REFLECTIVE",
+ "code": "5315 42944",
+ "caption": "Fabric that is highly reflective owing to its coating made up\r\nof thousands of glass microspheres. Each finished garment\r\nis hand sprayed individually and individually baked dry.\r\nThe varying intensity of the reflective element and varying\r\nintensity of color, the dribbling and speckled effect, are\r\nowing to the high level of craftsmanship involved in the\r\nprocess, making each garment unique and unrepeatable.\r\nLining in quilted microfiber with polyester padding.\r\nStone Island badge with white embroidery, reserved for\r\ngarments that are made using advanced research into\r\nfabrics or processes."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/a0714935-2800-425f-9b34-63fdc4a7fc78.png",
+ "label": "30/30 JACKET",
+ "code": "5715 4TTY2",
+ "caption": "The 30/30 jacket is a cross section of the state of the art of Stone Island. A testament to three decades of exploration and development, it has been designed to embody the spirit of Stone Island’s endless creativity. Linked by the signature looped rigging system, both the jacket shell and jacket liner are reversible. These can be worn, either together or alone, in a total of 10 different ways. The transformative\r\nproperties of the fabrics mean that these 10 ways can each be worn in 3 different modes: Ice, Reflective,\r\nand Normal; resulting in a total of 30 different jacket states.\r\nThis piece features is our 30th anniversary special edition badge.\r\nJACKET /SHELL _ RASO GOMMATO PRISMATIC COVER.\r\nSatin weave cotton of military origin bonded on the inside to a a shiny transparent fine-grained polyurethane film reflecting the light, magnifying the color effects and bestowing the surface with a three-dimensional and ‘liquid’ appearance.\r\nJACKET/ LINER_ THERMO REFLECTIVE / ENGINEERED WOOL\r\nThis material merges two of Stone Island’s most avant-garde research paths. It explores the interaction between light refraction and thermosensitivity technologies. The resins used to coat the nylon substrate host both the glass microspheres allowing fabric refraction and the micro-encapsulated pigments modifying the passage of light and thus enabling color changes in relation to temperature. The final effect is an organic and dynamic interaction of light and color. On the reverse side, an engineered wool face made with a double knit machine."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/d51dce63-d467-45ea-88a6-5b077ffe3c3c.png",
+ "label": "REFLECTIVE KNIT WITH WINDSTOPPER® 3L",
+ "code": "5715 587Y5",
+ "caption": "To celebrate the thirtieth anniversary of Stone Island, a yarn has been engineered that represents the\r\nheight of our tireless research. The President’S Knit 5715 has been created in Reflective yarn, made\r\nup of micro plates coated with glass microspheres trapped inside a polyester mesh. The structure of\r\nthe jumper has been made double, reflective on the outside and wool on the inside. The outer face\r\nhas then been printed in a darker shade using heat and pressure sublimation printing to amalgamate\r\nthe fibers, obtain an even surface and reduce the strong reflective appearance.\r\nThe detachable padded and quilted lining has been created in a polyester jersey laminated with a\r\nWindstopper® membrane, which provides an unbeatable balance between protection and comfort.\r\nThis piece features is our 30th anniversary special edition badge."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/5883b275-a2eb-4a34-890f-69b30250a62b.png",
+ "label": "RASO HAND PAINTED TORTOISE SHELL",
+ "code": "6115 70565",
+ "caption": "Trench coat in a satin-weave cotton fabric of military origin. The garment has been dyed and then faded in selected areas with a corrosive paste. The bleached parts have then been hand-painted with a tortoiseshell-inspired motif also appearing on the Stone Island badge on the left sleeve. This extraordinary manual process makes each piece unique and unrepeatable. Detachable hood in garment-dyed padded iridescent nylon. Detachable lining in GARMENT-DYED DOWN_26 GR X SQM_N, an ultra-light nylon weighing only 26 grams per square meter, filled with the finest down specially treated to bear the stress of the garment dyeing procedure. Garment-dyed with special dye recipes. It is secured to the outer garment by the iconic Stone Island fastening system."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/a25cc013-5c2c-4221-974a-987b8fd00ab4.png",
+ "label": "HAND PAINTED SHEEPSKIN",
+ "code": "6115 00379",
+ "caption": "Sheepskin parka. The finished piece has been hand-sprayed on the outer face with a resin based product and then hand waxed to achieve a softer feel. Hood edged by fur trim. "
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/fa5ed231-8b04-4ecc-b126-7a5543d5614a.png",
+ "label": "ICE JACKET THERMO-SENSITIVE FABRIC",
+ "code": "6115 43098",
+ "caption": "Hooded jacket in thermo sensitive fabric. A water- and wind-resistant polyurethane film is embedded with micro-encapsulated pigments. The molecules of these pigments modify the path of light and change color according to the temperature. The garment is then padded with the finest down.Two chest patch pockets, with snap-flap fastening and second pocket with vertical zip fastening. Adjustable elastic at cuffs. Cotton terry lined hood. Hidden zip and button fastening."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/bfd9defc-a1ef-4322-9e53-9505ec606ed9.png",
+ "label": "RASO GOMMATO REVERSE COLOR PROCESS",
+ "code": "6215 42338",
+ "caption": "Jacket in Raso Gommato -rubberized satin- a mil. spec. cotton satin bonded with a polyurethane cover making the fabric wind and water resistant. In this version, the transparent cover is bonded to a previously piece dyed and printed the cotton satin. The finished garment undergoes an exclusive procedure named Reverse Color Process, a fading technique followed by an overdyeing process on the finished garment, owing to the piece unparalleled shaded print effects, resist print areas and residual color deposits, unique to each single item."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/390b68f3-7f9a-41af-a09c-bd15ac7008a3.png",
+ "label": "POLYPROPYLENE TELA",
+ "code": "6315 40534",
+ "caption": "Down filled parka in polypropylene tela treated with an anti-drop agent. Polypropylene, a material with antibacterial properties, is the lightest man-made fibre. Even very bulky garments astonish for their specific lightness. The paste colored yarn is texturized to obtain a cotton looking opaque aspect. "
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/cc9f8c72-bbac-4d34-9762-4eae85374abf.png",
+ "label": "HIDDEN REFLECTIVE",
+ "code": "6315 G0598",
+ "caption": "Vest in a reflective, water and wind resistant polyester fabric owing its features to a coating made of thousands of glass microspheres. An opaque black plating totally covers the refraction of the material which is unveiled when photographed in flash mode. The reflective features will be revealed through usage, with diverse effects and intensities from piece to piece, depending on its wearer usage. Stone Island logo on the back obtained through laser printing. Filled with the finest down. Sheepskin over collar. "
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/512029b0-f4a3-469a-9d7d-1cd7fc15c1c8.png",
+ "label": "POLY COVER COMPOSITE + POLY FUR SILVER DETACHABLE LINING",
+ "code": "6315 491Y1",
+ "caption": "Hooded jacket in Poly Cover Composite, a matte, colorless and opaque two-component water and wind resistant film. The garment dyeing technique colors the film without affecting its transparency. Completely heat sealed seams.\r\nDetachable hooded lining in Poly Fur, a synthetic fur with external silver colored coating. Snap fastening on nylon tape."
+ }
+ ],
+ "__index": "4",
+ "dateCreated": "Thu, 05 Nov 2015 01:48:39 GMT"
+ },
+ {
+ "id": "-000-009",
+ "title": "'000'009",
+ "images": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/725e1b3f-58ee-49f6-8413-0a7e3dc9890f.png",
+ "label": "KEVLAR®",
+ "code": "3315 4031",
+ "caption": "Kevlar® felt. Five times more robust than steel given the same weight, Kevlar® is lightweight and\r\nhighly insulating. It is resistant to even extreme changes in temperature and to both fresh and salt\r\nwater. Owing to its qualities, it is used in the aerospace field, in competitive sailing and for Formula\r\n1 racing. With its soft yellow color, dyeing this material is usually impossible, but with Stone Island\r\ngarment dyeing expertise, laminating the hydro-cohered Kevlar® fibers to an invisible nylon mesh and\r\na polyurethane coating on the outer side and a simple polyurethane coating on the inside this has been\r\nmade possible.\r\nDetachable lining in triple woven fabric, two nylon honeycomb patterns have been machine raised\r\nwith a further nylon yarn. The detachable lining is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world. Stone Island badge with white embroidery, reserved for\r\ngarments that are made using advanced research into fabrics or processes."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/c1c9db4f-5aa9-4698-9fe3-04a58a631653.png",
+ "label": "MONOFILAMENT-S",
+ "code": "3715 4316",
+ "caption": "Nylon twill monofilament mesh. On the inside, a cotton muslin\r\nlayer is laminated on the outer face with a black breathable\r\nand water resistant membrane, with the application of\r\nwhite polyester taped seams. The monofilament mesh has\r\na protecting function for the inner membrane. From the\r\naesthetic point of view, its transparency is designed to reveal\r\nthe internal construction of the garment. The piece is lined in\r\na brushed cotton fabric quilted with polyester padding. The\r\nfinished garment is over-dyed with a double cotton and nylon\r\nrecipe."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/4f1783c2-1ff7-4054-9d18-faebbd617305.png",
+ "label": "LIGHT",
+ "code": "3715 4Q30",
+ "caption": "Stone Island anticipated the use of light in clothing. Also for safety purposes in cases of\r\ndiminished visibility. The beginning of the Nineties, saw the introduction of the Reflective\r\nJacket - the first reflective garment ever - and in ‘002, to mark its twentieth anniversary,\r\nthe use of light went from being passive to active and self-generated with the use of optical\r\nfibres.\r\nThe fabric’s cotton warp is woven with polyester yarns as well as with optical fibre\r\nfilaments forming a band of light along the front fastening and around the edge of the hood.\r\nThe light is switched on using a small battery hidden inside the garment.\r\nHooded detachable lining in microfiber quilted to a polyester padding, attached to the\r\nouter garment using a system of ties, adapted from those used in the sailing world."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/c62f3de3-a639-4818-988c-3aba9db057e5.png",
+ "label": "COMPACT",
+ "code": "3915 4N40",
+ "caption": "Compact treated linen felt. The Compact process is the transfer to finished garments of a textile process that is usually used to cleanse the natural fibers of their impurities. The garments are boiled at 130°C under pressure, with special additives. In the finished garments the material shrinks approximately 50%, the material becomes extraordinarily compact, the hand of the fabrics becomes dryer and naturally elastic. The fabrics take on an uneven, hand crafted appearance, as if they had been woven on antique looms. The fabric volume reduction involved with the Compact treatment creates very important pattern making complexities. The garment can be fitted to the body with a strings and loops system on the sides, front and hood. This system is inspired by anti-G suits of military aviators. Garment dyed; Compact pieces are very receptive to the garment dyeing recipes, the colors result far more intense than those of untreated garments.\r\nDetachable lining in peached microfiber, quilted with polyester padding. The detachable lining is attached to the outer garment using a system of ties, adapted from those used in the sailing world."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/ba287902-7b92-4128-867f-69d6b1e40cc0.png",
+ "label": "OPAQUE NYLON TELA",
+ "code": "4315 4C24 30GR",
+ "caption": "Japanese featherweight nylon canvas, weighing just 30 grams per square\r\nmeter. The Stone Island badge is ultra light, in embroidered nylon mesh in\r\norder to avoid weighing down the sleeve. The garment is padded with the\r\nfinest down. The lightweight construction of the down bags and the direct\r\ninjection of feathers heightens the lightness of the garments."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/320c3a59-c8ae-4dec-b863-15b15ccc368a.png",
+ "label": "OPAQUE NYLON CANVAS",
+ "code": "4515 4H24",
+ "caption": "Japanese featherweight nylon canvas, weighing just 37 grams\r\nper square meter. The Stone Island badge is ultra light, in\r\nembroidered nylon mesh in order to avoid weighing down the\r\nsleeve. The garment is padded with direct injection finest down.\r\nApart from highlighting the lightness of the fabric, the black\r\nedging under the fabric underscores the removal of the feather\r\nbags to increase the lightness of the garment. The yoke on the\r\nchest is disguised by the horizontal quilting motive. Inside the\r\nhood of the garment, an extra fabric hood with external coating\r\nand PVC print may be laced up by loops."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/35f9ec2a-fc52-42e5-b015-899e40ae9e89.png",
+ "label": "DAVID-TC SUBLIMATION PRINT",
+ "code": "4615 4C44",
+ "caption": "Reversible garment. Star-shaped cross-section polyester / polyamide\r\nJapanese microfiber. During garment dyeing under pressure at 130°C,\r\nthe heat transforms the structure and hand of the material radically.\r\nBeyond the depth of color and despite maintaining an industrial\r\nappearance, the David-TC garments take on an appearance and\r\nhand that grant a unique tactile experience, similar to both chamois\r\nleather and non-woven coagulated fabric. One of the two faces has\r\nbeen over printed on the finished garment with a dark color, using\r\na hot sublimation / pressure printing technique that reveals the\r\nconstruction details of both sides of the garment."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/03785345-d63c-4c18-addf-fb7461949cec.png",
+ "label": "ANTIQUED REFLECTIVE",
+ "code": "4715 7423",
+ "caption": "Cotton Batavia with a coating made up of thousands of glass microspheres. Antiqued Reflective fabric\r\nhas a strong capacity to reflect even the weakest light sources and is enhanced by a color patina that is\r\nparticularly evident in the folds of the garment, granting to the piece a three-dimensional appearance.\r\nThe shape and details of the garment have been deliberately designed with a retro style in order to\r\ncreate a contrast with the modernity of the reflective face. The hood is lined in a khaki colored wool\r\nwith parallel stripes, reminiscent of military blankets.\r\nDetachable lining in microfiber quilted to a thin polyester padding. The lining is attached to the outer\r\ngarment using a system of ties, adapted from those used in the sailing world.\r\nStone Island badge with white embroidery, reserved for garments that are made using advanced\r\nresearch into fabrics or processes."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/b7b6db65-3688-4472-839d-38852b074790.png",
+ "label": "RASO GOMMATO - HAND PAINTED CAMOUFLAGE",
+ "code": "4915 4C43",
+ "caption": "Drawing inspiration from the actions of soldiers during the First World War, who\r\nused earth from the trenches to make their uniforms dirty, thus inventing the\r\nconcept of camouflage, the fabric base in black satin weave cotton of military\r\norigin bonded to a black polyurethane cover on the inner face, has been faded\r\nwith a corrosive paste and then hand painted on the finished garment to create\r\na camouflage effect. By means of this manual process, each garment is rendered\r\nunique and unrepeatable.\r\nThe detachable quilted nylon lining with polyester padding, with front edging\r\nand collar in felted wool, is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/9a25ed8c-2293-4d6e-b63a-c17580113d63.png",
+ "label": "WAXED ICE - THERMO SENSITIVE FABRIC",
+ "code": "5115 7498",
+ "caption": "Cotton moleskin with a resin treatment containing thermo sensitive\r\nquartz. The color of the garment ranges from bright yellow at\r\nroom temperature to a deeper and deeper shade of olive green as\r\nthe temperature drops. The garment is washed and then waxed.\r\nThe detachable black woolen lining with Stone Island logo in the\r\ncentre is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world.\r\nStone Island badge with white embroidery, reserved for garments\r\nthat are made using advanced research into fabrics or processes."
+ }
+ ],
+ "__index": "3",
+ "dateCreated": "Thu, 05 Nov 2015 01:49:03 GMT"
+ },
+ {
+ "id": "-990-999",
+ "title": "'990'999",
+ "images": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/f58db57f-a469-4c7b-b248-6cab5a927c8a.png",
+ "label": "RASO GOMMATO COLORED COVER",
+ "code": "05 4001",
+ "caption": "Satin weave cotton of military origin bonded to a\r\nmustard yellow polyurethane cover on the outside\r\nand white on the hood. The inner fabric face takes its\r\ncoloring from garment dyeing. Double parallel row\r\nof snap fasteners mounted on small rubber disks\r\nallow the garment to be tightened or loosened to fit."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/56189889-630b-4293-95e9-2c747d1209fe.png",
+ "label": "ICE JACKET CAMOUFLAGE THERMO-SENSITIVE FABRIC",
+ "code": "05 4N06",
+ "caption": "Cotton poplin with a camouflage print in a thermo-sensitive\r\ncoating with liquid crystals that change color based on\r\nthe temperature. Over dyed on the finished garment. As the\r\ntemperature drops, the fabric print gradually disappears\r\nas it takes on the same shade as the solid color of the\r\ngarment dye."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/d46fc981-d51c-4001-a72a-7d5bc3bedc15.png",
+ "label": "RUBBERISED SATIN SILVER COVER",
+ "code": "35 4405",
+ "caption": "Satin weave cotton of military origin bonded to a silver\r\npolyurethane cover on the outside. Padded with goose down.\r\nDouble parallel row of snap fasteners mounted on small rubber\r\ndisks allow the garment to be tightened or loosened to fit.\r\nLining in colored peached polyester microfiber. Hood in the\r\nRaso Gommato Silver Cover garment dyed, with detachable wolf\r\nfur edging."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/65a6a008-a634-4155-8dba-0e2f22e1dc74.png",
+ "label": "REFLECTIVE JACKET",
+ "code": "1815 4N02",
+ "caption": "Owing to a coating made up of thousands of glass\r\nmicrospheres on a polyester base, the Reflective\r\nfabric has a strong capacity to reflect even the\r\nweakest light sources. It reflects and intensifies\r\nthe brightness of the color of the fabric itself,\r\nparticularly if placed in the dark. If it is photographed\r\nusing a flash, it detracts light from the other\r\ncomponents in the shot, which show up as black.\r\nPocket linings in cotton mesh."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/7011fe4a-22de-4bf0-bd4d-4440c49d8409.png",
+ "label": "WQR WATER RESISTANT QUILTING",
+ "code": "2515 6L51",
+ "caption": "Nylon jersey quilted with polyester padding,\r\nwith a special external coating used to close\r\nall the needle holes produced in the quilting\r\nprocess, rendering the garment totally\r\nwaterproof. The garment takes its final\r\ncoloring from garment dyeing."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/ca0447d1-3bd3-4702-a7d5-f1da98764ffb.png",
+ "label": "LINO GOMMATO REVERSE COLOR PROCESS",
+ "code": "2815 4P49",
+ "caption": "Black linen canvas bonded to a transparent polyurethane\r\ncover on the outside. By means of an exclusive process\r\ncarried out on the finished garment, the original color of\r\nthe fabric is corroded, with the exclusion of the Stone Island\r\nlettering, of the two parallel stripes and of the name of the\r\nprocess on the left sleeve. The collar, placket, pocket flaps,\r\ncuffs and bottom hem are less faded owing to the double\r\nlayer of fabric and the seams. Light garment over dye."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/23b746d9-311b-4f9f-b356-d1f49046bda9.png",
+ "label": "THE PRESIDENT’S KNIT",
+ "code": "2915 5784",
+ "caption": "The President’s Knit is the name of a knitted garment introduced in the autumn winter ‘998-’999\r\nseason and then retaken with different processes in the years that followed. It is an innovative knitted\r\ngarment that takes on the functions of a jacket owing to its detachable lining.\r\nThe first of these garments was created in a double face knit, nylon chenille on the outside, cotton on\r\nthe inside. Three black nylon parallel stripes on the cuff. Ends of the sleeves and bottom hem as well\r\nin black nylon. The garment takes its final coloring from garment dyeing.\r\nDetachable lightweight nylon fabric lining with water resistant polyurethane resin finish, quilted\r\nwith polyester padding. The detachable lining is attached to the outer garment using a system of ties,\r\nadapted from those used in the sailing world."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/ebaf6ae8-f465-4a8d-b6d0-ff45a93f0350.png",
+ "label": "LAMINATE - NOC 1",
+ "code": "3015 4C41",
+ "caption": "Two ultra light cotton gauzes laminated by means of a\r\nmatte colored resin. This slightly stretch fabric provides\r\ntechnical features owing to its light lamination. This fabric\r\nhas a natural appearance but high-tech performance and\r\nis waterproof, windproof and breathable. Fully thermotaped\r\nseams on the inside.\r\nInjection moulded PVC NOC 1 hood. The shape of the\r\nhood is taken by the shape of gas masks. A research by\r\nStone Island into the making of non-fabric components."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/a39caa9e-4dbe-4c31-8bda-41ebc2a508b4.png",
+ "label": "PURE METAL SHELL – BRONZE",
+ "code": "3115 4T43",
+ "caption": "100% bronze mesh applied to a black nylon jersey base. The polyurethane adhesive\r\nprovides a light protection for the mesh. A Teflon® treatment makes the garment water\r\nresistant. The metal mesh is a living material with the features of metallic materials when\r\nused untreated, and therefore they are subject to oxidation over time, losing its shine.\r\nThe worn look, creases and breaks that form on the surface are features that make each\r\ngarment different from the next.\r\nDetachable woolen lining with raw cut edging, attached to the outer garment using a\r\nsystem of ties adapted from those used in the sailing world.\r\nThe Autumn Winter ´999-´000 collection saw the introduction of the Stone Island badge\r\nwith white embroidery, dedicated to garments created using advanced research into\r\nfabrics or processes."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/f221b596-7cc0-493c-9cea-6755f64d1641.png",
+ "label": "PURE METAL SHELL - SILVER SPRAY",
+ "code": "3115 4U39",
+ "caption": "Ultra light polyester fabric with the application, through\r\na patented procedure, of a micro stainless steel film in a\r\nvacuum and sterile environment. This Japanese fabric,\r\nused in airplanes to shield the on-board computers from\r\nelectromagnetic radiation. Cotton canvas lining. The garment is\r\npadded with goose down.\r\nThe Autumn Winter ´999-´000 collection saw the introduction\r\nof the Stone Island badge with white embroidery for pieces\r\ninvolving advanced research."
+ }
+ ],
+ "__index": "2",
+ "dateCreated": "Thu, 05 Nov 2015 01:49:20 GMT"
+ },
+ {
+ "id": "-982-989",
+ "title": "'982'989",
+ "__index": "1",
+ "dateCreated": "Wed, 02 Dec 2015 05:15:20 GMT",
+ "images": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/e486c7c7-798e-4bf7-9e67-973f2cb02368.png",
+ "label": "TELA STELLA",
+ "code": "45 4NN",
+ "caption": "Stone Island was founded on this fabric. Tela Stella was born out of the study\r\nof the technical and functional characteristics of military truck tarpaulins. It\r\nis a cotton canvas impregnated on both sides with special pigmented resins\r\nin contrasting colors. The finished garment then undergoes an extended\r\nenzyme wash in order to give it a faded look and to break down the density of\r\nthe material. The result is a windproof garment that has an air of old oilskins\r\ncorroded by the sea, which, at the same time, has a marked military feel."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/757164f9-0699-482a-9187-e7d097f84319.png",
+ "label": "TELA STELA DUAL COATED",
+ "code": "65 404",
+ "caption": "Cotton canvas impregnated on both sides with special pigmented resins in contrasting colors.\r\nWhite outside, sand colored inside. Garment dyed midnight blue; a mélange effect is obtained with\r\ndifferent textured depths of color on the outside and inside of the garment. Appliqués in reflective\r\nfabric and stretch cotton tape on the pockets. Metal buckles on the bottom hem. Long cotton strap\r\nsewn under the collar label and attached to one of the buckles by means of a snap hook to allow the\r\ngarment to be worn over the shoulders."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/eb9cadb6-9712-41cf-9984-086518c7c391.png",
+ "label": "TELA STELLA DUAL COATED",
+ "code": "65 410",
+ "caption": "Cotton canvas impregnated on both sides with special pigmented resins in\r\ncontrasting colors. White outside, sand colored inside. Neither washed,\r\nnor garment dyed, it maintains the body and intensity of the coating.\r\nAppliqués in reflective fabric and stretch cotton tape. Adjustable straps at\r\nthe sides."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/8237f317-5272-4760-a6ab-b56c475b50d3.png",
+ "label": "JOCK-23",
+ "code": "75 436",
+ "caption": "Cotton canvas with thick matte PVC coating. Appliqués in the same fabric\r\nwith contrasting color coating. On the back, appliqué in mélange felted wool\r\npolyester on the collar. On the inside the neckline and shoulders are lined\r\nin cotton jersey. Rubber buttons created from a mould. Detachable lining in\r\ngarment dyed cotton fleece, attached with snap fasteners."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/c790cbf7-0a92-449e-8557-f6174946ab68.png",
+ "label": "JOCK-23",
+ "code": "75 460",
+ "caption": "Cotton canvas with thick matte PVC coating. Hood and buckled inserts at the cuff, with\r\ncontrasting color coating. Appliqué in latex right around the edge. Metal eyelets.\r\nRubber buttons created from a mould."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/1062f397-c1d7-4012-ae8d-9ddf13363743.png",
+ "label": "JOCK-23",
+ "code": "75 409",
+ "caption": "Cotton canvas with thick matte PVC coating. Inner flap in a contrasting\r\ncolor. Collar in felted wool polyester, lined with latex. Latex band at cuffs.\r\nRubber buttons created from a mould. Detachable lining in garment dyed\r\ncotton fleece, attached with snap fasteners."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/5f315b73-1572-460c-abfe-cda498886abe.png",
+ "label": "RASO GOMMATO BLACK COVER",
+ "code": "35 4NN",
+ "caption": "Satin weave cotton of military origin bonded to a black\r\npolyurethane cover on the inside. The garment takes its\r\nfinal coloring from garment dyeing. Detachable hood in Silk\r\nLight, an ultra light, slightly resin treated shiny trilobate nylon\r\nfabric, quilted with polyester padding.\r\nDetachable lining in Silk Light, quilted with polyester padding.\r\nThe detachable lining is attached to the outer garment using\r\na system of ties, adapted from those used in the sailing world.\r\nThe hood and detachable lining are also garment dyed."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/cd370f63-4fab-41e1-bbb6-d9e4955d068e.png",
+ "label": "GLAZED SILK LIGHT",
+ "code": "55 4910",
+ "caption": "Fine shiny trilobate nylon with thick, glazed effect\r\nPVC coating, creating a translucent, semi-transparent\r\nappearance. Hood part lined in a layer of PVC and with a\r\nstrip of honeycomb pattern non-woven fabric in microfibre.\r\nPVC windproof cuffs inside the sleeves. Lining made with\r\na layer of heat-sealed PVC, with interlining in polyester\r\nmesh quilted with polyester padding. The piece takes its\r\nfinal color from a double cotton and nylon garment dyeing\r\nrecipe, to obtain different shades on the finished garment."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/417e64df-f318-4500-977b-2eaed1668bc4.png",
+ "label": "RASO GOMMATO BLACK COVER",
+ "code": "65 4A10",
+ "caption": "Satin weave cotton of military origin bonded to a\r\nblack polyurethane cover on the inside. Removable\r\neye mask in the hood, which folds away in the\r\ncollar. The garment takes its final coloring from\r\ngarment dyeing."
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/93d8d8fa-ad6e-4fe5-9182-c9e45c7e4ff5.png",
+ "label": "NYLON RIP-STOP COVER",
+ "code": "75 4503",
+ "caption": "Khaki iridescent nylon with rip-stop twill, laminated on the\r\noutside with a transparent amber polyurethane film. The\r\ndepth of color is obtained by adding together the color of\r\nthe textile base and that of the coating. Lined in iridescent\r\nnylon rip-stop quilted with polyester padding."
+ }
+ ]
+ }
+ ],
+ "hub": [
+ {
+ "id": "ss_-016-collection-preview",
+ "date": "Tue, 12 Jan 2016 12:00:00 GMT",
+ "title": "SS_'016 COLLECTION PREVIEW",
+ "subtitle": "Stone Island App exclusive 1/12-1/19",
+ "body": "The unrelenting research by Stone Island results in a collection full of textiles evolutions, finishing and dyeing, featuring pop colors and extraordinary visual effects.\r\n\r\n44447 NYLON METAL WATRO\r\nHooded blouson in Nylon Metal. Hood with half lining in cotton and half in nylon mesh. Slanting hand pockets with windproof entrance and zip fastening. Adjustable strap at cuffs. Drawstring in bottom hem. Zip fastening. \r\nNYLON METAL WATRO: The trilobate structure of the nylon yarn, with its grey weft and white ready to dye warp colors, is the grounds of the distinctive metallic and tonic sheen of Nylon Metal, one of the most versatile fabrics born of Stone Island’s textile research. The fabric is resin treated inside to achieve a mild wind and water resistance The finished piece undergoes an elaborate double dye procedure providing different tones, intensities and colors to the fibers and textile accessories of the garment. The addition of a special agent to the dye formula makes the piece anti-drop.\r\n\r\n10544 NYLON METAL \r\nOver shirt in Nylon Metal. Garment dyed. Hook fastening collar. On seam pocket along central placket, with snaps fastening. Snap-fastened cuffs. Hidden zip and snap fastening.\r\nNYLON METAL: The trilobate structure of the nylon yarn, with its grey weft and white ready to dye warp colors, is the grounds of the distinctive metallic and tonic sheen of Nylon Metal, one of the most versatile fabrics born of Stone Island’s textile research. The finished piece undergoes an elaborate double dye procedure providing different tones, intensities and colors to the fibers and textile accessories of the garment. The addition of a special agent to the dye formula makes the piece anti-drop.\r\n\r\n70532 POLYESTER SHANTUNG\r\nParka in an organic looking polyester. Hood with visor and chin strap adjustable with Velcro. Two bellows pockets on chest with flap closed by hidden snaps. Two welt pockets closed by a zip with a second snap opening that holds a cotton tape belt. Snap fasteners at cuffs. Zip and hidden button fastening.\r\nPOLYESTER SHANTUNG: organic looking polyester material with a shantung effect. The organic look is given by the highly technological spinning of the raw material and by its super tight weaving. The pieces are sewn and then garment dyed under pressure at 130°C with the addition of an anti-drop agent. The high pressure dye process compacts the material and induces the high absorption of the color recipe.\r\n\r\n41923 MEMBRANA 3L TC\r\nHooded jacket in a light 3 layers fabric. Garment dyed. Adjustable straps on hood with elasticated gathering on back. Patch pockets with zip fastening. Adjustable straps at cuffs. Elasticated adjustable drawstring on bottom edge. Zip fastening. \r\nMEMBRANA 3L TC: 3 layer light performance fabric made from an opaque nylon outer face laminated to a breathable, water resistant, windproof membrane, protected by an impalpable polyester base. Stone Island’s expertise in garment dyeing gives an outstanding color to the outer face while preserving the performance features of the inner membrane. The addition of a special agent to the dye formula makes the piece anti-drop.\r\n\r\n65260 T.CO+OLD\r\nHooded full zip sweatshirt in malfilé cotton, garment dyed to create the OLD effect, an exclusive dyeing treatment and subsequent fading on the finished garment to create a slightly worn and three-dimensional appearance. Hood drawstring in contrasting color. Pouch pockets. Ribbed side band, cuffs and bottom band. Zip fastening.\r\n\r\n530B0\r\nCardigan knit in plain stitching cotton nylon. Raised collar with concealed hood in Nylon Metal. Garment dyed. On seam pockets. Plain cuffs and bottom band with inner ribbing. Zip fastening.\r\nNYLON METAL: The trilobate structure of the nylon yarn, with its grey weft and white ready to dye warp colors, is the grounds of the distinctive metallic and tonic sheen of Nylon Metal, one of the most versatile fabrics born of Stone Island’s textile research. ",
+ "link": "",
+ "store": "true",
+ "image": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/1ee6abef-0677-41a6-91eb-029303995073.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/8cc1876a-10c7-4dc5-af66-18f5d1a30727.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/f83bf094-ddee-4d26-938e-d98eef0cb0eb.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/095b2d00-cda6-4275-a475-cf2b27965c29.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/b7b299c4-0f24-4d27-91c3-b2a0856e49f0.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/cb2378dd-2eff-4d92-a942-63da8f3afcea.png",
+ "caption": ""
+ }
+ ],
+ "__index": 1,
+ "dateCreated": "Tue, 12 Jan 2016 15:55:24 GMT"
+ },
+ {
+ "id": "nikelab-x-stone-island-windrunner",
+ "date": "Wed, 09 Dec 2015 12:00:00 GMT",
+ "title": "NikeLab x Stone Island Windrunner",
+ "subtitle": "",
+ "body": "<b>NikeLab partners with Stone Island to deliver a unique interpretation of its foremost apparel icon, to celebrate the beginning of  “The Year of Windrunner.</b>\r\n\r\n “An exciting co-lab. Stone Island loves challenges. We source our strength from challenges. It’s a great satisfaction to share our knowhow and expertise with Nikeâ€.\r\n<i>Carlo Rivetti – Stone Island President and Creative Director</i>\r\n \r\nThe Nike Windrunner was born during a time of firsts. Created by Nike’s first apparel designer in 1978 and revolutionary for its raglan sleeves and 26-degree chevron yoke, the jacket became the first piece of Nike apparel worn by athletes at track and field trials before and after competition. Today, to commemorate this running icon, the Nike Windrunner experiences another first, the fabric innovation, the engineering and garment dyeing techniques of Stone Island.\r\n \r\nIn 2016 Nike is celebrating its foremost apparel icon: the Nike Windrunner Jacket. Designed in the late ‘70s, the silhouette has been a fixture on medal stands and city streets ever since. In the launch edition of this yearlong celebration Nike and Stone Island merge the distinctiveness of two brands to create a unique garment.\r\n \r\nThe chevron and hood of the NikeLab x Stone Island Windrunner are constructed with water and wind-resistant Mussola Gommata fabric, formed by bonding lightweight cotton muslin to an opaque polyurethane film. Nylon Metal, a proprietary Stone Island fabric with a metallic sheen, is featured on the body of the garment, which is lined with PrimaLoft®.\r\n \r\nWhile the exterior of the jacket is monochromatic, it mimics the traditional Nike Windrunner color blocking through Stone Island’s garment dyeing process. The result is a subtle distinction between the shades of the Mussola Gommata and Nylon Metal fabrics. The silver PrimaLoft® lining provides a stunning contrast to the monochromatic exterior, while the oversized trims contribute to a rugged look.\r\n \r\nThe NikeLab x Stone Island Windrunner will be available on December 17th at 10am PST from the Stone Island App and selected NikeLab retailers and on nike.com/nikelab.",
+ "link": "http://www.stoneisland.com/experience/us/nikelab-x-stone-island/",
+ "store": "true",
+ "image": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/de454e51-59d6-4442-9faa-70d95203f6dd.jpg",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/faeb5522-8793-4a81-882f-3c378cef3192.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/1c7b2292-f4c9-4d4e-869a-4d4cad2a3820.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/0444066e-e3e7-484f-b932-43c855e2fa96.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/d5577c40-4e42-4738-be8b-12066f7a4301.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/540f859f-9684-412d-a012-bb1c2bd45bf6.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/a92f9dd6-09d2-48fb-8858-7c12693c302e.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/a46824b3-90ad-466d-97ab-090022363fa7.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/e234f3cb-38d8-442a-9bb9-95a90b166d20.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/607814ee-1435-42f5-b52d-fb7fe2001b6d.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/21475b14-e216-438a-8673-106d9322bf3e.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/131e1276-aed1-4790-8ab9-333393c3885a.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/e2808d55-7d9a-4c99-842d-16a0a300c93d.png",
+ "caption": ""
+ }
+ ],
+ "__index": 4,
+ "dateCreated": "Tue, 12 Jan 2016 16:02:48 GMT"
+ },
+ {
+ "id": "nikelab-x-stone-island-koth-ultra-mid-si",
+ "date": "Wed, 09 Dec 2015 12:00:00 GMT",
+ "title": "NikeLab x Stone Island Koth Ultra Mid SI",
+ "subtitle": "",
+ "body": "Inspired by the Nike Air Mowabb, the revolutionary 1991 sneaker-hiker hybrid, this all-weather Nike Koth Ultra Mid SI Shoe is made in Nike water resistant materials, real leather, and in Mussola Gommata, a fabric issued from the Stone Island research and treatment research, an exclusive panel dyed material made by bonding an extremely light cotton muslin to an opaque polyurethane film. The shoe features aggressive traction and flexible ankle support. Unitsole foam midsole for cushioning and durable support. Waffle rubber lugs for rugged traction and durability. Flex grooves allow for natural range of motion. Heel loop for easier on and off. Heel overlay for enhanced support. The shoe dust bag is made in 2 Stone Island fabrics, Nylon Metal, nylon canvas with a distinctive metallic and iridescent sheen, 50 Fili, a cotton/nylon canvas, both panel dyed.\r\n\r\nThe NikeLab x Stone Island Koth Ultra Mid SI will be available on December 17th at 10am PST from the Stone Island App and selected NikeLab retailers and on nike.com/nikelab.\r\n",
+ "link": "http://www.stoneisland.com/experience/us/nikelab-x-stone-island/",
+ "store": "true",
+ "image": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/dd5f611f-3800-49ed-a6b1-9f6dd06cc103.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/34185ef2-1658-4472-bc3a-4d3f0c23ba2f.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/4767f114-1e8e-4ed3-856c-74f6c4342f0f.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/ed510070-9f60-45a6-aebf-2e7684b67cb3.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/c32af490-4ae5-4040-9327-02ce8808ee71.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/b913fc7d-d5d8-4047-b252-c2f404d9cb3e.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/3bea1cd4-2529-4a06-99ec-ec55c5a9f8d5.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/e29264fd-4236-4d16-938f-7dbe264c9b88.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/9c445717-dc18-4e0f-95f4-f695b13547a2.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/63cb328c-2624-4ed1-9d1e-113649be7f26.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/8ef50cce-c89d-4642-98b9-3be6ff798727.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/46f320b1-b908-42b5-9cad-20689c4d0d23.png",
+ "caption": ""
+ }
+ ],
+ "__index": 5,
+ "dateCreated": "Tue, 12 Jan 2016 16:03:00 GMT"
+ }
+ ],
+ "page": [
+ {
+ "id": "terms-and-conditions",
+ "title": "Terms and Conditions",
+ "image": {
+ "uri": "",
+ "caption": ""
+ },
+ "body": "<center><b>TERMS AND CONDITIONS OF USE</center></b>\r\nWelcome to www.stoneisland.com. These terms and conditions (the “General Terms and Conditions of Useâ€) govern your use of, access to, and purchase of products from the United States section of www.stoneisland.com (the \"US Site\"). By using the US Site, you agree to comply with and be bound by these General Terms and Conditions of Use. If you do not agree to these General Terms and Conditions of Use, please do not use the US Site.\r\n\r\n<b>1. GENERAL</b>\r\nwww.stoneisland.com is the property of SPORTSWEAR COMPANY, a company having an address at Galleria Cavour 4, 40124 Bologna, Italy (\"STONE ISLAND and STONE ISLAND DENIMS\") and is operated under license by YOOX Corporation, a Delaware corporation having an address at 148 Lafayette Street, 10th Floor, New York, NY, 10013, United States of America (the \"Provider\"). \r\n\r\n<b>2. OTHER SITE POLICIES</b>\r\nPlease review our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/saleterms&â€>General Terms and Conditions of Sale</a>, <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/returnpolicy& “>Return Policy</a> and <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/privacypolicy&â€>Privacy Policy</a> (collectively, the “Site Policies\"). All Site Policies are incorporated in these General Terms and Conditions of Use by this reference and, therefore, apply to your access to, use of and purchase of products from the US Site. If you do not agree to our Site Policies, please do not use the US Site. We reserve the right to make changes to the US Site, the Site Policies, and these General Terms and Conditions of Use at any time. If any of these conditions shall be deemed invalid, void, or for any reason unenforceable, that condition shall be deemed severable and shall not affect the validity and enforceability of any remaining condition. \r\n\r\n<b>3. PURCHASE FOR PERSONAL USE ONLY</b>\r\nYou may purchase products on the US Site only for personal use and not for resale. By placing your order, you certify that you are purchasing products for personal use only and not for resale and you accept our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/saleterms&â€>General Terms and Conditions of Sale</a>. WE RESERVE THE RIGHT TO REFUSE ORDERS FOR ANY REASON WITHOUT EXPLANATION. \r\n\r\n<b>4. USER'S SUBMISSIONS</b>\r\nWe welcome your comments and feedback regarding the US Site, our products and our services. We do not, however, accept confidential or proprietary information. Accordingly, all comments, feedback, reviews, ideas, suggestions, materials, images, information and other submissions (collectively, the “Submissionsâ€) disclosed, submitted or offered to the Provider via the US Site, or otherwise, are not confidential. You represent and warrant that any Submissions that you submit to the Provider are made in compliance with applicable laws, do not violate any right of any third party, including privacy and intellectual property rights. By disclosing, submitting or offering any Submissions to the Provider, you grant the Provider and STONE ISLAND and STONE ISLAND DENIMS a nonexclusive, royalty-free, perpetual, irrevocable, and fully sublicensable right to use, reproduce, modify, adapt, publish, translate, create derivative work from, distribute, display such Material throughout the world in any media. You are and shall remain solely responsible for any Submissions you disclose, submit or offer to the Provider or STONE ISLAND and STONE ISLAND DENIMS. \r\n\r\n<b>5. PRIVACY</b>\r\nWe recommend that you read our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/privacypolicy&â€>Privacy Policy</a>, which explains our online privacy practices. \r\n\r\n<b>6. COPYRIGHT</b>\r\nAll content included on www.stoneisland.com US Site, such as works, images, pictures, dialogues, music, sounds, videos, documents, drawings, figures, logos, menus, web pages, graphics, colors, schemes, tools, fonts, designs, diagrams, layouts, methods, processes, functions and software (collectively, the \"Content\"), is the property of STONE ISLAND and STONE ISLAND DENIMS or its content suppliers and is protected by national and international copyright and other intellectual property laws. You may not reproduce, publish, distribute, display, modify, create derivative work from, or exploit in any way, in whole or in part, the Content without the prior express written consent of STONE ISLAND and STONE ISLAND DENIMS, or its content suppliers, as the case may be. STONE ISLAND and STONE ISLAND DENIMS and its content suppliers shall have the exclusive right to authorize or prohibit in their sole discretion any reproduction, publication, distribution, display, modification, creation of derivative work from, or exploitation in any way of, in whole or in part, the Content. STONE ISLAND and STONE ISLAND DENIMS and its content suppliers shall have the right, at any time, to claim the authorship of any Content posted on the US Site and to object to any use, distortion or other modification of such Content. Any reproduction, publication, distribution, display, modification, creation of derivative work from, or exploitation in any way of, the Content expressly authorized in writing by STONE ISLAND and STONE ISLAND DENIMS or its content suppliers shall be carried out by you for lawful purposes only and in compliance with all applicable laws. \r\n\r\n<b>7. LICENSE AND SITE ACCESS</b>\r\nThe viewing, printing or downloading of any Content from the US Site grants you only a limited, nonexclusive and nontransferable license for use solely by you for your own personal use and not for republication, distribution, assignment, sublicense, sale, preparation of derivative works or other use. No part of any Content may be reproduced in any form or incorporated into any information system, electronic or mechanical, other than for your personal use (but not for resale or redistribution). Any unauthorized use of the US Site and the Content immediately terminates the license granted by the Provider. \r\nYou will be solely responsible for all damages and other harm resulting from your use of the US Site and the Content. STONE ISLAND and STONE ISLAND DENIMS and the Provider shall not be deemed liable for any use of the US Site and the Content made by you in violation of any applicable laws and regulations and these General Terms and Conditions of Use. \r\n\r\n<b>8. COPYRIGHT COMPLAINTS</b>\r\nWe respect the intellectual property of others. If you believe that your work has been copied in a way that constitutes copyright infringement, please contact a STONE ISLAND and STONE ISLAND DENIMS copyright representative for further information at <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>. \r\n\r\n<b>9. LINKS TO OTHER WEB SITES</b>\r\nThe US Site may provide hyperlinks to third party websites (“Third Party Websites\"). The Provider and STONE ISLAND and STONE ISLAND DENIMS do not operate, control, endorse or guarantee any Third Party Websites. You agree that the Provider and STONE ISLAND and STONE ISLAND DENIMS are not responsible for any content, services and/or products provided by any Third Party Website, nor are the Provider and STONE ISLAND and STONE ISLAND DENIMS responsible for any practice followed by such Third Party Website with respect to the collection and processing of personal data of their users. When you access any Third Party Website through a hyperlink posted on the US Site, please carefully read the terms and conditions of use, privacy policy and other policies of such Third Party Website. Our policies do not apply to any Third Party Website. \r\nYou The Provider provides hyperlinks to Third Party Websites only for the convenience of its users. By providing hyperlinks to Third Party Websites, the Provider does not recommend that its users access such Third Party Websites. \r\n\r\nYOU AGREE THAT YOUR USE OF ANY THIRD PARTY WEBSITE IS AT YOUR SOLE RISK AND WITHOUT WARRANTIES OF ANY KIND BY THE PROVIDER, EXPRESSED, IMPLIED OR OTHERWISE, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY OR NONINFRINGEMENT. UNDER NO CIRCUMSTANCES ARE THE PROVIDER AND/OR STONE ISLAND and STONE ISLAND DENIMS LIABLE FOR DAMAGES ARISING FROM ANY TRANSACTION BETWEEN YOU AND ANY THIRD PARTY WEBSITE OR FOR ANY INFORMATION APPEARING ON THIRD PARTY WEBSITES. \r\n\r\n<b>10. GOVERNING LAW AND CHOICE OF FORUM</b>\r\nThe laws of the State of New York (without giving effect to its conflicts of law principles) govern all matters arising out of or relating to these General Terms and Conditions of Sale, including, without limitation, their validity, interpretation, construction, performance, and enforcement. All legal proceedings arising out of or in connection with these General Terms and Conditions of Sale shall be brought solely in the City of New York, State of New York. \r\n\r\n<b>11. DISCLAIMER OF WARRANTIES AND LIMITATION OF LIABILITY</b>\r\nTHE US SITE AND ALL INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) AND SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE ARE PROVIDED BY THE PROVIDER ON AN \"AS IS\" AND \"AS AVAILABLE\" BASIS, UNLESS OTHERWISE SPECIFIED IN WRITING. THE PROVIDER MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE OPERATION OF THIS SITE OR THE INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) OR SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE, UNLESS OTHERWISE SPECIFIED IN WRITING. YOU EXPRESSLY AGREE THAT YOUR USE OF THIS SITE IS AT YOUR SOLE RISK. \r\n\r\nTO THE FULL EXTENT PERMISSIBLE BY APPLICABLE LAW, THE PROVIDER DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE PROVIDER DOES NOT WARRANT THAT THIS SITE; INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) OR SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE; THEIR SERVERS; OR E-MAIL SENT FROM THE PROVIDER ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. THE PROVIDER WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THIS SITE OR FROM ANY INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING SOFTWARE) OR SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH THIS SITE, INCLUDING, BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE, AND CONSEQUENTIAL DAMAGES, UNLESS OTHERWISE SPECIFIED IN WRITING. \r\n\r\nCERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS.\r\n\r\n<center><b>TERMS AND CONDITIONS OF SALE</center></b>\r\nThe following General Terms and Conditions of Sale govern the sale of merchandise by YOOX Corporation, an affiliate of YOOX NET-A-PORTER GROUP S.p.A. (the \"Provider\" or \"we\") to you through the US section of www.stoneisland.com (\"US Site\"). The US Site is available only for purchases made and delivered within the United States. Your use of the US Site to purchase merchandise indicates your agreement to follow and to be bound by these General Terms and Conditions of Sale.\r\n\r\n<b>1. ORDERS & PRODUCTS</b>\r\nAll orders are subject to e-mail confirmation by us. Please note that the products displayed on the US Site may be out-of-stock or discontinued, and availability is not guaranteed. Please note that while we have tried to accurately display the colors of products, the actual colors you see will depend on your monitor and may not be accurate. \r\n\r\n<b>2. PRICES</b>\r\nAll prices are in US Dollars. Prices may change without notice from time to time. The total amount due is inclusive of sales tax applied in accordance with applicable state and local regulations based on your shipping address. The applicable sales tax amount is indicated on the payment page of the cart.\r\n\r\nThe amount of sales tax charged on your order will depend upon various factors, including type of item purchased, sales price and destination of the shipment. Sales tax regulations may change between the time you place an order and the time of credit card charge authorization and this may affect the calculation of sales taxes. The amount appearing on your payment page of the cart may differ from the sales taxes ultimately charged as indicated in the invoice you will receive with the shipping confirmation e-mail.\r\n\r\nAll prices are inclusive of customs and import duties.\r\n\r\n<b>3. SHIPPING COSTS</b>\r\nYou are responsible for the shipping costs associated with the delivery of the products you purchase on the US Site as specified on your order confirmation. \r\n\r\n<b>4. SHIPMENTS AND DELIVERY</b>\r\nYou bear all risks of loss and damage to the products from the time the same have cleared our fulfillment house. Delivery is deemed complete and title to the products passes to you upon acceptance of shipment by a common carrier.\r\n\r\n<b>5. RETURNS AND REFUNDS</b>\r\nPlease refer to our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/returnpolicy&“>Return and Refund Policy</a>, which forms an integral part of these General Terms and Conditions of Sale. \r\n\r\n<b>6. BINDING AGREEMENT</b>\r\nOur order confirmation, these General Terms and Conditions of Sale and our other Site Policies shall be deemed the final and integrated agreement between you and us on the matters contained in these General Terms and Conditions of Sale. \r\n\r\n<b>7. GOVERNING LAW AND CHOICE OF FORUM</b>\r\nThe laws of the State of New York (without giving effect to its conflicts of law principles) govern all matters arising out of or relating to these General Terms and Conditions of Sale, including, without limitation, their validity, interpretation, construction, performance, and enforcement. All legal proceedings arising out of or in connection with these General Terms and Conditions of Sale shall be brought solely in the City of New York, State of New York. \r\n\r\n<b>8. DISCLAIMERS AND LIMITATIONS OF LIABILITY</b>\r\nTHE PROVIDER MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE PRODUCTS INCLUDED IN THE www.stoneisland.com US SITE NOR AS TO THE MERCHANDISE BEING SOLD TO YOU. TO THE FULLEST EXTENT PERMISSIBLE BY APPLICABLE LAW, THE PROVIDER DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT, AND THERE ARE NO WARRANTIES, EXPRESS OR IMPLIED, WHICH EXTEND BEYOND THE DESCRIPTION OF THE MERCHANDISE CONTAINED ON OUR ORDER CONFIRMATION. THE PROVIDER WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THE US SITE, INCLUDING BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE AND CONSEQUENTIAL DAMAGES \r\nCERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS.\r\n\r\n<b>9. SEVERABILITY</b>\r\nIf any provision of these General Terms and Conditions of Sale is determined to be invalid, illegal or unenforceable, the remaining provisions of these General Terms and Conditions of Sale remain in full force to the extent permitted by law.\r\n\r\n<b>10. PRIVACY</b>\r\nThe terms and conditions of the our <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=legal/privacypolicy&â€>Privacy Policy</a> govern the processing of all personal data collected from you in connection with your purchase of products through the US Site.\r\n\r\n<b>11. FORCE MAJEURE</b>\r\nProvider shall not be liable for any delay or failure in performance caused by circumstances beyond its reasonable control.\r\n\r\n<b>12. ERRORS AND INACCURACIES</b>\r\nOur goal is to provide complete, accurate, and up-to-date information on our website. Unfortunately, it is not possible to ensure that any website is completely free of human or technological errors. This website may contain typographical mistakes, inaccuracies, or omissions, some of which may relate to pricing and availability, and product information. We reserve the right to correct any errors, inaccuracies or omissions, including after an order has been submitted, and to change or update information at any time without prior notice.\r\n",
+ "__index": "1",
+ "dateCreated": "Tue, 17 Nov 2015 20:31:52 GMT",
+ "tag": "terms"
+ },
+ {
+ "id": "privacy-policy",
+ "title": "Privacy Policy",
+ "image": {
+ "uri": "",
+ "caption": ""
+ },
+ "body": "Welcome to www.stoneisland.com. Please read our Privacy Policy carefully. This Privacy Policy applies when you visit and surf the United States section of www.stoneisland.com (the \"www.stoneisland.com US Site\") regardless of whether you purchase products or not, when you register with the www.stoneisland.com US Site, and when you use our services. By using the www.stoneisland.com US Site, you accept the practices described in this Privacy Policy. If you do not want to accept the practices described in this Privacy Policy, please do not use the www.stoneisland.com US Site. \r\nThe www.stoneisland.com US Site is operated under license by , a Delaware corporation having an address at 148 Lafayette Street, 10th Floor, New York, NY, 10013, United States of America (\"YOOX USA\"). YOOX USA is a subsidiary of YOOX NET-A-PORTER GROUP S.p.A., an Italian company having its registered address at via Morimondo, 17 – Milano 20143 (\"YOOX\") and controls the personal data of users and customers of the www.stoneisland.com US Site together with SPORTSWEAR COMPANY, having address at Galleria Cavour 4, 40124 Bologna, Italy, Italy, VAT, 01046470371 (jointly referred to as \"YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY\"). \r\nSince personal data of users and customers of the www.stoneisland.com US Site may be processed in Italy, any such processing of personal data will be conducted in compliance with applicable US law as well as the Italian Data Protection Code (Legislative Decree no. 196 dated June 30, 2003). Pursuant to the Italian Data Protection Code, YOOX USA is the controller of personal data of users and customers of the www.stoneisland.com US Site. As controller of personal data, YOOX USA independently determines the purposes and means by which your personal data are processed, including all security measures. As required by the Italian Data Protection Code, YOOX USA has appointed YOOX NET-A-PORTER GROUP as its data protection representative in Italy. As our data protection representative in Italy, YOOX, together with SPORTSWEAR COMPANY, independently ensures that personal data are processed in Italy in a correct and lawful manner and in accordance with good practice.\r\n\r\n<b>1. OUR POLICY</b>\r\nEveryone has the right to the protection of his/her personal data. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY respect our users' right to be informed about the collection and processing of their personal data. The www.stoneisland.com US Site has been designed in such a way that the use of your personal data will be minimal and will not exceed the original purpose for which your personal data are collected and/or processed. In particular, we do not disclose your identity when the purpose for which your personal data are being processed can be achieved by using anonymous aggregate information. This Privacy Policy is intended to provide you with all the information you need in order to understand our privacy practices.\r\nHowever, if you have any questions regarding our privacy practices and this Privacy Policy, please contact us at the following e-mail address:<a target=\"_blank\" href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>.\r\nThe www.stoneisland.com US Site is not directed at, nor do we knowingly collect personally identifiable information from children under the age of 13, although we may sell children's products or services for purchase by adults. If you are under 18, you may use the www.stoneisland.com US Site only with the involvement of a parent or guardian. \r\n\r\n<b>2. WHO PROCESSES YOUR PERSONAL DATA</b>\r\nFor organizational and operational purposes only, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY have appointed certain entities that will also process personal data of users and customers of the www.stoneisland.com US Site. Such purposes are strictly connected to the performance of services provided on the www.stoneisland.com US Site by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY, including the sale of products.\r\nThe above-mentioned data processors have been chosen by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY because of their experience in processing personal data, their sufficient guarantees with respect to compliance with applicable laws and regulations, including the Italian Data Protection Code (Legislative Decree no. 196 of 30 June 2003) as well as the technical security measures adopted by them in connection with the processing of personal data. In processing personal data of the users of the www.stoneisland.com US Site, our processors will act only in accordance with instructions provided by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY. We regularly verify that our processors comply with our instructions and that they provide sufficient guarantees with respect to their compliance with applicable laws and regulations. The following is a list of the companies primarily involved in the processing of personal data of users and customers of the www.stoneisland.com US Site:\r\n\t•\t<a href=“http://www.ups.com/“>United Parcel Service S.p.A.(“UPS\")</a>. We provide UPS, by electronic means, with customers' addresses and other personal data for the purpose of shipping, delivering and returning products purchased on the www.stoneisland.com US Site;\r\n\t•\tBT Italia S.p.A., for purposes related to the maintenance of YOOX NET-A-PORTER GROUP servers;\r\n\t•\t<a href=“http://www.yoox.com/“>YOOX NET-A-PORTER GROUP Italy</a>. We provide YOOX NET-A-PORTER GROUP Italy with personal data of users and customers for purposes related to direct marketing services of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY and in connection with other services provided by YOOX NET-A-PORTER GROUP Italy to YOOX USA, such as call center and help desk services.\r\nPlease contact our Customer Care or send us an e-mail at <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a> if you would like to receive a full list of our data processors.\r\n\r\n<b>3. HOW DO WE USE PERSONAL DATA AND FOR WHAT PURPOSES</b>\r\nYour personal data are collected and processed by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY for purposes which are strictly connected to the use of the www.stoneisland.com US Site, its services and the purchase of products on the www.stoneisland.com US Site. However, your personal data may also be used for other processing operations within the limits of such purposes. In particular, your personal data may be processed for the following purposes:\r\n\t•\twhen you register with the www.stoneisland.com US Site we collect your personal data (for example, your personal information, e-mail address, gender) through the relevant registration form (My Account) in order to provide you with services in reserved access areas of the www.stoneisland.com US Site and in order to send you our Newsletter, when specifically requested;\r\n\t•\twhen you request Customer Care services, we collect your personal data (for example, your password) for purposes strictly necessary to provide you with customer care services relevant to the US Site and to the purchase of products on the US Site;\r\n\t•\twhen you request Customer Service assistance, we collect your personal data (for example, your first and last names, e-mail address and password) for purposes strictly necessary to provide you with Customer Service relevant to the www.stoneisland.com US Site and to the purchase of products on the www.stoneisland.com US Site;\r\n\t•\twhen you are executing purchasing procedures for products sold on the www.stoneisland.com US Site, including conclusion of an agreement for the purchase of products, we collect your personal data (for example, personal information, e-mail address, address, Credit Card numbers, bank account number and telephone number) on your order form only for the purpose of selling the products ordered by you;\r\n\t•\twhen you request technical assistance, we collect your personal data in order to provide you with information on net-surfing, Internet browsing or viewing and downloading web pages;\r\n\t•\twhen creating your Wish List, we process your personal data in order to customize our services for the purchase of products on the www.stoneisland.com US Site.\r\nYour personal data are generally processed by electronic means; however, in certain circumstances, paper-based means may be used (for example, when the processing of your personal data is required for the prevention of fraud against us). Your personal data are stored in a way which allows YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY to identify you for the period that is strictly necessary for the original purposes for which such personal data are collected and subsequently processed, all in accordance with applicable laws.\r\nPlease report any changes to your personal data to the e-mail address <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a> in order to ensure that your personal data are always accurate and kept up-to-date.\r\nYour personal data will not be disclosed to third parties for purposes not permitted by law or without your explicit consent. Your personal data may only be disclosed to third parties when it is necessary to process an order placed by you. For example, your personal data are disclosed to Banca Sella S.p.A. for the performance electronic payment services, through Credit/Debit Cards. Moreover, your personal data may be disclosed to the police or to judicial authorities, in compliance with applicable laws and regulations and upon a formal request by such authorities for the purposes of preventing a fraud against us (anti-fraud services). Data processors will also have access to your personal data, as stated in Section 2 of this Privacy Policy, for the specific purposes stated in that Section. In all the above circumstances, your consent for data processing will not be specifically requested.\r\nYour personal data will not be transferred to any countries outside the United States and Italy if such countries do not provide for an adequate level of protection of the privacy of individuals. Should the above be necessary in order to supply services to you or to execute contracts for the purchase of products, the transfer of your personal data to any such countries will be carried out only after the execution of specific contracts between YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY and all parties involved, in accordance with applicable laws and regulations.\r\nWe wish to inform you that YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY process users' personal data for purposes that are strictly connected to the supply of services through the www.stoneisland.com US Site, the execution of contracts related to the sale and purchase of products on the www.stoneisland.com US Site and, after receiving your consent, in order to send you information on new commercial initiatives which are strictly related to the www.stoneisland.com US Site's activities and services. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY process your personal data for direct marketing purposes, including by e-mail, only after receiving your consent.\r\nYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may have access to third parties' personal data which is directly disclosed by their users to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY, for instance when the user buys a product to be sent to a friend, when the user who pays the purchase price for a product is different from the recipient of such product, or when a user wishes to recommend to a friend a service provided through the www.stoneisland.com US Site or the sale of a particular product posted on the www.stoneisland.com US Site.\r\nIn all cases involving the disclosure of information of a third party, you must obtain the consent of such individuals before disclosing their personal data to YOOX USA, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY and have informed said individuals about this Privacy Policy. You will be the only person liable in connection with the disclosure of information and data relevant to such third parties and with any other incompatible and unlawful use of such data if they have not provided you with their consent. You agree to indemnify, defend and hold each of YOOX USA, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY harmless from any liability, claims and expenses, including reasonable attorneys' fees, arising from or related to any unauthorized disclosure of personally identifiable information of third parties.\r\n\r\n<b>4. WHAT HAPPENS IF YOU DO NOT DISCLOSE YOUR PERSONAL DATA</b>\r\nThe personal data we request you to provide to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY, including your e-mail address, your address, your Credit/Debit Card numbers, bank account number and your telephone number, is necessary for the processing of your order for the purchase of products on the www.stoneisland.com US Site, to supply other services provided on the www.stoneisland.com US Site upon your request, or to carry out obligations arising out of applicable laws and regulations.\r\nYour refusal to provide certain personal data to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may prevent YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY from processing your order for the purchase of products sold on the www.stoneisland.com US Site or from providing other services through the www.stoneisland.com US Site, such as Customer Services, sending the Newsletter, use of the Wish List, recommending a product to a friend.\r\nYour failure to provide personal data to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may prevent the processing of your order for the purchase of products sold or to provide services through the www.stoneisland.com US Site. \r\nThe disclosure of personal data to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY other than that required in order to fulfill legal or contractual obligations or to provide the services requested by you is optional and does not have any effect on the use of the www.stoneisland.com US Site and its services or on the purchase of products on the www.stoneisland.com US Site. We will inform you if the personal data we ask you to provide is necessary or optional by marking with an asterisk (*) the information that is necessary. Your failure to disclose optional personal data will not pose any obligation or disadvantage to you, except to the extent that we may no be able to offer you some of our optional, personalized features of the www.stoneisland.com US Site. \r\n\r\n<b>5. TO WHOM YOUR PERSONAL DATA WILL BE DISCLOSED</b> \r\nYour personal data may be disclosed to third parties who provide specific services as Data Processors on behalf of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY or who autonomously process personal data collected by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY in connection with the performance of a contract for the purchase of products on the www.stoneisland.com US Site (for example, Banca Sella, S.p.A.). \r\nAny such disclosure will be conducted, in each instance, without exceeding the original purposes for which your personal data were collected and subsequently processed. In addition, your personal data may be disclosed to third parties in order to (1) comply with applicable laws, (2) respond to governmental and judiciary inquiries, (3) comply with valid legal process, and (4) protect the rights or property of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY. \r\nAny third party information disclosed to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY in accordance with this Privacy Policy will not be used for any purpose other than as required to technically operate the service, to complete a transaction, or as otherwise required by law. \r\nIn the event there is a change in the corporate structure of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY including, without limitation, by merger, consolidation, sale, liquidation, or transfer of substantial assets, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may, in their sole discretion, transfer, sell or assign personal data collected on and through the www.stoneisland.com US Site, including, without limitation, personally identifiable information and aggregate information concerning users and customers, to one or more affiliated or unaffiliated third parties. \r\nIn any event, your personal data will not be disclosed to third parties without you being informed or without your consent, when such consent is required by law.\r\n\r\n<b>6. HOW DO WE COLLECT YOUR DATA ON www.stoneisland.com</b> \r\nCookies\r\nWhen you are using the www.stoneisland.com US Site, some personal data may be collected automatically through so-called \"cookies\". A cookie is a device transmitted to the hard drive of an Internet user. While cookies do not contain intelligible information, they allow us to link an Internet user to personal information provided by such user through the www.stoneisland.com US Site. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY process information collected by cookies in a collective and anonymous way, in order to optimize our services and the www.stoneisland.com US Site for the needs and preferences of its users. We use cookies to collect users' IP addresses and other information regarding users' data traffic or preferences in the choice of services provided and products purchased through the www.stoneisland.com US Site.\r\nWe disseminate cookies in connection with functions such as browsing the catalogue, purchasing products on-line and supplying \"My Account\" services.\r\nAs you may know, each Internet browser allows the deletion of cookies after each session. Your Internet browser contains instructions on how to carry out these procedures of deletion. Please access the appropriate instructions section on your Internet browser if you wish to delete cookies. \r\nYour acceptance of our automatic procedures of collection of data and the use of cookies is necessary to take advantage of many features and services offered by the www.stoneisland.com US Site, including the purchase of products. If you set your browser to block or delete cookies, we cannot guarantee that you will have access to all the features and services offered by the US Site (for example, your computer may not be able to display the image of the product you are in the process of purchasing).\r\nOther Methods of Collecting User Information. \r\nYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY directly collect personal data and information from users when they register on-line with the www.stoneisland.com US Site or when they send purchase orders for products sold on the www.stoneisland.com US Site in order to finalize their transactions.\r\n\r\n<b>7. SECURITY MEASURES</b>\r\nWe have adopted security measures to protect personal data against accidental or unlawful destruction, loss, alteration, unauthorized disclosure or access and against other unlawful forms of data processing, as provided in our Privacy Policy. \r\nNevertheless, YYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY cannot guarantee that the security measures adopted for the protection of the www.stoneisland.com US Site and the transmission of data and information through the www.stoneisland.com US Site will prevent or exclude any risk of unauthorized access to or loss of data. It is advisable that your computer be equipped with software devices for the protection of network data transmission and receipt (such as, updated antivirus systems) and that your Internet service provider take appropriate measures for the security of network data transmission (such as, firewalls and anti-spam filtering).\r\n\r\n<b>8. OPT-IN/OPT OUT</b> Advertising material and direct marketing or other commercial communications which are not specifically requested by you or necessary to provide a service you requested, including the purchase of products on the US Site, will be sent to you only after we receive your consent. Please note that each time your consent is required, we will inform you in advance and we will give you the option to either provide or refuse your consent by selecting the appropriate box.\r\nYOOX and STONE ISLAND and STONE ISLAND DENIMS may process your personal data without your consent when such processing is necessary to comply with applicable laws and regulations or to provide you with services you requested, including the purchase of products on the US Site.\r\nEven when your prior consent is not necessary, you may exercise, at any time, your right not to receive future communications regarding services you requested, such as the Newsletter.\r\n\r\n<b>9. YOUR RIGHT TO ACCESS PERSONAL DATA AND FURTHER RIGHTS</b>\r\nYou are entitled to obtain, at any time, confirmation from YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY as to whether or not data relating to you is being processed, even if not yet registered, and the communication of any such data in an intelligible form. \r\nMoreover, you are entitled to receive from YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY information on the source from which we received your personal data; the purposes and means of processing your personal data; the logic involved in any electronic data processing; information regarding the data controller and the data processors and the names of subjects and categories of subjects to whom your personal data may be disclosed or who may access your personal data (for example, the names of data processors). You can also find the above information in our Privacy Policy. \r\nYou are entitled to obtain at any time from YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY:\r\n\t•\tthe updating, rectification or integration of your personal data;\r\n\t•\tthe deletion, transformation into anonymous form or blocking of your personal data, which are processed in violation of the law, including when the storage of data is not necessary for the purposes for which it has been collected and subsequently processed;\r\n\t•\tthe confirmation that the operations under letters a) and b) have been reported to whom the data were disclosed or disseminated, except when it becomes impossible to do so or if it means exceeding the protection of the right you are claiming.\r\nYou are entitled to object, in all or in part:\r\n\t•\tfor legitimate reasons, to the processing of your personal data, even if it is related to the purposes for which it was collected;\r\n\t•\tto the processing of your personal data for advertising or direct marketing purposes or in order to carry out marketing research or commercial communications.\r\nYou may freely and at any time exercise your rights, provided that you do so in compliance with applicable laws and regulations, by sending your request to YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY at the following e-mail address: <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>.\r\n\r\n<b>10. LINKS TO OTHER WEB SITES</b>\r\nThe www.stoneisland.com US Site may provide hyperlinks to third party websites (the \"Third Party Websites\"). YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY do not operate, control, endorse or guarantee any Third Party Websites. You agree that and SPORTSWEAR COMPANY are not responsible for any content, services and/or products provided by any Third Party Website, nor are YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY responsible for any practice followed by such Third Party Website with respect to the collection and processing of personal data of their users. When you access any Third Party Website through a hyperlink posted on the www.stoneisland.com US Site, please carefully read the Privacy Policy and other policies of such Third Party Website.\r\nOur Privacy Policy and other policies do not apply to any Third Party Website. YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY provide hyperlinks to Third Party Websites only for the convenience of our users. By providing hyperlinks to Third Party Websites, YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY do not recommend that users access such Third Party Websites.\r\nYOU AGREE THAT YOUR USE OF ANY THIRD PARTY WEBSITE IS AT YOUR SOLE RISK AND WITHOUT WARRANTIES OF ANY KIND BY YOOX, YOOX USA, AND/OR SPORTSWEAR COMPANY, EXPRESSED, IMPLIED OR OTHERWISE, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY OR NONINFRINGEMENT. UNDER NO CIRCUMSTANCES ARE YOOX, YOOX USA, AND/OR SPORTSWEAR COMPANY LIABLE FOR DAMAGES ARISING FROM ANY TRANSACTION BETWEEN YOU AND ANY THIRD PARTY WEBSITE OR FOR ANY INFORMATION APPEARING ON THIRD PARTY WEBSITES. \r\n\r\n<b>11. CONTACTS</b>\r\nIf you wish to receive further information regarding our privacy practices, please contact us at the following e-mail address: <a href=“mailto:privacy@mail.stoneisland.comâ€>privacy@mail.stoneisland.com</a>. For more information regarding your rights under the Italian Data Protection Code, please go to the web site of the Italian Data Protection Authority at <a href=“http://www.garanteprivacy.it/ “>www.garanteprivacy.it</a>. \r\n\r\n<b>12. GOVERNING LAW</b>\r\nThe processing of personal data by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY will be conducted in compliance with applicable US laws. The laws of Italy, including the Italian Personal Data Protection Code (Legislative Decree no. 196 dated June 30, 2003), also apply to the processing of personal data carried out by YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY (see the Companies of YOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY Group). The Italian Personal Data Protection Code guarantees that the processing of your personal data will be carried out in compliance with the fundamental rights and freedoms of individuals and their dignity, with particular reference to confidentiality, identity and the right to personal data protection. \r\n\r\n<b>13. MODIFICATION AND UPDATING</b>\r\nYOOX NET-A-PORTER GROUP and SPORTSWEAR COMPANY may amend or update from time to time all or any part of this Privacy Policy, whether or not required by a change in the applicable laws and regulation. Our users will be notified of any amendment to or update of our Privacy Policy on our homepage. All amendments and updates will become effective upon publication on this section of the www.stoneisland.com US Site. You should regularly access this section of the www.stoneisland.com US Site in order to review the most recent and updated version of our Privacy Policy.",
+ "__index": "2",
+ "dateCreated": "Tue, 17 Nov 2015 20:32:07 GMT",
+ "tag": "privacy"
+ },
+ {
+ "id": "returns-policy",
+ "title": "Returns Policy",
+ "image": {
+ "uri": "",
+ "caption": ""
+ },
+ "body": "We want to make sure that you are completely satisfied with your purchases on this Site. If, for any reason, you are not satisfied with your order, you may return any UNUSED products within twenty (20) days from the date of delivery. Before sending any products back to us, please make sure that all of the following conditions have been correctly satisfied. \r\nThe product you wish to return:\r\n<li>can be sent back to us only after you have completed and submitted the online <a href=“http://www.stoneisland.com/localize.asp?tskay=4036416C&page=help/return&â€>Return Form</a> available on the www.stoneisland.com US Site within twenty (20) days of delivery; by completing and submitting our online return form you will receive your Return Number, which you must include on your return shipping label;</li>\r\n<li>must be unused, unworn, unwashed and in the same condition in which it was received by you;</li>\r\n<li>must have all disposable seals still attached with the disposable seal that must still be intact;</li>\r\n<li>must be returned complete with all of its parts and accessories;</li>\r\n<li>must be sent in its original packaging;</li>\r\n<li>must be shipped back to our fulfillment house within twenty (20) days of the date of delivery;</li>\r\n<li>must be sent in one single shipment; products that belong to the same order must be returned to us at the same time; and</li>\r\n<li>must be shipped from the United States.</li>\r\nIf all of these conditions are satisfied, we will refund the value of the returned product(s), Sales Tax included, less any original shipping costs. If you send the package with UPS, return shipping costs charged to the customer will correspond to $6.00. If you prefer you can send the return at your expense, with a courier of your choice. We will not issue any refunds for returns that do not satisfy all of the conditions indicated above; provided, however, that you will have the option to request within thirty (30) days of being notified that you are not entitled to a refund that your merchandise be shipped back to you, at your own cost, in the condition in which it was received by Provider’s fulfillment house.\r\nIf you do not request the return of your merchandise within said thirty-day period, you authorize Provider, and any of its affiliates or agents, to dispose of such merchandise as it sees fit. \r\n\r\nSALES OF BEACHWEAR AND UNDERWEAR ARE FINAL. WE RESERVE THE RIGHT TO DESIGNATE ON THE SITE OTHER NON-RETURNABLE MERCHANDISE. ANY SUCH DESIGNATION WILL BE NOTED ON THE DETAIL PAGE OF THE MERCHANDISE WHICH IS NON-RETURNABLE. \r\n\r\n<b>REFUND POLICY</b>\r\nRefunds are processed within approximately three (3) business days of our receipt of your merchandise. Your refund will be credited back to the same payment method used to make the original purchase on the US Site. If you paid by credit card, refund times will depend on the credit or debit card company’s policies. Be aware that the refund date for the credit will coincide with the date of the original payment, therefore you will not be charged any interest fees. If you paid by PayPal (where available), refunds will be credited to your PayPal account and will be visible immediately. The date of reimbursement to the credit card associated with your PayPal account depends on the company that issued the card. WE OFFER NO REFUNDS ON ANY PRODUCTS DESIGNATED ON THIS SITE AS NON-RETURNABLE. \r\n\r\n<b>IDENTIFICATION TAG</b>\r\nAll of our products come with an identification tag with a disposable seal. Please try your item on before removing the tag and seal, since we do not accept returns once the disposable seal has been removed, broken or damaged in any way. Shoes come with a sticker under the sole; if you remove or alter this sticker, you may no longer return your purchase. \r\n\r\n<b>UPS</b>\r\nYour return can be sent to us by UPS, using the pre-printed label which you can find within the original shipment. If you send the package with UPS, return shipping costs charged to the customer will correspond to $6.00. Please visit <a href=“https://www.ups.com/dropoff?loc=en_US “>http://www.ups.com/dropoff?loc=en_US</a> to find the UPS drop-off location nearest to you. If you prefer you can send the return at your expense, with a courier of your choice. We are not responsible for any loss or damage to products if you ship your return without using UPS. \r\n\r\nWE OFFER NO EXCHANGES ON MERCHANDISE PURCHASED ON THE www.stoneisland.com US SITE\r\n\r\nDISCLAIMER OF WARRANTIES AND LIMITATION OF LIABILITY\r\n\r\nPROVIDER MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE PRODUCTS INCLUDED ON THE SITE NOR AS TO THE MERCHANDISE BEING SOLD TO YOU. TO THE FULLEST EXTENT PERMISSIBLE BY APPLICABLE LAW, PROVIDER DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT, AND THERE ARE NO WARRANTIES, EXPRESS OR IMPLIED, WHICH EXTEND BEYOND THE DESCRIPTION OF THE MERCHANDISE CONTAINED ON OUR ORDER CONFIRMATION. PROVIDER WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THE SITE, INCLUDING BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE AND CONSEQUENTIAL DAMAGES. \r\n\r\nCERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS.\r\n\r\n<b>Force Majeure</b>\r\nProvider shall not be liable for any delay or failure in performance caused by circumstances beyond its reasonable control.",
+ "__index": "3",
+ "dateCreated": "Tue, 17 Nov 2015 21:03:44 GMT",
+ "tag": "returns"
+ },
+ {
+ "id": "customer-care",
+ "title": "Customer Care",
+ "image": {
+ "uri": "",
+ "caption": ""
+ },
+ "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam blandit in risus sit amet maximus. Phasellus ullamcorper auctor fermentum. Aenean diam libero, rhoncus vel efficitur sed, dictum vel neque. Aliquam mollis leo vitae est vehicula, non pulvinar elit congue. Phasellus sit amet mauris neque. Integer volutpat nisl est, vel finibus purus lacinia vehicula. Proin dapibus velit quis sapien ultricies accumsan. Sed accumsan dui id porta efficitur.\r\n\r\nCurabitur pretium ut libero a varius. Morbi in lacinia felis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam dolor justo, consequat eu lectus at, interdum sollicitudin arcu. Nunc accumsan velit volutpat, venenatis leo eu, rhoncus nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus semper consequat ipsum, sed fringilla ligula tincidunt at.\r\n\r\nMauris vehicula, purus ut iaculis facilisis, mi leo dignissim libero, at lobortis lectus odio consequat urna. Etiam accumsan volutpat nibh, eget ultricies mi feugiat eu. Duis id aliquam enim. Pellentesque quis enim eu dolor bibendum interdum. Cras ultrices erat velit, eu volutpat erat consequat non. Nam ut nibh facilisis, egestas sapien vitae, scelerisque sapien. Nullam tortor ex, convallis vel nisi vitae, efficitur dapibus nunc. In hac habitasse platea dictumst. Nam posuere ligula lorem, sit amet ultricies odio tristique in. Etiam gravida tincidunt mollis. Duis quis nulla ligula. Etiam ut vehicula tellus. Sed ipsum lacus, tincidunt sit amet velit et, aliquet hendrerit erat. Nam sed velit dapibus, congue odio non, ultrices ligula. Suspendisse at quam eu lorem finibus ultricies id tempus lorem. Nulla vel quam luctus, viverra nulla cursus, faucibus tellus.\r\n\r\nPraesent magna ex, posuere at hendrerit varius, auctor a nisl. Nullam sodales erat ut nisl vestibulum luctus. Donec id sagittis orci. Cras imperdiet, erat non dictum feugiat, elit turpis viverra neque, interdum cursus mi turpis vitae dolor. Suspendisse potenti. Aenean et auctor diam, vel eleifend eros. Praesent viverra felis at enim elementum fermentum. Etiam convallis, elit porta molestie condimentum, arcu ligula vestibulum nisi, et aliquet massa tellus quis eros. Aliquam a dignissim tellus, non ullamcorper purus. Phasellus in risus mattis dui vehicula cursus in at urna.\r\n\r\nCurabitur laoreet lorem eu euismod volutpat. Suspendisse vulputate aliquet tempor. Pellentesque purus augue, eleifend a maximus eu, commodo nec felis. Mauris mattis turpis nec volutpat tincidunt. Mauris imperdiet ante at orci mollis sagittis. Etiam lacus risus, consectetur ut dui non, pulvinar pulvinar libero. Aliquam ut rhoncus justo, quis sollicitudin nisi. Proin et iaculis sem. Pellentesque id tempor elit, et tincidunt nunc. Quisque laoreet et massa quis imperdiet. Morbi dapibus, felis sed auctor porttitor, massa nunc sollicitudin urna, non congue odio enim eget nisi. Suspendisse semper vehicula nisl vitae vehicula. Maecenas sed justo quis nisi auctor ultrices. Nam vel dolor fringilla, accumsan nulla eu, rutrum ex. Donec ante quam, molestie vel ex eget, dictum luctus nunc. Phasellus tincidunt libero non quam finibus, at convallis sem laoreet.\r\n\r\nDonec consequat, leo tincidunt elementum consectetur, nisl augue sollicitudin dolor, vel fringilla dui lorem non enim. Morbi id arcu felis. Integer malesuada ex enim, sed consectetur massa condimentum id. In mollis libero eu neque sollicitudin, sit amet interdum orci bibendum. Curabitur tincidunt purus vel vestibulum placerat. Aliquam erat volutpat. Praesent ac eros diam. Mauris ultrices euismod sodales. Vestibulum dui leo, auctor sit amet finibus eu, suscipit eu diam. Cras ac rhoncus turpis, at sagittis mi. Praesent urna metus, euismod vitae nunc eget, suscipit auctor lectus. Pellentesque maximus arcu justo. Duis mi arcu, rutrum et vulputate nec, mattis sit amet risus. Donec posuere velit sed enim accumsan, eu lobortis nulla sagittis.\r\n\r\nDonec viverra consectetur turpis sit amet malesuada. Sed sit amet urna luctus, sodales est porta, aliquam mi. Curabitur et ullamcorper odio, dapibus facilisis nisl. Fusce tortor leo, mattis sit amet massa ut, ultrices aliquam massa. Pellentesque consectetur metus in molestie egestas. Quisque vehicula at mauris ut eleifend. Duis eu ipsum quis ipsum bibendum luctus.\r\n\r\nSed sed viverra diam. Quisque lacinia nisl orci. Fusce vulputate dui ut nunc vulputate feugiat. Praesent felis quam, semper nec dapibus eget, venenatis vitae leo. Maecenas rutrum egestas dapibus. Vestibulum sodales molestie varius. Ut ac laoreet est, nec posuere ipsum. Cras ac eros sapien. Quisque eu dui lorem. Donec congue varius tortor ac ullamcorper. Curabitur vulputate faucibus finibus. Donec tellus neque, euismod ac aliquet at, vehicula in mauris. Vivamus justo nulla, maximus sit amet quam ac, vulputate dapibus purus. Mauris ante urna, posuere varius vehicula sed, fringilla sed quam. In eget ex tincidunt, ultrices elit id, congue quam. Suspendisse congue tristique dolor, rhoncus venenatis purus tempor at.\r\n\r\nVivamus efficitur, odio in tempor rutrum, quam nunc congue orci, non posuere lorem lacus et arcu. Aenean sit amet diam quis dui dapibus semper ac vitae est. Aenean ornare arcu justo, id sodales odio maximus interdum. Curabitur sit amet augue pretium metus bibendum imperdiet vitae vitae nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc euismod ante eu justo mollis dignissim. Maecenas et velit eu lorem laoreet ornare. Sed accumsan est nec rutrum dignissim.\r\n\r\nIn bibendum mattis ligula. Pellentesque gravida felis sed congue viverra. Nam volutpat quam at velit sodales, nec egestas dolor consectetur. Etiam id tortor tincidunt, sollicitudin risus ut, lacinia diam. Morbi consequat euismod justo vitae sagittis. Pellentesque interdum orci ligula, tincidunt maximus nulla sollicitudin sed. Duis finibus odio eros, eget consequat ante tristique ac. Suspendisse at interdum leo. Nunc sagittis ante ac felis iaculis fermentum. Sed elementum dictum dictum. Aliquam eget metus molestie, varius mi ac, auctor quam.",
+ "__index": "4",
+ "dateCreated": "Tue, 17 Nov 2015 21:03:57 GMT",
+ "tag": "care"
+ }
+ ],
+ "store": [
+ {
+ "id": "stone-island",
+ "title": "Stone Island",
+ "StoreIsOpen": "false",
+ "ClosedStoreImages": [
+ {
+ "uri": "https://ltho.s3.amazonaws.com/fe9a4c24-eb7f-42be-9c36-d0ab5936bb13.png",
+ "caption": ""
+ },
+ {
+ "uri": "https://ltho.s3.amazonaws.com/52b447ec-8635-4182-ae39-25dca98afae1.png",
+ "caption": ""
+ }
+ ],
+ "__index": "0",
+ "dateCreated": "Fri, 20 Nov 2015 00:45:03 GMT",
+ "collection": "SS_'016 PREVIEW",
+ "FitsLarge": "false",
+ "BackgroundIsGray": "true",
+ "CollectionId": "33064",
+ "StoreStatus": "closed",
+ "OpensOn": "Invalid Date"
+ }
+ ]
+} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/etc/geo.js b/StoneIsland/platforms/android/assets/www/js/lib/etc/geo.js
index 88521bb1..22899141 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/etc/geo.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/etc/geo.js
@@ -10,13 +10,13 @@ var geo = (function(){
geo.success = function(position){
var lat_str = as_degrees( position.coords.latitude || 40.99167, "N", "S" )
- var lng_str = as_degrees( position.coords.longitude || -74.07944, "W", "E" )
- $(".latlng").html( lat_str + " " + lng_str )
+ var lng_str = as_degrees( position.coords.longitude || -74.07944, "E", "W" )
+ $(".latlng").html( lat_str + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + lng_str )
geo.done()
}
geo.error = function(error){
- $(".latlng").html( "+40&deg; 58' 90.9\" N 74&deg; 04' 46.3\" W" )
+ $(".latlng").html( "+40&deg; 58' 90.9\" N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;74&deg; 04' 46.3\" W" )
geo.done()
}
@@ -44,9 +44,9 @@ var geo = (function(){
var s = ""
var sig = n >= 0 ? pos : neg
+ n = Math.abs(n)
s += Math.floor(n) + "&deg; "
- n = Math.abs(n)
n %= 1
n *= 60
nn = Math.floor(n)
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/etc/push.js b/StoneIsland/platforms/android/assets/www/js/lib/etc/push.js
index 5585ba71..634ffe6d 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/etc/push.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/etc/push.js
@@ -55,6 +55,7 @@ var push = (function(){
app.intro.$alert.show().html("[ HUB UPDATED ]")
}
else {
+ auth.clear_cart()
app.intro.$alert.show().html("[ STORE UPDATED ]")
}
}
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/nav/AddressView.js b/StoneIsland/platforms/android/assets/www/js/lib/nav/AddressView.js
index ad5745fb..4a05c4b6 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/nav/AddressView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/nav/AddressView.js
@@ -7,6 +7,7 @@ var AddressView = SerializableView.extend({
events: {
"change [name=Province]": 'update_country',
+ "focus [name]": 'scroll_up_to_phone',
},
initialize: function(opt){
@@ -55,6 +56,10 @@ var AddressView = SerializableView.extend({
this.$(".country-label").html("UNITED STATES")
}
},
+
+ scroll_up_to_phone: function(e){
+ app.view.scroller && app.view.scroller.scrollTo(0, -$(e.currentTarget).position().top)
+ },
})
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/nav/HeaderView.js b/StoneIsland/platforms/android/assets/www/js/lib/nav/HeaderView.js
index 73fe106d..0961a5e8 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/nav/HeaderView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/nav/HeaderView.js
@@ -5,7 +5,7 @@ var HeaderView = View.extend({
events: {
"click .burger": "nav",
"click .logo": "logo",
- "click .cart": "cart",
+ "click .cart_rapper": "cart",
},
initialize: function(){
@@ -54,4 +54,4 @@ var HeaderView = View.extend({
this.$cart_count.html( --this.count )
},
-}) \ No newline at end of file
+})
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/nav/NavView.js b/StoneIsland/platforms/android/assets/www/js/lib/nav/NavView.js
index fc373858..cfb39ff6 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/nav/NavView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/nav/NavView.js
@@ -115,7 +115,7 @@ var NavView = View.extend({
app.router.go("account/settings")
},
return_link: function(){
- window.open("http://www.stoneisland.com/localize.asp?tskay=4036416C&page=help/return&deviceYeti=smartphone", '_system')
+ window.open("http://www.stoneisland.com/yTos/Plugins/AreaLocalizer/Redirectarea?area=ProductExchange&controllerName=SearchOrder&actionName=Index", '_system')
},
@@ -134,8 +134,9 @@ var NavView = View.extend({
this.hide()
app.router.go("page/terms")
},
- care: function(){
- window.open("http://www.stoneisland.com/localize.asp?tskay=4036416C&page=help/home&deviceYeti=smartphone", '_system')
+ care: function(e){
+ e.preventDefault()
+ window.open("http://www.stoneisland.com/system/web/custom/hp/email.jsp", '_system')
},
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 6f7b8486..97b46006 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/products/ClosedStoreView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/products/ClosedStoreView.js
@@ -19,16 +19,23 @@ var ClosedStoreView = View.extend({
},
show: function(){
+ this.setMessage(app.closed.storeClosedMessageOne, app.closed.storeClosedMessageTwo)
+ this.showElement()
+ },
+
+ showElement: function(){
document.body.className = "closed"
this.animate()
app.footer.hide()
- if (this.storeOpenDate) {
- var date = moment(this.storeOpenDate).format("MM/DD")
- console.log(date)
- $(".closed_store_msg h3").html("THIS STORE WILL OPEN ON " + date)
+ },
+
+ setMessage: function(msg_one, msg_two){
+ $(".closed_store_msg h3").html(msg_one || "THIS STORE IS CURRENTLY CLOSED")
+ if (app.closed.storeClosedMessageTwo) {
+ $(".closed_store_msg h4").show().html(msg_two)
}
else {
- $(".closed_store_msg h3").html("THIS STORE IS CURRENTLY CLOSED")
+ $(".closed_store_msg h4").hide()
}
},
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 53e99390..b9a7755f 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/products/CollectionView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/products/CollectionView.js
@@ -25,12 +25,20 @@ var CollectionView = ScrollableView.extend({
},
show: function(){
- if (app.closed.storeIsClosed) {
- if (! app.closed.storeOpenDate || app.closed.storeOpenDate.diff() > 0) {
- return app.closed.show()
- }
+ if (! navigator.onLine) {
+ app.closed.showElement()
+ app.closed.setMessage("PLEASE GO ONLINE TO BROWSE<br>THE STONE ISLAND STORE.", "")
+ return
+ }
+ if (sdk.env !== "test" && app.closed.storeIsClosed) {
+ return app.closed.show()
+ }
+ if (this.data && this.data.SearchResponseFull.Results.Items.length < 4) {
+ app.footer.hide()
+ }
+ else {
+ app.footer.show("FILTER")
}
- app.footer.show("FILTER")
document.body.className = "collection"
if (this.loaded) {
console.log("collection this loaded")
@@ -44,7 +52,7 @@ var CollectionView = ScrollableView.extend({
save: function(){
this.filterView.filter()
},
-
+
fetch: function(){
console.log("collection fetch")
if (this.loaded) {
@@ -52,9 +60,9 @@ var CollectionView = ScrollableView.extend({
return
}
this.$loader.show()
- console.log("fetching", app.gallery_id)
+ console.log("fetching", app.department_id)
sdk.product.collection({
- gallery_id: app.gallery_id,
+ department_id: app.department_id,
success: this.populate.bind(this)
})
},
@@ -72,24 +80,50 @@ var CollectionView = ScrollableView.extend({
else {
console.log("populate 2")
this.data = data
+ this.loaded = false
console.log(data)
}
+ console.log(">>>>>>>> YES ")
if (! this.loaded) {
console.log("populate 3")
this.loaded = true
this.$loader.hide()
this.$content.empty()
// DefaultCode10
- data.SearchResponseFull.Results.Items.forEach(this.append.bind(this))
+// data.SearchResponseFull.Results.Items.length = 1
+ var is_single_product = (data.SearchResponseFull.Results.Items.length < 4)
+ this.$el.toggleClass("single", is_single_product)
+
+ if (is_single_product) {
+ console.log("IS SINGLE PRODUCT")
+ var item = data.SearchResponseFull.Results.Items[0]
+ var url = sdk.image(item['DefaultCode10'], '13_f')
+ console.log(url)
+ var img = new Image ()
+ img.src = url
+ }
+
+// if (data.SearchResponseFull.Results.Items.length == 1) {
+// app.footer.hide()
+// }
+// else {
+// app.footer.show("FILTER")
+// }
+
+ console.log( data.SearchResponseFull.Results.Items.length )
+ data.SearchResponseFull.Results.Items.forEach(function(item){
+ console.log(">>> ITEM")
+ this.append(item, is_single_product)
+ }.bind(this))
this.deferScrollToTop()
}
this.afterFetchCallback && this.afterFetchCallback()
app.collection.deferRefresh()
},
- append: function(item){
+ append: function(item, is_single_product){
this.items[ item['Code8'] ] = item
- var t = this.template.replace(/{{image}}/, sdk.image(item['DefaultCode10'], '11_f'))
+ var t = this.template.replace(/{{image}}/, sdk.image(item['DefaultCode10'], is_single_product ? '13_f' : '11_f'))
.replace(/{{code8}}/, item['Code8'])
this.$content.append(t)
},
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/products/GalleryView.js b/StoneIsland/platforms/android/assets/www/js/lib/products/GalleryView.js
index 02193f14..1428aca9 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/products/GalleryView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/products/GalleryView.js
@@ -60,6 +60,6 @@ var GalleryView = View.extend({
})
-var YOOX_IMAGE_STYLE_ORDER = "ZZZ d f".split(" ")
+var YOOX_IMAGE_STYLE_ORDER = "ZZZ f r d e a b c g l".split(" ")
-function sort_image_styles (b,a){ return (YOOX_IMAGE_STYLE_ORDER.indexOf(a)) - (YOOX_IMAGE_STYLE_ORDER.indexOf(b)) } \ No newline at end of file
+function sort_image_styles (b,a){ return (YOOX_IMAGE_STYLE_ORDER.indexOf(b)) - (YOOX_IMAGE_STYLE_ORDER.indexOf(a)) } \ No newline at end of file
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 484cd442..cfb39f20 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/products/ProductView.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/products/ProductView.js
@@ -26,6 +26,7 @@ var ProductView = ScrollableView.extend({
this.$body = this.$(".body")
this.$fit = this.$(".fit")
this.$sizing = this.$(".sizing")
+ this.$style = this.$(".style")
},
show: function(){
@@ -50,6 +51,7 @@ var ProductView = ScrollableView.extend({
color: null,
code: null,
is_onesize: false,
+ fitLargeCodes: {},
sizes: null,
colors: null,
@@ -111,28 +113,33 @@ var ProductView = ScrollableView.extend({
var descriptions = this.get_descriptions(details)
- this.gallery.populate( data['Code8'], details['Item']['ImageTypes'] )
-
var name_partz = data['ModelNames'].split(' ')
var num = name_partz.shift()
var title = name_partz.join(' ')
var type = title_case( data['MicroCategory'] )
var price = "$" + data['DiscountedPrice'] + ".00"
- var body = descriptions['EditorialDescription'].replace(/<br>/g, "<br><br>")
+ var body = descriptions['Details'] + "<br>" + descriptions['EditorialDescription']
+ body = body.replace(/<br>/g, "<br><br>").replace(/(<br>)+$/, "")
var default_color_id = this.populate_selectors(data, details)
if (this.not_available) {
+ this.$style.css("opacity", 0)
this.$color.html("NOT AVAILABLE")
this.$size.hide()
+ this.gallery.populate( data['Code8'], details['Item']['ImageTypes'] )
}
else {
+ this.$style.css("opacity", 1)
+
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.gallery.populate( color.code, details['Item']['ImageTypes'] )
+
this.color = color
this.size = size
@@ -152,6 +159,8 @@ var ProductView = ScrollableView.extend({
this.item = data
this.details = details['Item']
this.code = data['DefaultCode10']
+
+ console.log( data['DefaultCode10'] )
this.$num.html(num)
this.$title.html(title)
@@ -159,6 +168,10 @@ var ProductView = ScrollableView.extend({
this.$price.html(price)
this.$body.html(body)
+ var fits_large = !! this.fitLargeCodes[this.code]
+ app.product.$fit.toggle( fits_large )
+ app.product.$sizing.toggle( fits_large )
+
this.showFooter()
this.deferScrollToTop()
@@ -214,6 +227,7 @@ var ProductView = ScrollableView.extend({
sizes[ size['SizeId'] ] = {
id: label,
label: label.toUpperCase(),
+ value: size['SizeId'],
colors: {},
}
})
@@ -236,6 +250,7 @@ var ProductView = ScrollableView.extend({
}.bind(this))
app.selector.select("style", sizes, function(size){
+ console.log(size)
this.size = size.value
this.$size.html(size.label)
}.bind(this))
@@ -267,27 +282,62 @@ var ProductView = ScrollableView.extend({
},
add_to_cart: function(opt){
- auth.deferred_product = { Size: this.size, Code10: this.code }
+ var deferred_product = auth.deferred_product = { Size: this.size, Code10: this.code }
+ console.log("ADDING " + this.size + " " + this.code )
+ // if we are not logged in...
if ( ! auth.logged_in() ) {
app.router.go("account/login")
app.last_view = app.cart
}
+ // if we don't have a cart setup...
else if ( ! auth.has_cart() ) {
app.curtain.show("loading")
- auth.create_cart(function(){
- auth.add_deferred_product_to_cart(function(){
+ auth.create_cart({
+ success: function(){
+ auth.add_deferred_product_to_cart({
+ success: function(){
+ app.curtain.hide("loading")
+ app.router.go("cart")
+ },
+ error: function(){
+ // SHOULD NOT BE A PROBLEM
+ console.log("ERROR ADDING PRODUCT TO NEW CART SIMPLE ADD TO CART")
+ app.curtain.hide("loading")
+ app.router.go("account/login")
+ auth.deferred_product = deferred_product
+ app.last_view = app.cart
+ },
+ })
+ },
+ error: function(){
+ // ERROR CREATING CART?
+ console.log("ERROR CREATING CART")
+ auth.log_out()
+ app.account.logged_out()
app.curtain.hide("loading")
- app.router.go("cart")
- })
+ app.router.go("account/login")
+ auth.deferred_product = deferred_product
+ app.last_view = app.cart
+ },
})
}
else {
app.curtain.show("loading")
- auth.add_deferred_product_to_cart(function(){
- app.curtain.hide("loading")
- if (opt.route) {
- app.router.go("cart")
- }
+ auth.add_deferred_product_to_cart({
+ success: function(){
+ app.curtain.hide("loading")
+ if (opt.route) {
+ app.router.go("cart")
+ }
+ },
+ error: function(){
+ console.log("CART MIGHT BE OLD")
+ // TODO - CART MIGHT BE OLD
+ app.curtain.hide("loading")
+ app.router.go("account/login")
+ auth.deferred_product = deferred_product
+ app.last_view = app.cart
+ },
})
}
},
@@ -300,8 +350,7 @@ var ProductView = ScrollableView.extend({
},
share: function(){
- console.log("share")
- window.plugins.socialsharing.share( this.item['ModelNames'], null, null, "http://stoneisland.com/")
+ window.plugins.socialsharing.share( this.item['ModelNames'], null, null, "http://deeplink.me/www.stoneisland.com/store/" + this.code)
},
})
@@ -428,4 +477,4 @@ ModelFabric: "631520081CC-6315-81"
ModelNames: "20081 DATA DRIP PIN"
Neckline: "Claudine or round collar"
-*/ \ No newline at end of file
+*/
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 4e0a5f04..6db33b68 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/products/Selector.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/products/Selector.js
@@ -27,22 +27,23 @@ var Selector = View.extend({
this.$el.show()
app.curtain.show("white")
this.visible = true
+ $("#selector").removeClass("selector-outer-wrap")
if ( origin == "wide") {
$("#selector").addClass("selector-full")
}
else {
$("#selector").removeClass("selector-full")
}
- var originXY = $("." + origin).offset()
- var originWidth = $("." + origin).width()
- var selectorHeight = $('#selector').height()
- var originHeight = $("." + origin).height()
- console.log(originXY.left)
- console.log(originXY.top)
- console.log(selectorHeight)
- console.log(origin)
-
- $("#selector").css({"top":(originXY.top - selectorHeight - originHeight + 20),"left":originXY.left})
+ var originXY = $("." + origin).offset()
+ var originWidth = $("." + origin).width()
+ var selectorHeight = $('#selector').height()
+ var originHeight = $("." + origin).height()
+ console.log(selectorHeight)
+ if ((selectorHeight > 250) && (!$("#selector").hasClass("selector-full"))) {
+ $("#selector").addClass("selector-outer-wrap")
+ }
+ var selectorHeight = $('#selector').height()
+ $("#selector").css({"top":(originXY.top - selectorHeight - originHeight + 20),"left":originXY.left})
originXY = null;
originWidth = null;
originHeight = null;
diff --git a/StoneIsland/platforms/android/assets/www/js/lib/view/Scrollable.js b/StoneIsland/platforms/android/assets/www/js/lib/view/Scrollable.js
index d06ed590..0baff845 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/view/Scrollable.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/view/Scrollable.js
@@ -21,7 +21,7 @@ var ScrollableView = View.extend({
scrollToTop: function(){
this.scroller.refresh()
- app.collection.scroller.scrollTo(0, 0)
+ this.scroller.scrollTo(0, 0)
},
}) \ No newline at end of file
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 98aa8ce3..8d25daf4 100755
--- a/StoneIsland/platforms/android/assets/www/js/lib/view/Serializable.js
+++ b/StoneIsland/platforms/android/assets/www/js/lib/view/Serializable.js
@@ -97,7 +97,8 @@ var SerializableView = View.extend({
},
show_errors: function(errors){
- console.log(errors)
+ console.log("showing errors")
+ console.log(errors)
var msgs = []
errors.forEach(function(e, i){
if (i > 0) { return }
@@ -146,17 +147,20 @@ var SerializableView = View.extend({
}.bind(this),
error: function(data){
app.curtain.hide("loading")
+ console.log("api error")
this.error(data)
}.bind(this),
})
},
success: function(data){
- console.log("SUCCESS", data)
+ console.log("SUCCESS")
+ console.log(data)
},
error: function(data){
- console.log("FAIL", data)
+ console.log("FAIL")
+ console.log(data)
},
})
diff --git a/StoneIsland/platforms/android/assets/www/js/sdk/address.js b/StoneIsland/platforms/android/assets/www/js/sdk/address.js
index 4fb12ad0..1256df54 100755
--- a/StoneIsland/platforms/android/assets/www/js/sdk/address.js
+++ b/StoneIsland/platforms/android/assets/www/js/sdk/address.js
@@ -15,6 +15,10 @@ sdk.address = (function(){
opt.success(data)
},
error: opt.error,
+ complete: function(data){
+ console.log("really weird")
+ console.log(data)
+ }
})
}
diff --git a/StoneIsland/platforms/android/assets/www/js/sdk/auth.js b/StoneIsland/platforms/android/assets/www/js/sdk/auth.js
index 6008ec31..fa8dd71c 100755
--- a/StoneIsland/platforms/android/assets/www/js/sdk/auth.js
+++ b/StoneIsland/platforms/android/assets/www/js/sdk/auth.js
@@ -32,11 +32,9 @@ var auth = sdk.auth = (function(){
fn && fn( auth.logged_in() )
},
error: function(){
- auth.clear_user(function(){
- auth.clear_cart(function(){
- fn && fn( auth.logged_in() )
- })
- })
+ auth.log_out()
+ fn && fn( false )
+ //
},
})
auth.get_cart()
@@ -85,40 +83,54 @@ var auth = sdk.auth = (function(){
localStorage.removeItem("yoox.cart_id")
cb && cb()
}
- auth.create_cart = function(cb){
- if (auth.has_cart()) { return cb() }
+ auth.create_cart = function(opt){
+ opt = opt || {}
+ if (auth.has_cart()) {
+ opt.success && opt.success()
+ return
+ }
sdk.cart.initialize({
success: function(data){
sdk.cart.set_user({
success: function(){
auth.set_cart(sdk.cart.id, sdk.cart.token, function(){
- cb && cb()
+ opt.success && opt.success()
})
- }
+ },
+ error: function(){
+ opt.clear_cart()
+ opt.error && opt.error()
+ },
})
+ },
+ error: function(){
+ opt.clear_cart()
+ opt.error && opt.error()
}
})
}
- auth.add_deferred_product_to_cart = function(cb){
+
+ auth.add_deferred_product_to_cart = function(opt){
+ opt = opt || {}
// auth.deferred_product
if (! auth.deferred_product) {
- console.log("VV NO DEF PROD")
- cb && cb()
+ console.log("VV NO DEFERRED PROD")
+ opt.success && opt.success()
return
}
sdk.cart.add_item({
data: auth.deferred_product,
success: function(){
console.log("ADDED ITEM")
- cb && cb()
+ app.header.increment_cart_count()
+ opt.success && opt.success()
},
error: function(data){
- console.log("ERROR ADDING ITEM", data)
- cb && cb()
+ console.log("ERROR ADDING ITEM")
+ opt.error && opt.error()
},
})
auth.deferred_product = null
- app.header.increment_cart_count()
}
auth.log_out = function(){
diff --git a/StoneIsland/platforms/android/assets/www/js/sdk/product.js b/StoneIsland/platforms/android/assets/www/js/sdk/product.js
index 7c12e7d7..671d1fea 100755
--- a/StoneIsland/platforms/android/assets/www/js/sdk/product.js
+++ b/StoneIsland/platforms/android/assets/www/js/sdk/product.js
@@ -2,20 +2,41 @@ sdk.product = (function(){
var product = {}
var default_gallery = 31617
+ var default_department = "NkXStnsl"
product.all = function(opt){
return $.ajax({
method: "GET",
- url: sdk.path("Search.API/1.2", "search.json"),
+ url: sdk.path("Search.API/1.3", "search.json"),
data: { format: "full", productsPerPage: 100 },
success: opt.success,
error: opt.error,
})
}
-
+
product.collection = function(opt){
return $.ajax({
method: "GET",
+ url: sdk.path("Search.API/1.3", "search.json"),
+ data: { format: "full", department: opt.department_id || default_department, productsPerPage: 100 },
+ success: opt.success,
+ error: opt.error,
+ })
+ }
+
+ product.department_codes = function(opt){
+ return $.ajax({
+ method: "GET",
+ url: sdk.path("Search.API/1.3", "search/results.json"),
+ data: { format: "full", department: opt.department_id || default_department, page: 1 },
+ success: opt.success,
+ error: opt.error,
+ })
+ }
+
+ product.collection_by_gallery = function(opt){
+ return $.ajax({
+ method: "GET",
url: sdk.path("Search.API/1.2", "search.json"),
data: { format: "full", gallery: opt.gallery_id || default_gallery, productsPerPage: 100 },
success: opt.success,
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/console-via-logger.js
deleted file mode 100755
index 0ce8cea8..00000000
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/console-via-logger.js
+++ /dev/null
@@ -1,189 +0,0 @@
-cordova.define("cordova-plugin-console.console", function(require, exports, module) { /*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-//------------------------------------------------------------------------------
-
-var logger = require("./logger");
-var utils = require("cordova/utils");
-
-//------------------------------------------------------------------------------
-// object that we're exporting
-//------------------------------------------------------------------------------
-var console = module.exports;
-
-//------------------------------------------------------------------------------
-// copy of the original console object
-//------------------------------------------------------------------------------
-var WinConsole = window.console;
-
-//------------------------------------------------------------------------------
-// whether to use the logger
-//------------------------------------------------------------------------------
-var UseLogger = false;
-
-//------------------------------------------------------------------------------
-// Timers
-//------------------------------------------------------------------------------
-var Timers = {};
-
-//------------------------------------------------------------------------------
-// used for unimplemented methods
-//------------------------------------------------------------------------------
-function noop() {}
-
-//------------------------------------------------------------------------------
-// used for unimplemented methods
-//------------------------------------------------------------------------------
-console.useLogger = function (value) {
- if (arguments.length) UseLogger = !!value;
-
- if (UseLogger) {
- if (logger.useConsole()) {
- throw new Error("console and logger are too intertwingly");
- }
- }
-
- return UseLogger;
-};
-
-//------------------------------------------------------------------------------
-console.log = function() {
- if (logger.useConsole()) return;
- logger.log.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.error = function() {
- if (logger.useConsole()) return;
- logger.error.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.warn = function() {
- if (logger.useConsole()) return;
- logger.warn.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.info = function() {
- if (logger.useConsole()) return;
- logger.info.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.debug = function() {
- if (logger.useConsole()) return;
- logger.debug.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.assert = function(expression) {
- if (expression) return;
-
- var message = logger.format.apply(logger.format, [].slice.call(arguments, 1));
- console.log("ASSERT: " + message);
-};
-
-//------------------------------------------------------------------------------
-console.clear = function() {};
-
-//------------------------------------------------------------------------------
-console.dir = function(object) {
- console.log("%o", object);
-};
-
-//------------------------------------------------------------------------------
-console.dirxml = function(node) {
- console.log(node.innerHTML);
-};
-
-//------------------------------------------------------------------------------
-console.trace = noop;
-
-//------------------------------------------------------------------------------
-console.group = console.log;
-
-//------------------------------------------------------------------------------
-console.groupCollapsed = console.log;
-
-//------------------------------------------------------------------------------
-console.groupEnd = noop;
-
-//------------------------------------------------------------------------------
-console.time = function(name) {
- Timers[name] = new Date().valueOf();
-};
-
-//------------------------------------------------------------------------------
-console.timeEnd = function(name) {
- var timeStart = Timers[name];
- if (!timeStart) {
- console.warn("unknown timer: " + name);
- return;
- }
-
- var timeElapsed = new Date().valueOf() - timeStart;
- console.log(name + ": " + timeElapsed + "ms");
-};
-
-//------------------------------------------------------------------------------
-console.timeStamp = noop;
-
-//------------------------------------------------------------------------------
-console.profile = noop;
-
-//------------------------------------------------------------------------------
-console.profileEnd = noop;
-
-//------------------------------------------------------------------------------
-console.count = noop;
-
-//------------------------------------------------------------------------------
-console.exception = console.log;
-
-//------------------------------------------------------------------------------
-console.table = function(data, columns) {
- console.log("%o", data);
-};
-
-//------------------------------------------------------------------------------
-// return a new function that calls both functions passed as args
-//------------------------------------------------------------------------------
-function wrappedOrigCall(orgFunc, newFunc) {
- return function() {
- var args = [].slice.call(arguments);
- try { orgFunc.apply(WinConsole, args); } catch (e) {}
- try { newFunc.apply(console, args); } catch (e) {}
- };
-}
-
-//------------------------------------------------------------------------------
-// For every function that exists in the original console object, that
-// also exists in the new console object, wrap the new console method
-// with one that calls both
-//------------------------------------------------------------------------------
-for (var key in console) {
- if (typeof WinConsole[key] == "function") {
- console[key] = wrappedOrigCall(WinConsole[key], console[key]);
- }
-}
-
-});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/logger.js
deleted file mode 100755
index 7a9a75d3..00000000
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-console/www/logger.js
+++ /dev/null
@@ -1,357 +0,0 @@
-cordova.define("cordova-plugin-console.logger", function(require, exports, module) { /*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-//------------------------------------------------------------------------------
-// The logger module exports the following properties/functions:
-//
-// LOG - constant for the level LOG
-// ERROR - constant for the level ERROR
-// WARN - constant for the level WARN
-// INFO - constant for the level INFO
-// DEBUG - constant for the level DEBUG
-// logLevel() - returns current log level
-// logLevel(value) - sets and returns a new log level
-// useConsole() - returns whether logger is using console
-// useConsole(value) - sets and returns whether logger is using console
-// log(message,...) - logs a message at level LOG
-// error(message,...) - logs a message at level ERROR
-// warn(message,...) - logs a message at level WARN
-// info(message,...) - logs a message at level INFO
-// debug(message,...) - logs a message at level DEBUG
-// logLevel(level,message,...) - logs a message specified level
-//
-//------------------------------------------------------------------------------
-
-var logger = exports;
-
-var exec = require('cordova/exec');
-var utils = require('cordova/utils');
-
-var UseConsole = false;
-var UseLogger = true;
-var Queued = [];
-var DeviceReady = false;
-var CurrentLevel;
-
-var originalConsole = console;
-
-/**
- * Logging levels
- */
-
-var Levels = [
- "LOG",
- "ERROR",
- "WARN",
- "INFO",
- "DEBUG"
-];
-
-/*
- * add the logging levels to the logger object and
- * to a separate levelsMap object for testing
- */
-
-var LevelsMap = {};
-for (var i=0; i<Levels.length; i++) {
- var level = Levels[i];
- LevelsMap[level] = i;
- logger[level] = level;
-}
-
-CurrentLevel = LevelsMap.WARN;
-
-/**
- * Getter/Setter for the logging level
- *
- * Returns the current logging level.
- *
- * When a value is passed, sets the logging level to that value.
- * The values should be one of the following constants:
- * logger.LOG
- * logger.ERROR
- * logger.WARN
- * logger.INFO
- * logger.DEBUG
- *
- * The value used determines which messages get printed. The logging
- * values above are in order, and only messages logged at the logging
- * level or above will actually be displayed to the user. E.g., the
- * default level is WARN, so only messages logged with LOG, ERROR, or
- * WARN will be displayed; INFO and DEBUG messages will be ignored.
- */
-logger.level = function (value) {
- if (arguments.length) {
- if (LevelsMap[value] === null) {
- throw new Error("invalid logging level: " + value);
- }
- CurrentLevel = LevelsMap[value];
- }
-
- return Levels[CurrentLevel];
-};
-
-/**
- * Getter/Setter for the useConsole functionality
- *
- * When useConsole is true, the logger will log via the
- * browser 'console' object.
- */
-logger.useConsole = function (value) {
- if (arguments.length) UseConsole = !!value;
-
- if (UseConsole) {
- if (typeof console == "undefined") {
- throw new Error("global console object is not defined");
- }
-
- if (typeof console.log != "function") {
- throw new Error("global console object does not have a log function");
- }
-
- if (typeof console.useLogger == "function") {
- if (console.useLogger()) {
- throw new Error("console and logger are too intertwingly");
- }
- }
- }
-
- return UseConsole;
-};
-
-/**
- * Getter/Setter for the useLogger functionality
- *
- * When useLogger is true, the logger will log via the
- * native Logger plugin.
- */
-logger.useLogger = function (value) {
- // Enforce boolean
- if (arguments.length) UseLogger = !!value;
- return UseLogger;
-};
-
-/**
- * Logs a message at the LOG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.log = function(message) { logWithArgs("LOG", arguments); };
-
-/**
- * Logs a message at the ERROR level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.error = function(message) { logWithArgs("ERROR", arguments); };
-
-/**
- * Logs a message at the WARN level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.warn = function(message) { logWithArgs("WARN", arguments); };
-
-/**
- * Logs a message at the INFO level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.info = function(message) { logWithArgs("INFO", arguments); };
-
-/**
- * Logs a message at the DEBUG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.debug = function(message) { logWithArgs("DEBUG", arguments); };
-
-// log at the specified level with args
-function logWithArgs(level, args) {
- args = [level].concat([].slice.call(args));
- logger.logLevel.apply(logger, args);
-}
-
-// return the correct formatString for an object
-function formatStringForMessage(message) {
- return (typeof message === "string") ? "" : "%o";
-}
-
-/**
- * Logs a message at the specified level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.logLevel = function(level /* , ... */) {
- // format the message with the parameters
- var formatArgs = [].slice.call(arguments, 1);
- var fmtString = formatStringForMessage(formatArgs[0]);
- if (fmtString.length > 0){
- formatArgs.unshift(fmtString); // add formatString
- }
-
- var message = logger.format.apply(logger.format, formatArgs);
-
- if (LevelsMap[level] === null) {
- throw new Error("invalid logging level: " + level);
- }
-
- if (LevelsMap[level] > CurrentLevel) return;
-
- // queue the message if not yet at deviceready
- if (!DeviceReady && !UseConsole) {
- Queued.push([level, message]);
- return;
- }
-
- // Log using the native logger if that is enabled
- if (UseLogger) {
- exec(null, null, "Console", "logLevel", [level, message]);
- }
-
- // Log using the console if that is enabled
- if (UseConsole) {
- // make sure console is not using logger
- if (console.useLogger()) {
- throw new Error("console and logger are too intertwingly");
- }
-
- // log to the console
- switch (level) {
- case logger.LOG: originalConsole.log(message); break;
- case logger.ERROR: originalConsole.log("ERROR: " + message); break;
- case logger.WARN: originalConsole.log("WARN: " + message); break;
- case logger.INFO: originalConsole.log("INFO: " + message); break;
- case logger.DEBUG: originalConsole.log("DEBUG: " + message); break;
- }
- }
-};
-
-
-/**
- * Formats a string and arguments following it ala console.log()
- *
- * Any remaining arguments will be appended to the formatted string.
- *
- * for rationale, see FireBug's Console API:
- * http://getfirebug.com/wiki/index.php/Console_API
- */
-logger.format = function(formatString, args) {
- return __format(arguments[0], [].slice.call(arguments,1)).join(' ');
-};
-
-
-//------------------------------------------------------------------------------
-/**
- * Formats a string and arguments following it ala vsprintf()
- *
- * format chars:
- * %j - format arg as JSON
- * %o - format arg as JSON
- * %c - format arg as ''
- * %% - replace with '%'
- * any other char following % will format it's
- * arg via toString().
- *
- * Returns an array containing the formatted string and any remaining
- * arguments.
- */
-function __format(formatString, args) {
- if (formatString === null || formatString === undefined) return [""];
- if (arguments.length == 1) return [formatString.toString()];
-
- if (typeof formatString != "string")
- formatString = formatString.toString();
-
- var pattern = /(.*?)%(.)(.*)/;
- var rest = formatString;
- var result = [];
-
- while (args.length) {
- var match = pattern.exec(rest);
- if (!match) break;
-
- var arg = args.shift();
- rest = match[3];
- result.push(match[1]);
-
- if (match[2] == '%') {
- result.push('%');
- args.unshift(arg);
- continue;
- }
-
- result.push(__formatted(arg, match[2]));
- }
-
- result.push(rest);
-
- var remainingArgs = [].slice.call(args);
- remainingArgs.unshift(result.join(''));
- return remainingArgs;
-}
-
-function __formatted(object, formatChar) {
-
- try {
- switch(formatChar) {
- case 'j':
- case 'o': return JSON.stringify(object);
- case 'c': return '';
- }
- }
- catch (e) {
- return "error JSON.stringify()ing argument: " + e;
- }
-
- if ((object === null) || (object === undefined)) {
- return Object.prototype.toString.call(object);
- }
-
- return object.toString();
-}
-
-
-//------------------------------------------------------------------------------
-// when deviceready fires, log queued messages
-logger.__onDeviceReady = function() {
- if (DeviceReady) return;
-
- DeviceReady = true;
-
- for (var i=0; i<Queued.length; i++) {
- var messageArgs = Queued[i];
- logger.logLevel(messageArgs[0], messageArgs[1]);
- }
-
- Queued = null;
-};
-
-// add a deviceready event to log queued messages
-document.addEventListener("deviceready", logger.__onDeviceReady, false);
-
-});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
index 7402e4de..091a8297 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
@@ -4,10 +4,18 @@ cordova.define("cordova-plugin-customurlscheme.LaunchMyApp", function(require, e
var remainingAttempts = 10;
function waitForAndCallHandlerFunction(url) {
- if (typeof window.handleOpenURL == "function") {
+ if (typeof window.handleOpenURL === "function") {
+ // Clear the intent when we have a handler (note that this is only done when the preference 'CustomURLSchemePluginClearsAndroidIntent' is 'true' in config.xml
+ cordova.exec(
+ null,
+ null,
+ "LaunchMyApp",
+ "clearIntent",
+ []);
+
window.handleOpenURL(url);
} else if (remainingAttempts-- > 0) {
- setTimeout(function(){waitForAndCallHandlerFunction(url)}, 500);
+ setTimeout(function(){waitForAndCallHandlerFunction(url);}, 500);
}
}
@@ -21,6 +29,20 @@ cordova.define("cordova-plugin-customurlscheme.LaunchMyApp", function(require, e
}
document.addEventListener("deviceready", triggerOpenURL, false);
+
+ var launchmyapp = {
+ getLastIntent: function(success, failure) {
+ cordova.exec(
+ success,
+ failure,
+ "LaunchMyApp",
+ "getLastIntent",
+ []);
+ }
+ }
+
+ module.exports = launchmyapp;
+
}());
});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js
index 023bafd2..ff0c5b48 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js
@@ -42,6 +42,8 @@ function Device() {
this.cordova = null;
this.model = null;
this.manufacturer = null;
+ this.isVirtual = null;
+ this.serial = null;
var me = this;
@@ -56,7 +58,9 @@ function Device() {
me.uuid = info.uuid;
me.cordova = buildLabel;
me.model = info.model;
+ me.isVirtual = info.isVirtual;
me.manufacturer = info.manufacturer || 'unknown';
+ me.serial = info.serial || 'unknown';
channel.onCordovaInfoReady.fire();
},function(e) {
me.available = false;
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js
index 07b92378..07b92378 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js
index ea97eefb..d08d34a6 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-dialogs/www/notification.js
@@ -37,9 +37,10 @@ module.exports = {
* @param {String} buttonLabel Label of the close button (default: OK)
*/
alert: function(message, completeCallback, title, buttonLabel) {
- var _title = (title || "Alert");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Alert");
var _buttonLabel = (buttonLabel || "OK");
- exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
+ exec(completeCallback, null, "Notification", "alert", [_message, _title, _buttonLabel]);
},
/**
@@ -52,7 +53,8 @@ module.exports = {
* @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel'])
*/
confirm: function(message, resultCallback, title, buttonLabels) {
- var _title = (title || "Confirm");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Confirm");
var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
// Strings are deprecated!
@@ -60,23 +62,9 @@ module.exports = {
console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
}
- // Some platforms take an array of button label names.
- // Other platforms take a comma separated list.
- // For compatibility, we convert to the desired type based on the platform.
- if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
- platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
- platform.id == "windows8" || platform.id == "windows") {
+ _buttonLabels = convertButtonLabels(_buttonLabels);
- if (typeof _buttonLabels === 'string') {
- _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
- }
- } else {
- if (Array.isArray(_buttonLabels)) {
- var buttonLabelArray = _buttonLabels;
- _buttonLabels = buttonLabelArray.toString();
- }
- }
- exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
+ exec(resultCallback, null, "Notification", "confirm", [_message, _title, _buttonLabels]);
},
/**
@@ -92,9 +80,17 @@ module.exports = {
* @param {String} defaultText Textbox input value (default: empty string)
*/
prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
- var _message = (message || "Prompt message");
- var _title = (title || "Prompt");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Prompt");
var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
+
+ // Strings are deprecated!
+ if (typeof _buttonLabels === 'string') {
+ console.log("Notification.prompt(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
+ }
+
+ _buttonLabels = convertButtonLabels(_buttonLabels);
+
var _defaultText = (defaultText || "");
exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
},
@@ -111,4 +107,26 @@ module.exports = {
}
};
+function convertButtonLabels(buttonLabels) {
+
+ // Some platforms take an array of button label names.
+ // Other platforms take a comma separated list.
+ // For compatibility, we convert to the desired type based on the platform.
+ if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
+ platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
+ platform.id == "windows8" || platform.id == "windows") {
+
+ if (typeof buttonLabels === 'string') {
+ buttonLabels = buttonLabels.split(","); // not crazy about changing the var type here
+ }
+ } else {
+ if (Array.isArray(buttonLabels)) {
+ var buttonLabelArray = buttonLabels;
+ buttonLabels = buttonLabelArray.toString();
+ }
+ }
+
+ return buttonLabels;
+}
+
});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-geolocation/www/PositionError.js
index b83f5795..45439b70 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-whitelist/whitelist.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-geolocation/www/PositionError.js
@@ -1,4 +1,5 @@
-cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { /*
+cordova.define("cordova-plugin-geolocation.PositionError", function(require, exports, module) { /*
+ *
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -18,12 +19,22 @@ cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports,
*
*/
-if (!document.querySelector('meta[http-equiv=Content-Security-Policy]')) {
- var msg = 'No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.';
- console.error(msg);
- setInterval(function() {
- console.warn(msg);
- }, 10000);
-}
+/**
+ * Position error object
+ *
+ * @constructor
+ * @param code
+ * @param message
+ */
+var PositionError = function(code, message) {
+ this.code = code || null;
+ this.message = message || '';
+};
+
+PositionError.prototype.PERMISSION_DENIED = PositionError.PERMISSION_DENIED = 1;
+PositionError.prototype.POSITION_UNAVAILABLE = PositionError.POSITION_UNAVAILABLE = 2;
+PositionError.prototype.TIMEOUT = PositionError.TIMEOUT = 3;
+
+module.exports = PositionError;
});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-geolocation/www/android/geolocation.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-geolocation/www/android/geolocation.js
new file mode 100644
index 00000000..c90d3c2a
--- /dev/null
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-geolocation/www/android/geolocation.js
@@ -0,0 +1,73 @@
+cordova.define("cordova-plugin-geolocation.geolocation", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var exec = cordova.require('cordova/exec');
+var utils = require('cordova/utils');
+var PositionError = require('./PositionError');
+
+// Native watchPosition method is called async after permissions prompt.
+// So we use additional map and own ids to return watch id synchronously.
+var pluginToNativeWatchMap = {};
+
+module.exports = {
+ getCurrentPosition: function(success, error, args) {
+ var win = function() {
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ geo.getCurrentPosition(success, error, args);
+ };
+ var fail = function() {
+ if (error) {
+ error(new PositionError (PositionError.PERMISSION_DENIED, 'Illegal Access'));
+ }
+ };
+ exec(win, fail, "Geolocation", "getPermission", []);
+ },
+
+ watchPosition: function(success, error, args) {
+ var pluginWatchId = utils.createUUID();
+
+ var win = function() {
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ pluginToNativeWatchMap[pluginWatchId] = geo.watchPosition(success, error, args);
+ };
+
+ var fail = function() {
+ if (error) {
+ error(new PositionError(PositionError.PERMISSION_DENIED, 'Illegal Access'));
+ }
+ };
+ exec(win, fail, "Geolocation", "getPermission", []);
+
+ return pluginWatchId;
+ },
+
+ clearWatch: function(pluginWatchId) {
+ var win = function() {
+ var nativeWatchId = pluginToNativeWatchMap[pluginWatchId];
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ geo.clearWatch(nativeWatchId);
+ };
+
+ exec(win, null, "Geolocation", "getPermission", []);
+ }
+};
+
+});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
index 6c7a844a..20bcd65a 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
@@ -19,94 +19,95 @@ cordova.define("cordova-plugin-inappbrowser.inappbrowser", function(require, exp
*
*/
-// special patch to correctly work on Ripple emulator (CB-9760)
-if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
- module.exports = window.open.bind(window); // fallback to default window.open behaviour
- return;
-}
+(function() {
+ // special patch to correctly work on Ripple emulator (CB-9760)
+ if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
+ module.exports = window.open.bind(window); // fallback to default window.open behaviour
+ return;
+ }
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-var urlutil = require('cordova/urlutil');
+ var exec = require('cordova/exec');
+ var channel = require('cordova/channel');
+ var modulemapper = require('cordova/modulemapper');
+ var urlutil = require('cordova/urlutil');
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
+ function InAppBrowser() {
+ this.channels = {
+ 'loadstart': channel.create('loadstart'),
+ 'loadstop' : channel.create('loadstop'),
+ 'loaderror' : channel.create('loaderror'),
+ 'exit' : channel.create('exit')
+ };
+ }
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event && (event.type in this.channels)) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- show: function (eventname) {
- exec(null, null, "InAppBrowser", "show", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
+ InAppBrowser.prototype = {
+ _eventHandler: function (event) {
+ if (event && (event.type in this.channels)) {
+ this.channels[event.type].fire(event);
+ }
+ },
+ close: function (eventname) {
+ exec(null, null, "InAppBrowser", "close", []);
+ },
+ show: function (eventname) {
+ exec(null, null, "InAppBrowser", "show", []);
+ },
+ addEventListener: function (eventname,f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].subscribe(f);
+ }
+ },
+ removeEventListener: function(eventname, f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].unsubscribe(f);
+ }
+ },
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
+ executeScript: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('executeScript requires exactly one of code or file to be specified');
+ }
+ },
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
+ insertCSS: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('insertCSS requires exactly one of code or file to be specified');
+ }
}
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
+ };
- strUrl = urlutil.makeAbsolute(strUrl);
- var iab = new InAppBrowser();
+ module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
+ // Don't catch calls that write to existing frames (e.g. named iframes).
+ if (window.frames && window.frames[strWindowName]) {
+ var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
+ return origOpenFunc.apply(window, arguments);
+ }
- callbacks = callbacks || {};
- for (var callbackName in callbacks) {
- iab.addEventListener(callbackName, callbacks[callbackName]);
- }
+ strUrl = urlutil.makeAbsolute(strUrl);
+ var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
+ callbacks = callbacks || {};
+ for (var callbackName in callbacks) {
+ iab.addEventListener(callbackName, callbacks[callbackName]);
+ }
- strWindowFeatures = strWindowFeatures || "";
+ var cb = function(eventname) {
+ iab._eventHandler(eventname);
+ };
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
+ strWindowFeatures = strWindowFeatures || "";
+ exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
+ return iab;
+ };
+})();
});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/Connection.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/Connection.js
index 1450e953..1450e953 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/Connection.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/Connection.js
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/network.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/network.js
index bfac2e3f..bfac2e3f 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/network.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-network-information/www/network.js
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js
index 0e6a10af..0e6a10af 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
index aa82acf6..dbfd4d63 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
@@ -1,6 +1,4 @@
-cordova.define("cordova-plugin-x-socialsharing.SocialSharing", function(require, exports, module) { var cordova = require('cordova');
-
-function SocialSharing() {
+cordova.define("cordova-plugin-x-socialsharing.SocialSharing", function(require, exports, module) { function SocialSharing() {
}
// Override this method (after deviceready) to set the location where you want the iPad popup arrow to appear.
@@ -25,6 +23,11 @@ SocialSharing.prototype.available = function (callback) {
}, null, "SocialSharing", "available", []);
};
+// this is the recommended way to share as it is the most feature-rich with respect to what you pass in and get back
+SocialSharing.prototype.shareWithOptions = function (options, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareWithOptions"), "SocialSharing", "shareWithOptions", [options]);
+};
+
SocialSharing.prototype.share = function (message, subject, fileOrFileArray, url, successCallback, errorCallback) {
cordova.exec(successCallback, this._getErrorCallback(errorCallback, "share"), "SocialSharing", "share", [message, subject, this._asArray(fileOrFileArray), url]);
};
@@ -49,7 +52,11 @@ SocialSharing.prototype.shareViaFacebookWithPasteMessageHint = function (message
};
SocialSharing.prototype.shareViaWhatsApp = function (message, fileOrFileArray, url, successCallback, errorCallback) {
- cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url]);
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, null]);
+};
+
+SocialSharing.prototype.shareViaWhatsAppToReceiver = function (receiver, message, fileOrFileArray, url, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsAppToReceiver"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, receiver]);
};
SocialSharing.prototype.shareViaSMS = function (options, phonenumbers, successCallback, errorCallback) {
@@ -113,5 +120,4 @@ SocialSharing.install = function () {
};
cordova.addConstructor(SocialSharing.install);
-
});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/ionic-plugin-keyboard/www/android/keyboard.js b/StoneIsland/platforms/android/assets/www/plugins/ionic-plugin-keyboard/www/android/keyboard.js
new file mode 100644
index 00000000..cce2e5be
--- /dev/null
+++ b/StoneIsland/platforms/android/assets/www/plugins/ionic-plugin-keyboard/www/android/keyboard.js
@@ -0,0 +1,62 @@
+cordova.define("ionic-plugin-keyboard.keyboard", function(require, exports, module) {
+var argscheck = require('cordova/argscheck'),
+ utils = require('cordova/utils'),
+ exec = require('cordova/exec'),
+ channel = require('cordova/channel');
+
+
+var Keyboard = function() {
+};
+
+Keyboard.hideKeyboardAccessoryBar = function(hide) {
+ exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
+};
+
+Keyboard.close = function() {
+ exec(null, null, "Keyboard", "close", []);
+};
+
+Keyboard.show = function() {
+ exec(null, null, "Keyboard", "show", []);
+};
+
+Keyboard.disableScroll = function(disable) {
+ exec(null, null, "Keyboard", "disableScroll", [disable]);
+};
+
+/*
+Keyboard.styleDark = function(dark) {
+ exec(null, null, "Keyboard", "styleDark", [dark]);
+};
+*/
+
+Keyboard.isVisible = false;
+
+channel.onCordovaReady.subscribe(function() {
+ exec(success, null, 'Keyboard', 'init', []);
+
+ function success(msg) {
+ var action = msg.charAt(0);
+ if ( action === 'S' ) {
+ var keyboardHeight = msg.substr(1);
+ cordova.plugins.Keyboard.isVisible = true;
+ cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight': + keyboardHeight });
+
+ //deprecated
+ cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight': + keyboardHeight });
+ } else if ( action === 'H' ) {
+ cordova.plugins.Keyboard.isVisible = false;
+ cordova.fireWindowEvent('native.keyboardhide');
+
+ //deprecated
+ cordova.fireWindowEvent('native.hidekeyboard');
+ }
+ }
+});
+
+module.exports = Keyboard;
+
+
+
+
+});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js b/StoneIsland/platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js
deleted file mode 100755
index 7aa30fd7..00000000
--- a/StoneIsland/platforms/android/assets/www/plugins/phonegap-plugin-push/www/push.js
+++ /dev/null
@@ -1,231 +0,0 @@
-cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { /* global cordova:false */
-
-/*!
- * Module dependencies.
- */
-
-var exec = cordova.require('cordova/exec');
-
-/**
- * PushNotification constructor.
- *
- * @param {Object} options to initiate Push Notifications.
- * @return {PushNotification} instance that can be monitored and cancelled.
- */
-
-var PushNotification = function(options) {
- this._handlers = {
- 'registration': [],
- 'notification': [],
- 'error': []
- };
-
- // require options parameter
- if (typeof options === 'undefined') {
- throw new Error('The options argument is required.');
- }
-
- // store the options to this object instance
- this.options = options;
-
- // triggered on registration and notification
- var that = this;
- var success = function(result) {
- if (result && typeof result.registrationId !== 'undefined') {
- that.emit('registration', result);
- } else if (result && typeof result.callback !== 'undefined') {
- var executeFunctionByName = function(functionName, context /*, args */) {
- var args = Array.prototype.slice.call(arguments, 2);
- var namespaces = functionName.split(".");
- var func = namespaces.pop();
- for (var i = 0; i < namespaces.length; i++) {
- context = context[namespaces[i]];
- }
- return context[func].apply(context, args);
- }
-
- executeFunctionByName(result.callback, window, result);
- } else if (result) {
- that.emit('notification', result);
- }
- };
-
- // triggered on error
- var fail = function(msg) {
- var e = (typeof msg === 'string') ? new Error(msg) : msg;
- that.emit('error', e);
- };
-
- // wait at least one process tick to allow event subscriptions
- setTimeout(function() {
- exec(success, fail, 'PushNotification', 'init', [options]);
- }, 10);
-};
-
-/**
- * Unregister from push notifications
- */
-
-PushNotification.prototype.unregister = function(successCallback, errorCallback, options) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.unregister failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.unregister failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "unregister", [options]);
-};
-
-/**
- * Call this to set the application icon badge
- */
-
-PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "setApplicationIconBadgeNumber", [{badge: badge}]);
-};
-
-/**
- * Get the application icon badge
- */
-
-PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "getApplicationIconBadgeNumber", []);
-};
-
-/**
- * Listen for an event.
- *
- * The following events are supported:
- *
- * - registration
- * - notification
- * - error
- *
- * @param {String} eventName to subscribe to.
- * @param {Function} callback triggered on the event.
- */
-
-PushNotification.prototype.on = function(eventName, callback) {
- if (this._handlers.hasOwnProperty(eventName)) {
- this._handlers[eventName].push(callback);
- }
-};
-
-/**
- * Remove event listener.
- *
- * @param {String} eventName to match subscription.
- * @param {Function} handle function associated with event.
- */
-
-PushNotification.prototype.off = function (eventName, handle) {
- if (this._handlers.hasOwnProperty(eventName)) {
- var handleIndex = this._handlers[eventName].indexOf(handle);
- if (handleIndex >= 0)
- this._handlers[eventName].splice(handleIndex, 1);
- }
-};
-
-/**
- * Emit an event.
- *
- * This is intended for internal use only.
- *
- * @param {String} eventName is the event to trigger.
- * @param {*} all arguments are passed to the event listeners.
- *
- * @return {Boolean} is true when the event is triggered otherwise false.
- */
-
-PushNotification.prototype.emit = function() {
- var args = Array.prototype.slice.call(arguments);
- var eventName = args.shift();
-
- if (!this._handlers.hasOwnProperty(eventName)) {
- return false;
- }
-
- for (var i = 0, length = this._handlers[eventName].length; i < length; i++) {
- this._handlers[eventName][i].apply(undefined,args);
- }
-
- return true;
-};
-
-PushNotification.prototype.finish = function(successCallback, errorCallback) {
- if (successCallback == null) { successCallback = function() {}}
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof successCallback != "function") {
- console.log("finish failure: success callback parameter must be a function");
- return
- }
-
- if (typeof errorCallback != "function") {
- console.log("finish failure: failure parameter not a function");
- return
- }
-
- exec(successCallback, errorCallback, 'PushNotification', 'finish', []);
-}
-
-/*!
- * Push Notification Plugin.
- */
-
-module.exports = {
- /**
- * Register for Push Notifications.
- *
- * This method will instantiate a new copy of the PushNotification object
- * and start the registration process.
- *
- * @param {Object} options
- * @return {PushNotification} instance
- */
-
- init: function(options) {
- return new PushNotification(options);
- },
-
- /**
- * PushNotification Object.
- *
- * Expose the PushNotification object for direct use
- * and testing. Typically, you should use the
- * .init helper method.
- */
-
- PushNotification: PushNotification
-};
-});
diff --git a/StoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle b/StoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle
deleted file mode 100755
index d61b60f5..00000000
--- a/StoneIsland/platforms/android/phonegap-plugin-push/stoneisland-push.gradle
+++ /dev/null
@@ -1,21 +0,0 @@
-import java.util.regex.Pattern
-
-def doExtractStringFromManifest(name) {
- def manifestFile = file(android.sourceSets.main.manifest.srcFile)
- def pattern = Pattern.compile(name + "=\"(.*?)\"")
- def matcher = pattern.matcher(manifestFile.getText())
- matcher.find()
- return matcher.group(1)
-}
-
-android {
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- }
- }
-
- defaultConfig {
- applicationId = doExtractStringFromManifest("package")
- }
-} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/platform_www/cordova_plugins.js b/StoneIsland/platforms/android/platform_www/cordova_plugins.js
index 90fa7c51..a2734881 100755
--- a/StoneIsland/platforms/android/platform_www/cordova_plugins.js
+++ b/StoneIsland/platforms/android/platform_www/cordova_plugins.js
@@ -1,14 +1,6 @@
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
- "file": "plugins/com.ionic.keyboard/www/keyboard.js",
- "id": "com.ionic.keyboard.keyboard",
- "pluginId": "com.ionic.keyboard",
- "clobbers": [
- "cordova.plugins.Keyboard"
- ]
- },
- {
"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",
@@ -17,19 +9,20 @@ module.exports = [
]
},
{
- "file": "plugins/cordova-plugin-console/www/logger.js",
- "id": "cordova-plugin-console.logger",
- "pluginId": "cordova-plugin-console",
+ "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
+ "id": "cordova-plugin-inappbrowser.inappbrowser",
+ "pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
- "cordova.logger"
+ "cordova.InAppBrowser.open",
+ "window.open"
]
},
{
- "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
- "id": "cordova-plugin-console.console",
- "pluginId": "cordova-plugin-console",
+ "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
+ "id": "cordova-plugin-x-socialsharing.SocialSharing",
+ "pluginId": "cordova-plugin-x-socialsharing",
"clobbers": [
- "console"
+ "window.plugins.socialsharing"
]
},
{
@@ -49,31 +42,6 @@ module.exports = [
]
},
{
- "file": "plugins/cordova-plugin-dialogs/www/notification.js",
- "id": "cordova-plugin-dialogs.notification",
- "pluginId": "cordova-plugin-dialogs",
- "merges": [
- "navigator.notification"
- ]
- },
- {
- "file": "plugins/cordova-plugin-dialogs/www/android/notification.js",
- "id": "cordova-plugin-dialogs.notification_android",
- "pluginId": "cordova-plugin-dialogs",
- "merges": [
- "navigator.notification"
- ]
- },
- {
- "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
- "id": "cordova-plugin-inappbrowser.inappbrowser",
- "pluginId": "cordova-plugin-inappbrowser",
- "clobbers": [
- "cordova.InAppBrowser.open",
- "window.open"
- ]
- },
- {
"file": "plugins/cordova-plugin-network-information/www/network.js",
"id": "cordova-plugin-network-information.network",
"pluginId": "cordova-plugin-network-information",
@@ -91,6 +59,22 @@ module.exports = [
]
},
{
+ "file": "plugins/cordova-plugin-dialogs/www/notification.js",
+ "id": "cordova-plugin-dialogs.notification",
+ "pluginId": "cordova-plugin-dialogs",
+ "merges": [
+ "navigator.notification"
+ ]
+ },
+ {
+ "file": "plugins/cordova-plugin-dialogs/www/android/notification.js",
+ "id": "cordova-plugin-dialogs.notification_android",
+ "pluginId": "cordova-plugin-dialogs",
+ "merges": [
+ "navigator.notification"
+ ]
+ },
+ {
"file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
"id": "cordova-plugin-splashscreen.SplashScreen",
"pluginId": "cordova-plugin-splashscreen",
@@ -99,44 +83,45 @@ module.exports = [
]
},
{
- "file": "plugins/cordova-plugin-whitelist/whitelist.js",
- "id": "cordova-plugin-whitelist.whitelist",
- "pluginId": "cordova-plugin-whitelist",
- "runs": true
- },
- {
- "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
- "id": "cordova-plugin-x-socialsharing.SocialSharing",
- "pluginId": "cordova-plugin-x-socialsharing",
+ "file": "plugins/cordova-plugin-geolocation/www/android/geolocation.js",
+ "id": "cordova-plugin-geolocation.geolocation",
+ "pluginId": "cordova-plugin-geolocation",
"clobbers": [
- "window.plugins.socialsharing"
+ "navigator.geolocation"
]
},
{
- "file": "plugins/phonegap-plugin-push/www/push.js",
- "id": "phonegap-plugin-push.PushNotification",
- "pluginId": "phonegap-plugin-push",
+ "file": "plugins/cordova-plugin-geolocation/www/PositionError.js",
+ "id": "cordova-plugin-geolocation.PositionError",
+ "pluginId": "cordova-plugin-geolocation",
+ "runs": true
+ },
+ {
+ "file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
+ "id": "ionic-plugin-keyboard.keyboard",
+ "pluginId": "ionic-plugin-keyboard",
"clobbers": [
- "PushNotification"
- ]
+ "cordova.plugins.Keyboard"
+ ],
+ "runs": true
}
];
module.exports.metadata =
// TOP OF METADATA
{
- "com.ionic.keyboard": "1.0.4",
"com.parse.cordova.core.pushplugin": "0.1.0",
- "cordova-plugin-console": "1.0.1",
- "cordova-plugin-customurlscheme": "4.0.0",
- "cordova-plugin-device": "1.0.1",
- "cordova-plugin-dialogs": "1.1.1",
- "cordova-plugin-geolocation": "1.0.1",
- "cordova-plugin-inappbrowser": "1.1.0",
- "cordova-plugin-network-information": "1.0.1",
- "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"
+ "cordova-plugin-inappbrowser": "1.5.0",
+ "cordova-plugin-x-socialsharing": "5.1.3",
+ "cordova-plugin-customurlscheme": "4.2.0",
+ "cordova-plugin-whitelist": "1.3.0",
+ "cordova-plugin-console": "1.0.4",
+ "cordova-plugin-device": "1.1.3",
+ "cordova-plugin-network-information": "1.3.0",
+ "cordova-plugin-dialogs": "1.3.0",
+ "cordova-plugin-splashscreen": "4.0.0",
+ "cordova-plugin-compat": "1.1.0",
+ "cordova-plugin-geolocation": "2.4.0",
+ "ionic-plugin-keyboard": "2.2.1"
}
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/android/platform_www/plugins/com.ionic.keyboard/www/keyboard.js b/StoneIsland/platforms/android/platform_www/plugins/com.ionic.keyboard/www/keyboard.js
deleted file mode 100755
index 7d30ba59..00000000
--- a/StoneIsland/platforms/android/platform_www/plugins/com.ionic.keyboard/www/keyboard.js
+++ /dev/null
@@ -1,39 +0,0 @@
-cordova.define("com.ionic.keyboard.keyboard", function(require, exports, module) {
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec');
-
-
-var Keyboard = function() {
-};
-
-Keyboard.hideKeyboardAccessoryBar = function(hide) {
- exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
-};
-
-Keyboard.close = function() {
- exec(null, null, "Keyboard", "close", []);
-};
-
-Keyboard.show = function() {
- exec(null, null, "Keyboard", "show", []);
-};
-
-Keyboard.disableScroll = function(disable) {
- exec(null, null, "Keyboard", "disableScroll", [disable]);
-};
-
-/*
-Keyboard.styleDark = function(dark) {
- exec(null, null, "Keyboard", "styleDark", [dark]);
-};
-*/
-
-Keyboard.isVisible = false;
-
-module.exports = Keyboard;
-
-
-
-
-});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js
deleted file mode 100755
index 0ce8cea8..00000000
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js
+++ /dev/null
@@ -1,189 +0,0 @@
-cordova.define("cordova-plugin-console.console", function(require, exports, module) { /*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-//------------------------------------------------------------------------------
-
-var logger = require("./logger");
-var utils = require("cordova/utils");
-
-//------------------------------------------------------------------------------
-// object that we're exporting
-//------------------------------------------------------------------------------
-var console = module.exports;
-
-//------------------------------------------------------------------------------
-// copy of the original console object
-//------------------------------------------------------------------------------
-var WinConsole = window.console;
-
-//------------------------------------------------------------------------------
-// whether to use the logger
-//------------------------------------------------------------------------------
-var UseLogger = false;
-
-//------------------------------------------------------------------------------
-// Timers
-//------------------------------------------------------------------------------
-var Timers = {};
-
-//------------------------------------------------------------------------------
-// used for unimplemented methods
-//------------------------------------------------------------------------------
-function noop() {}
-
-//------------------------------------------------------------------------------
-// used for unimplemented methods
-//------------------------------------------------------------------------------
-console.useLogger = function (value) {
- if (arguments.length) UseLogger = !!value;
-
- if (UseLogger) {
- if (logger.useConsole()) {
- throw new Error("console and logger are too intertwingly");
- }
- }
-
- return UseLogger;
-};
-
-//------------------------------------------------------------------------------
-console.log = function() {
- if (logger.useConsole()) return;
- logger.log.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.error = function() {
- if (logger.useConsole()) return;
- logger.error.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.warn = function() {
- if (logger.useConsole()) return;
- logger.warn.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.info = function() {
- if (logger.useConsole()) return;
- logger.info.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.debug = function() {
- if (logger.useConsole()) return;
- logger.debug.apply(logger, [].slice.call(arguments));
-};
-
-//------------------------------------------------------------------------------
-console.assert = function(expression) {
- if (expression) return;
-
- var message = logger.format.apply(logger.format, [].slice.call(arguments, 1));
- console.log("ASSERT: " + message);
-};
-
-//------------------------------------------------------------------------------
-console.clear = function() {};
-
-//------------------------------------------------------------------------------
-console.dir = function(object) {
- console.log("%o", object);
-};
-
-//------------------------------------------------------------------------------
-console.dirxml = function(node) {
- console.log(node.innerHTML);
-};
-
-//------------------------------------------------------------------------------
-console.trace = noop;
-
-//------------------------------------------------------------------------------
-console.group = console.log;
-
-//------------------------------------------------------------------------------
-console.groupCollapsed = console.log;
-
-//------------------------------------------------------------------------------
-console.groupEnd = noop;
-
-//------------------------------------------------------------------------------
-console.time = function(name) {
- Timers[name] = new Date().valueOf();
-};
-
-//------------------------------------------------------------------------------
-console.timeEnd = function(name) {
- var timeStart = Timers[name];
- if (!timeStart) {
- console.warn("unknown timer: " + name);
- return;
- }
-
- var timeElapsed = new Date().valueOf() - timeStart;
- console.log(name + ": " + timeElapsed + "ms");
-};
-
-//------------------------------------------------------------------------------
-console.timeStamp = noop;
-
-//------------------------------------------------------------------------------
-console.profile = noop;
-
-//------------------------------------------------------------------------------
-console.profileEnd = noop;
-
-//------------------------------------------------------------------------------
-console.count = noop;
-
-//------------------------------------------------------------------------------
-console.exception = console.log;
-
-//------------------------------------------------------------------------------
-console.table = function(data, columns) {
- console.log("%o", data);
-};
-
-//------------------------------------------------------------------------------
-// return a new function that calls both functions passed as args
-//------------------------------------------------------------------------------
-function wrappedOrigCall(orgFunc, newFunc) {
- return function() {
- var args = [].slice.call(arguments);
- try { orgFunc.apply(WinConsole, args); } catch (e) {}
- try { newFunc.apply(console, args); } catch (e) {}
- };
-}
-
-//------------------------------------------------------------------------------
-// For every function that exists in the original console object, that
-// also exists in the new console object, wrap the new console method
-// with one that calls both
-//------------------------------------------------------------------------------
-for (var key in console) {
- if (typeof WinConsole[key] == "function") {
- console[key] = wrappedOrigCall(WinConsole[key], console[key]);
- }
-}
-
-});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/logger.js
deleted file mode 100755
index 7a9a75d3..00000000
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-console/www/logger.js
+++ /dev/null
@@ -1,357 +0,0 @@
-cordova.define("cordova-plugin-console.logger", function(require, exports, module) { /*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-//------------------------------------------------------------------------------
-// The logger module exports the following properties/functions:
-//
-// LOG - constant for the level LOG
-// ERROR - constant for the level ERROR
-// WARN - constant for the level WARN
-// INFO - constant for the level INFO
-// DEBUG - constant for the level DEBUG
-// logLevel() - returns current log level
-// logLevel(value) - sets and returns a new log level
-// useConsole() - returns whether logger is using console
-// useConsole(value) - sets and returns whether logger is using console
-// log(message,...) - logs a message at level LOG
-// error(message,...) - logs a message at level ERROR
-// warn(message,...) - logs a message at level WARN
-// info(message,...) - logs a message at level INFO
-// debug(message,...) - logs a message at level DEBUG
-// logLevel(level,message,...) - logs a message specified level
-//
-//------------------------------------------------------------------------------
-
-var logger = exports;
-
-var exec = require('cordova/exec');
-var utils = require('cordova/utils');
-
-var UseConsole = false;
-var UseLogger = true;
-var Queued = [];
-var DeviceReady = false;
-var CurrentLevel;
-
-var originalConsole = console;
-
-/**
- * Logging levels
- */
-
-var Levels = [
- "LOG",
- "ERROR",
- "WARN",
- "INFO",
- "DEBUG"
-];
-
-/*
- * add the logging levels to the logger object and
- * to a separate levelsMap object for testing
- */
-
-var LevelsMap = {};
-for (var i=0; i<Levels.length; i++) {
- var level = Levels[i];
- LevelsMap[level] = i;
- logger[level] = level;
-}
-
-CurrentLevel = LevelsMap.WARN;
-
-/**
- * Getter/Setter for the logging level
- *
- * Returns the current logging level.
- *
- * When a value is passed, sets the logging level to that value.
- * The values should be one of the following constants:
- * logger.LOG
- * logger.ERROR
- * logger.WARN
- * logger.INFO
- * logger.DEBUG
- *
- * The value used determines which messages get printed. The logging
- * values above are in order, and only messages logged at the logging
- * level or above will actually be displayed to the user. E.g., the
- * default level is WARN, so only messages logged with LOG, ERROR, or
- * WARN will be displayed; INFO and DEBUG messages will be ignored.
- */
-logger.level = function (value) {
- if (arguments.length) {
- if (LevelsMap[value] === null) {
- throw new Error("invalid logging level: " + value);
- }
- CurrentLevel = LevelsMap[value];
- }
-
- return Levels[CurrentLevel];
-};
-
-/**
- * Getter/Setter for the useConsole functionality
- *
- * When useConsole is true, the logger will log via the
- * browser 'console' object.
- */
-logger.useConsole = function (value) {
- if (arguments.length) UseConsole = !!value;
-
- if (UseConsole) {
- if (typeof console == "undefined") {
- throw new Error("global console object is not defined");
- }
-
- if (typeof console.log != "function") {
- throw new Error("global console object does not have a log function");
- }
-
- if (typeof console.useLogger == "function") {
- if (console.useLogger()) {
- throw new Error("console and logger are too intertwingly");
- }
- }
- }
-
- return UseConsole;
-};
-
-/**
- * Getter/Setter for the useLogger functionality
- *
- * When useLogger is true, the logger will log via the
- * native Logger plugin.
- */
-logger.useLogger = function (value) {
- // Enforce boolean
- if (arguments.length) UseLogger = !!value;
- return UseLogger;
-};
-
-/**
- * Logs a message at the LOG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.log = function(message) { logWithArgs("LOG", arguments); };
-
-/**
- * Logs a message at the ERROR level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.error = function(message) { logWithArgs("ERROR", arguments); };
-
-/**
- * Logs a message at the WARN level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.warn = function(message) { logWithArgs("WARN", arguments); };
-
-/**
- * Logs a message at the INFO level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.info = function(message) { logWithArgs("INFO", arguments); };
-
-/**
- * Logs a message at the DEBUG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.debug = function(message) { logWithArgs("DEBUG", arguments); };
-
-// log at the specified level with args
-function logWithArgs(level, args) {
- args = [level].concat([].slice.call(args));
- logger.logLevel.apply(logger, args);
-}
-
-// return the correct formatString for an object
-function formatStringForMessage(message) {
- return (typeof message === "string") ? "" : "%o";
-}
-
-/**
- * Logs a message at the specified level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.logLevel = function(level /* , ... */) {
- // format the message with the parameters
- var formatArgs = [].slice.call(arguments, 1);
- var fmtString = formatStringForMessage(formatArgs[0]);
- if (fmtString.length > 0){
- formatArgs.unshift(fmtString); // add formatString
- }
-
- var message = logger.format.apply(logger.format, formatArgs);
-
- if (LevelsMap[level] === null) {
- throw new Error("invalid logging level: " + level);
- }
-
- if (LevelsMap[level] > CurrentLevel) return;
-
- // queue the message if not yet at deviceready
- if (!DeviceReady && !UseConsole) {
- Queued.push([level, message]);
- return;
- }
-
- // Log using the native logger if that is enabled
- if (UseLogger) {
- exec(null, null, "Console", "logLevel", [level, message]);
- }
-
- // Log using the console if that is enabled
- if (UseConsole) {
- // make sure console is not using logger
- if (console.useLogger()) {
- throw new Error("console and logger are too intertwingly");
- }
-
- // log to the console
- switch (level) {
- case logger.LOG: originalConsole.log(message); break;
- case logger.ERROR: originalConsole.log("ERROR: " + message); break;
- case logger.WARN: originalConsole.log("WARN: " + message); break;
- case logger.INFO: originalConsole.log("INFO: " + message); break;
- case logger.DEBUG: originalConsole.log("DEBUG: " + message); break;
- }
- }
-};
-
-
-/**
- * Formats a string and arguments following it ala console.log()
- *
- * Any remaining arguments will be appended to the formatted string.
- *
- * for rationale, see FireBug's Console API:
- * http://getfirebug.com/wiki/index.php/Console_API
- */
-logger.format = function(formatString, args) {
- return __format(arguments[0], [].slice.call(arguments,1)).join(' ');
-};
-
-
-//------------------------------------------------------------------------------
-/**
- * Formats a string and arguments following it ala vsprintf()
- *
- * format chars:
- * %j - format arg as JSON
- * %o - format arg as JSON
- * %c - format arg as ''
- * %% - replace with '%'
- * any other char following % will format it's
- * arg via toString().
- *
- * Returns an array containing the formatted string and any remaining
- * arguments.
- */
-function __format(formatString, args) {
- if (formatString === null || formatString === undefined) return [""];
- if (arguments.length == 1) return [formatString.toString()];
-
- if (typeof formatString != "string")
- formatString = formatString.toString();
-
- var pattern = /(.*?)%(.)(.*)/;
- var rest = formatString;
- var result = [];
-
- while (args.length) {
- var match = pattern.exec(rest);
- if (!match) break;
-
- var arg = args.shift();
- rest = match[3];
- result.push(match[1]);
-
- if (match[2] == '%') {
- result.push('%');
- args.unshift(arg);
- continue;
- }
-
- result.push(__formatted(arg, match[2]));
- }
-
- result.push(rest);
-
- var remainingArgs = [].slice.call(args);
- remainingArgs.unshift(result.join(''));
- return remainingArgs;
-}
-
-function __formatted(object, formatChar) {
-
- try {
- switch(formatChar) {
- case 'j':
- case 'o': return JSON.stringify(object);
- case 'c': return '';
- }
- }
- catch (e) {
- return "error JSON.stringify()ing argument: " + e;
- }
-
- if ((object === null) || (object === undefined)) {
- return Object.prototype.toString.call(object);
- }
-
- return object.toString();
-}
-
-
-//------------------------------------------------------------------------------
-// when deviceready fires, log queued messages
-logger.__onDeviceReady = function() {
- if (DeviceReady) return;
-
- DeviceReady = true;
-
- for (var i=0; i<Queued.length; i++) {
- var messageArgs = Queued[i];
- logger.logLevel(messageArgs[0], messageArgs[1]);
- }
-
- Queued = null;
-};
-
-// add a deviceready event to log queued messages
-document.addEventListener("deviceready", logger.__onDeviceReady, false);
-
-});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
index 7402e4de..091a8297 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
@@ -4,10 +4,18 @@ cordova.define("cordova-plugin-customurlscheme.LaunchMyApp", function(require, e
var remainingAttempts = 10;
function waitForAndCallHandlerFunction(url) {
- if (typeof window.handleOpenURL == "function") {
+ if (typeof window.handleOpenURL === "function") {
+ // Clear the intent when we have a handler (note that this is only done when the preference 'CustomURLSchemePluginClearsAndroidIntent' is 'true' in config.xml
+ cordova.exec(
+ null,
+ null,
+ "LaunchMyApp",
+ "clearIntent",
+ []);
+
window.handleOpenURL(url);
} else if (remainingAttempts-- > 0) {
- setTimeout(function(){waitForAndCallHandlerFunction(url)}, 500);
+ setTimeout(function(){waitForAndCallHandlerFunction(url);}, 500);
}
}
@@ -21,6 +29,20 @@ cordova.define("cordova-plugin-customurlscheme.LaunchMyApp", function(require, e
}
document.addEventListener("deviceready", triggerOpenURL, false);
+
+ var launchmyapp = {
+ getLastIntent: function(success, failure) {
+ cordova.exec(
+ success,
+ failure,
+ "LaunchMyApp",
+ "getLastIntent",
+ []);
+ }
+ }
+
+ module.exports = launchmyapp;
+
}());
});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js
index 023bafd2..ff0c5b48 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js
@@ -42,6 +42,8 @@ function Device() {
this.cordova = null;
this.model = null;
this.manufacturer = null;
+ this.isVirtual = null;
+ this.serial = null;
var me = this;
@@ -56,7 +58,9 @@ function Device() {
me.uuid = info.uuid;
me.cordova = buildLabel;
me.model = info.model;
+ me.isVirtual = info.isVirtual;
me.manufacturer = info.manufacturer || 'unknown';
+ me.serial = info.serial || 'unknown';
channel.onCordovaInfoReady.fire();
},function(e) {
me.available = false;
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/android/notification.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/android/notification.js
index 07b92378..07b92378 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/android/notification.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/android/notification.js
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/notification.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/notification.js
index ea97eefb..d08d34a6 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/notification.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-dialogs/www/notification.js
@@ -37,9 +37,10 @@ module.exports = {
* @param {String} buttonLabel Label of the close button (default: OK)
*/
alert: function(message, completeCallback, title, buttonLabel) {
- var _title = (title || "Alert");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Alert");
var _buttonLabel = (buttonLabel || "OK");
- exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
+ exec(completeCallback, null, "Notification", "alert", [_message, _title, _buttonLabel]);
},
/**
@@ -52,7 +53,8 @@ module.exports = {
* @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel'])
*/
confirm: function(message, resultCallback, title, buttonLabels) {
- var _title = (title || "Confirm");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Confirm");
var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
// Strings are deprecated!
@@ -60,23 +62,9 @@ module.exports = {
console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
}
- // Some platforms take an array of button label names.
- // Other platforms take a comma separated list.
- // For compatibility, we convert to the desired type based on the platform.
- if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
- platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
- platform.id == "windows8" || platform.id == "windows") {
+ _buttonLabels = convertButtonLabels(_buttonLabels);
- if (typeof _buttonLabels === 'string') {
- _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
- }
- } else {
- if (Array.isArray(_buttonLabels)) {
- var buttonLabelArray = _buttonLabels;
- _buttonLabels = buttonLabelArray.toString();
- }
- }
- exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
+ exec(resultCallback, null, "Notification", "confirm", [_message, _title, _buttonLabels]);
},
/**
@@ -92,9 +80,17 @@ module.exports = {
* @param {String} defaultText Textbox input value (default: empty string)
*/
prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
- var _message = (message || "Prompt message");
- var _title = (title || "Prompt");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Prompt");
var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
+
+ // Strings are deprecated!
+ if (typeof _buttonLabels === 'string') {
+ console.log("Notification.prompt(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
+ }
+
+ _buttonLabels = convertButtonLabels(_buttonLabels);
+
var _defaultText = (defaultText || "");
exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
},
@@ -111,4 +107,26 @@ module.exports = {
}
};
+function convertButtonLabels(buttonLabels) {
+
+ // Some platforms take an array of button label names.
+ // Other platforms take a comma separated list.
+ // For compatibility, we convert to the desired type based on the platform.
+ if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
+ platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
+ platform.id == "windows8" || platform.id == "windows") {
+
+ if (typeof buttonLabels === 'string') {
+ buttonLabels = buttonLabels.split(","); // not crazy about changing the var type here
+ }
+ } else {
+ if (Array.isArray(buttonLabels)) {
+ var buttonLabelArray = buttonLabels;
+ buttonLabels = buttonLabelArray.toString();
+ }
+ }
+
+ return buttonLabels;
+}
+
});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js
index b83f5795..45439b70 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js
@@ -1,4 +1,5 @@
-cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { /*
+cordova.define("cordova-plugin-geolocation.PositionError", function(require, exports, module) { /*
+ *
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -18,12 +19,22 @@ cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports,
*
*/
-if (!document.querySelector('meta[http-equiv=Content-Security-Policy]')) {
- var msg = 'No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.';
- console.error(msg);
- setInterval(function() {
- console.warn(msg);
- }, 10000);
-}
+/**
+ * Position error object
+ *
+ * @constructor
+ * @param code
+ * @param message
+ */
+var PositionError = function(code, message) {
+ this.code = code || null;
+ this.message = message || '';
+};
+
+PositionError.prototype.PERMISSION_DENIED = PositionError.PERMISSION_DENIED = 1;
+PositionError.prototype.POSITION_UNAVAILABLE = PositionError.POSITION_UNAVAILABLE = 2;
+PositionError.prototype.TIMEOUT = PositionError.TIMEOUT = 3;
+
+module.exports = PositionError;
});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-geolocation/www/android/geolocation.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-geolocation/www/android/geolocation.js
new file mode 100644
index 00000000..c90d3c2a
--- /dev/null
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-geolocation/www/android/geolocation.js
@@ -0,0 +1,73 @@
+cordova.define("cordova-plugin-geolocation.geolocation", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var exec = cordova.require('cordova/exec');
+var utils = require('cordova/utils');
+var PositionError = require('./PositionError');
+
+// Native watchPosition method is called async after permissions prompt.
+// So we use additional map and own ids to return watch id synchronously.
+var pluginToNativeWatchMap = {};
+
+module.exports = {
+ getCurrentPosition: function(success, error, args) {
+ var win = function() {
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ geo.getCurrentPosition(success, error, args);
+ };
+ var fail = function() {
+ if (error) {
+ error(new PositionError (PositionError.PERMISSION_DENIED, 'Illegal Access'));
+ }
+ };
+ exec(win, fail, "Geolocation", "getPermission", []);
+ },
+
+ watchPosition: function(success, error, args) {
+ var pluginWatchId = utils.createUUID();
+
+ var win = function() {
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ pluginToNativeWatchMap[pluginWatchId] = geo.watchPosition(success, error, args);
+ };
+
+ var fail = function() {
+ if (error) {
+ error(new PositionError(PositionError.PERMISSION_DENIED, 'Illegal Access'));
+ }
+ };
+ exec(win, fail, "Geolocation", "getPermission", []);
+
+ return pluginWatchId;
+ },
+
+ clearWatch: function(pluginWatchId) {
+ var win = function() {
+ var nativeWatchId = pluginToNativeWatchMap[pluginWatchId];
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ geo.clearWatch(nativeWatchId);
+ };
+
+ exec(win, null, "Geolocation", "getPermission", []);
+ }
+};
+
+});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
index 6c7a844a..20bcd65a 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
@@ -19,94 +19,95 @@ cordova.define("cordova-plugin-inappbrowser.inappbrowser", function(require, exp
*
*/
-// special patch to correctly work on Ripple emulator (CB-9760)
-if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
- module.exports = window.open.bind(window); // fallback to default window.open behaviour
- return;
-}
+(function() {
+ // special patch to correctly work on Ripple emulator (CB-9760)
+ if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
+ module.exports = window.open.bind(window); // fallback to default window.open behaviour
+ return;
+ }
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-var urlutil = require('cordova/urlutil');
+ var exec = require('cordova/exec');
+ var channel = require('cordova/channel');
+ var modulemapper = require('cordova/modulemapper');
+ var urlutil = require('cordova/urlutil');
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
+ function InAppBrowser() {
+ this.channels = {
+ 'loadstart': channel.create('loadstart'),
+ 'loadstop' : channel.create('loadstop'),
+ 'loaderror' : channel.create('loaderror'),
+ 'exit' : channel.create('exit')
+ };
+ }
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event && (event.type in this.channels)) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- show: function (eventname) {
- exec(null, null, "InAppBrowser", "show", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
+ InAppBrowser.prototype = {
+ _eventHandler: function (event) {
+ if (event && (event.type in this.channels)) {
+ this.channels[event.type].fire(event);
+ }
+ },
+ close: function (eventname) {
+ exec(null, null, "InAppBrowser", "close", []);
+ },
+ show: function (eventname) {
+ exec(null, null, "InAppBrowser", "show", []);
+ },
+ addEventListener: function (eventname,f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].subscribe(f);
+ }
+ },
+ removeEventListener: function(eventname, f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].unsubscribe(f);
+ }
+ },
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
+ executeScript: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('executeScript requires exactly one of code or file to be specified');
+ }
+ },
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
+ insertCSS: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('insertCSS requires exactly one of code or file to be specified');
+ }
}
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
+ };
- strUrl = urlutil.makeAbsolute(strUrl);
- var iab = new InAppBrowser();
+ module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
+ // Don't catch calls that write to existing frames (e.g. named iframes).
+ if (window.frames && window.frames[strWindowName]) {
+ var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
+ return origOpenFunc.apply(window, arguments);
+ }
- callbacks = callbacks || {};
- for (var callbackName in callbacks) {
- iab.addEventListener(callbackName, callbacks[callbackName]);
- }
+ strUrl = urlutil.makeAbsolute(strUrl);
+ var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
+ callbacks = callbacks || {};
+ for (var callbackName in callbacks) {
+ iab.addEventListener(callbackName, callbacks[callbackName]);
+ }
- strWindowFeatures = strWindowFeatures || "";
+ var cb = function(eventname) {
+ iab._eventHandler(eventname);
+ };
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
+ strWindowFeatures = strWindowFeatures || "";
+ exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
+ return iab;
+ };
+})();
});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/Connection.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/Connection.js
index 1450e953..1450e953 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/Connection.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/Connection.js
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/network.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/network.js
index bfac2e3f..bfac2e3f 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/network.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-network-information/www/network.js
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-splashscreen/www/splashscreen.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-splashscreen/www/splashscreen.js
index 0e6a10af..0e6a10af 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-splashscreen/www/splashscreen.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-splashscreen/www/splashscreen.js
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
index aa82acf6..dbfd4d63 100755..100644
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
@@ -1,6 +1,4 @@
-cordova.define("cordova-plugin-x-socialsharing.SocialSharing", function(require, exports, module) { var cordova = require('cordova');
-
-function SocialSharing() {
+cordova.define("cordova-plugin-x-socialsharing.SocialSharing", function(require, exports, module) { function SocialSharing() {
}
// Override this method (after deviceready) to set the location where you want the iPad popup arrow to appear.
@@ -25,6 +23,11 @@ SocialSharing.prototype.available = function (callback) {
}, null, "SocialSharing", "available", []);
};
+// this is the recommended way to share as it is the most feature-rich with respect to what you pass in and get back
+SocialSharing.prototype.shareWithOptions = function (options, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareWithOptions"), "SocialSharing", "shareWithOptions", [options]);
+};
+
SocialSharing.prototype.share = function (message, subject, fileOrFileArray, url, successCallback, errorCallback) {
cordova.exec(successCallback, this._getErrorCallback(errorCallback, "share"), "SocialSharing", "share", [message, subject, this._asArray(fileOrFileArray), url]);
};
@@ -49,7 +52,11 @@ SocialSharing.prototype.shareViaFacebookWithPasteMessageHint = function (message
};
SocialSharing.prototype.shareViaWhatsApp = function (message, fileOrFileArray, url, successCallback, errorCallback) {
- cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url]);
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, null]);
+};
+
+SocialSharing.prototype.shareViaWhatsAppToReceiver = function (receiver, message, fileOrFileArray, url, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsAppToReceiver"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, receiver]);
};
SocialSharing.prototype.shareViaSMS = function (options, phonenumbers, successCallback, errorCallback) {
@@ -113,5 +120,4 @@ SocialSharing.install = function () {
};
cordova.addConstructor(SocialSharing.install);
-
});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/ionic-plugin-keyboard/www/android/keyboard.js b/StoneIsland/platforms/android/platform_www/plugins/ionic-plugin-keyboard/www/android/keyboard.js
new file mode 100644
index 00000000..cce2e5be
--- /dev/null
+++ b/StoneIsland/platforms/android/platform_www/plugins/ionic-plugin-keyboard/www/android/keyboard.js
@@ -0,0 +1,62 @@
+cordova.define("ionic-plugin-keyboard.keyboard", function(require, exports, module) {
+var argscheck = require('cordova/argscheck'),
+ utils = require('cordova/utils'),
+ exec = require('cordova/exec'),
+ channel = require('cordova/channel');
+
+
+var Keyboard = function() {
+};
+
+Keyboard.hideKeyboardAccessoryBar = function(hide) {
+ exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
+};
+
+Keyboard.close = function() {
+ exec(null, null, "Keyboard", "close", []);
+};
+
+Keyboard.show = function() {
+ exec(null, null, "Keyboard", "show", []);
+};
+
+Keyboard.disableScroll = function(disable) {
+ exec(null, null, "Keyboard", "disableScroll", [disable]);
+};
+
+/*
+Keyboard.styleDark = function(dark) {
+ exec(null, null, "Keyboard", "styleDark", [dark]);
+};
+*/
+
+Keyboard.isVisible = false;
+
+channel.onCordovaReady.subscribe(function() {
+ exec(success, null, 'Keyboard', 'init', []);
+
+ function success(msg) {
+ var action = msg.charAt(0);
+ if ( action === 'S' ) {
+ var keyboardHeight = msg.substr(1);
+ cordova.plugins.Keyboard.isVisible = true;
+ cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight': + keyboardHeight });
+
+ //deprecated
+ cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight': + keyboardHeight });
+ } else if ( action === 'H' ) {
+ cordova.plugins.Keyboard.isVisible = false;
+ cordova.fireWindowEvent('native.keyboardhide');
+
+ //deprecated
+ cordova.fireWindowEvent('native.hidekeyboard');
+ }
+ }
+});
+
+module.exports = Keyboard;
+
+
+
+
+});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js b/StoneIsland/platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js
deleted file mode 100755
index 7aa30fd7..00000000
--- a/StoneIsland/platforms/android/platform_www/plugins/phonegap-plugin-push/www/push.js
+++ /dev/null
@@ -1,231 +0,0 @@
-cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) { /* global cordova:false */
-
-/*!
- * Module dependencies.
- */
-
-var exec = cordova.require('cordova/exec');
-
-/**
- * PushNotification constructor.
- *
- * @param {Object} options to initiate Push Notifications.
- * @return {PushNotification} instance that can be monitored and cancelled.
- */
-
-var PushNotification = function(options) {
- this._handlers = {
- 'registration': [],
- 'notification': [],
- 'error': []
- };
-
- // require options parameter
- if (typeof options === 'undefined') {
- throw new Error('The options argument is required.');
- }
-
- // store the options to this object instance
- this.options = options;
-
- // triggered on registration and notification
- var that = this;
- var success = function(result) {
- if (result && typeof result.registrationId !== 'undefined') {
- that.emit('registration', result);
- } else if (result && typeof result.callback !== 'undefined') {
- var executeFunctionByName = function(functionName, context /*, args */) {
- var args = Array.prototype.slice.call(arguments, 2);
- var namespaces = functionName.split(".");
- var func = namespaces.pop();
- for (var i = 0; i < namespaces.length; i++) {
- context = context[namespaces[i]];
- }
- return context[func].apply(context, args);
- }
-
- executeFunctionByName(result.callback, window, result);
- } else if (result) {
- that.emit('notification', result);
- }
- };
-
- // triggered on error
- var fail = function(msg) {
- var e = (typeof msg === 'string') ? new Error(msg) : msg;
- that.emit('error', e);
- };
-
- // wait at least one process tick to allow event subscriptions
- setTimeout(function() {
- exec(success, fail, 'PushNotification', 'init', [options]);
- }, 10);
-};
-
-/**
- * Unregister from push notifications
- */
-
-PushNotification.prototype.unregister = function(successCallback, errorCallback, options) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.unregister failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.unregister failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "unregister", [options]);
-};
-
-/**
- * Call this to set the application icon badge
- */
-
-PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "setApplicationIconBadgeNumber", [{badge: badge}]);
-};
-
-/**
- * Get the application icon badge
- */
-
-PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "getApplicationIconBadgeNumber", []);
-};
-
-/**
- * Listen for an event.
- *
- * The following events are supported:
- *
- * - registration
- * - notification
- * - error
- *
- * @param {String} eventName to subscribe to.
- * @param {Function} callback triggered on the event.
- */
-
-PushNotification.prototype.on = function(eventName, callback) {
- if (this._handlers.hasOwnProperty(eventName)) {
- this._handlers[eventName].push(callback);
- }
-};
-
-/**
- * Remove event listener.
- *
- * @param {String} eventName to match subscription.
- * @param {Function} handle function associated with event.
- */
-
-PushNotification.prototype.off = function (eventName, handle) {
- if (this._handlers.hasOwnProperty(eventName)) {
- var handleIndex = this._handlers[eventName].indexOf(handle);
- if (handleIndex >= 0)
- this._handlers[eventName].splice(handleIndex, 1);
- }
-};
-
-/**
- * Emit an event.
- *
- * This is intended for internal use only.
- *
- * @param {String} eventName is the event to trigger.
- * @param {*} all arguments are passed to the event listeners.
- *
- * @return {Boolean} is true when the event is triggered otherwise false.
- */
-
-PushNotification.prototype.emit = function() {
- var args = Array.prototype.slice.call(arguments);
- var eventName = args.shift();
-
- if (!this._handlers.hasOwnProperty(eventName)) {
- return false;
- }
-
- for (var i = 0, length = this._handlers[eventName].length; i < length; i++) {
- this._handlers[eventName][i].apply(undefined,args);
- }
-
- return true;
-};
-
-PushNotification.prototype.finish = function(successCallback, errorCallback) {
- if (successCallback == null) { successCallback = function() {}}
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof successCallback != "function") {
- console.log("finish failure: success callback parameter must be a function");
- return
- }
-
- if (typeof errorCallback != "function") {
- console.log("finish failure: failure parameter not a function");
- return
- }
-
- exec(successCallback, errorCallback, 'PushNotification', 'finish', []);
-}
-
-/*!
- * Push Notification Plugin.
- */
-
-module.exports = {
- /**
- * Register for Push Notifications.
- *
- * This method will instantiate a new copy of the PushNotification object
- * and start the registration process.
- *
- * @param {Object} options
- * @return {PushNotification} instance
- */
-
- init: function(options) {
- return new PushNotification(options);
- },
-
- /**
- * PushNotification Object.
- *
- * Expose the PushNotification object for direct use
- * and testing. Typically, you should use the
- * .init helper method.
- */
-
- PushNotification: PushNotification
-};
-});
diff --git a/StoneIsland/platforms/android/project.properties b/StoneIsland/platforms/android/project.properties
index 65398339..b06f0fa0 100755
--- a/StoneIsland/platforms/android/project.properties
+++ b/StoneIsland/platforms/android/project.properties
@@ -12,6 +12,3 @@
# Project target.
target=android-22
android.library.reference.1=CordovaLib
-cordova.gradle.include.1=phonegap-plugin-push/stoneisland-push.gradle
-cordova.system.library.1=com.android.support:support-v13:23+
-cordova.system.library.2=com.google.android.gms:play-services-gcm:+ \ No newline at end of file
diff --git a/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_next_item.png b/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_next_item.png
new file mode 100644
index 00000000..fa469d88
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_previous_item.png b/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_previous_item.png
new file mode 100644
index 00000000..e861ecce
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_remove.png b/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_remove.png
new file mode 100644
index 00000000..f889617e
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-hdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-hdpi/icon.png b/StoneIsland/platforms/android/res/drawable-hdpi/icon.png
index 8df5f45f..3094af16 100755
--- a/StoneIsland/platforms/android/res/drawable-hdpi/icon.png
+++ b/StoneIsland/platforms/android/res/drawable-hdpi/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-ldpi/icon.png b/StoneIsland/platforms/android/res/drawable-ldpi/icon.png
index a474f595..b49c0c1d 100755
--- a/StoneIsland/platforms/android/res/drawable-ldpi/icon.png
+++ b/StoneIsland/platforms/android/res/drawable-ldpi/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_next_item.png b/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_next_item.png
new file mode 100644
index 00000000..47365a30
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_previous_item.png b/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_previous_item.png
new file mode 100644
index 00000000..4ad2df42
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_remove.png b/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_remove.png
new file mode 100644
index 00000000..e84853e4
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-mdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-mdpi/icon.png b/StoneIsland/platforms/android/res/drawable-mdpi/icon.png
index 42172a1d..b6d9c9ab 100755
--- a/StoneIsland/platforms/android/res/drawable-mdpi/icon.png
+++ b/StoneIsland/platforms/android/res/drawable-mdpi/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_next_item.png b/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_next_item.png
new file mode 100644
index 00000000..5f304742
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_previous_item.png b/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_previous_item.png
new file mode 100644
index 00000000..ed8ac91d
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_remove.png b/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_remove.png
new file mode 100644
index 00000000..4cd0458b
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xhdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xhdpi/icon.png b/StoneIsland/platforms/android/res/drawable-xhdpi/icon.png
index e7af4387..4e63bbd9 100755
--- a/StoneIsland/platforms/android/res/drawable-xhdpi/icon.png
+++ b/StoneIsland/platforms/android/res/drawable-xhdpi/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_next_item.png b/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_next_item.png
new file mode 100644
index 00000000..51479d8d
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_previous_item.png b/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_previous_item.png
new file mode 100644
index 00000000..bc8ff124
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_remove.png b/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_remove.png
new file mode 100644
index 00000000..331c545b
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xxhdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xxhdpi/icon.png b/StoneIsland/platforms/android/res/drawable-xxhdpi/icon.png
new file mode 100644
index 00000000..9515e8dc
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xxhdpi/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable-xxxhdpi/icon.png b/StoneIsland/platforms/android/res/drawable-xxxhdpi/icon.png
new file mode 100644
index 00000000..4e0d84b5
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable-xxxhdpi/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/drawable/icon.png b/StoneIsland/platforms/android/res/drawable/icon.png
new file mode 100644
index 00000000..4e63bbd9
--- /dev/null
+++ b/StoneIsland/platforms/android/res/drawable/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/android/res/xml/config.xml b/StoneIsland/platforms/android/res/xml/config.xml
index 20661d26..b9330793 100755
--- a/StoneIsland/platforms/android/res/xml/config.xml
+++ b/StoneIsland/platforms/android/res/xml/config.xml
@@ -1,45 +1,41 @@
<?xml version='1.0' encoding='utf-8'?>
-<widget id="us.okfoc.stoneisland" version="0.5.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
- <preference name="loglevel" value="DEBUG" />
- <feature name="Keyboard">
- <param name="android-package" value="com.ionic.keyboard.IonicKeyboard" />
- <param name="onload" value="true" />
- </feature>
+<widget id="us.okfoc.stoneisland" version="0.7.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<feature name="ParsePlugin">
<param name="android-package" value="org.apache.cordova.core.ParsePlugin" />
</feature>
+ <feature name="InAppBrowser">
+ <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser" />
+ </feature>
+ <feature name="SocialSharing">
+ <param name="android-package" value="nl.xservices.plugins.SocialSharing" />
+ </feature>
<feature name="LaunchMyApp">
<param name="android-package" value="nl.xservices.plugins.LaunchMyApp" />
</feature>
+ <feature name="Whitelist">
+ <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
+ <param name="onload" value="true" />
+ </feature>
<feature name="Device">
<param name="android-package" value="org.apache.cordova.device.Device" />
</feature>
- <feature name="Notification">
- <param name="android-package" value="org.apache.cordova.dialogs.Notification" />
- </feature>
- <feature name="InAppBrowser">
- <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser" />
- </feature>
<feature name="NetworkStatus">
<param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" />
</feature>
+ <feature name="Notification">
+ <param name="android-package" value="org.apache.cordova.dialogs.Notification" />
+ </feature>
<feature name="SplashScreen">
<param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" />
<param name="onload" value="true" />
</feature>
- <feature name="Whitelist">
- <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
- <param name="onload" value="true" />
- </feature>
- <feature name="SocialSharing">
- <param name="android-package" value="nl.xservices.plugins.SocialSharing" />
+ <feature name="Geolocation">
+ <param name="android-package" value="org.apache.cordova.geolocation.Geolocation" />
</feature>
- <feature name="PushNotification">
- <param name="android-package" value="com.adobe.phonegap.push.PushPlugin" />
+ <feature name="Keyboard">
+ <param name="android-package" value="io.ionic.keyboard.IonicKeyboard" />
+ <param name="onload" value="true" />
</feature>
- <allow-intent href="market:*" />
- <preference name="AndroidLaunchMode" value="singleTop" />
- <preference name="android-minSdkVersion" value="21" />
<name>Stone Island</name>
<description>
Stone Island
@@ -55,6 +51,8 @@
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
+ <allow-intent href="market:*" />
+ <preference name="loglevel" value="DEBUG" />
<preference name="EnableViewportScale" value="true" />
<preference name="BackupWebStorage" value="local" />
<preference name="TopActivityIndicator" value="white" />
@@ -66,4 +64,9 @@
<preference name="StatusBarBackgroundColor" value="#000000" />
<preference name="StatusBarStyle" value="lightcontent" />
<preference name="SplashMaintainAspectRatio" value="true" />
+ <preference name="ShowSplashScreenSpinner" value="false" />
+ <preference name="AutoHideSplashScreen" value="false" />
+ <preference name="AllowInlineMediaPlayback" value="true" />
+ <preference name="AndroidLaunchMode" value="singleTop" />
+ <preference name="android-minSdkVersion" value="21" />
</widget>
diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java
deleted file mode 100755
index 24daa6a5..00000000
--- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/GCMIntentService.java
+++ /dev/null
@@ -1,603 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.annotation.SuppressLint;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.res.AssetManager;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Color;
-import android.net.Uri;
-import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
-import android.text.Html;
-import android.util.Log;
-
-import com.google.android.gms.gcm.GcmListenerService;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Random;
-
-@SuppressLint("NewApi")
-public class GCMIntentService extends GcmListenerService implements PushConstants {
-
- private static final String LOG_TAG = "PushPlugin_GCMIntentService";
- private static HashMap<Integer, ArrayList<String>> messageMap = new HashMap<Integer, ArrayList<String>>();
-
- public void setNotification(int notId, String message){
- ArrayList<String> messageList = messageMap.get(notId);
- if(messageList == null) {
- messageList = new ArrayList<String>();
- messageMap.put(notId, messageList);
- }
-
- if(message.isEmpty()){
- messageList.clear();
- }else{
- messageList.add(message);
- }
- }
-
- @Override
- public void onMessageReceived(String from, Bundle extras) {
- Log.d(LOG_TAG, "onMessage - from: " + from);
-
- if (extras != null) {
-
- SharedPreferences prefs = getApplicationContext().getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- boolean forceShow = prefs.getBoolean(FORCE_SHOW, false);
-
- extras = normalizeExtras(extras);
-
- // if we are in the foreground and forceShow is `false` only send data
- if (!forceShow && PushPlugin.isInForeground()) {
- Log.d(LOG_TAG, "foreground");
- extras.putBoolean(FOREGROUND, true);
- PushPlugin.sendExtras(extras);
- }
- // if we are in the foreground and forceShow is `true`, force show the notification if the data has at least a message or title
- else if (forceShow && PushPlugin.isInForeground()) {
- Log.d(LOG_TAG, "foreground force");
- extras.putBoolean(FOREGROUND, true);
-
- showNotificationIfPossible(getApplicationContext(), extras);
- }
- // if we are not in the foreground always send notification if the data has at least a message or title
- else {
- Log.d(LOG_TAG, "background");
- extras.putBoolean(FOREGROUND, false);
-
- showNotificationIfPossible(getApplicationContext(), extras);
- }
- }
- }
-
- /*
- * Change a values key in the extras bundle
- */
- private void replaceKey(String oldKey, String newKey, Bundle extras, Bundle newExtras) {
- Object value = extras.get(oldKey);
- if ( value != null ) {
- if (value instanceof String) {
- newExtras.putString(newKey, (String) value);
- } else if (value instanceof Boolean) {
- newExtras.putBoolean(newKey, (Boolean) value);
- } else if (value instanceof Number) {
- newExtras.putDouble(newKey, ((Number) value).doubleValue());
- } else {
- newExtras.putString(newKey, String.valueOf(value));
- }
- }
- }
-
- /*
- * Replace alternate keys with our canonical value
- */
- private String normalizeKey(String key) {
- if (key.equals(BODY) || key.equals(ALERT) || key.equals(GCM_NOTIFICATION_BODY)) {
- return MESSAGE;
- } else if (key.equals(MSGCNT) || key.equals(BADGE)) {
- return COUNT;
- } else if (key.equals(SOUNDNAME)) {
- return SOUND;
- } else if (key.startsWith(GCM_NOTIFICATION)) {
- return key.substring(GCM_NOTIFICATION.length()+1, key.length());
- } else if (key.startsWith(GCM_N)) {
- return key.substring(GCM_N.length()+1, key.length());
- } else if (key.startsWith(UA_PREFIX)) {
- key = key.substring(UA_PREFIX.length()+1, key.length());
- return key.toLowerCase();
- } else {
- return key;
- }
- }
-
- /*
- * Parse bundle into normalized keys.
- */
- private Bundle normalizeExtras(Bundle extras) {
- Log.d(LOG_TAG, "normalize extras");
- Iterator<String> it = extras.keySet().iterator();
- Bundle newExtras = new Bundle();
-
- while (it.hasNext()) {
- String key = it.next();
-
- Log.d(LOG_TAG, "key = " + key);
-
- // If normalizeKeythe key is "data" or "message" and the value is a json object extract
- // This is to support parse.com and other services. Issue #147 and pull #218
- if (key.equals(PARSE_COM_DATA) || key.equals(MESSAGE)) {
- Object json = extras.get(key);
- // Make sure data is json object stringified
- if ( json instanceof String && ((String) json).startsWith("{") ) {
- Log.d(LOG_TAG, "extracting nested message data from key = " + key);
- try {
- // If object contains message keys promote each value to the root of the bundle
- JSONObject data = new JSONObject((String) json);
- if ( data.has(ALERT) || data.has(MESSAGE) || data.has(BODY) || data.has(TITLE) ) {
- Iterator<String> jsonIter = data.keys();
- while (jsonIter.hasNext()) {
- String jsonKey = jsonIter.next();
-
- Log.d(LOG_TAG, "key = data/" + jsonKey);
-
- String value = data.getString(jsonKey);
- jsonKey = normalizeKey(jsonKey);
- newExtras.putString(jsonKey, value);
- }
- }
- } catch( JSONException e) {
- Log.e(LOG_TAG, "normalizeExtras: JSON exception");
- }
- }
- } else if (key.equals(("notification"))) {
- Bundle value = extras.getBundle(key);
- Iterator<String> iterator = value.keySet().iterator();
- while (iterator.hasNext()) {
- String notifkey = iterator.next();
-
- Log.d(LOG_TAG, "notifkey = " + notifkey);
- String newKey = normalizeKey(notifkey);
- Log.d(LOG_TAG, "replace key " + notifkey + " with " + newKey);
-
- newExtras.putString(newKey, value.getString(notifkey));
- }
- continue;
- }
-
- String newKey = normalizeKey(key);
- Log.d(LOG_TAG, "replace key " + key + " with " + newKey);
- replaceKey(key, newKey, extras, newExtras);
-
- } // while
-
- return newExtras;
- }
-
- private void showNotificationIfPossible (Context context, Bundle extras) {
-
- // Send a notification if there is a message or title, otherwise just send data
- String message = extras.getString(MESSAGE);
- String title = extras.getString(TITLE);
-
- Log.d(LOG_TAG, "message =[" + message + "]");
- Log.d(LOG_TAG, "title =[" + title + "]");
-
- if ((message != null && message.length() != 0) ||
- (title != null && title.length() != 0)) {
-
- Log.d(LOG_TAG, "create notification");
-
- createNotification(context, extras);
- } else {
- Log.d(LOG_TAG, "send notification event");
- PushPlugin.sendExtras(extras);
- }
- }
-
- public void createNotification(Context context, Bundle extras) {
- NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- String appName = getAppName(this);
- String packageName = context.getPackageName();
- Resources resources = context.getResources();
-
- int notId = parseInt(NOT_ID, extras);
- Intent notificationIntent = new Intent(this, PushHandlerActivity.class);
- notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- notificationIntent.putExtra(PUSH_BUNDLE, extras);
- notificationIntent.putExtra(NOT_ID, notId);
-
- int requestCode = new Random().nextInt();
- PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
- NotificationCompat.Builder mBuilder =
- new NotificationCompat.Builder(context)
- .setWhen(System.currentTimeMillis())
- .setContentTitle(extras.getString(TITLE))
- .setTicker(extras.getString(TITLE))
- .setContentIntent(contentIntent)
- .setAutoCancel(true);
-
- SharedPreferences prefs = context.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- String localIcon = prefs.getString(ICON, null);
- String localIconColor = prefs.getString(ICON_COLOR, null);
- boolean soundOption = prefs.getBoolean(SOUND, true);
- boolean vibrateOption = prefs.getBoolean(VIBRATE, true);
- Log.d(LOG_TAG, "stored icon=" + localIcon);
- Log.d(LOG_TAG, "stored iconColor=" + localIconColor);
- Log.d(LOG_TAG, "stored sound=" + soundOption);
- Log.d(LOG_TAG, "stored vibrate=" + vibrateOption);
-
- /*
- * Notification Vibration
- */
-
- setNotificationVibration(extras, vibrateOption, mBuilder);
-
- /*
- * Notification Icon Color
- *
- * Sets the small-icon background color of the notification.
- * To use, add the `iconColor` key to plugin android options
- *
- */
- setNotificationIconColor(extras.getString("color"), mBuilder, localIconColor);
-
- /*
- * Notification Icon
- *
- * Sets the small-icon of the notification.
- *
- * - checks the plugin options for `icon` key
- * - if none, uses the application icon
- *
- * The icon value must be a string that maps to a drawable resource.
- * If no resource is found, falls
- *
- */
- setNotificationSmallIcon(context, extras, packageName, resources, mBuilder, localIcon);
-
- /*
- * Notification Large-Icon
- *
- * Sets the large-icon of the notification
- *
- * - checks the gcm data for the `image` key
- * - checks to see if remote image, loads it.
- * - checks to see if assets image, Loads It.
- * - checks to see if resource image, LOADS IT!
- * - if none, we don't set the large icon
- *
- */
- setNotificationLargeIcon(extras, packageName, resources, mBuilder);
-
- /*
- * Notification Sound
- */
- if (soundOption) {
- setNotificationSound(context, extras, mBuilder);
- }
-
- /*
- * LED Notification
- */
- setNotificationLedColor(extras, mBuilder);
-
- /*
- * Priority Notification
- */
- setNotificationPriority(extras, mBuilder);
-
- /*
- * Notification message
- */
- setNotificationMessage(notId, extras, mBuilder);
-
- /*
- * Notification count
- */
- setNotificationCount(extras, mBuilder);
-
- /*
- * Notification add actions
- */
- createActions(extras, mBuilder, resources, packageName);
-
- mNotificationManager.notify(appName, notId, mBuilder.build());
- }
-
- private void createActions(Bundle extras, NotificationCompat.Builder mBuilder, Resources resources, String packageName) {
- Log.d(LOG_TAG, "create actions");
- String actions = extras.getString(ACTIONS);
- if (actions != null) {
- try {
- JSONArray actionsArray = new JSONArray(actions);
- for (int i=0; i < actionsArray.length(); i++) {
- Log.d(LOG_TAG, "adding action");
- JSONObject action = actionsArray.getJSONObject(i);
- Log.d(LOG_TAG, "adding callback = " + action.getString(CALLBACK));
- Intent intent = new Intent(this, PushHandlerActivity.class);
- intent.putExtra(CALLBACK, action.getString(CALLBACK));
- intent.putExtra(PUSH_BUNDLE, extras);
- PendingIntent pIntent = PendingIntent.getActivity(this, i, intent, PendingIntent.FLAG_UPDATE_CURRENT);
-
- mBuilder.addAction(resources.getIdentifier(action.getString(ICON), DRAWABLE, packageName),
- action.getString(TITLE), pIntent);
- }
- } catch(JSONException e) {
- // nope
- }
- }
- }
-
- private void setNotificationCount(Bundle extras, NotificationCompat.Builder mBuilder) {
- String msgcnt = extras.getString(MSGCNT);
- if (msgcnt == null) {
- msgcnt = extras.getString(BADGE);
- }
- if (msgcnt != null) {
- mBuilder.setNumber(Integer.parseInt(msgcnt));
- }
- }
-
- private void setNotificationVibration(Bundle extras, Boolean vibrateOption, NotificationCompat.Builder mBuilder) {
- String vibrationPattern = extras.getString(VIBRATION_PATTERN);
- if (vibrationPattern != null) {
- String[] items = vibrationPattern.replaceAll("\\[", "").replaceAll("\\]", "").split(",");
- long[] results = new long[items.length];
- for (int i = 0; i < items.length; i++) {
- try {
- results[i] = Long.parseLong(items[i]);
- } catch (NumberFormatException nfe) {}
- }
- mBuilder.setVibrate(results);
- } else {
- if (vibrateOption) {
- mBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
- }
- }
- }
-
- private void setNotificationMessage(int notId, Bundle extras, NotificationCompat.Builder mBuilder) {
- String message = extras.getString(MESSAGE);
-
- String style = extras.getString(STYLE, STYLE_TEXT);
- if(STYLE_INBOX.equals(style)) {
- setNotification(notId, message);
-
- mBuilder.setContentText(message);
-
- ArrayList<String> messageList = messageMap.get(notId);
- Integer sizeList = messageList.size();
- if (sizeList > 1) {
- String sizeListMessage = sizeList.toString();
- String stacking = sizeList + " more";
- if (extras.getString(SUMMARY_TEXT) != null) {
- stacking = extras.getString(SUMMARY_TEXT);
- stacking = stacking.replace("%n%", sizeListMessage);
- }
- NotificationCompat.InboxStyle notificationInbox = new NotificationCompat.InboxStyle()
- .setBigContentTitle(extras.getString(TITLE))
- .setSummaryText(stacking);
-
- for (int i = messageList.size() - 1; i >= 0; i--) {
- notificationInbox.addLine(Html.fromHtml(messageList.get(i)));
- }
-
- mBuilder.setStyle(notificationInbox);
- } else {
- NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
- if (message != null) {
- bigText.bigText(message);
- bigText.setBigContentTitle(extras.getString(TITLE));
- mBuilder.setStyle(bigText);
- }
- }
- } else if (STYLE_PICTURE.equals(style)) {
- setNotification(notId, "");
-
- NotificationCompat.BigPictureStyle bigPicture = new NotificationCompat.BigPictureStyle();
- bigPicture.bigPicture(getBitmapFromURL(extras.getString(PICTURE)));
- bigPicture.setBigContentTitle(extras.getString(TITLE));
- bigPicture.setSummaryText(extras.getString(SUMMARY_TEXT));
-
- mBuilder.setContentTitle(extras.getString(TITLE));
- mBuilder.setContentText(message);
-
- mBuilder.setStyle(bigPicture);
- } else {
- setNotification(notId, "");
-
- NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
-
- if (message != null) {
- mBuilder.setContentText(Html.fromHtml(message));
-
- bigText.bigText(message);
- bigText.setBigContentTitle(extras.getString(TITLE));
-
- String summaryText = extras.getString(SUMMARY_TEXT);
- if (summaryText != null) {
- bigText.setSummaryText(summaryText);
- }
-
- mBuilder.setStyle(bigText);
- }
- /*
- else {
- mBuilder.setContentText("<missing message content>");
- }
- */
- }
- }
-
- private void setNotificationSound(Context context, Bundle extras, NotificationCompat.Builder mBuilder) {
- String soundname = extras.getString(SOUNDNAME);
- if (soundname == null) {
- soundname = extras.getString(SOUND);
- }
- if (soundname != null && !soundname.contentEquals(SOUND_DEFAULT)) {
- Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
- + "://" + context.getPackageName() + "/raw/" + soundname);
- Log.d(LOG_TAG, sound.toString());
- mBuilder.setSound(sound);
- } else {
- mBuilder.setSound(android.provider.Settings.System.DEFAULT_NOTIFICATION_URI);
- }
- }
-
- private void setNotificationLedColor(Bundle extras, NotificationCompat.Builder mBuilder) {
- String ledColor = extras.getString(LED_COLOR);
- if (ledColor != null) {
- // Converts parse Int Array from ledColor
- String[] items = ledColor.replaceAll("\\[", "").replaceAll("\\]", "").split(",");
- int[] results = new int[items.length];
- for (int i = 0; i < items.length; i++) {
- try {
- results[i] = Integer.parseInt(items[i]);
- } catch (NumberFormatException nfe) {}
- }
- if (results.length == 4) {
- mBuilder.setLights(Color.argb(results[0], results[1], results[2], results[3]), 500, 500);
- } else {
- Log.e(LOG_TAG, "ledColor parameter must be an array of length == 4 (ARGB)");
- }
- }
- }
-
- private void setNotificationPriority(Bundle extras, NotificationCompat.Builder mBuilder) {
- String priorityStr = extras.getString(PRIORITY);
- if (priorityStr != null) {
- try {
- Integer priority = Integer.parseInt(priorityStr);
- if (priority >= NotificationCompat.PRIORITY_MIN && priority <= NotificationCompat.PRIORITY_MAX) {
- mBuilder.setPriority(priority);
- } else {
- Log.e(LOG_TAG, "Priority parameter must be between -2 and 2");
- }
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- }
- }
-
- private void setNotificationLargeIcon(Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder) {
- String gcmLargeIcon = extras.getString(IMAGE); // from gcm
- if (gcmLargeIcon != null) {
- if (gcmLargeIcon.startsWith("http://") || gcmLargeIcon.startsWith("https://")) {
- mBuilder.setLargeIcon(getBitmapFromURL(gcmLargeIcon));
- Log.d(LOG_TAG, "using remote large-icon from gcm");
- } else {
- AssetManager assetManager = getAssets();
- InputStream istr;
- try {
- istr = assetManager.open(gcmLargeIcon);
- Bitmap bitmap = BitmapFactory.decodeStream(istr);
- mBuilder.setLargeIcon(bitmap);
- Log.d(LOG_TAG, "using assets large-icon from gcm");
- } catch (IOException e) {
- int largeIconId = 0;
- largeIconId = resources.getIdentifier(gcmLargeIcon, DRAWABLE, packageName);
- if (largeIconId != 0) {
- Bitmap largeIconBitmap = BitmapFactory.decodeResource(resources, largeIconId);
- mBuilder.setLargeIcon(largeIconBitmap);
- Log.d(LOG_TAG, "using resources large-icon from gcm");
- } else {
- Log.d(LOG_TAG, "Not setting large icon");
- }
- }
- }
- }
- }
-
- private void setNotificationSmallIcon(Context context, Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder, String localIcon) {
- int iconId = 0;
- String icon = extras.getString(ICON);
- if (icon != null) {
- iconId = resources.getIdentifier(icon, DRAWABLE, packageName);
- Log.d(LOG_TAG, "using icon from plugin options");
- }
- else if (localIcon != null) {
- iconId = resources.getIdentifier(localIcon, DRAWABLE, packageName);
- Log.d(LOG_TAG, "using icon from plugin options");
- }
- if (iconId == 0) {
- Log.d(LOG_TAG, "no icon resource found - using application icon");
- iconId = context.getApplicationInfo().icon;
- }
- mBuilder.setSmallIcon(iconId);
- }
-
- private void setNotificationIconColor(String color, NotificationCompat.Builder mBuilder, String localIconColor) {
- int iconColor = 0;
- if (color != null) {
- try {
- iconColor = Color.parseColor(color);
- } catch (IllegalArgumentException e) {
- Log.e(LOG_TAG, "couldn't parse color from android options");
- }
- }
- else if (localIconColor != null) {
- try {
- iconColor = Color.parseColor(localIconColor);
- } catch (IllegalArgumentException e) {
- Log.e(LOG_TAG, "couldn't parse color from android options");
- }
- }
- if (iconColor != 0) {
- mBuilder.setColor(iconColor);
- }
- }
-
- public Bitmap getBitmapFromURL(String strURL) {
- try {
- URL url = new URL(strURL);
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setDoInput(true);
- connection.connect();
- InputStream input = connection.getInputStream();
- return BitmapFactory.decodeStream(input);
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- private static String getAppName(Context context) {
- CharSequence appName = context.getPackageManager().getApplicationLabel(context.getApplicationInfo());
- return (String)appName;
- }
-
- private int parseInt(String value, Bundle extras) {
- int retval = 0;
-
- try {
- retval = Integer.parseInt(extras.getString(value));
- }
- catch(NumberFormatException e) {
- Log.e(LOG_TAG, "Number format exception - Error parsing " + value + ": " + e.getMessage());
- }
- catch(Exception e) {
- Log.e(LOG_TAG, "Number format exception - Error parsing " + value + ": " + e.getMessage());
- }
-
- return retval;
- }
-}
diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java
deleted file mode 100755
index aeb49c9b..00000000
--- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushConstants.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.adobe.phonegap.push;
-
-public interface PushConstants {
- public static final String COM_ADOBE_PHONEGAP_PUSH = "com.adobe.phonegap.push";
- public static final String REGISTRATION_ID = "registrationId";
- public static final String FOREGROUND = "foreground";
- public static final String TITLE = "title";
- public static final String NOT_ID = "notId";
- public static final String PUSH_BUNDLE = "pushBundle";
- public static final String ICON = "icon";
- public static final String ICON_COLOR = "iconColor";
- public static final String SOUND = "sound";
- public static final String SOUND_DEFAULT = "default";
- public static final String VIBRATE = "vibrate";
- public static final String ACTIONS = "actions";
- public static final String CALLBACK = "callback";
- public static final String DRAWABLE = "drawable";
- public static final String MSGCNT = "msgcnt";
- public static final String VIBRATION_PATTERN = "vibrationPattern";
- public static final String STYLE = "style";
- public static final String SUMMARY_TEXT = "summaryText";
- public static final String PICTURE = "picture";
- public static final String GCM_N = "gcm.n.";
- public static final String GCM_NOTIFICATION = "gcm.notification";
- public static final String GCM_NOTIFICATION_BODY = "gcm.notification.body";
- public static final String UA_PREFIX = "com.urbanairship.push";
- public static final String PARSE_COM_DATA = "data";
- public static final String ALERT = "alert";
- public static final String MESSAGE = "message";
- public static final String BODY = "body";
- public static final String SOUNDNAME = "soundname";
- public static final String LED_COLOR = "ledColor";
- public static final String PRIORITY = "priority";
- public static final String IMAGE = "image";
- public static final String STYLE_INBOX = "inbox";
- public static final String STYLE_PICTURE = "picture";
- public static final String STYLE_TEXT = "text";
- public static final String BADGE = "badge";
- public static final String INITIALIZE = "init";
- public static final String UNREGISTER = "unregister";
- public static final String EXIT = "exit";
- public static final String FINISH = "finish";
- public static final String ANDROID = "android";
- public static final String SENDER_ID = "senderID";
- public static final String CLEAR_NOTIFICATIONS = "clearNotifications";
- public static final String COLDSTART = "coldstart";
- public static final String ADDITIONAL_DATA = "additionalData";
- public static final String COUNT = "count";
- public static final String FROM = "from";
- public static final String COLLAPSE_KEY = "collapse_key";
- public static final String FORCE_SHOW = "forceShow";
- public static final String GCM = "GCM";
-}
diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java
deleted file mode 100755
index dd9fbd36..00000000
--- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushHandlerActivity.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.app.Activity;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.util.Log;
-
-public class PushHandlerActivity extends Activity implements PushConstants {
- private static String LOG_TAG = "PushPlugin_PushHandlerActivity";
-
- /*
- * this activity will be started if the user touches a notification that we own.
- * We send it's data off to the push plugin for processing.
- * If needed, we boot up the main activity to kickstart the application.
- * @see android.app.Activity#onCreate(android.os.Bundle)
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- GCMIntentService gcm = new GCMIntentService();
- gcm.setNotification(getIntent().getIntExtra(NOT_ID, 0), "");
- super.onCreate(savedInstanceState);
- Log.v(LOG_TAG, "onCreate");
-
- boolean isPushPluginActive = PushPlugin.isActive();
- processPushBundle(isPushPluginActive);
-
- finish();
-
- if (!isPushPluginActive) {
- forceMainActivityReload();
- }
- }
-
- /**
- * Takes the pushBundle extras from the intent,
- * and sends it through to the PushPlugin for processing.
- */
- private void processPushBundle(boolean isPushPluginActive) {
- Bundle extras = getIntent().getExtras();
-
- if (extras != null) {
- Bundle originalExtras = extras.getBundle(PUSH_BUNDLE);
-
- originalExtras.putBoolean(FOREGROUND, false);
- originalExtras.putBoolean(COLDSTART, !isPushPluginActive);
- originalExtras.putString(CALLBACK, extras.getString("callback"));
-
- PushPlugin.sendExtras(originalExtras);
- }
- }
-
- /**
- * Forces the main activity to re-launch if it's unloaded.
- */
- private void forceMainActivityReload() {
- PackageManager pm = getPackageManager();
- Intent launchIntent = pm.getLaunchIntentForPackage(getApplicationContext().getPackageName());
- startActivity(launchIntent);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- final NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.cancelAll();
- }
-} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java
deleted file mode 100755
index eaa39a48..00000000
--- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushInstanceIDListenerService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.content.Intent;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import com.google.android.gms.iid.InstanceID;
-import com.google.android.gms.iid.InstanceIDListenerService;
-
-import org.json.JSONException;
-
-import java.io.IOException;
-
-public class PushInstanceIDListenerService extends InstanceIDListenerService implements PushConstants {
- public static final String LOG_TAG = "PushPlugin_PushInstanceIDListenerService";
-
- @Override
- public void onTokenRefresh() {
- SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- String senderID = sharedPref.getString(SENDER_ID, "");
- if (!"".equals(senderID)) {
- Intent intent = new Intent(this, RegistrationIntentService.class);
- startService(intent);
- }
- }
-}
diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java
deleted file mode 100755
index 41a91819..00000000
--- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/PushPlugin.java
+++ /dev/null
@@ -1,294 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.util.Log;
-
-import com.google.android.gms.iid.InstanceID;
-
-import org.apache.cordova.CallbackContext;
-import org.apache.cordova.CordovaInterface;
-import org.apache.cordova.CordovaPlugin;
-import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.PluginResult;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-
-public class PushPlugin extends CordovaPlugin implements PushConstants {
-
- public static final String LOG_TAG = "PushPlugin";
-
- private static CallbackContext pushContext;
- private static CordovaWebView gWebView;
- private static Bundle gCachedExtras = null;
- private static boolean gForeground = false;
-
- /**
- * Gets the application context from cordova's main activity.
- * @return the application context
- */
- private Context getApplicationContext() {
- return this.cordova.getActivity().getApplicationContext();
- }
-
- @Override
- public boolean execute(final String action, final JSONArray data, final CallbackContext callbackContext) {
- Log.v(LOG_TAG, "execute: action=" + action);
- gWebView = this.webView;
-
- if (INITIALIZE.equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- pushContext = callbackContext;
- JSONObject jo = null;
-
- Log.v(LOG_TAG, "execute: data=" + data.toString());
- SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- String token = null;
- String senderID = null;
-
- try {
- jo = data.getJSONObject(0).getJSONObject(ANDROID);
-
- Log.v(LOG_TAG, "execute: jo=" + jo.toString());
-
- senderID = jo.getString(SENDER_ID);
-
- Log.v(LOG_TAG, "execute: senderID=" + senderID);
-
- String savedSenderID = sharedPref.getString(SENDER_ID, "");
- String savedRegID = sharedPref.getString(REGISTRATION_ID, "");
-
- // first time run get new token
- if ("".equals(savedRegID)) {
- token = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM);
- }
- // new sender ID, re-register
- else if (!savedSenderID.equals(senderID)) {
- token = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM);
- }
- // use the saved one
- else {
- token = sharedPref.getString(REGISTRATION_ID, "");
- }
-
- if (!"".equals(token)) {
- JSONObject json = new JSONObject().put(REGISTRATION_ID, token);
-
- Log.v(LOG_TAG, "onRegistered: " + json.toString());
-
- PushPlugin.sendEvent( json );
- } else {
- callbackContext.error("Empty registration ID received from GCM");
- return;
- }
- } catch (JSONException e) {
- Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage());
- callbackContext.error(e.getMessage());
- } catch (IOException e) {
- Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage());
- callbackContext.error(e.getMessage());
- }
-
- if (jo != null) {
- SharedPreferences.Editor editor = sharedPref.edit();
- try {
- editor.putString(ICON, jo.getString(ICON));
- } catch (JSONException e) {
- Log.d(LOG_TAG, "no icon option");
- }
- try {
- editor.putString(ICON_COLOR, jo.getString(ICON_COLOR));
- } catch (JSONException e) {
- Log.d(LOG_TAG, "no iconColor option");
- }
- editor.putBoolean(SOUND, jo.optBoolean(SOUND, true));
- editor.putBoolean(VIBRATE, jo.optBoolean(VIBRATE, true));
- editor.putBoolean(CLEAR_NOTIFICATIONS, jo.optBoolean(CLEAR_NOTIFICATIONS, true));
- editor.putBoolean(FORCE_SHOW, jo.optBoolean(FORCE_SHOW, false));
- editor.putString(SENDER_ID, senderID);
- editor.putString(REGISTRATION_ID, token);
- editor.commit();
- }
-
- if (gCachedExtras != null) {
- Log.v(LOG_TAG, "sending cached extras");
- sendExtras(gCachedExtras);
- gCachedExtras = null;
- }
- }
- });
- } else if (UNREGISTER.equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- try {
- InstanceID.getInstance(getApplicationContext()).deleteInstanceID();
- Log.v(LOG_TAG, "UNREGISTER");
-
- // Remove shared prefs
- SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPref.edit();
- editor.remove(SOUND);
- editor.remove(VIBRATE);
- editor.remove(CLEAR_NOTIFICATIONS);
- editor.remove(FORCE_SHOW);
- editor.remove(SENDER_ID);
- editor.remove(REGISTRATION_ID);
- editor.commit();
-
- callbackContext.success();
- } catch (IOException e) {
- Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage());
- callbackContext.error(e.getMessage());
- }
- }
- });
- } else if (FINISH.equals(action)) {
- callbackContext.success();
- } else {
- Log.e(LOG_TAG, "Invalid action : " + action);
- callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.INVALID_ACTION));
- return false;
- }
-
- return true;
- }
-
- public static void sendEvent(JSONObject _json) {
- PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, _json);
- pluginResult.setKeepCallback(true);
- if (pushContext != null) {
- pushContext.sendPluginResult(pluginResult);
- }
- }
-
- public static void sendError(String message) {
- PluginResult pluginResult = new PluginResult(PluginResult.Status.ERROR, message);
- pluginResult.setKeepCallback(true);
- if (pushContext != null) {
- pushContext.sendPluginResult(pluginResult);
- }
- }
-
- /*
- * Sends the pushbundle extras to the client application.
- * If the client application isn't currently active, it is cached for later processing.
- */
- public static void sendExtras(Bundle extras) {
- if (extras != null) {
- if (gWebView != null) {
- sendEvent(convertBundleToJson(extras));
- } else {
- Log.v(LOG_TAG, "sendExtras: caching extras to send at a later time.");
- gCachedExtras = extras;
- }
- }
- }
-
- @Override
- public void initialize(CordovaInterface cordova, CordovaWebView webView) {
- super.initialize(cordova, webView);
- gForeground = true;
- }
-
- @Override
- public void onPause(boolean multitasking) {
- super.onPause(multitasking);
- gForeground = false;
-
- SharedPreferences prefs = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- if (prefs.getBoolean(CLEAR_NOTIFICATIONS, true)) {
- final NotificationManager notificationManager = (NotificationManager) cordova.getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.cancelAll();
- }
- }
-
- @Override
- public void onResume(boolean multitasking) {
- super.onResume(multitasking);
- gForeground = true;
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- gForeground = false;
- gWebView = null;
- }
-
- /*
- * serializes a bundle to JSON.
- */
- private static JSONObject convertBundleToJson(Bundle extras) {
- Log.d(LOG_TAG, "convert extras to json");
- try {
- JSONObject json = new JSONObject();
- JSONObject additionalData = new JSONObject();
-
- // Add any keys that need to be in top level json to this set
- HashSet<String> jsonKeySet = new HashSet();
- Collections.addAll(jsonKeySet, TITLE,MESSAGE,COUNT,SOUND,IMAGE);
-
- Iterator<String> it = extras.keySet().iterator();
- while (it.hasNext()) {
- String key = it.next();
- Object value = extras.get(key);
-
- Log.d(LOG_TAG, "key = " + key);
-
- if (jsonKeySet.contains(key)) {
- json.put(key, value);
- }
- else if (key.equals(COLDSTART)) {
- additionalData.put(key, extras.getBoolean(COLDSTART));
- }
- else if (key.equals(FOREGROUND)) {
- additionalData.put(key, extras.getBoolean(FOREGROUND));
- }
- else if ( value instanceof String ) {
- String strValue = (String)value;
- try {
- // Try to figure out if the value is another JSON object
- if (strValue.startsWith("{")) {
- additionalData.put(key, new JSONObject(strValue));
- }
- // Try to figure out if the value is another JSON array
- else if (strValue.startsWith("[")) {
- additionalData.put(key, new JSONArray(strValue));
- }
- else {
- additionalData.put(key, value);
- }
- } catch (Exception e) {
- additionalData.put(key, value);
- }
- }
- } // while
-
- json.put(ADDITIONAL_DATA, additionalData);
- Log.v(LOG_TAG, "extrasToJSON: " + json.toString());
-
- return json;
- }
- catch( JSONException e) {
- Log.e(LOG_TAG, "extrasToJSON: JSON exception");
- }
- return null;
- }
-
- public static boolean isInForeground() {
- return gForeground;
- }
-
- public static boolean isActive() {
- return gWebView != null;
- }
-} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java b/StoneIsland/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java
deleted file mode 100755
index c4489fc1..00000000
--- a/StoneIsland/platforms/android/src/com/adobe/phonegap/push/RegistrationIntentService.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.content.Context;
-
-import android.app.IntentService;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import com.google.android.gms.gcm.GoogleCloudMessaging;
-import com.google.android.gms.iid.InstanceID;
-
-import java.io.IOException;
-
-public class RegistrationIntentService extends IntentService implements PushConstants {
- public static final String LOG_TAG = "PushPlugin_RegistrationIntentService";
-
- public RegistrationIntentService() {
- super(LOG_TAG);
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
- SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
-
- try {
- InstanceID instanceID = InstanceID.getInstance(this);
- String senderID = sharedPreferences.getString(SENDER_ID, "");
- String token = instanceID.getToken(senderID,
- GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
- Log.i(LOG_TAG, "new GCM Registration Token: " + token);
-
- // save new token
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putString(REGISTRATION_ID, token);
- editor.commit();
-
- } catch (Exception e) {
- Log.d(LOG_TAG, "Failed to complete token refresh", e);
- }
- }
-} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/src/com/ionic/keyboard/IonicKeyboard.java b/StoneIsland/platforms/android/src/com/ionic/keyboard/IonicKeyboard.java
deleted file mode 100755
index deb914ab..00000000
--- a/StoneIsland/platforms/android/src/com/ionic/keyboard/IonicKeyboard.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.ionic.keyboard;
-
-import org.apache.cordova.CallbackContext;
-import org.apache.cordova.CordovaInterface;
-import org.apache.cordova.CordovaPlugin;
-import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.PluginResult.Status;
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.DisplayMetrics;
-import android.view.View;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
-import android.view.inputmethod.InputMethodManager;
-
-public class IonicKeyboard extends CordovaPlugin{
-
- public void initialize(CordovaInterface cordova, CordovaWebView webView) {
- super.initialize(cordova, webView);
-
- //calculate density-independent pixels (dp)
- //http://developer.android.com/guide/practices/screens_support.html
- DisplayMetrics dm = new DisplayMetrics();
- cordova.getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
- final float density = dm.density;
-
- final CordovaWebView appView = webView;
-
- //http://stackoverflow.com/a/4737265/1091751 detect if keyboard is showing
- final View rootView = cordova.getActivity().getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
- OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
- int previousHeightDiff = 0;
- @Override
- public void onGlobalLayout() {
- Rect r = new Rect();
- //r will be populated with the coordinates of your view that area still visible.
- rootView.getWindowVisibleDisplayFrame(r);
-
- int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);
- int pixelHeightDiff = (int)(heightDiff / density);
- if (pixelHeightDiff > 100 && pixelHeightDiff != previousHeightDiff) { // if more than 100 pixels, its probably a keyboard...
- appView.sendJavascript("cordova.plugins.Keyboard.isVisible = true");
- appView.sendJavascript("cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight':" + Integer.toString(pixelHeightDiff)+"});");
-
- //deprecated
- appView.sendJavascript("cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight':" + Integer.toString(pixelHeightDiff)+"});");
- }
- else if ( pixelHeightDiff != previousHeightDiff && ( previousHeightDiff - pixelHeightDiff ) > 100 ){
- appView.sendJavascript("cordova.plugins.Keyboard.isVisible = false");
- appView.sendJavascript("cordova.fireWindowEvent('native.keyboardhide')");
-
- //deprecated
- appView.sendJavascript("cordova.fireWindowEvent('native.hidekeyboard')");
- }
- previousHeightDiff = pixelHeightDiff;
- }
- };
-
- rootView.getViewTreeObserver().addOnGlobalLayoutListener(list);
- }
-
- public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
- if ("close".equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- //http://stackoverflow.com/a/7696791/1091751
- InputMethodManager inputManager = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- View v = cordova.getActivity().getCurrentFocus();
-
- if (v == null) {
- callbackContext.error("No current focus");
- } else {
- inputManager.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- callbackContext.success(); // Thread-safe.
- }
- }
- });
- return true;
- }
- if ("show".equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- ((InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
- callbackContext.success(); // Thread-safe.
- }
- });
- return true;
- }
- return false; // Returning false results in a "MethodNotFound" error.
- }
-
-
-}
-
diff --git a/StoneIsland/platforms/android/src/io/ionic/keyboard/IonicKeyboard.java b/StoneIsland/platforms/android/src/io/ionic/keyboard/IonicKeyboard.java
new file mode 100644
index 00000000..128063b9
--- /dev/null
+++ b/StoneIsland/platforms/android/src/io/ionic/keyboard/IonicKeyboard.java
@@ -0,0 +1,130 @@
+package io.ionic.keyboard;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.PluginResult;
+import org.apache.cordova.PluginResult.Status;
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+import android.view.inputmethod.InputMethodManager;
+
+// import additionally required classes for calculating screen height
+import android.view.Display;
+import android.graphics.Point;
+import android.os.Build;
+
+public class IonicKeyboard extends CordovaPlugin {
+
+ public void initialize(CordovaInterface cordova, CordovaWebView webView) {
+ super.initialize(cordova, webView);
+ }
+
+ public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
+ if ("close".equals(action)) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ //http://stackoverflow.com/a/7696791/1091751
+ InputMethodManager inputManager = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+ View v = cordova.getActivity().getCurrentFocus();
+
+ if (v == null) {
+ callbackContext.error("No current focus");
+ } else {
+ inputManager.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ callbackContext.success(); // Thread-safe.
+ }
+ }
+ });
+ return true;
+ }
+ if ("show".equals(action)) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ ((InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
+ callbackContext.success(); // Thread-safe.
+ }
+ });
+ return true;
+ }
+ if ("init".equals(action)) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ //calculate density-independent pixels (dp)
+ //http://developer.android.com/guide/practices/screens_support.html
+ DisplayMetrics dm = new DisplayMetrics();
+ cordova.getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
+ final float density = dm.density;
+
+ //http://stackoverflow.com/a/4737265/1091751 detect if keyboard is showing
+ final View rootView = cordova.getActivity().getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
+ OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
+ int previousHeightDiff = 0;
+ @Override
+ public void onGlobalLayout() {
+ Rect r = new Rect();
+ //r will be populated with the coordinates of your view that area still visible.
+ rootView.getWindowVisibleDisplayFrame(r);
+
+ PluginResult result;
+
+ // cache properties for later use
+ int rootViewHeight = rootView.getRootView().getHeight();
+ int resultBottom = r.bottom;
+
+ // calculate screen height differently for android versions >= 21: Lollipop 5.x, Marshmallow 6.x
+ //http://stackoverflow.com/a/29257533/3642890 beware of nexus 5
+ int screenHeight;
+
+ if (Build.VERSION.SDK_INT >= 21) {
+ Display display = cordova.getActivity().getWindowManager().getDefaultDisplay();
+ Point size = new Point();
+ display.getSize(size);
+ screenHeight = size.y;
+ } else {
+ screenHeight = rootViewHeight;
+ }
+
+ int heightDiff = screenHeight - resultBottom;
+
+ int pixelHeightDiff = (int)(heightDiff / density);
+ if (pixelHeightDiff > 100 && pixelHeightDiff != previousHeightDiff) { // if more than 100 pixels, its probably a keyboard...
+ String msg = "S" + Integer.toString(pixelHeightDiff);
+ result = new PluginResult(PluginResult.Status.OK, msg);
+ result.setKeepCallback(true);
+ callbackContext.sendPluginResult(result);
+ }
+ else if ( pixelHeightDiff != previousHeightDiff && ( previousHeightDiff - pixelHeightDiff ) > 100 ){
+ String msg = "H";
+ result = new PluginResult(PluginResult.Status.OK, msg);
+ result.setKeepCallback(true);
+ callbackContext.sendPluginResult(result);
+ }
+ previousHeightDiff = pixelHeightDiff;
+ }
+ };
+
+ rootView.getViewTreeObserver().addOnGlobalLayoutListener(list);
+
+
+ PluginResult dataResult = new PluginResult(PluginResult.Status.OK);
+ dataResult.setKeepCallback(true);
+ callbackContext.sendPluginResult(dataResult);
+ }
+ });
+ return true;
+ }
+ return false; // Returning false results in a "MethodNotFound" error.
+ }
+
+
+}
+
+
diff --git a/StoneIsland/platforms/android/src/nl/xservices/plugins/LaunchMyApp.java b/StoneIsland/platforms/android/src/nl/xservices/plugins/LaunchMyApp.java
index 9d3f3d63..3a52d287 100755..100644
--- a/StoneIsland/platforms/android/src/nl/xservices/plugins/LaunchMyApp.java
+++ b/StoneIsland/platforms/android/src/nl/xservices/plugins/LaunchMyApp.java
@@ -4,6 +4,8 @@ import android.content.Intent;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaActivity;
import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaWebView;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
@@ -16,19 +18,52 @@ import java.util.Locale;
public class LaunchMyApp extends CordovaPlugin {
private static final String ACTION_CHECKINTENT = "checkIntent";
+ private static final String ACTION_CLEARINTENT = "clearIntent";
+ private static final String ACTION_GETLASTINTENT = "getLastIntent";
+
+ private String lastIntentString = null;
+
+ /**
+ * We don't want to interfere with other plugins requiring the intent data,
+ * but in case of a multi-page app your app may receive the same intent data
+ * multiple times, that's why you'll get an option to reset it (null it).
+ *
+ * Add this to config.xml to enable that behaviour (default false):
+ * <preference name="CustomURLSchemePluginClearsAndroidIntent" value="true"/>
+ */
+ private boolean resetIntent;
+
+ @Override
+ public void initialize(final CordovaInterface cordova, CordovaWebView webView){
+ this.resetIntent = preferences.getBoolean("resetIntent", false) ||
+ preferences.getBoolean("CustomURLSchemePluginClearsAndroidIntent", false);
+ }
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (ACTION_CHECKINTENT.equalsIgnoreCase(action)) {
+ if (ACTION_CLEARINTENT.equalsIgnoreCase(action)) {
+ final Intent intent = ((CordovaActivity) this.webView.getContext()).getIntent();
+ if (resetIntent){
+ intent.setData(null);
+ }
+ return true;
+ } else if (ACTION_CHECKINTENT.equalsIgnoreCase(action)) {
final Intent intent = ((CordovaActivity) this.webView.getContext()).getIntent();
final String intentString = intent.getDataString();
- if (intentString != null && intentString.contains("://") && intent.getScheme() != null) {
+ if (intentString != null && intent.getScheme() != null) {
+ lastIntentString = intentString;
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, intent.getDataString()));
- intent.setData(null);
} else {
callbackContext.error("App was not started via the launchmyapp URL scheme. Ignoring this errorcallback is the best approach.");
}
return true;
+ } else if (ACTION_GETLASTINTENT.equalsIgnoreCase(action)) {
+ if(lastIntentString != null) {
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, lastIntentString));
+ } else {
+ callbackContext.error("No intent received so far.");
+ }
+ return true;
} else {
callbackContext.error("This plugin only responds to the " + ACTION_CHECKINTENT + " action.");
return false;
@@ -38,8 +73,10 @@ public class LaunchMyApp extends CordovaPlugin {
@Override
public void onNewIntent(Intent intent) {
final String intentString = intent.getDataString();
- if (intentString != null && intentString.contains("://") && intent.getScheme() != null) {
- intent.setData(null);
+ if (intentString != null && intent.getScheme() != null) {
+ if (resetIntent){
+ intent.setData(null);
+ }
try {
StringWriter writer = new StringWriter(intentString.length() * 2);
escapeJavaStyleString(writer, intentString, true, false);
@@ -133,4 +170,4 @@ public class LaunchMyApp extends CordovaPlugin {
private static String hex(char ch) {
return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
}
-} \ No newline at end of file
+}
diff --git a/StoneIsland/platforms/android/src/nl/xservices/plugins/SocialSharing.java b/StoneIsland/platforms/android/src/nl/xservices/plugins/SocialSharing.java
index f1168f89..8de31da8 100755..100644
--- a/StoneIsland/platforms/android/src/nl/xservices/plugins/SocialSharing.java
+++ b/StoneIsland/platforms/android/src/nl/xservices/plugins/SocialSharing.java
@@ -26,7 +26,9 @@ import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
@@ -36,6 +38,7 @@ public class SocialSharing extends CordovaPlugin {
private static final String ACTION_AVAILABLE_EVENT = "available";
private static final String ACTION_SHARE_EVENT = "share";
+ private static final String ACTION_SHARE_WITH_OPTIONS_EVENT = "shareWithOptions";
private static final String ACTION_CAN_SHARE_VIA = "canShareVia";
private static final String ACTION_CAN_SHARE_VIA_EMAIL = "canShareViaEmail";
private static final String ACTION_SHARE_VIA = "shareVia";
@@ -47,7 +50,10 @@ public class SocialSharing extends CordovaPlugin {
private static final String ACTION_SHARE_VIA_SMS_EVENT = "shareViaSMS";
private static final String ACTION_SHARE_VIA_EMAIL_EVENT = "shareViaEmail";
- private static final int ACTIVITY_CODE_SENDVIAEMAIL = 2;
+ private static final int ACTIVITY_CODE_SEND__BOOLRESULT = 1;
+ private static final int ACTIVITY_CODE_SEND__OBJECT = 2;
+ private static final int ACTIVITY_CODE_SENDVIAEMAIL = 3;
+ private static final int ACTIVITY_CODE_SENDVIAWHATSAPP = 4;
private CallbackContext _callbackContext;
@@ -55,6 +61,7 @@ public class SocialSharing extends CordovaPlugin {
private abstract class SocialSharingRunnable implements Runnable {
public CallbackContext callbackContext;
+
SocialSharingRunnable(CallbackContext cb) {
this.callbackContext = cb;
}
@@ -68,23 +75,29 @@ public class SocialSharing extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
return true;
} else if (ACTION_SHARE_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), null, false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), null, null, false, true);
+ } else if (ACTION_SHARE_WITH_OPTIONS_EVENT.equals(action)) {
+ return shareWithOptions(callbackContext, args.getJSONObject(0));
} else if (ACTION_SHARE_VIA_TWITTER_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "twitter", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "twitter", null, false, true);
} else if (ACTION_SHARE_VIA_FACEBOOK_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", null, false, true);
} else if (ACTION_SHARE_VIA_FACEBOOK_WITH_PASTEMESSAGEHINT.equals(action)) {
this.pasteMessage = args.getString(4);
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", null, false, true);
} else if (ACTION_SHARE_VIA_WHATSAPP_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "whatsapp", false);
+ if (notEmpty(args.getString(4))) {
+ return shareViaWhatsAppDirectly(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4));
+ } else {
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "whatsapp", null, false, true);
+ }
} else if (ACTION_SHARE_VIA_INSTAGRAM_EVENT.equals(action)) {
if (notEmpty(args.getString(0))) {
copyHintToClipboard(args.getString(0), "Instagram paste message");
}
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "instagram", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "instagram", null, false, true);
} else if (ACTION_CAN_SHARE_VIA.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), true);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), null, true, true);
} else if (ACTION_CAN_SHARE_VIA_EMAIL.equals(action)) {
if (isEmailAvailable()) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
@@ -94,7 +107,7 @@ public class SocialSharing extends CordovaPlugin {
return false;
}
} else if (ACTION_SHARE_VIA.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), null, false, true);
} else if (ACTION_SHARE_VIA_SMS_EVENT.equals(action)) {
return invokeSMSIntent(callbackContext, args.getJSONObject(0), args.getString(1));
} else if (ACTION_SHARE_VIA_EMAIL_EVENT.equals(action)) {
@@ -158,8 +171,17 @@ public class SocialSharing extends CordovaPlugin {
callbackContext.error(e.getMessage());
}
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ draft.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
draft.setType("application/octet-stream");
- cordova.startActivityForResult(plugin, Intent.createChooser(draft, "Choose Email App"), ACTIVITY_CODE_SENDVIAEMAIL);
+
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ cordova.startActivityForResult(plugin, Intent.createChooser(draft, "Choose Email App"), ACTIVITY_CODE_SENDVIAEMAIL);
+ }
+ });
}
});
@@ -178,7 +200,30 @@ public class SocialSharing extends CordovaPlugin {
}
}
- private boolean doSendIntent(final CallbackContext callbackContext, final String msg, final String subject, final JSONArray files, final String url, final String appPackageName, final boolean peek) {
+ private boolean shareWithOptions(CallbackContext callbackContext, JSONObject jsonObject) {
+ return doSendIntent(
+ callbackContext,
+ jsonObject.optString("message", null),
+ jsonObject.optString("subject", null),
+ jsonObject.optJSONArray("files") == null ? new JSONArray() : jsonObject.optJSONArray("files"),
+ jsonObject.optString("url", null),
+ null,
+ jsonObject.optString("chooserTitle", null),
+ false,
+ false
+ );
+ }
+
+ private boolean doSendIntent(
+ final CallbackContext callbackContext,
+ final String msg,
+ final String subject,
+ final JSONArray files,
+ final String url,
+ final String appPackageName,
+ final String chooserTitle,
+ final boolean peek,
+ final boolean boolResult) {
final CordovaInterface mycordova = cordova;
final CordovaPlugin plugin = this;
@@ -222,6 +267,7 @@ public class SocialSharing extends CordovaPlugin {
if (notEmpty(subject)) {
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
}
+
// add the URL to the message, as there seems to be no separate field
if (notEmpty(url)) {
if (notEmpty(message)) {
@@ -238,6 +284,9 @@ public class SocialSharing extends CordovaPlugin {
}
}
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
if (appPackageName != null) {
String packageName = appPackageName;
String passedActivityName = null;
@@ -254,7 +303,13 @@ public class SocialSharing extends CordovaPlugin {
sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
sendIntent.setComponent(new ComponentName(activity.applicationInfo.packageName,
passedActivityName != null ? passedActivityName : activity.name));
- mycordova.startActivityForResult(plugin, sendIntent, 0);
+
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ mycordova.startActivityForResult(plugin, sendIntent, 0);
+ }
+ });
if (pasteMessage != null) {
// add a little delay because target app (facebook only atm) needs to be started first
@@ -275,7 +330,13 @@ public class SocialSharing extends CordovaPlugin {
if (peek) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
} else {
- mycordova.startActivityForResult(plugin, Intent.createChooser(sendIntent, null), 1);
+ // experimenting a bit
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ mycordova.startActivityForResult(plugin, Intent.createChooser(sendIntent, chooserTitle), boolResult ? ACTIVITY_CODE_SEND__BOOLRESULT : ACTIVITY_CODE_SEND__OBJECT);
+ }
+ });
}
}
}
@@ -306,7 +367,12 @@ public class SocialSharing extends CordovaPlugin {
private Uri getFileUriAndSetType(Intent sendIntent, String dir, String image, String subject, int nthFile) throws IOException {
// we're assuming an image, but this can be any filetype you like
String localImage = image;
- sendIntent.setType("image/*");
+ if (image.endsWith("mp4") || image.endsWith("mov") || image.endsWith("3gp")){
+ sendIntent.setType("video/*");
+ } else {
+ sendIntent.setType("image/*");
+ }
+
if (image.startsWith("http") || image.startsWith("www/")) {
String filename = getFileName(image);
localImage = "file://" + dir + "/" + filename;
@@ -319,6 +385,10 @@ public class SocialSharing extends CordovaPlugin {
Matcher matcher = dispositionPattern.matcher(disposition);
if (matcher.find()) {
filename = matcher.group(1).replaceAll("[^a-zA-Z0-9._-]", "");
+ if (filename.length() == 0) {
+ // in this case we can't determine a filetype so some targets (gmail) may not render it correctly
+ filename = "file";
+ }
localImage = "file://" + dir + "/" + filename;
}
}
@@ -365,10 +435,160 @@ public class SocialSharing extends CordovaPlugin {
localImage = "file://" + dir + "/" + fileName;
} else if (!image.startsWith("file://")) {
throw new IllegalArgumentException("URL_NOT_SUPPORTED");
+ } else {
+ //get file MIME type
+ String type = getMIMEType(image);
+ //set intent data and Type
+ sendIntent.setType(type);
}
return Uri.parse(localImage);
}
+ private String getMIMEType(String fileName) {
+ String type = "*/*";
+ int dotIndex = fileName.lastIndexOf(".");
+ if (dotIndex == -1) {
+ return type;
+ }
+ final String end = fileName.substring(dotIndex+1, fileName.length()).toLowerCase();
+ String fromMap = MIME_Map.get(end);
+ return fromMap == null ? type : fromMap;
+ }
+
+ private static final Map<String, String> MIME_Map = new HashMap<String, String>();
+ static {
+ MIME_Map.put("3gp", "video/3gpp");
+ MIME_Map.put("apk", "application/vnd.android.package-archive");
+ MIME_Map.put("asf", "video/x-ms-asf");
+ MIME_Map.put("avi", "video/x-msvideo");
+ MIME_Map.put("bin", "application/octet-stream");
+ MIME_Map.put("bmp", "image/bmp");
+ MIME_Map.put("c", "text/plain");
+ MIME_Map.put("class", "application/octet-stream");
+ MIME_Map.put("conf", "text/plain");
+ MIME_Map.put("cpp", "text/plain");
+ MIME_Map.put("doc", "application/msword");
+ MIME_Map.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
+ MIME_Map.put("xls", "application/vnd.ms-excel");
+ MIME_Map.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ MIME_Map.put("exe", "application/octet-stream");
+ MIME_Map.put("gif", "image/gif");
+ MIME_Map.put("gtar", "application/x-gtar");
+ MIME_Map.put("gz", "application/x-gzip");
+ MIME_Map.put("h", "text/plain");
+ MIME_Map.put("htm", "text/html");
+ MIME_Map.put("html", "text/html");
+ MIME_Map.put("jar", "application/java-archive");
+ MIME_Map.put("java", "text/plain");
+ MIME_Map.put("jpeg", "image/jpeg");
+ MIME_Map.put("jpg", "image/*");
+ MIME_Map.put("js", "application/x-javascript");
+ MIME_Map.put("log", "text/plain");
+ MIME_Map.put("m3u", "audio/x-mpegurl");
+ MIME_Map.put("m4a", "audio/mp4a-latm");
+ MIME_Map.put("m4b", "audio/mp4a-latm");
+ MIME_Map.put("m4p", "audio/mp4a-latm");
+ MIME_Map.put("m4u", "video/vnd.mpegurl");
+ MIME_Map.put("m4v", "video/x-m4v");
+ MIME_Map.put("mov", "video/quicktime");
+ MIME_Map.put("mp2", "audio/x-mpeg");
+ MIME_Map.put("mp3", "audio/x-mpeg");
+ MIME_Map.put("mp4", "video/mp4");
+ MIME_Map.put("mpc", "application/vnd.mpohun.certificate");
+ MIME_Map.put("mpe", "video/mpeg");
+ MIME_Map.put("mpeg", "video/mpeg");
+ MIME_Map.put("mpg", "video/mpeg");
+ MIME_Map.put("mpg4", "video/mp4");
+ MIME_Map.put("mpga", "audio/mpeg");
+ MIME_Map.put("msg", "application/vnd.ms-outlook");
+ MIME_Map.put("ogg", "audio/ogg");
+ MIME_Map.put("pdf", "application/pdf");
+ MIME_Map.put("png", "image/png");
+ MIME_Map.put("pps", "application/vnd.ms-powerpoint");
+ MIME_Map.put("ppt", "application/vnd.ms-powerpoint");
+ MIME_Map.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
+ MIME_Map.put("prop", "text/plain");
+ MIME_Map.put("rc", "text/plain");
+ MIME_Map.put("rmvb", "audio/x-pn-realaudio");
+ MIME_Map.put("rtf", "application/rtf");
+ MIME_Map.put("sh", "text/plain");
+ MIME_Map.put("tar", "application/x-tar");
+ MIME_Map.put("tgz", "application/x-compressed");
+ MIME_Map.put("txt", "text/plain");
+ MIME_Map.put("wav", "audio/x-wav");
+ MIME_Map.put("wma", "audio/x-ms-wma");
+ MIME_Map.put("wmv", "audio/x-ms-wmv");
+ MIME_Map.put("wps", "application/vnd.ms-works");
+ MIME_Map.put("xml", "text/plain");
+ MIME_Map.put("z", "application/x-compress");
+ MIME_Map.put("zip", "application/x-zip-compressed");
+ MIME_Map.put("", "*/*");
+ }
+
+ private boolean shareViaWhatsAppDirectly(final CallbackContext callbackContext, String message, final String subject, final JSONArray files, final String url, final String number) {
+ // add the URL to the message, as there seems to be no separate field
+ if (notEmpty(url)) {
+ if (notEmpty(message)) {
+ message += " " + url;
+ } else {
+ message = url;
+ }
+ }
+ final String shareMessage = message;
+ final SocialSharing plugin = this;
+ cordova.getThreadPool().execute(new SocialSharingRunnable(callbackContext) {
+ public void run() {
+ final Intent intent = new Intent(Intent.ACTION_SENDTO);
+ intent.setData(Uri.parse("smsto:" + number));
+
+ intent.putExtra("sms_body", shareMessage);
+ intent.putExtra("sms_subject", subject);
+ intent.setPackage("com.whatsapp");
+
+ try {
+ if (files.length() > 0 && !"".equals(files.getString(0))) {
+ final boolean hasMultipleAttachments = files.length() > 1;
+ final String dir = getDownloadDir();
+ if (dir != null) {
+ ArrayList<Uri> fileUris = new ArrayList<Uri>();
+ Uri fileUri = null;
+ for (int i = 0; i < files.length(); i++) {
+ fileUri = getFileUriAndSetType(intent, dir, files.getString(i), subject, i);
+ if (fileUri != null) {
+ fileUris.add(fileUri);
+ }
+ }
+ if (!fileUris.isEmpty()) {
+ if (hasMultipleAttachments) {
+ intent.putExtra(Intent.EXTRA_STREAM, fileUris);
+ } else {
+ intent.putExtra(Intent.EXTRA_STREAM, fileUri);
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ try {
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ // update: didn't help (doesn't seem to hurt either though)
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ cordova.startActivityForResult(plugin, intent, ACTIVITY_CODE_SENDVIAWHATSAPP);
+ }
+ });
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ return true;
+ }
+
private boolean invokeSMSIntent(final CallbackContext callbackContext, JSONObject options, String p_phonenumbers) {
final String message = options.optString("message");
// TODO test this on a real SMS enabled device before releasing it
@@ -404,6 +624,9 @@ public class SocialSharing extends CordovaPlugin {
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
}
}
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
cordova.startActivityForResult(plugin, intent, 0);
} catch (Exception e) {
callbackContext.error(e.getMessage());
@@ -451,10 +674,26 @@ public class SocialSharing extends CordovaPlugin {
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (_callbackContext != null) {
- if (ACTIVITY_CODE_SENDVIAEMAIL == requestCode) {
- _callbackContext.success();
- } else {
- _callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, resultCode == Activity.RESULT_OK));
+ switch (requestCode) {
+ case ACTIVITY_CODE_SEND__BOOLRESULT:
+ _callbackContext.sendPluginResult(new PluginResult(
+ PluginResult.Status.OK,
+ resultCode == Activity.RESULT_OK));
+ break;
+ case ACTIVITY_CODE_SEND__OBJECT:
+ JSONObject json = new JSONObject();
+ try {
+ json.put("completed", resultCode == Activity.RESULT_OK);
+ json.put("app", ""); // we need a completely different approach if we want to support this on Android. Idea: https://clickclickclack.wordpress.com/2012/01/03/intercepting-androids-action_send-intents/
+ _callbackContext.sendPluginResult(new PluginResult(
+ PluginResult.Status.OK,
+ json));
+ } catch (JSONException e) {
+ _callbackContext.error(e.getMessage());
+ }
+ break;
+ default:
+ _callbackContext.success();
}
}
}
@@ -471,13 +710,16 @@ public class SocialSharing extends CordovaPlugin {
}
private static String getFileName(String url) {
+ if (url.endsWith("/")) {
+ url = url.substring(0, url.length()-1);
+ }
final String pattern = ".*/([^?#]+)?";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(url);
if (m.find()) {
return m.group(1);
} else {
- return null;
+ return "file";
}
}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/BuildHelper.java b/StoneIsland/platforms/android/src/org/apache/cordova/BuildHelper.java
new file mode 100644
index 00000000..d9b18aa2
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/BuildHelper.java
@@ -0,0 +1,70 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+
+package org.apache.cordova;
+
+/*
+ * This is a utility class that allows us to get the BuildConfig variable, which is required
+ * for the use of different providers. This is not guaranteed to work, and it's better for this
+ * to be set in the build step in config.xml
+ *
+ */
+
+import android.app.Activity;
+import android.content.Context;
+
+import java.lang.reflect.Field;
+
+
+public class BuildHelper {
+
+
+ private static String TAG="BuildHelper";
+
+ /*
+ * This needs to be implemented if you wish to use the Camera Plugin or other plugins
+ * that read the Build Configuration.
+ *
+ * Thanks to Phil@Medtronic and Graham Borland for finding the answer and posting it to
+ * StackOverflow. This is annoying as hell! However, this method does not work with
+ * ProGuard, and you should use the config.xml to define the application_id
+ *
+ */
+
+ public static Object getBuildConfigValue(Context ctx, String key)
+ {
+ try
+ {
+ Class<?> clazz = Class.forName(ctx.getPackageName() + ".BuildConfig");
+ Field field = clazz.getField(key);
+ return field.get(null);
+ } catch (ClassNotFoundException e) {
+ LOG.d(TAG, "Unable to get the BuildConfig, is this built with ANT?");
+ e.printStackTrace();
+ } catch (NoSuchFieldException e) {
+ LOG.d(TAG, key + " is not a valid field. Check your build.gradle");
+ } catch (IllegalAccessException e) {
+ LOG.d(TAG, "Illegal Access Exception: Let's print a stack trace.");
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/PermissionHelper.java b/StoneIsland/platforms/android/src/org/apache/cordova/PermissionHelper.java
new file mode 100644
index 00000000..bbd79112
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/PermissionHelper.java
@@ -0,0 +1,138 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+package org.apache.cordova;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.LOG;
+
+import android.content.pm.PackageManager;
+
+/**
+ * This class provides reflective methods for permission requesting and checking so that plugins
+ * written for cordova-android 5.0.0+ can still compile with earlier cordova-android versions.
+ */
+public class PermissionHelper {
+ private static final String LOG_TAG = "CordovaPermissionHelper";
+
+ /**
+ * Requests a "dangerous" permission for the application at runtime. This is a helper method
+ * alternative to cordovaInterface.requestPermission() that does not require the project to be
+ * built with cordova-android 5.0.0+
+ *
+ * @param plugin The plugin the permission is being requested for
+ * @param requestCode A requestCode to be passed to the plugin's onRequestPermissionResult()
+ * along with the result of the permission request
+ * @param permission The permission to be requested
+ */
+ public static void requestPermission(CordovaPlugin plugin, int requestCode, String permission) {
+ PermissionHelper.requestPermissions(plugin, requestCode, new String[] {permission});
+ }
+
+ /**
+ * Requests "dangerous" permissions for the application at runtime. This is a helper method
+ * alternative to cordovaInterface.requestPermissions() that does not require the project to be
+ * built with cordova-android 5.0.0+
+ *
+ * @param plugin The plugin the permissions are being requested for
+ * @param requestCode A requestCode to be passed to the plugin's onRequestPermissionResult()
+ * along with the result of the permissions request
+ * @param permissions The permissions to be requested
+ */
+ public static void requestPermissions(CordovaPlugin plugin, int requestCode, String[] permissions) {
+ try {
+ Method requestPermission = CordovaInterface.class.getDeclaredMethod(
+ "requestPermissions", CordovaPlugin.class, int.class, String[].class);
+
+ // If there is no exception, then this is cordova-android 5.0.0+
+ requestPermission.invoke(plugin.cordova, plugin, requestCode, permissions);
+ } catch (NoSuchMethodException noSuchMethodException) {
+ // cordova-android version is less than 5.0.0, so permission is implicitly granted
+ LOG.d(LOG_TAG, "No need to request permissions " + Arrays.toString(permissions));
+
+ // Notify the plugin that all were granted by using more reflection
+ deliverPermissionResult(plugin, requestCode, permissions);
+ } catch (IllegalAccessException illegalAccessException) {
+ // Should never be caught; this is a public method
+ LOG.e(LOG_TAG, "IllegalAccessException when requesting permissions " + Arrays.toString(permissions), illegalAccessException);
+ } catch(InvocationTargetException invocationTargetException) {
+ // This method does not throw any exceptions, so this should never be caught
+ LOG.e(LOG_TAG, "invocationTargetException when requesting permissions " + Arrays.toString(permissions), invocationTargetException);
+ }
+ }
+
+ /**
+ * Checks at runtime to see if the application has been granted a permission. This is a helper
+ * method alternative to cordovaInterface.hasPermission() that does not require the project to
+ * be built with cordova-android 5.0.0+
+ *
+ * @param plugin The plugin the permission is being checked against
+ * @param permission The permission to be checked
+ *
+ * @return True if the permission has already been granted and false otherwise
+ */
+ public static boolean hasPermission(CordovaPlugin plugin, String permission) {
+ try {
+ Method hasPermission = CordovaInterface.class.getDeclaredMethod("hasPermission", String.class);
+
+ // If there is no exception, then this is cordova-android 5.0.0+
+ return (Boolean) hasPermission.invoke(plugin.cordova, permission);
+ } catch (NoSuchMethodException noSuchMethodException) {
+ // cordova-android version is less than 5.0.0, so permission is implicitly granted
+ LOG.d(LOG_TAG, "No need to check for permission " + permission);
+ return true;
+ } catch (IllegalAccessException illegalAccessException) {
+ // Should never be caught; this is a public method
+ LOG.e(LOG_TAG, "IllegalAccessException when checking permission " + permission, illegalAccessException);
+ } catch(InvocationTargetException invocationTargetException) {
+ // This method does not throw any exceptions, so this should never be caught
+ LOG.e(LOG_TAG, "invocationTargetException when checking permission " + permission, invocationTargetException);
+ }
+ return false;
+ }
+
+ private static void deliverPermissionResult(CordovaPlugin plugin, int requestCode, String[] permissions) {
+ // Generate the request results
+ int[] requestResults = new int[permissions.length];
+ Arrays.fill(requestResults, PackageManager.PERMISSION_GRANTED);
+
+ try {
+ Method onRequestPermissionResult = CordovaPlugin.class.getDeclaredMethod(
+ "onRequestPermissionResult", int.class, String[].class, int[].class);
+
+ onRequestPermissionResult.invoke(plugin, requestCode, permissions, requestResults);
+ } catch (NoSuchMethodException noSuchMethodException) {
+ // Should never be caught since the plugin must be written for cordova-android 5.0.0+ if it
+ // made it to this point
+ LOG.e(LOG_TAG, "NoSuchMethodException when delivering permissions results", noSuchMethodException);
+ } catch (IllegalAccessException illegalAccessException) {
+ // Should never be caught; this is a public method
+ LOG.e(LOG_TAG, "IllegalAccessException when delivering permissions results", illegalAccessException);
+ } catch(InvocationTargetException invocationTargetException) {
+ // This method may throw a JSONException. We are just duplicating cordova-android's
+ // exception handling behavior here; all it does is log the exception in CordovaActivity,
+ // print the stacktrace, and ignore it
+ LOG.e(LOG_TAG, "InvocationTargetException when delivering permissions results", invocationTargetException);
+ }
+ }
+}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/device/Device.java b/StoneIsland/platforms/android/src/org/apache/cordova/device/Device.java
index 5eded907..e9efcb49 100755..100644
--- a/StoneIsland/platforms/android/src/org/apache/cordova/device/Device.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/device/Device.java
@@ -67,13 +67,15 @@ public class Device extends CordovaPlugin {
* @return True if the action was valid, false if not.
*/
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (action.equals("getDeviceInfo")) {
+ if ("getDeviceInfo".equals(action)) {
JSONObject r = new JSONObject();
r.put("uuid", Device.uuid);
r.put("version", this.getOSVersion());
r.put("platform", this.getPlatform());
r.put("model", this.getModel());
r.put("manufacturer", this.getManufacturer());
+ r.put("isVirtual", this.isVirtual());
+ r.put("serial", this.getSerialNumber());
callbackContext.success(r);
}
else {
@@ -88,7 +90,7 @@ public class Device extends CordovaPlugin {
/**
* Get the OS name.
- *
+ *
* @return
*/
public String getPlatform() {
@@ -125,6 +127,12 @@ public class Device extends CordovaPlugin {
String manufacturer = android.os.Build.MANUFACTURER;
return manufacturer;
}
+
+ public String getSerialNumber() {
+ String serial = android.os.Build.SERIAL;
+ return serial;
+ }
+
/**
* Get the OS version.
*
@@ -148,7 +156,7 @@ public class Device extends CordovaPlugin {
/**
* Function to check if the device is manufactured by Amazon
- *
+ *
* @return
*/
public boolean isAmazonDevice() {
@@ -158,4 +166,9 @@ public class Device extends CordovaPlugin {
return false;
}
+ public boolean isVirtual() {
+ return android.os.Build.FINGERPRINT.contains("generic") ||
+ android.os.Build.PRODUCT.contains("sdk");
+ }
+
}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/dialogs/Notification.java b/StoneIsland/platforms/android/src/org/apache/cordova/dialogs/Notification.java
index 3bc3cee6..f19bc888 100755..100644
--- a/StoneIsland/platforms/android/src/org/apache/cordova/dialogs/Notification.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/dialogs/Notification.java
@@ -21,6 +21,7 @@ package org.apache.cordova.dialogs;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.LOG;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
@@ -31,6 +32,7 @@ import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
+import android.content.res.Resources;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
@@ -48,6 +50,8 @@ import android.widget.TextView;
*/
public class Notification extends CordovaPlugin {
+ private static final String LOG_TAG = "Notification";
+
public int confirmResult = -1;
public ProgressDialog spinnerDialog = null;
public ProgressDialog progressDialog = null;
@@ -139,6 +143,7 @@ public class Notification extends CordovaPlugin {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
}
}
}
@@ -215,7 +220,9 @@ public class Notification extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 1));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on first button.");
+ }
}
// Second button
@@ -228,7 +235,9 @@ public class Notification extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 2));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on second button.");
+ }
}
// Third button
@@ -241,7 +250,9 @@ public class Notification extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 3));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on third button.");
+ }
}
dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
public void onCancel(DialogInterface dialog)
@@ -276,7 +287,14 @@ public class Notification extends CordovaPlugin {
Runnable runnable = new Runnable() {
public void run() {
final EditText promptInput = new EditText(cordova.getActivity());
- promptInput.setHint(defaultText);
+
+ /* CB-11677 - By default, prompt input text color is set according current theme.
+ But for some android versions is not visible (for example 5.1.1).
+ android.R.color.primary_text_light will make text visible on all versions. */
+ Resources resources = cordova.getActivity().getResources();
+ int promptInputTextColor = resources.getColor(android.R.color.primary_text_light);
+ promptInput.setTextColor(promptInputTextColor);
+ promptInput.setText(defaultText);
AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
dlg.setMessage(message);
dlg.setTitle(title);
@@ -296,11 +314,15 @@ public class Notification extends CordovaPlugin {
try {
result.put("buttonIndex",1);
result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on first button.", e);
+ }
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on first button.");
+ }
}
// Second button
@@ -313,11 +335,15 @@ public class Notification extends CordovaPlugin {
try {
result.put("buttonIndex",2);
result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on second button.", e);
+ }
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on second button.");
+ }
}
// Third button
@@ -330,11 +356,15 @@ public class Notification extends CordovaPlugin {
try {
result.put("buttonIndex",3);
result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on third button.", e);
+ }
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on third button.");
+ }
}
dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
public void onCancel(DialogInterface dialog){
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/geolocation/Geolocation.java b/StoneIsland/platforms/android/src/org/apache/cordova/geolocation/Geolocation.java
new file mode 100644
index 00000000..6452170a
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/geolocation/Geolocation.java
@@ -0,0 +1,107 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+
+package org.apache.cordova.geolocation;
+
+import android.content.pm.PackageManager;
+import android.Manifest;
+import android.os.Build;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaArgs;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PermissionHelper;
+import org.apache.cordova.PluginResult;
+import org.apache.cordova.LOG;
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import javax.security.auth.callback.Callback;
+
+public class Geolocation extends CordovaPlugin {
+
+ String TAG = "GeolocationPlugin";
+ CallbackContext context;
+
+ String [] permissions = { Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION };
+
+
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ LOG.d(TAG, "We are entering execute");
+ context = callbackContext;
+ if(action.equals("getPermission"))
+ {
+ if(hasPermisssion())
+ {
+ PluginResult r = new PluginResult(PluginResult.Status.OK);
+ context.sendPluginResult(r);
+ return true;
+ }
+ else {
+ PermissionHelper.requestPermissions(this, 0, permissions);
+ }
+ return true;
+ }
+ return false;
+ }
+
+
+ public void onRequestPermissionResult(int requestCode, String[] permissions,
+ int[] grantResults) throws JSONException
+ {
+ PluginResult result;
+ //This is important if we're using Cordova without using Cordova, but we have the geolocation plugin installed
+ if(context != null) {
+ for (int r : grantResults) {
+ if (r == PackageManager.PERMISSION_DENIED) {
+ LOG.d(TAG, "Permission Denied!");
+ result = new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION);
+ context.sendPluginResult(result);
+ return;
+ }
+
+ }
+ result = new PluginResult(PluginResult.Status.OK);
+ context.sendPluginResult(result);
+ }
+ }
+
+ public boolean hasPermisssion() {
+ for(String p : permissions)
+ {
+ if(!PermissionHelper.hasPermission(this, p))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /*
+ * We override this so that we can access the permissions variable, which no longer exists in
+ * the parent class, since we can't initialize it reliably in the constructor!
+ */
+
+ public void requestPermissions(int requestCode)
+ {
+ PermissionHelper.requestPermissions(this, requestCode, permissions);
+ }
+
+
+
+}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowser.java b/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowser.java
index 60437451..8f4f3d97 100755..100644
--- a/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowser.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowser.java
@@ -19,7 +19,6 @@
package org.apache.cordova.inappbrowser;
import android.annotation.SuppressLint;
-import org.apache.cordova.inappbrowser.InAppBrowserDialog;
import android.content.Context;
import android.content.Intent;
import android.provider.Browser;
@@ -30,7 +29,6 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.InputType;
-import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.KeyEvent;
@@ -41,17 +39,21 @@ import android.view.WindowManager.LayoutParams;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.webkit.CookieManager;
+import android.webkit.CookieSyncManager;
+import android.webkit.HttpAuthHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
-import android.widget.Button;
import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.Config;
import org.apache.cordova.CordovaArgs;
+import org.apache.cordova.CordovaHttpAuthHandler;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.LOG;
@@ -61,6 +63,7 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.StringTokenizer;
@@ -82,6 +85,8 @@ public class InAppBrowser extends CordovaPlugin {
private static final String CLEAR_ALL_CACHE = "clearcache";
private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
private static final String HARDWARE_BACK_BUTTON = "hardwareback";
+ private static final String MEDIA_PLAYBACK_REQUIRES_USER_ACTION = "mediaPlaybackRequiresUserAction";
+ private static final String SHOULD_PAUSE = "shouldPauseOnSuspend";
private InAppBrowserDialog dialog;
private WebView inAppWebView;
@@ -93,6 +98,8 @@ public class InAppBrowser extends CordovaPlugin {
private boolean clearAllCache = false;
private boolean clearSessionCache = false;
private boolean hadwareBackButton = true;
+ private boolean mediaPlaybackRequiresUserGesture = false;
+ private boolean shouldPauseInAppBrowser = false;
/**
* Executes the request and returns PluginResult.
@@ -113,7 +120,7 @@ public class InAppBrowser extends CordovaPlugin {
final String target = t;
final HashMap<String, Boolean> features = parseFeature(args.optString(2));
- Log.d(LOG_TAG, "target = " + target);
+ LOG.d(LOG_TAG, "target = " + target);
this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
@@ -121,7 +128,7 @@ public class InAppBrowser extends CordovaPlugin {
String result = "";
// SELF
if (SELF.equals(target)) {
- Log.d(LOG_TAG, "in self");
+ LOG.d(LOG_TAG, "in self");
/* This code exists for compatibility between 3.x and 4.x versions of Cordova.
* Previously the Config class had a static method, isUrlWhitelisted(). That
* responsibility has been moved to the plugins, with an aggregating method in
@@ -136,8 +143,11 @@ public class InAppBrowser extends CordovaPlugin {
Method iuw = Config.class.getMethod("isUrlWhiteListed", String.class);
shouldAllowNavigation = (Boolean)iuw.invoke(null, url);
} catch (NoSuchMethodException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (InvocationTargetException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
}
}
if (shouldAllowNavigation == null) {
@@ -147,20 +157,23 @@ public class InAppBrowser extends CordovaPlugin {
Method san = pm.getClass().getMethod("shouldAllowNavigation", String.class);
shouldAllowNavigation = (Boolean)san.invoke(pm, url);
} catch (NoSuchMethodException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (InvocationTargetException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
}
}
// load in webview
if (Boolean.TRUE.equals(shouldAllowNavigation)) {
- Log.d(LOG_TAG, "loading in webview");
+ LOG.d(LOG_TAG, "loading in webview");
webView.loadUrl(url);
}
//Load the dialer
else if (url.startsWith(WebView.SCHEME_TEL))
{
try {
- Log.d(LOG_TAG, "loading in dialer");
+ LOG.d(LOG_TAG, "loading in dialer");
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(url));
cordova.getActivity().startActivity(intent);
@@ -170,18 +183,18 @@ public class InAppBrowser extends CordovaPlugin {
}
// load in InAppBrowser
else {
- Log.d(LOG_TAG, "loading in InAppBrowser");
+ LOG.d(LOG_TAG, "loading in InAppBrowser");
result = showWebPage(url, features);
}
}
// SYSTEM
else if (SYSTEM.equals(target)) {
- Log.d(LOG_TAG, "in system");
+ LOG.d(LOG_TAG, "in system");
result = openExternal(url);
}
// BLANK - or anything else
else {
- Log.d(LOG_TAG, "in blank");
+ LOG.d(LOG_TAG, "in blank");
result = showWebPage(url, features);
}
@@ -197,7 +210,7 @@ public class InAppBrowser extends CordovaPlugin {
else if (action.equals("injectScriptCode")) {
String jsWrapper = null;
if (args.getBoolean(1)) {
- jsWrapper = String.format("prompt(JSON.stringify([eval(%%s)]), 'gap-iab://%s')", callbackContext.getCallbackId());
+ jsWrapper = String.format("(function(){prompt(JSON.stringify([eval(%%s)]), 'gap-iab://%s')})()", callbackContext.getCallbackId());
}
injectDeferredObject(args.getString(0), jsWrapper);
}
@@ -254,6 +267,26 @@ public class InAppBrowser extends CordovaPlugin {
}
/**
+ * Called when the system is about to start resuming a previous activity.
+ */
+ @Override
+ public void onPause(boolean multitasking) {
+ if (shouldPauseInAppBrowser) {
+ inAppWebView.onPause();
+ }
+ }
+
+ /**
+ * Called when the activity will start interacting with the user.
+ */
+ @Override
+ public void onResume(boolean multitasking) {
+ if (shouldPauseInAppBrowser) {
+ inAppWebView.onResume();
+ }
+ }
+
+ /**
* Called by AccelBroker when listener is to be shut down.
* Stop listener.
*/
@@ -350,7 +383,7 @@ public class InAppBrowser extends CordovaPlugin {
this.cordova.getActivity().startActivity(intent);
return "";
} catch (android.content.ActivityNotFoundException e) {
- Log.d(LOG_TAG, "InAppBrowser: Error loading url "+url+":"+ e.toString());
+ LOG.d(LOG_TAG, "InAppBrowser: Error loading url "+url+":"+ e.toString());
return e.toString();
}
}
@@ -359,20 +392,22 @@ public class InAppBrowser extends CordovaPlugin {
* Closes the dialog
*/
public void closeDialog() {
- final WebView childView = this.inAppWebView;
- // The JS protects against multiple calls, so this should happen only when
- // closeDialog() is called by other native code.
- if (childView == null) {
- return;
- }
this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
+ final WebView childView = inAppWebView;
+ // The JS protects against multiple calls, so this should happen only when
+ // closeDialog() is called by other native code.
+ if (childView == null) {
+ return;
+ }
+
childView.setWebViewClient(new WebViewClient() {
// NB: wait for about:blank before dismissing
public void onPageFinished(WebView view, String url) {
if (dialog != null) {
dialog.dismiss();
+ dialog = null;
}
}
});
@@ -380,16 +415,16 @@ public class InAppBrowser extends CordovaPlugin {
// other than your app's UI thread, it can cause unexpected results."
// http://developer.android.com/guide/webapps/migrating.html#Threads
childView.loadUrl("about:blank");
+
+ try {
+ JSONObject obj = new JSONObject();
+ obj.put("type", EXIT_EVENT);
+ sendUpdate(obj, false);
+ } catch (JSONException ex) {
+ LOG.d(LOG_TAG, "Should never happen");
+ }
}
});
-
- try {
- JSONObject obj = new JSONObject();
- obj.put("type", EXIT_EVENT);
- sendUpdate(obj, false);
- } catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
- }
}
/**
@@ -468,6 +503,8 @@ public class InAppBrowser extends CordovaPlugin {
showLocationBar = true;
showZoomControls = true;
openWindowHidden = false;
+ mediaPlaybackRequiresUserGesture = false;
+
if (features != null) {
Boolean show = features.get(LOCATION);
if (show != null) {
@@ -485,6 +522,10 @@ public class InAppBrowser extends CordovaPlugin {
if (hardwareBack != null) {
hadwareBackButton = hardwareBack.booleanValue();
}
+ Boolean mediaPlayback = features.get(MEDIA_PLAYBACK_REQUIRES_USER_ACTION);
+ if (mediaPlayback != null) {
+ mediaPlaybackRequiresUserGesture = mediaPlayback.booleanValue();
+ }
Boolean cache = features.get(CLEAR_ALL_CACHE);
if (cache != null) {
clearAllCache = cache.booleanValue();
@@ -494,6 +535,10 @@ public class InAppBrowser extends CordovaPlugin {
clearSessionCache = cache.booleanValue();
}
}
+ Boolean shouldPause = features.get(SHOULD_PAUSE);
+ if (shouldPause != null) {
+ shouldPauseInAppBrowser = shouldPause.booleanValue();
+ }
}
final CordovaWebView thatWebView = this.webView;
@@ -516,6 +561,12 @@ public class InAppBrowser extends CordovaPlugin {
@SuppressLint("NewApi")
public void run() {
+
+ // CB-6702 InAppBrowser hangs when opening more than one instance
+ if (dialog != null) {
+ dialog.dismiss();
+ };
+
// Let's create the main dialog
dialog = new InAppBrowserDialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
@@ -541,26 +592,28 @@ public class InAppBrowser extends CordovaPlugin {
actionButtonContainer.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
actionButtonContainer.setHorizontalGravity(Gravity.LEFT);
actionButtonContainer.setVerticalGravity(Gravity.CENTER_VERTICAL);
- actionButtonContainer.setId(1);
+ actionButtonContainer.setId(Integer.valueOf(1));
// Back button
- Button back = new Button(cordova.getActivity());
+ ImageButton back = new ImageButton(cordova.getActivity());
RelativeLayout.LayoutParams backLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
backLayoutParams.addRule(RelativeLayout.ALIGN_LEFT);
back.setLayoutParams(backLayoutParams);
back.setContentDescription("Back Button");
- back.setId(2);
+ back.setId(Integer.valueOf(2));
Resources activityRes = cordova.getActivity().getResources();
int backResId = activityRes.getIdentifier("ic_action_previous_item", "drawable", cordova.getActivity().getPackageName());
Drawable backIcon = activityRes.getDrawable(backResId);
- if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
- {
- back.setBackgroundDrawable(backIcon);
- }
+ if (Build.VERSION.SDK_INT >= 16)
+ back.setBackground(null);
else
- {
- back.setBackground(backIcon);
- }
+ back.setBackgroundDrawable(null);
+ back.setImageDrawable(backIcon);
+ back.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10));
+ if (Build.VERSION.SDK_INT >= 16)
+ back.getAdjustViewBounds();
+
back.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
goBack();
@@ -568,22 +621,24 @@ public class InAppBrowser extends CordovaPlugin {
});
// Forward button
- Button forward = new Button(cordova.getActivity());
+ ImageButton forward = new ImageButton(cordova.getActivity());
RelativeLayout.LayoutParams forwardLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
forwardLayoutParams.addRule(RelativeLayout.RIGHT_OF, 2);
forward.setLayoutParams(forwardLayoutParams);
forward.setContentDescription("Forward Button");
- forward.setId(3);
+ forward.setId(Integer.valueOf(3));
int fwdResId = activityRes.getIdentifier("ic_action_next_item", "drawable", cordova.getActivity().getPackageName());
Drawable fwdIcon = activityRes.getDrawable(fwdResId);
- if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
- {
- forward.setBackgroundDrawable(fwdIcon);
- }
+ if (Build.VERSION.SDK_INT >= 16)
+ forward.setBackground(null);
else
- {
- forward.setBackground(fwdIcon);
- }
+ forward.setBackgroundDrawable(null);
+ forward.setImageDrawable(fwdIcon);
+ forward.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ forward.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10));
+ if (Build.VERSION.SDK_INT >= 16)
+ forward.getAdjustViewBounds();
+
forward.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
goForward();
@@ -596,7 +651,7 @@ public class InAppBrowser extends CordovaPlugin {
textLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1);
textLayoutParams.addRule(RelativeLayout.LEFT_OF, 5);
edittext.setLayoutParams(textLayoutParams);
- edittext.setId(4);
+ edittext.setId(Integer.valueOf(4));
edittext.setSingleLine(true);
edittext.setText(url);
edittext.setInputType(InputType.TYPE_TEXT_VARIATION_URI);
@@ -614,22 +669,24 @@ public class InAppBrowser extends CordovaPlugin {
});
// Close/Done button
- Button close = new Button(cordova.getActivity());
+ ImageButton close = new ImageButton(cordova.getActivity());
RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
close.setLayoutParams(closeLayoutParams);
forward.setContentDescription("Close Button");
- close.setId(5);
+ close.setId(Integer.valueOf(5));
int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName());
Drawable closeIcon = activityRes.getDrawable(closeResId);
- if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
- {
- close.setBackgroundDrawable(closeIcon);
- }
+ if (Build.VERSION.SDK_INT >= 16)
+ close.setBackground(null);
else
- {
- close.setBackground(closeIcon);
- }
+ close.setBackgroundDrawable(null);
+ close.setImageDrawable(closeIcon);
+ close.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10));
+ if (Build.VERSION.SDK_INT >= 16)
+ close.getAdjustViewBounds();
+
close.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
closeDialog();
@@ -639,6 +696,7 @@ public class InAppBrowser extends CordovaPlugin {
// WebView
inAppWebView = new WebView(cordova.getActivity());
inAppWebView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
+ inAppWebView.setId(Integer.valueOf(6));
inAppWebView.setWebChromeClient(new InAppChromeClient(thatWebView));
WebViewClient client = new InAppBrowserClient(thatWebView, edittext);
inAppWebView.setWebViewClient(client);
@@ -648,6 +706,20 @@ public class InAppBrowser extends CordovaPlugin {
settings.setBuiltInZoomControls(showZoomControls);
settings.setPluginState(android.webkit.WebSettings.PluginState.ON);
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ settings.setMediaPlaybackRequiresUserGesture(mediaPlaybackRequiresUserGesture);
+ }
+
+ String overrideUserAgent = preferences.getString("OverrideUserAgent", null);
+ String appendUserAgent = preferences.getString("AppendUserAgent", null);
+
+ if (overrideUserAgent != null) {
+ settings.setUserAgentString(overrideUserAgent);
+ }
+ if (appendUserAgent != null) {
+ settings.setUserAgentString(settings.getUserAgentString() + appendUserAgent);
+ }
+
//Toggle whether this is enabled or not!
Bundle appSettings = cordova.getActivity().getIntent().getExtras();
boolean enableDatabase = appSettings == null ? true : appSettings.getBoolean("InAppBrowserStorageEnabled", true);
@@ -665,7 +737,7 @@ public class InAppBrowser extends CordovaPlugin {
}
inAppWebView.loadUrl(url);
- inAppWebView.setId(6);
+ inAppWebView.setId(Integer.valueOf(6));
inAppWebView.getSettings().setLoadWithOverviewMode(true);
inAppWebView.getSettings().setUseWideViewPort(true);
inAppWebView.requestFocus();
@@ -753,34 +825,30 @@ public class InAppBrowser extends CordovaPlugin {
}
/**
- * Notify the host application that a page has started loading.
+ * Override the URL that should be loaded
+ *
+ * This handles a small subset of all the URIs that would be encountered.
*
- * @param view The webview initiating the callback.
- * @param url The url of the page.
+ * @param webView
+ * @param url
*/
@Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- super.onPageStarted(view, url, favicon);
- String newloc = "";
- if (url.startsWith("http:") || url.startsWith("https:") || url.startsWith("file:")) {
- newloc = url;
- }
- // If dialing phone (tel:5551212)
- else if (url.startsWith(WebView.SCHEME_TEL)) {
+ public boolean shouldOverrideUrlLoading(WebView webView, String url) {
+ if (url.startsWith(WebView.SCHEME_TEL)) {
try {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(url));
cordova.getActivity().startActivity(intent);
+ return true;
} catch (android.content.ActivityNotFoundException e) {
LOG.e(LOG_TAG, "Error dialing " + url + ": " + e.toString());
}
- }
-
- else if (url.startsWith("geo:") || url.startsWith(WebView.SCHEME_MAILTO) || url.startsWith("market:")) {
+ } else if (url.startsWith("geo:") || url.startsWith(WebView.SCHEME_MAILTO) || url.startsWith("market:") || url.startsWith("intent:")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
cordova.getActivity().startActivity(intent);
+ return true;
} catch (android.content.ActivityNotFoundException e) {
LOG.e(LOG_TAG, "Error with " + url + ": " + e.toString());
}
@@ -795,8 +863,7 @@ public class InAppBrowser extends CordovaPlugin {
int parmIndex = url.indexOf('?');
if (parmIndex == -1) {
address = url.substring(4);
- }
- else {
+ } else {
address = url.substring(4, parmIndex);
// If body, then set sms body
@@ -812,32 +879,64 @@ public class InAppBrowser extends CordovaPlugin {
intent.putExtra("address", address);
intent.setType("vnd.android-dir/mms-sms");
cordova.getActivity().startActivity(intent);
+ return true;
} catch (android.content.ActivityNotFoundException e) {
LOG.e(LOG_TAG, "Error sending sms " + url + ":" + e.toString());
}
}
- else {
+ return false;
+ }
+
+
+ /*
+ * onPageStarted fires the LOAD_START_EVENT
+ *
+ * @param view
+ * @param url
+ * @param favicon
+ */
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ super.onPageStarted(view, url, favicon);
+ String newloc = "";
+ if (url.startsWith("http:") || url.startsWith("https:") || url.startsWith("file:")) {
+ newloc = url;
+ }
+ else
+ {
+ // Assume that everything is HTTP at this point, because if we don't specify,
+ // it really should be. Complain loudly about this!!!
+ LOG.e(LOG_TAG, "Possible Uncaught/Unknown URI");
newloc = "http://" + url;
}
+ // Update the UI if we haven't already
if (!newloc.equals(edittext.getText().toString())) {
edittext.setText(newloc);
- }
+ }
try {
JSONObject obj = new JSONObject();
obj.put("type", LOAD_START_EVENT);
obj.put("url", newloc);
-
sendUpdate(obj, true);
} catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
+ LOG.e(LOG_TAG, "URI passed in has caused a JSON error.");
}
}
+
+
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
+ // CB-10395 InAppBrowser's WebView not storing cookies reliable to local device storage
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+ CookieManager.getInstance().flush();
+ } else {
+ CookieSyncManager.getInstance().sync();
+ }
+
try {
JSONObject obj = new JSONObject();
obj.put("type", LOAD_STOP_EVENT);
@@ -845,7 +944,7 @@ public class InAppBrowser extends CordovaPlugin {
sendUpdate(obj, true);
} catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
+ LOG.d(LOG_TAG, "Should never happen");
}
}
@@ -861,9 +960,46 @@ public class InAppBrowser extends CordovaPlugin {
sendUpdate(obj, true, PluginResult.Status.ERROR);
} catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
+ LOG.d(LOG_TAG, "Should never happen");
}
}
+
+ /**
+ * On received http auth request.
+ */
+ @Override
+ public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
+
+ // Check if there is some plugin which can resolve this auth challenge
+ PluginManager pluginManager = null;
+ try {
+ Method gpm = webView.getClass().getMethod("getPluginManager");
+ pluginManager = (PluginManager)gpm.invoke(webView);
+ } catch (NoSuchMethodException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ } catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ } catch (InvocationTargetException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
+
+ if (pluginManager == null) {
+ try {
+ Field pmf = webView.getClass().getField("pluginManager");
+ pluginManager = (PluginManager)pmf.get(webView);
+ } catch (NoSuchFieldException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ } catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
+ }
+
+ if (pluginManager != null && pluginManager.onReceivedHttpAuthRequest(webView, new CordovaHttpAuthHandler(handler), host, realm)) {
+ return;
+ }
+
+ // By default handle 401 like we'd normally do!
+ super.onReceivedHttpAuthRequest(view, handler, host, realm);
+ }
}
}
-
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowserDialog.java b/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowserDialog.java
index d7017202..e7b212f2 100755..100644
--- a/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowserDialog.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppBrowserDialog.java
@@ -21,7 +21,6 @@ package org.apache.cordova.inappbrowser;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
-import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppChromeClient.java b/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppChromeClient.java
index a2145e6a..a2145e6a 100755..100644
--- a/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppChromeClient.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/inappbrowser/InAppChromeClient.java
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/networkinformation/NetworkManager.java b/StoneIsland/platforms/android/src/org/apache/cordova/networkinformation/NetworkManager.java
index 4c85ddab..614b6e7b 100755
--- a/StoneIsland/platforms/android/src/org/apache/cordova/networkinformation/NetworkManager.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/networkinformation/NetworkManager.java
@@ -21,6 +21,7 @@ package org.apache.cordova.networkinformation;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.LOG;
import org.apache.cordova.PluginResult;
import org.apache.cordova.CordovaWebView;
import org.json.JSONArray;
@@ -33,7 +34,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.util.Log;
+
+import java.util.Locale;
public class NetworkManager extends CordovaPlugin {
@@ -45,14 +47,16 @@ public class NetworkManager extends CordovaPlugin {
public static final String WIMAX = "wimax";
// mobile
public static final String MOBILE = "mobile";
-
- // Android L calls this Cellular, because I have no idea!
+
+ // Android L calls this Cellular, because I have no idea!
public static final String CELLULAR = "cellular";
// 2G network types
+ public static final String TWO_G = "2g";
public static final String GSM = "gsm";
public static final String GPRS = "gprs";
public static final String EDGE = "edge";
// 3G network types
+ public static final String THREE_G = "3g";
public static final String CDMA = "cdma";
public static final String UMTS = "umts";
public static final String HSPA = "hspa";
@@ -61,12 +65,14 @@ public class NetworkManager extends CordovaPlugin {
public static final String ONEXRTT = "1xrtt";
public static final String EHRPD = "ehrpd";
// 4G network types
+ public static final String FOUR_G = "4g";
public static final String LTE = "lte";
public static final String UMB = "umb";
public static final String HSPA_PLUS = "hspa+";
// return type
public static final String TYPE_UNKNOWN = "unknown";
public static final String TYPE_ETHERNET = "ethernet";
+ public static final String TYPE_ETHERNET_SHORT = "eth";
public static final String TYPE_WIFI = "wifi";
public static final String TYPE_2G = "2g";
public static final String TYPE_3G = "3g";
@@ -125,7 +131,9 @@ public class NetworkManager extends CordovaPlugin {
String connectionType = "";
try {
connectionType = this.getConnectionInfo(info).get("type").toString();
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, connectionType);
pluginResult.setKeepCallback(true);
@@ -143,7 +151,7 @@ public class NetworkManager extends CordovaPlugin {
try {
webView.getContext().unregisterReceiver(this.receiver);
} catch (Exception e) {
- Log.e(LOG_TAG, "Error unregistering network receiver: " + e.getMessage(), e);
+ LOG.e(LOG_TAG, "Error unregistering network receiver: " + e.getMessage(), e);
} finally {
receiver = null;
}
@@ -169,7 +177,9 @@ public class NetworkManager extends CordovaPlugin {
String connectionType = "";
try {
connectionType = thisInfo.get("type").toString();
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
sendUpdate(connectionType);
lastInfo = thisInfo;
@@ -196,15 +206,17 @@ public class NetworkManager extends CordovaPlugin {
extraInfo = info.getExtraInfo();
}
- Log.d("CordovaNetworkManager", "Connection Type: " + type);
- Log.d("CordovaNetworkManager", "Connection Extra Info: " + extraInfo);
+ LOG.d(LOG_TAG, "Connection Type: " + type);
+ LOG.d(LOG_TAG, "Connection Extra Info: " + extraInfo);
JSONObject connectionInfo = new JSONObject();
try {
connectionInfo.put("type", type);
connectionInfo.put("extraInfo", extraInfo);
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
return connectionInfo;
}
@@ -231,30 +243,38 @@ public class NetworkManager extends CordovaPlugin {
*/
private String getType(NetworkInfo info) {
if (info != null) {
- String type = info.getTypeName();
+ String type = info.getTypeName().toLowerCase(Locale.US);
- if (type.toLowerCase().equals(WIFI)) {
+ LOG.d(LOG_TAG, "toLower : " + type.toLowerCase());
+ LOG.d(LOG_TAG, "wifi : " + WIFI);
+ if (type.equals(WIFI)) {
return TYPE_WIFI;
}
- else if (type.toLowerCase().equals(MOBILE) || type.toLowerCase().equals(CELLULAR)) {
- type = info.getSubtypeName();
- if (type.toLowerCase().equals(GSM) ||
- type.toLowerCase().equals(GPRS) ||
- type.toLowerCase().equals(EDGE)) {
+ else if (type.toLowerCase().equals(TYPE_ETHERNET) || type.toLowerCase().startsWith(TYPE_ETHERNET_SHORT)) {
+ return TYPE_ETHERNET;
+ }
+ else if (type.equals(MOBILE) || type.equals(CELLULAR)) {
+ type = info.getSubtypeName().toLowerCase(Locale.US);
+ if (type.equals(GSM) ||
+ type.equals(GPRS) ||
+ type.equals(EDGE) ||
+ type.equals(TWO_G)) {
return TYPE_2G;
}
- else if (type.toLowerCase().startsWith(CDMA) ||
- type.toLowerCase().equals(UMTS) ||
- type.toLowerCase().equals(ONEXRTT) ||
- type.toLowerCase().equals(EHRPD) ||
- type.toLowerCase().equals(HSUPA) ||
- type.toLowerCase().equals(HSDPA) ||
- type.toLowerCase().equals(HSPA)) {
+ else if (type.startsWith(CDMA) ||
+ type.equals(UMTS) ||
+ type.equals(ONEXRTT) ||
+ type.equals(EHRPD) ||
+ type.equals(HSUPA) ||
+ type.equals(HSDPA) ||
+ type.equals(HSPA) ||
+ type.equals(THREE_G)) {
return TYPE_3G;
}
- else if (type.toLowerCase().equals(LTE) ||
- type.toLowerCase().equals(UMB) ||
- type.toLowerCase().equals(HSPA_PLUS)) {
+ else if (type.equals(LTE) ||
+ type.equals(UMB) ||
+ type.equals(HSPA_PLUS) ||
+ type.equals(FOUR_G)) {
return TYPE_4G;
}
}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/splashscreen/SplashScreen.java b/StoneIsland/platforms/android/src/org/apache/cordova/splashscreen/SplashScreen.java
index 75ad724c..14b63790 100755..100644
--- a/StoneIsland/platforms/android/src/org/apache/cordova/splashscreen/SplashScreen.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/splashscreen/SplashScreen.java
@@ -25,13 +25,20 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
import android.os.Handler;
import android.view.Display;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
+import android.view.animation.Animation;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
@@ -44,9 +51,12 @@ public class SplashScreen extends CordovaPlugin {
// Cordova 3.x.x has a copy of this plugin bundled with it (SplashScreenInternal.java).
// Enable functionality only if running on 4.x.x.
private static final boolean HAS_BUILT_IN_SPLASH_SCREEN = Integer.valueOf(CordovaWebView.CORDOVA_VERSION.split("\\.")[0]) < 4;
+ private static final int DEFAULT_SPLASHSCREEN_DURATION = 3000;
+ private static final int DEFAULT_FADE_DURATION = 500;
private static Dialog splashDialog;
private static ProgressDialog spinnerDialog;
private static boolean firstShow = true;
+ private static boolean lastHideAfterDelay; // https://issues.apache.org/jira/browse/CB-9094
/**
* Displays the splash drawable.
@@ -69,11 +79,17 @@ public class SplashScreen extends CordovaPlugin {
@Override
protected void pluginInitialize() {
- if (HAS_BUILT_IN_SPLASH_SCREEN || !firstShow) {
+ if (HAS_BUILT_IN_SPLASH_SCREEN) {
return;
}
// Make WebView invisible while loading URL
- getView().setVisibility(View.INVISIBLE);
+ // CB-11326 Ensure we're calling this on UI thread
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getView().setVisibility(View.INVISIBLE);
+ }
+ });
int drawableId = preferences.getInteger("SplashDrawableId", 0);
if (drawableId == 0) {
String splashResource = preferences.getString("SplashScreen", "screen");
@@ -89,9 +105,14 @@ public class SplashScreen extends CordovaPlugin {
// Save initial orientation.
orientation = cordova.getActivity().getResources().getConfiguration().orientation;
- firstShow = false;
- loadSpinner();
- showSplashScreen(true);
+ if (firstShow) {
+ boolean autoHide = preferences.getBoolean("AutoHideSplashScreen", true);
+ showSplashScreen(autoHide);
+ }
+
+ if (preferences.getBoolean("SplashShowOnlyFirstTime", true)) {
+ firstShow = false;
+ }
}
/**
@@ -101,13 +122,26 @@ public class SplashScreen extends CordovaPlugin {
return preferences.getBoolean("SplashMaintainAspectRatio", false);
}
+ private int getFadeDuration () {
+ int fadeSplashScreenDuration = preferences.getBoolean("FadeSplashScreen", true) ?
+ preferences.getInteger("FadeSplashScreenDuration", DEFAULT_FADE_DURATION) : 0;
+
+ if (fadeSplashScreenDuration < 30) {
+ // [CB-9750] This value used to be in decimal seconds, so we will assume that if someone specifies 10
+ // they mean 10 seconds, and not the meaningless 10ms
+ fadeSplashScreenDuration *= 1000;
+ }
+
+ return fadeSplashScreenDuration;
+ }
+
@Override
public void onPause(boolean multitasking) {
if (HAS_BUILT_IN_SPLASH_SCREEN) {
return;
}
// hide the splash screen to avoid leaking a window
- this.removeSplashScreen();
+ this.removeSplashScreen(true);
}
@Override
@@ -116,7 +150,7 @@ public class SplashScreen extends CordovaPlugin {
return;
}
// hide the splash screen to avoid leaking a window
- this.removeSplashScreen();
+ this.removeSplashScreen(true);
// If we set this to true onDestroy, we lose track when we go from page to page!
//firstShow = true;
}
@@ -135,16 +169,6 @@ public class SplashScreen extends CordovaPlugin {
webView.postMessage("splashscreen", "show");
}
});
- } else if (action.equals("spinnerStart")) {
- if (!HAS_BUILT_IN_SPLASH_SCREEN) {
- final String title = args.getString(0);
- final String message = args.getString(1);
- cordova.getActivity().runOnUiThread(new Runnable() {
- public void run() {
- spinnerStart(title, message);
- }
- });
- }
} else {
return false;
}
@@ -160,17 +184,16 @@ public class SplashScreen extends CordovaPlugin {
}
if ("splashscreen".equals(id)) {
if ("hide".equals(data.toString())) {
- this.removeSplashScreen();
+ this.removeSplashScreen(false);
} else {
this.showSplashScreen(false);
}
} else if ("spinner".equals(id)) {
if ("stop".equals(data.toString())) {
- this.spinnerStop();
getView().setVisibility(View.VISIBLE);
}
} else if ("onReceivedError".equals(id)) {
- spinnerStop();
+ this.spinnerStop();
}
return null;
}
@@ -190,13 +213,45 @@ public class SplashScreen extends CordovaPlugin {
}
}
- private void removeSplashScreen() {
+ private void removeSplashScreen(final boolean forceHideImmediately) {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
if (splashDialog != null && splashDialog.isShowing()) {
- splashDialog.dismiss();
- splashDialog = null;
- splashImageView = null;
+ final int fadeSplashScreenDuration = getFadeDuration();
+ // CB-10692 If the plugin is being paused/destroyed, skip the fading and hide it immediately
+ if (fadeSplashScreenDuration > 0 && forceHideImmediately == false) {
+ AlphaAnimation fadeOut = new AlphaAnimation(1, 0);
+ fadeOut.setInterpolator(new DecelerateInterpolator());
+ fadeOut.setDuration(fadeSplashScreenDuration);
+
+ splashImageView.setAnimation(fadeOut);
+ splashImageView.startAnimation(fadeOut);
+
+ fadeOut.setAnimationListener(new Animation.AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ spinnerStop();
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ if (splashDialog != null && splashDialog.isShowing()) {
+ splashDialog.dismiss();
+ splashDialog = null;
+ splashImageView = null;
+ }
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+ });
+ } else {
+ spinnerStop();
+ splashDialog.dismiss();
+ splashDialog = null;
+ splashImageView = null;
+ }
}
}
});
@@ -207,9 +262,14 @@ public class SplashScreen extends CordovaPlugin {
*/
@SuppressWarnings("deprecation")
private void showSplashScreen(final boolean hideAfterDelay) {
- final int splashscreenTime = preferences.getInteger("SplashScreenDelay", 3000);
+ final int splashscreenTime = preferences.getInteger("SplashScreenDelay", DEFAULT_SPLASHSCREEN_DURATION);
final int drawableId = preferences.getInteger("SplashDrawableId", 0);
+ final int fadeSplashScreenDuration = getFadeDuration();
+ final int effectiveSplashDuration = Math.max(0, splashscreenTime - fadeSplashScreenDuration);
+
+ lastHideAfterDelay = hideAfterDelay;
+
// If the splash dialog is showing don't try to show it again
if (splashDialog != null && splashDialog.isShowing()) {
return;
@@ -257,60 +317,57 @@ public class SplashScreen extends CordovaPlugin {
splashDialog.setCancelable(false);
splashDialog.show();
+ if (preferences.getBoolean("ShowSplashScreenSpinner", true)) {
+ spinnerStart();
+ }
+
// Set Runnable to remove splash screen just in case
if (hideAfterDelay) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
- removeSplashScreen();
+ if (lastHideAfterDelay) {
+ removeSplashScreen(false);
+ }
}
- }, splashscreenTime);
+ }, effectiveSplashDuration);
}
}
});
}
- /*
- * Load the spinner
- */
- private void loadSpinner() {
- // If loadingDialog property, then show the App loading dialog for first page of app
- String loading = null;
- if (webView.canGoBack()) {
- loading = preferences.getString("LoadingDialog", null);
- }
- else {
- loading = preferences.getString("LoadingPageDialog", null);
- }
- if (loading != null) {
- String title = "";
- String message = "Loading Application...";
-
- if (loading.length() > 0) {
- int comma = loading.indexOf(',');
- if (comma > 0) {
- title = loading.substring(0, comma);
- message = loading.substring(comma + 1);
- }
- else {
- title = "";
- message = loading;
- }
- }
- spinnerStart(title, message);
- }
- }
-
- private void spinnerStart(final String title, final String message) {
+ // Show only spinner in the center of the screen
+ private void spinnerStart() {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
spinnerStop();
- spinnerDialog = ProgressDialog.show(webView.getContext(), title, message, true, true,
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- spinnerDialog = null;
- }
- });
+
+ spinnerDialog = new ProgressDialog(webView.getContext());
+ spinnerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ spinnerDialog = null;
+ }
+ });
+
+ spinnerDialog.setCancelable(false);
+ spinnerDialog.setIndeterminate(true);
+
+ RelativeLayout centeredLayout = new RelativeLayout(cordova.getActivity());
+ centeredLayout.setGravity(Gravity.CENTER);
+ centeredLayout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+
+ ProgressBar progressBar = new ProgressBar(webView.getContext());
+ RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+ layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
+ progressBar.setLayoutParams(layoutParams);
+
+ centeredLayout.addView(progressBar);
+
+ spinnerDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+ spinnerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+
+ spinnerDialog.show();
+ spinnerDialog.setContentView(centeredLayout);
}
});
}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java b/StoneIsland/platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java
index 4e4f57e1..36567886 100755..100644
--- a/StoneIsland/platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java
@@ -21,11 +21,11 @@ package org.apache.cordova.whitelist;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.ConfigXmlParser;
+import org.apache.cordova.LOG;
import org.apache.cordova.Whitelist;
import org.xmlpull.v1.XmlPullParser;
import android.content.Context;
-import android.util.Log;
public class WhitelistPlugin extends CordovaPlugin {
private static final String LOG_TAG = "WhitelistPlugin";
@@ -90,7 +90,7 @@ public class WhitelistPlugin extends CordovaPlugin {
boolean external = (xml.getAttributeValue(null, "launch-external") != null);
if (origin != null) {
if (external) {
- Log.w(LOG_TAG, "Found <access launch-external> within config.xml. Please use <allow-intent> instead.");
+ LOG.w(LOG_TAG, "Found <access launch-external> within config.xml. Please use <allow-intent> instead.");
allowedIntents.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));
} else {
if ("*".equals(origin)) {
diff --git a/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/CordovaLib.xcscheme b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/CordovaLib.xcscheme
new file mode 100644
index 00000000..30a2ebe4
--- /dev/null
+++ b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/CordovaLib.xcscheme
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0810"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "D2AAC07D0554694100DB518D"
+ BuildableName = "libCordova.a"
+ BlueprintName = "CordovaLib"
+ ReferencedContainer = "container:CordovaLib.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ </Testables>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "D2AAC07D0554694100DB518D"
+ BuildableName = "libCordova.a"
+ BlueprintName = "CordovaLib"
+ ReferencedContainer = "container:CordovaLib.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "D2AAC07D0554694100DB518D"
+ BuildableName = "libCordova.a"
+ BlueprintName = "CordovaLib"
+ ReferencedContainer = "container:CordovaLib.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 00000000..283503be
--- /dev/null
+++ b/StoneIsland/platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SchemeUserState</key>
+ <dict>
+ <key>CordovaLib.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>1</integer>
+ </dict>
+ </dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>D2AAC07D0554694100DB518D</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
index b647d931..a7ed0d50 100755
--- a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
+++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
@@ -5,47 +5,44 @@
};
objectVersion = 46;
objects = {
+
/* Begin PBXBuildFile section */
0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; };
+ 0315761036204E3B845F89A9 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DC035EE9BA24D4FA0966C97 /* AudioToolbox.framework */; };
+ 0580F77611BF4A32B709B4AB /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6675D8E364642F0ABE3B97F /* libsqlite3.dylib */; };
1D3623260D0F684500981E51 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* AppDelegate.m */; };
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
301BF552109A68D80062928A /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 301BF535109A57CC0062928A /* libCordova.a */; };
302D95F114D2391D003F00A1 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302D95EF14D2391D003F00A1 /* MainViewController.m */; };
302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 302D95F014D2391D003F00A1 /* MainViewController.xib */; };
- 3047A5121AB8059700498E2A /* build-debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 3047A50F1AB8059700498E2A /* build-debug.xcconfig */; };
- 3047A5131AB8059700498E2A /* build-release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 3047A5101AB8059700498E2A /* build-release.xcconfig */; };
- 3047A5141AB8059700498E2A /* build.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 3047A5111AB8059700498E2A /* build.xcconfig */; };
+ 3203B5020DFF4867998FD244 /* NSString+URLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 093D0B348E9B4F359B8FC9FF /* NSString+URLEncoding.m */; };
+ 323EAC7A00CC4C1B93E822FB /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5794EA67F4E2464080DFF4DD /* CoreTelephony.framework */; };
+ 4A76AA461B094826B553C98A /* CDVNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E448A31DBCF48A5A72A043C /* CDVNotification.m */; };
+ 4CEA203A6C864572AB3D4718 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8998048060D1426C8BD2870D /* libz.dylib */; };
+ 4DD3F0B57F8247199AA52EE7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED0B669B92E5409282AE1703 /* Security.framework */; };
+ 4F04AAC460204786A9B6F8D6 /* Parse.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21B8104F65F9433D9A7D53F9 /* Parse.framework */; };
+ 575E294B759E463E9C66C496 /* IonicKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 9533418C6E9249F89C11CE50 /* IonicKeyboard.m */; };
+ 5977ACEEEDF4439A93AD46A5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FA9837E4C93446C84474512 /* QuartzCore.framework */; };
+ 5F44A0836473477ABEDEE9D0 /* CDVSplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 37E8F313C7404DB48950986D /* CDVSplashScreen.m */; };
+ 619921E6CFA944AB9FD378F2 /* CDVLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7750C61417EE4678B793C993 /* CDVLogger.m */; };
+ 64541CA1793A46F7AE78DA82 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94099699ABA44203A173F33E /* SystemConfiguration.framework */; };
+ 67EB671357AC4E29ADCE0B7C /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE8D44B5FFF4EF4BB46F74F /* StoreKit.framework */; };
6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */; };
- C5CB6DF47C5D417891456B4D /* IonicKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 35719EF303D44796AE2F8232 /* IonicKeyboard.m */; };
- CD393F23C04449E48147FEFA /* UIWebViewExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BEFB560983744AF95D76E66 /* UIWebViewExtension.m */; };
- 9BF4E6A8A54F45E4BDCB35E8 /* CDVParsePlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 8961158EB65445E1BB6CB501 /* CDVParsePlugin.m */; };
- 9920D41C2D9C41AC9F772D8B /* Accounts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F97090F6B544E2BB1609DBE /* Accounts.framework */; };
- 0315761036204E3B845F89A9 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DC035EE9BA24D4FA0966C97 /* AudioToolbox.framework */; };
6D2024FED5EA43498DA1928E /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B23FCE8A14F4788A06368CD /* CFNetwork.framework */; };
- CF20D68FB9D547DF8164F3A5 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71127DE451034E8DADBC2908 /* CoreLocation.framework */; };
- 5977ACEEEDF4439A93AD46A5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FA9837E4C93446C84474512 /* QuartzCore.framework */; };
- 4DD3F0B57F8247199AA52EE7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED0B669B92E5409282AE1703 /* Security.framework */; };
+ 7605C3225E01411D8A3AD2AC /* CDVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = AF451107D3D340729EA6E833 /* CDVConnection.m */; };
79567EACD25049808A22E639 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4768CC0A2D74CFF84597C0C /* Social.framework */; };
- 67EB671357AC4E29ADCE0B7C /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE8D44B5FFF4EF4BB46F74F /* StoreKit.framework */; };
- 64541CA1793A46F7AE78DA82 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94099699ABA44203A173F33E /* SystemConfiguration.framework */; };
- 4CEA203A6C864572AB3D4718 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8998048060D1426C8BD2870D /* libz.dylib */; };
- 0580F77611BF4A32B709B4AB /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6675D8E364642F0ABE3B97F /* libsqlite3.dylib */; };
+ 7BFF7D1E98634E0CB65D166A /* CDVViewController+SplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 3540F8B74DE04482B5F31396 /* CDVViewController+SplashScreen.m */; };
+ 9164F345C7EF473E8E6CA215 /* CDVInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8277330FE73D4EC2BE3F8833 /* CDVInAppBrowser.m */; };
+ 98707D91F4C74B20AF61F26F /* CDVLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F80BC4D82142208C55007C /* CDVLocation.m */; };
+ 9920D41C2D9C41AC9F772D8B /* Accounts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F97090F6B544E2BB1609DBE /* Accounts.framework */; };
+ 9BF4E6A8A54F45E4BDCB35E8 /* CDVParsePlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 8961158EB65445E1BB6CB501 /* CDVParsePlugin.m */; };
+ B11FABEA6586489DA90AAB86 /* CDVReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA6E99A08594DD299BA4486 /* CDVReachability.m */; };
C03FF8C4AD384677BC558F8E /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34D6F0009780486D8A07BD47 /* Bolts.framework */; };
- 4F04AAC460204786A9B6F8D6 /* Parse.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21B8104F65F9433D9A7D53F9 /* Parse.framework */; };
- 203198C6486B4906B0D2EAF3 /* CDVLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = A14E782B69CC473DAD94F0C7 /* CDVLogger.m */; };
- E23A6ED28D414A9FA31C18D6 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ABD34598B224612824BAE63 /* CDVDevice.m */; };
- CCDF00EE9C05477D9BD17C8D /* CDVNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 8661BF08EC7E4B558802CD5B /* CDVNotification.m */; };
- 932BB112D8D247E59DBC8C55 /* CDVNotification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 00599E51D9234D71BE6C6B79 /* CDVNotification.bundle */; };
- C8B9F882FA744E0A85EBFA1F /* CDVLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C77AAEFAED7486E987AEB6B /* CDVLocation.m */; };
- 3325D19426B948B38F318D73 /* CDVInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A42A487C79A4ADA9A06AF42 /* CDVInAppBrowser.m */; };
- 891101010EEA4D5491CA8B0B /* CDVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 44DD171A422D46B1B1ADBF83 /* CDVConnection.m */; };
- 79688F2F8B804507B919AE23 /* CDVReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 279BD4938BA54F7ABCCEFC0E /* CDVReachability.m */; };
- E95FE2CE364D40F896F2D12A /* CDVSplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 1065E9EBB93145AA8CAFDE8A /* CDVSplashScreen.m */; };
- AAF050E78DED436DB51647A4 /* CDVViewController+SplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 16CA61E384604A269060D490 /* CDVViewController+SplashScreen.m */; };
- 8C9F50FD574A4962975E4B50 /* SocialSharing.m in Sources */ = {isa = PBXBuildFile; fileRef = AC21935FEAD34A7DA271CCF4 /* SocialSharing.m */; };
- A02C9C20257D48A3AB5125C9 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E71962D2059240E3BCCFF098 /* MessageUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
- 566265D394B24F0F851B64B8 /* AppDelegate+notification.m in Sources */ = {isa = PBXBuildFile; fileRef = 51738B4AC1F2488D928587E2 /* AppDelegate+notification.m */; };
- 05BFC92227794306A1A49D2D /* PushPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E50FC1FE8224862947FA2D3 /* PushPlugin.m */; };
+ CF20D68FB9D547DF8164F3A5 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71127DE451034E8DADBC2908 /* CoreLocation.framework */; };
+ DB6AF83ACD124CA590A083F5 /* CDVNotification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DAD7810D444648B9A0797E42 /* CDVNotification.bundle */; };
+ E651384BEE9B46BCB4266E31 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = D1673B263A2F4F09B0740EF6 /* CDVDevice.m */; };
+ E698EEC9704745F093774EA7 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A31D2E2022D43BFA29F6CC9 /* MessageUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+ F1AFF61D7EDB477FAC045FF0 /* SocialSharing.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9A29C31C4644DB9C102D06 /* SocialSharing.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -67,70 +64,67 @@
/* Begin PBXFileReference section */
0207DA571B56EA530066E2B4 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Stone Island/Images.xcassets"; sourceTree = SOURCE_ROOT; };
+ 02427C4B4DBC4EE199F76CDF /* CDVReachability.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVReachability.h; path = "cordova-plugin-network-information/CDVReachability.h"; sourceTree = "<group>"; };
+ 093D0B348E9B4F359B8FC9FF /* NSString+URLEncoding.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "NSString+URLEncoding.m"; path = "cordova-plugin-x-socialsharing/NSString+URLEncoding.m"; sourceTree = "<group>"; };
+ 19A23454385A44C9A0D1F396 /* NSString+URLEncoding.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "NSString+URLEncoding.h"; path = "cordova-plugin-x-socialsharing/NSString+URLEncoding.h"; sourceTree = "<group>"; };
1D3623240D0F684500981E51 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
1D3623250D0F684500981E51 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
1D6058910D05DD3D006BFB54 /* Stone Island.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Stone Island.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1DC035EE9BA24D4FA0966C97 /* AudioToolbox.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+ 21B8104F65F9433D9A7D53F9 /* Parse.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Parse.framework; path = "Stone Island/Plugins/com.parse.cordova.core.pushplugin/Parse.framework"; sourceTree = "<group>"; };
+ 2343CD8001A046E08B747609 /* CDVSplashScreen.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVSplashScreen.h; path = "cordova-plugin-splashscreen/CDVSplashScreen.h"; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 2ABCC9D074F74A0680DAE629 /* CDVParsePlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVParsePlugin.h; path = com.parse.cordova.core.pushplugin/CDVParsePlugin.h; sourceTree = "<group>"; };
301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CordovaLib.xcodeproj; path = CordovaLib/CordovaLib.xcodeproj; sourceTree = "<group>"; };
301BF56E109A69640062928A /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; path = www; sourceTree = SOURCE_ROOT; };
302D95EE14D2391D003F00A1 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = "<group>"; };
302D95EF14D2391D003F00A1 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = "<group>"; };
302D95F014D2391D003F00A1 /* MainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainViewController.xib; sourceTree = "<group>"; };
- 3047A50F1AB8059700498E2A /* build-debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "build-debug.xcconfig"; path = cordova/build-debug.xcconfig; sourceTree = SOURCE_ROOT; };
- 3047A5101AB8059700498E2A /* build-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "build-release.xcconfig"; path = cordova/build-release.xcconfig; sourceTree = SOURCE_ROOT; };
+ 3047A50F1AB8059700498E2A /* build-debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "build-debug.xcconfig"; path = "cordova/build-debug.xcconfig"; sourceTree = SOURCE_ROOT; };
+ 3047A5101AB8059700498E2A /* build-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "build-release.xcconfig"; path = "cordova/build-release.xcconfig"; sourceTree = SOURCE_ROOT; };
3047A5111AB8059700498E2A /* build.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = build.xcconfig; path = cordova/build.xcconfig; sourceTree = SOURCE_ROOT; };
32CA4F630368D1EE00C91783 /* Stone Island-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Stone Island-Prefix.pch"; sourceTree = "<group>"; };
+ 34D6F0009780486D8A07BD47 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Bolts.framework; path = "Stone Island/Plugins/com.parse.cordova.core.pushplugin/Bolts.framework"; sourceTree = "<group>"; };
+ 3540F8B74DE04482B5F31396 /* CDVViewController+SplashScreen.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "CDVViewController+SplashScreen.m"; path = "cordova-plugin-splashscreen/CDVViewController+SplashScreen.m"; sourceTree = "<group>"; };
+ 37E8F313C7404DB48950986D /* CDVSplashScreen.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVSplashScreen.m; path = "cordova-plugin-splashscreen/CDVSplashScreen.m"; sourceTree = "<group>"; };
+ 39ABF20966474AE2A42B4758 /* CDVDevice.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVDevice.h; path = "cordova-plugin-device/CDVDevice.h"; sourceTree = "<group>"; };
+ 3A31D2E2022D43BFA29F6CC9 /* MessageUI.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
+ 3F97090F6B544E2BB1609DBE /* Accounts.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Accounts.framework; path = System/Library/Frameworks/Accounts.framework; sourceTree = SDKROOT; };
+ 5794EA67F4E2464080DFF4DD /* CoreTelephony.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
+ 5FA9837E4C93446C84474512 /* QuartzCore.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+ 65A8F443D6D64E34B5906602 /* CDVLocation.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVLocation.h; path = "cordova-plugin-geolocation/CDVLocation.h"; sourceTree = "<group>"; };
+ 6A123CECD10245049BAACCF8 /* CDVViewController+SplashScreen.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "CDVViewController+SplashScreen.h"; path = "cordova-plugin-splashscreen/CDVViewController+SplashScreen.h"; sourceTree = "<group>"; };
6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; path = "Stone Island/CDVLaunchScreen.storyboard"; sourceTree = SOURCE_ROOT; };
+ 6FA6E99A08594DD299BA4486 /* CDVReachability.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVReachability.m; path = "cordova-plugin-network-information/CDVReachability.m"; sourceTree = "<group>"; };
+ 71127DE451034E8DADBC2908 /* CoreLocation.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
+ 72ABD61156534EE7BA2F1412 /* CDVLogger.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVLogger.h; path = "cordova-plugin-console/CDVLogger.h"; sourceTree = "<group>"; };
+ 7750C61417EE4678B793C993 /* CDVLogger.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVLogger.m; path = "cordova-plugin-console/CDVLogger.m"; sourceTree = "<group>"; };
+ 7850E3F3A8B743AD8569AB90 /* CDVNotification.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVNotification.h; path = "cordova-plugin-dialogs/CDVNotification.h"; sourceTree = "<group>"; };
+ 7DE194F983174929A645ABD7 /* SocialSharing.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = SocialSharing.h; path = "cordova-plugin-x-socialsharing/SocialSharing.h"; sourceTree = "<group>"; };
+ 8082F878D0EF4B389ED94C47 /* CDVConnection.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVConnection.h; path = "cordova-plugin-network-information/CDVConnection.h"; sourceTree = "<group>"; };
+ 8277330FE73D4EC2BE3F8833 /* CDVInAppBrowser.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVInAppBrowser.m; path = "cordova-plugin-inappbrowser/CDVInAppBrowser.m"; sourceTree = "<group>"; };
+ 8961158EB65445E1BB6CB501 /* CDVParsePlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVParsePlugin.m; path = com.parse.cordova.core.pushplugin/CDVParsePlugin.m; sourceTree = "<group>"; };
+ 8998048060D1426C8BD2870D /* libz.dylib */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
8D1107310486CEB800E47090 /* Stone Island-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Stone Island-Info.plist"; path = "Stone Island/Stone Island-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = SOURCE_ROOT; };
+ 94099699ABA44203A173F33E /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+ 9533418C6E9249F89C11CE50 /* IonicKeyboard.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = IonicKeyboard.m; path = "ionic-plugin-keyboard/IonicKeyboard.m"; sourceTree = "<group>"; };
+ 9B23FCE8A14F4788A06368CD /* CFNetwork.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
+ 9E448A31DBCF48A5A72A043C /* CDVNotification.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVNotification.m; path = "cordova-plugin-dialogs/CDVNotification.m"; sourceTree = "<group>"; };
+ AF451107D3D340729EA6E833 /* CDVConnection.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVConnection.m; path = "cordova-plugin-network-information/CDVConnection.m"; sourceTree = "<group>"; };
+ B4768CC0A2D74CFF84597C0C /* Social.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; };
+ B6675D8E364642F0ABE3B97F /* libsqlite3.dylib */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
+ CCE8D44B5FFF4EF4BB46F74F /* StoreKit.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
+ D1673B263A2F4F09B0740EF6 /* CDVDevice.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVDevice.m; path = "cordova-plugin-device/CDVDevice.m"; sourceTree = "<group>"; };
+ D700E79C081C45619C7AC7D1 /* CDVInAppBrowser.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVInAppBrowser.h; path = "cordova-plugin-inappbrowser/CDVInAppBrowser.h"; sourceTree = "<group>"; };
+ DAD7810D444648B9A0797E42 /* CDVNotification.bundle */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; path = CDVNotification.bundle; sourceTree = "<group>"; };
+ DD9A29C31C4644DB9C102D06 /* SocialSharing.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = SocialSharing.m; path = "cordova-plugin-x-socialsharing/SocialSharing.m"; sourceTree = "<group>"; };
+ E2F80BC4D82142208C55007C /* CDVLocation.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVLocation.m; path = "cordova-plugin-geolocation/CDVLocation.m"; sourceTree = "<group>"; };
EB87FDF31871DA8E0020F90C /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; name = www; path = ../../www; sourceTree = "<group>"; };
EB87FDF41871DAF40020F90C /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = ../../config.xml; sourceTree = "<group>"; };
+ ED0B669B92E5409282AE1703 /* Security.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
+ ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; };
F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = "Stone Island/config.xml"; sourceTree = "<group>"; };
- ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Bridging-Header.h"; path = "Bridging-Header.h"; sourceTree = "<group>"; };
- 35719EF303D44796AE2F8232 /* IonicKeyboard.m */ = {isa = PBXFileReference; name = "IonicKeyboard.m"; path = "com.ionic.keyboard/IonicKeyboard.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 4BEFB560983744AF95D76E66 /* UIWebViewExtension.m */ = {isa = PBXFileReference; name = "UIWebViewExtension.m"; path = "com.ionic.keyboard/UIWebViewExtension.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- CF48BF1935C2459594839AE5 /* IonicKeyboard.h */ = {isa = PBXFileReference; name = "IonicKeyboard.h"; path = "com.ionic.keyboard/IonicKeyboard.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 06638D058B744ADBA7DF0E3E /* UIWebViewExtension.h */ = {isa = PBXFileReference; name = "UIWebViewExtension.h"; path = "com.ionic.keyboard/UIWebViewExtension.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 8961158EB65445E1BB6CB501 /* CDVParsePlugin.m */ = {isa = PBXFileReference; name = "CDVParsePlugin.m"; path = "com.parse.cordova.core.pushplugin/CDVParsePlugin.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 2ABCC9D074F74A0680DAE629 /* CDVParsePlugin.h */ = {isa = PBXFileReference; name = "CDVParsePlugin.h"; path = "com.parse.cordova.core.pushplugin/CDVParsePlugin.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 3F97090F6B544E2BB1609DBE /* Accounts.framework */ = {isa = PBXFileReference; name = "Accounts.framework"; path = "System/Library/Frameworks/Accounts.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 1DC035EE9BA24D4FA0966C97 /* AudioToolbox.framework */ = {isa = PBXFileReference; name = "AudioToolbox.framework"; path = "System/Library/Frameworks/AudioToolbox.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 9B23FCE8A14F4788A06368CD /* CFNetwork.framework */ = {isa = PBXFileReference; name = "CFNetwork.framework"; path = "System/Library/Frameworks/CFNetwork.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 71127DE451034E8DADBC2908 /* CoreLocation.framework */ = {isa = PBXFileReference; name = "CoreLocation.framework"; path = "System/Library/Frameworks/CoreLocation.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 5FA9837E4C93446C84474512 /* QuartzCore.framework */ = {isa = PBXFileReference; name = "QuartzCore.framework"; path = "System/Library/Frameworks/QuartzCore.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- ED0B669B92E5409282AE1703 /* Security.framework */ = {isa = PBXFileReference; name = "Security.framework"; path = "System/Library/Frameworks/Security.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- B4768CC0A2D74CFF84597C0C /* Social.framework */ = {isa = PBXFileReference; name = "Social.framework"; path = "System/Library/Frameworks/Social.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- CCE8D44B5FFF4EF4BB46F74F /* StoreKit.framework */ = {isa = PBXFileReference; name = "StoreKit.framework"; path = "System/Library/Frameworks/StoreKit.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 94099699ABA44203A173F33E /* SystemConfiguration.framework */ = {isa = PBXFileReference; name = "SystemConfiguration.framework"; path = "System/Library/Frameworks/SystemConfiguration.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 8998048060D1426C8BD2870D /* libz.dylib */ = {isa = PBXFileReference; name = "libz.dylib"; path = "usr/lib/libz.dylib"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = compiled.mach-o.dylib; explicitFileType = undefined; includeInIndex = 0; };
- B6675D8E364642F0ABE3B97F /* libsqlite3.dylib */ = {isa = PBXFileReference; name = "libsqlite3.dylib"; path = "usr/lib/libsqlite3.dylib"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = compiled.mach-o.dylib; explicitFileType = undefined; includeInIndex = 0; };
- 34D6F0009780486D8A07BD47 /* Bolts.framework */ = {isa = PBXFileReference; name = "Bolts.framework"; path = "Stone Island/Plugins/com.parse.cordova.core.pushplugin/Bolts.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 21B8104F65F9433D9A7D53F9 /* Parse.framework */ = {isa = PBXFileReference; name = "Parse.framework"; path = "Stone Island/Plugins/com.parse.cordova.core.pushplugin/Parse.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- A14E782B69CC473DAD94F0C7 /* CDVLogger.m */ = {isa = PBXFileReference; name = "CDVLogger.m"; path = "cordova-plugin-console/CDVLogger.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 18F0008910714D37A5AAB051 /* CDVLogger.h */ = {isa = PBXFileReference; name = "CDVLogger.h"; path = "cordova-plugin-console/CDVLogger.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 5ABD34598B224612824BAE63 /* CDVDevice.m */ = {isa = PBXFileReference; name = "CDVDevice.m"; path = "cordova-plugin-device/CDVDevice.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 1D3E5D77A1C04222A06877D1 /* CDVDevice.h */ = {isa = PBXFileReference; name = "CDVDevice.h"; path = "cordova-plugin-device/CDVDevice.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 8661BF08EC7E4B558802CD5B /* CDVNotification.m */ = {isa = PBXFileReference; name = "CDVNotification.m"; path = "cordova-plugin-dialogs/CDVNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 91BCA5405B914228B95870B5 /* CDVNotification.h */ = {isa = PBXFileReference; name = "CDVNotification.h"; path = "cordova-plugin-dialogs/CDVNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 00599E51D9234D71BE6C6B79 /* CDVNotification.bundle */ = {isa = PBXFileReference; name = "CDVNotification.bundle"; path = "CDVNotification.bundle"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.plug-in; explicitFileType = undefined; includeInIndex = 0; };
- 8C77AAEFAED7486E987AEB6B /* CDVLocation.m */ = {isa = PBXFileReference; name = "CDVLocation.m"; path = "cordova-plugin-geolocation/CDVLocation.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 2028DD29E5AF40B897C31D46 /* CDVLocation.h */ = {isa = PBXFileReference; name = "CDVLocation.h"; path = "cordova-plugin-geolocation/CDVLocation.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 7A42A487C79A4ADA9A06AF42 /* CDVInAppBrowser.m */ = {isa = PBXFileReference; name = "CDVInAppBrowser.m"; path = "cordova-plugin-inappbrowser/CDVInAppBrowser.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 71D53167DC724B13A307C921 /* CDVInAppBrowser.h */ = {isa = PBXFileReference; name = "CDVInAppBrowser.h"; path = "cordova-plugin-inappbrowser/CDVInAppBrowser.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 44DD171A422D46B1B1ADBF83 /* CDVConnection.m */ = {isa = PBXFileReference; name = "CDVConnection.m"; path = "cordova-plugin-network-information/CDVConnection.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 279BD4938BA54F7ABCCEFC0E /* CDVReachability.m */ = {isa = PBXFileReference; name = "CDVReachability.m"; path = "cordova-plugin-network-information/CDVReachability.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 391D852A25F441A3855582E1 /* CDVConnection.h */ = {isa = PBXFileReference; name = "CDVConnection.h"; path = "cordova-plugin-network-information/CDVConnection.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 9056B9226A1F4D3EA6BD1AE3 /* CDVReachability.h */ = {isa = PBXFileReference; name = "CDVReachability.h"; path = "cordova-plugin-network-information/CDVReachability.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 1065E9EBB93145AA8CAFDE8A /* CDVSplashScreen.m */ = {isa = PBXFileReference; name = "CDVSplashScreen.m"; path = "cordova-plugin-splashscreen/CDVSplashScreen.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 16CA61E384604A269060D490 /* CDVViewController+SplashScreen.m */ = {isa = PBXFileReference; name = "CDVViewController+SplashScreen.m"; path = "cordova-plugin-splashscreen/CDVViewController+SplashScreen.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 4578B94774954F959F83F234 /* CDVSplashScreen.h */ = {isa = PBXFileReference; name = "CDVSplashScreen.h"; path = "cordova-plugin-splashscreen/CDVSplashScreen.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- E3EB360F480E4833900EAECA /* CDVViewController+SplashScreen.h */ = {isa = PBXFileReference; name = "CDVViewController+SplashScreen.h"; path = "cordova-plugin-splashscreen/CDVViewController+SplashScreen.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- AC21935FEAD34A7DA271CCF4 /* SocialSharing.m */ = {isa = PBXFileReference; name = "SocialSharing.m"; path = "cordova-plugin-x-socialsharing/SocialSharing.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 914101A237AF4A50823AB148 /* SocialSharing.h */ = {isa = PBXFileReference; name = "SocialSharing.h"; path = "cordova-plugin-x-socialsharing/SocialSharing.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- E71962D2059240E3BCCFF098 /* MessageUI.framework */ = {isa = PBXFileReference; name = "MessageUI.framework"; path = "System/Library/Frameworks/MessageUI.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
- 51738B4AC1F2488D928587E2 /* AppDelegate+notification.m */ = {isa = PBXFileReference; name = "AppDelegate+notification.m"; path = "phonegap-plugin-push/AppDelegate+notification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 8E50FC1FE8224862947FA2D3 /* PushPlugin.m */ = {isa = PBXFileReference; name = "PushPlugin.m"; path = "phonegap-plugin-push/PushPlugin.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
- 244D1A19F6214FEB8FF6B8F0 /* AppDelegate+notification.h */ = {isa = PBXFileReference; name = "AppDelegate+notification.h"; path = "phonegap-plugin-push/AppDelegate+notification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
- 4A0B9D17F3654DC0BC822CED /* PushPlugin.h */ = {isa = PBXFileReference; name = "PushPlugin.h"; path = "phonegap-plugin-push/PushPlugin.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ FF6B2D852F0C4C6097039B09 /* IonicKeyboard.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = IonicKeyboard.h; path = "ionic-plugin-keyboard/IonicKeyboard.h"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -152,7 +146,8 @@
0580F77611BF4A32B709B4AB /* libsqlite3.dylib in Frameworks */,
C03FF8C4AD384677BC558F8E /* Bolts.framework in Frameworks */,
4F04AAC460204786A9B6F8D6 /* Parse.framework in Frameworks */,
- A02C9C20257D48A3AB5125C9 /* MessageUI.framework in Frameworks */,
+ E698EEC9704745F093774EA7 /* MessageUI.framework in Frameworks */,
+ 323EAC7A00CC4C1B93E822FB /* CoreTelephony.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -215,7 +210,7 @@
3047A50E1AB8057F00498E2A /* config */,
8D1107310486CEB800E47090 /* Stone Island-Info.plist */,
6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */,
- 00599E51D9234D71BE6C6B79 /* CDVNotification.bundle */,
+ DAD7810D444648B9A0797E42 /* CDVNotification.bundle */,
);
name = Resources;
path = "Stone Island/Resources";
@@ -237,7 +232,8 @@
B6675D8E364642F0ABE3B97F /* libsqlite3.dylib */,
34D6F0009780486D8A07BD47 /* Bolts.framework */,
21B8104F65F9433D9A7D53F9 /* Parse.framework */,
- E71962D2059240E3BCCFF098 /* MessageUI.framework */,
+ 3A31D2E2022D43BFA29F6CC9 /* MessageUI.framework */,
+ 5794EA67F4E2464080DFF4DD /* CoreTelephony.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -263,36 +259,32 @@
307C750510C5A3420062BCA9 /* Plugins */ = {
isa = PBXGroup;
children = (
- 35719EF303D44796AE2F8232 /* IonicKeyboard.m */,
- 4BEFB560983744AF95D76E66 /* UIWebViewExtension.m */,
- CF48BF1935C2459594839AE5 /* IonicKeyboard.h */,
- 06638D058B744ADBA7DF0E3E /* UIWebViewExtension.h */,
8961158EB65445E1BB6CB501 /* CDVParsePlugin.m */,
2ABCC9D074F74A0680DAE629 /* CDVParsePlugin.h */,
- A14E782B69CC473DAD94F0C7 /* CDVLogger.m */,
- 18F0008910714D37A5AAB051 /* CDVLogger.h */,
- 5ABD34598B224612824BAE63 /* CDVDevice.m */,
- 1D3E5D77A1C04222A06877D1 /* CDVDevice.h */,
- 8661BF08EC7E4B558802CD5B /* CDVNotification.m */,
- 91BCA5405B914228B95870B5 /* CDVNotification.h */,
- 8C77AAEFAED7486E987AEB6B /* CDVLocation.m */,
- 2028DD29E5AF40B897C31D46 /* CDVLocation.h */,
- 7A42A487C79A4ADA9A06AF42 /* CDVInAppBrowser.m */,
- 71D53167DC724B13A307C921 /* CDVInAppBrowser.h */,
- 44DD171A422D46B1B1ADBF83 /* CDVConnection.m */,
- 279BD4938BA54F7ABCCEFC0E /* CDVReachability.m */,
- 391D852A25F441A3855582E1 /* CDVConnection.h */,
- 9056B9226A1F4D3EA6BD1AE3 /* CDVReachability.h */,
- 1065E9EBB93145AA8CAFDE8A /* CDVSplashScreen.m */,
- 16CA61E384604A269060D490 /* CDVViewController+SplashScreen.m */,
- 4578B94774954F959F83F234 /* CDVSplashScreen.h */,
- E3EB360F480E4833900EAECA /* CDVViewController+SplashScreen.h */,
- AC21935FEAD34A7DA271CCF4 /* SocialSharing.m */,
- 914101A237AF4A50823AB148 /* SocialSharing.h */,
- 51738B4AC1F2488D928587E2 /* AppDelegate+notification.m */,
- 8E50FC1FE8224862947FA2D3 /* PushPlugin.m */,
- 244D1A19F6214FEB8FF6B8F0 /* AppDelegate+notification.h */,
- 4A0B9D17F3654DC0BC822CED /* PushPlugin.h */,
+ 8277330FE73D4EC2BE3F8833 /* CDVInAppBrowser.m */,
+ D700E79C081C45619C7AC7D1 /* CDVInAppBrowser.h */,
+ 093D0B348E9B4F359B8FC9FF /* NSString+URLEncoding.m */,
+ DD9A29C31C4644DB9C102D06 /* SocialSharing.m */,
+ 19A23454385A44C9A0D1F396 /* NSString+URLEncoding.h */,
+ 7DE194F983174929A645ABD7 /* SocialSharing.h */,
+ 7750C61417EE4678B793C993 /* CDVLogger.m */,
+ 72ABD61156534EE7BA2F1412 /* CDVLogger.h */,
+ D1673B263A2F4F09B0740EF6 /* CDVDevice.m */,
+ 39ABF20966474AE2A42B4758 /* CDVDevice.h */,
+ AF451107D3D340729EA6E833 /* CDVConnection.m */,
+ 6FA6E99A08594DD299BA4486 /* CDVReachability.m */,
+ 8082F878D0EF4B389ED94C47 /* CDVConnection.h */,
+ 02427C4B4DBC4EE199F76CDF /* CDVReachability.h */,
+ 9E448A31DBCF48A5A72A043C /* CDVNotification.m */,
+ 7850E3F3A8B743AD8569AB90 /* CDVNotification.h */,
+ 37E8F313C7404DB48950986D /* CDVSplashScreen.m */,
+ 3540F8B74DE04482B5F31396 /* CDVViewController+SplashScreen.m */,
+ 2343CD8001A046E08B747609 /* CDVSplashScreen.h */,
+ 6A123CECD10245049BAACCF8 /* CDVViewController+SplashScreen.h */,
+ E2F80BC4D82142208C55007C /* CDVLocation.m */,
+ 65A8F443D6D64E34B5906602 /* CDVLocation.h */,
+ 9533418C6E9249F89C11CE50 /* IonicKeyboard.m */,
+ FF6B2D852F0C4C6097039B09 /* IonicKeyboard.h */,
);
name = Plugins;
path = "Stone Island/Plugins";
@@ -336,11 +328,20 @@
isa = PBXProject;
attributes = {
LastUpgradeCheck = 510;
+ TargetAttributes = {
+ 1D6058900D05DD3D006BFB54 = {
+ DevelopmentTeam = C6JQTPGJ97;
+ ProvisioningStyle = Automatic;
+ };
+ };
};
- buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "__NON-CLI__" */;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Stone Island" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
+ knownRegions = (
+ en,
+ );
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
projectDirPath = "";
projectReferences = (
@@ -374,7 +375,7 @@
302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */,
0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */,
6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */,
- 932BB112D8D247E59DBC8C55 /* CDVNotification.bundle in Resources */,
+ DB6AF83ACD124CA590A083F5 /* CDVNotification.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -406,21 +407,19 @@
1D60589B0D05DD56006BFB54 /* main.m in Sources */,
1D3623260D0F684500981E51 /* AppDelegate.m in Sources */,
302D95F114D2391D003F00A1 /* MainViewController.m in Sources */,
- C5CB6DF47C5D417891456B4D /* IonicKeyboard.m in Sources */,
- CD393F23C04449E48147FEFA /* UIWebViewExtension.m in Sources */,
9BF4E6A8A54F45E4BDCB35E8 /* CDVParsePlugin.m in Sources */,
- 203198C6486B4906B0D2EAF3 /* CDVLogger.m in Sources */,
- E23A6ED28D414A9FA31C18D6 /* CDVDevice.m in Sources */,
- CCDF00EE9C05477D9BD17C8D /* CDVNotification.m in Sources */,
- C8B9F882FA744E0A85EBFA1F /* CDVLocation.m in Sources */,
- 3325D19426B948B38F318D73 /* CDVInAppBrowser.m in Sources */,
- 891101010EEA4D5491CA8B0B /* CDVConnection.m in Sources */,
- 79688F2F8B804507B919AE23 /* CDVReachability.m in Sources */,
- E95FE2CE364D40F896F2D12A /* CDVSplashScreen.m in Sources */,
- AAF050E78DED436DB51647A4 /* CDVViewController+SplashScreen.m in Sources */,
- 8C9F50FD574A4962975E4B50 /* SocialSharing.m in Sources */,
- 566265D394B24F0F851B64B8 /* AppDelegate+notification.m in Sources */,
- 05BFC92227794306A1A49D2D /* PushPlugin.m in Sources */,
+ 9164F345C7EF473E8E6CA215 /* CDVInAppBrowser.m in Sources */,
+ 3203B5020DFF4867998FD244 /* NSString+URLEncoding.m in Sources */,
+ F1AFF61D7EDB477FAC045FF0 /* SocialSharing.m in Sources */,
+ 619921E6CFA944AB9FD378F2 /* CDVLogger.m in Sources */,
+ E651384BEE9B46BCB4266E31 /* CDVDevice.m in Sources */,
+ 7605C3225E01411D8A3AD2AC /* CDVConnection.m in Sources */,
+ B11FABEA6586489DA90AAB86 /* CDVReachability.m in Sources */,
+ 4A76AA461B094826B553C98A /* CDVNotification.m in Sources */,
+ 5F44A0836473477ABEDEE9D0 /* CDVSplashScreen.m in Sources */,
+ 7BFF7D1E98634E0CB65D166A /* CDVViewController+SplashScreen.m in Sources */,
+ 98707D91F4C74B20AF61F26F /* CDVLocation.m in Sources */,
+ 575E294B759E463E9C66C496 /* IonicKeyboard.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -444,7 +443,14 @@
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
+ DEVELOPMENT_TEAM = C6JQTPGJ97;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
+ "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
+ );
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
@@ -454,11 +460,6 @@
INFOPLIST_FILE = "Stone Island/Stone Island-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
PRODUCT_NAME = "Stone Island";
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
- "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
- );
};
name = Debug;
};
@@ -471,7 +472,14 @@
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
+ DEVELOPMENT_TEAM = C6JQTPGJ97;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
+ "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
+ );
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Stone Island/Stone Island-Prefix.pch";
GCC_THUMB_SUPPORT = NO;
@@ -479,11 +487,6 @@
INFOPLIST_FILE = "Stone Island/Stone Island-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
PRODUCT_NAME = "Stone Island";
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
- "\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
- );
};
name = Release;
};
@@ -550,7 +553,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- C01FCF4E08A954540054247B /* Build configuration list for PBXProject "__NON-CLI__" */ = {
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Stone Island" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..919434a6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/xcuserdata/jules.xcuserdatad/UserInterfaceState.xcuserstate b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/xcuserdata/jules.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 00000000..b1e1462b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.xcworkspace/xcuserdata/jules.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/Stone Island.xcscheme b/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/Stone Island.xcscheme
new file mode 100644
index 00000000..76aef775
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/Stone Island.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0810"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "Stone Island.app"
+ BlueprintName = "Stone Island"
+ ReferencedContainer = "container:Stone Island.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "Stone Island.app"
+ BlueprintName = "Stone Island"
+ ReferencedContainer = "container:Stone Island.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "Stone Island.app"
+ BlueprintName = "Stone Island"
+ ReferencedContainer = "container:Stone Island.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "Stone Island.app"
+ BlueprintName = "Stone Island"
+ ReferencedContainer = "container:Stone Island.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist b/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 00000000..b41bffe9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/xcuserdata/jules.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SchemeUserState</key>
+ <dict>
+ <key>Stone Island.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>1D6058900D05DD3D006BFB54</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40.png
index e865adbc..d2617e23 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
index 6d07dce5..1813fa48 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50.png
index 98a9d96d..531435f3 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
index bac693f7..dffdf8ba 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60.png
new file mode 100644
index 00000000..dd612e83
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
index 955af362..23c5b259 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@3x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
index e1268916..da2863a4 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72.png
index 8c6e5df3..3094af16 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
index dd819da6..9515e8dc 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76.png
index 63afe7f1..93e7a05d 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
index 4cff29a2..351f06c9 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
index 3c1a0115..52bafc1d 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small.png
index 0ea1c42f..cbe03b26 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@2x.png
index 2c72038e..8e3a96d6 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@3x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@3x.png
index 5c37dfc2..a40b6358 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@3x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon-small@3x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon.png
index b2571a71..2c9b6664 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon@2x.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon@2x.png
index d75098f5..cf5b68db 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon@2x.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/AppIcon.appiconset/icon@2x.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png
index 10ed683c..47079c45 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-667h.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-667h.png
index d9bcf61d..57a8f40e 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-667h.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-667h.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-736h.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-736h.png
index 1fcef229..2f00da21 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-736h.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-736h.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png
index eae0792d..fc6512f7 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png
index 1fc8c7db..f0fa0658 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png
index 58ea2fbd..89964903 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png
index 1570b37d..9002f6f3 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png
index 223e75d0..2916e875 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png
index 0098dc73..13ada67a 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default~iphone.png b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default~iphone.png
index 42b8fdea..19d2b2ae 100644
--- a/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default~iphone.png
+++ b/StoneIsland/platforms/ios/Stone Island/Images.xcassets/LaunchImage.launchimage/Default~iphone.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.h b/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.h
deleted file mode 100755
index 1d6c293d..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.h
+++ /dev/null
@@ -1,4 +0,0 @@
-@interface UIWebView (HackishAccessoryHiding)
-@property (nonatomic, assign) BOOL hackishlyHidesInputAccessoryView;
-//@property (nonatomic, assign) BOOL styleDark;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.m b/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.m
deleted file mode 100755
index 25403e6f..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/UIWebViewExtension.m
+++ /dev/null
@@ -1,109 +0,0 @@
-#import <objc/runtime.h>
-#import <UIKit/UIKit.h>
-#import "UIWebViewExtension.h"
-
-//Credit: https://gist.github.com/bjhomer/2048571
-//Also: http://stackoverflow.com/a/23398487/1091751
-@implementation UIWebView (HackishAccessoryHiding)
-
-static const char * const hackishFixClassName = "UIWebBrowserViewMinusAccessoryView";
-static Class hackishFixClass = Nil;
-
-- (UIView *)hackishlyFoundBrowserView {
- UIScrollView *scrollView = self.scrollView;
-
- UIView *browserView = nil;
- for (UIView *subview in scrollView.subviews) {
- if ([NSStringFromClass([subview class]) hasPrefix:@"UIWebBrowserView"]) {
- browserView = subview;
- break;
- }
- }
- return browserView;
-}
-
-- (id)methodReturningNil {
- return nil;
-}
-
-- (void)ensureHackishSubclassExistsOfBrowserViewClass:(Class)browserViewClass {
- if (!hackishFixClass) {
- Class newClass = objc_allocateClassPair(browserViewClass, hackishFixClassName, 0);
- IMP nilImp = [self methodForSelector:@selector(methodReturningNil)];
- class_addMethod(newClass, @selector(inputAccessoryView), nilImp, "@@:");
- objc_registerClassPair(newClass);
-
- hackishFixClass = newClass;
- }
-}
-
-- (BOOL) hackishlyHidesInputAccessoryView {
- UIView *browserView = [self hackishlyFoundBrowserView];
- return [browserView class] == hackishFixClass;
-}
-
-- (void) setHackishlyHidesInputAccessoryView:(BOOL)value {
- UIView *browserView = [self hackishlyFoundBrowserView];
- if (browserView == nil) {
- return;
- }
- [self ensureHackishSubclassExistsOfBrowserViewClass:[browserView class]];
-
- if (value) {
- object_setClass(browserView, hackishFixClass);
- }
- else {
- Class normalClass = objc_getClass("UIWebBrowserView");
- object_setClass(browserView, normalClass);
- }
- [browserView reloadInputViews];
-}
-/* ---------------------------------------------------------------- */
-
-/*
-- (UIKeyboardAppearance) darkKeyboardAppearanceTemplateMethod {
- return UIKeyboardAppearanceDark;
-}
-
-- (UIKeyboardAppearance) lightKeyboardAppearanceTemplateMethod {
- return UIKeyboardAppearanceLight;
-}
-
-- (BOOL) styleDark {
- UIView *browserView = [self hackishlyFoundBrowserView];
- if (browserView == nil) {
- return false;
- }
-
- Method m = class_getInstanceMethod( [self class], @selector( darkKeyboardAppearanceTemplateMethod ) );
- IMP imp = method_getImplementation( m );
-
- Method m2 = class_getInstanceMethod( [browserView class], @selector(keyboardAppearance) );
- IMP imp2 = method_getImplementation( m2 );
-
- return imp == imp2;
-}
-
-- (void) setStyleDark:(BOOL)styleDark {
- UIView *browserView = [self hackishlyFoundBrowserView];
- if (browserView == nil) {
- return;
- }
-
- if ( styleDark ) {
- Method m = class_getInstanceMethod( [self class], @selector( darkKeyboardAppearanceTemplateMethod ) );
- IMP imp = method_getImplementation( m );
- const char* typeEncoding = method_getTypeEncoding( m );
- class_replaceMethod( [browserView class], @selector(keyboardAppearance), imp, typeEncoding );
- }
- else {
- Method m = class_getInstanceMethod( [self class], @selector( lightKeyboardAppearanceTemplateMethod ) );
- IMP imp = method_getImplementation( m );
- const char* typeEncoding = method_getTypeEncoding( m );
- class_replaceMethod( [browserView class], @selector(keyboardAppearance), imp, typeEncoding );
- }
-}
-*/
-
-@end
-
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.h
index 7cfb3063..7cfb3063 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.h
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.m
index ccfa3a51..ccfa3a51 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-console/CDVLogger.m
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.h
index a146d882..a146d882 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.h
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.m
index 5a3f4708..4d75a574 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-device/CDVDevice.m
@@ -19,6 +19,7 @@
#include <sys/types.h>
#include <sys/sysctl.h>
+#include "TargetConditionals.h"
#import <Cordova/CDV.h>
#import "CDVDevice.h"
@@ -49,21 +50,23 @@
{
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
static NSString* UUID_KEY = @"CDVUUID";
-
+
+ // Check user defaults first to maintain backwards compaitibility with previous versions
+ // which didn't user identifierForVendor
NSString* app_uuid = [userDefaults stringForKey:UUID_KEY];
-
if (app_uuid == nil) {
- CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
- CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
+ if ([device respondsToSelector:@selector(identifierForVendor)]) {
+ app_uuid = [[device identifierForVendor] UUIDString];
+ } else {
+ CFUUIDRef uuid = CFUUIDCreate(NULL);
+ app_uuid = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
+ CFRelease(uuid);
+ }
- app_uuid = [NSString stringWithString:(__bridge NSString*)uuidString];
[userDefaults setObject:app_uuid forKey:UUID_KEY];
[userDefaults synchronize];
-
- CFRelease(uuidString);
- CFRelease(uuidRef);
}
-
+
return app_uuid;
}
@@ -78,17 +81,16 @@
- (NSDictionary*)deviceProperties
{
UIDevice* device = [UIDevice currentDevice];
- NSMutableDictionary* devProps = [NSMutableDictionary dictionaryWithCapacity:4];
- [devProps setObject:@"Apple" forKey:@"manufacturer"];
- [devProps setObject:[device modelVersion] forKey:@"model"];
- [devProps setObject:@"iOS" forKey:@"platform"];
- [devProps setObject:[device systemVersion] forKey:@"version"];
- [devProps setObject:[self uniqueAppInstanceIdentifier:device] forKey:@"uuid"];
- [devProps setObject:[[self class] cordovaVersion] forKey:@"cordova"];
-
- NSDictionary* devReturn = [NSDictionary dictionaryWithDictionary:devProps];
- return devReturn;
+ return @{
+ @"manufacturer": @"Apple",
+ @"model": [device modelVersion],
+ @"platform": @"iOS",
+ @"version": [device systemVersion],
+ @"uuid": [self uniqueAppInstanceIdentifier:device],
+ @"cordova": [[self class] cordovaVersion],
+ @"isVirtual": @([self isVirtual])
+ };
}
+ (NSString*)cordovaVersion
@@ -96,4 +98,15 @@
return CDV_VERSION;
}
+- (BOOL)isVirtual
+{
+ #if TARGET_OS_SIMULATOR
+ return true;
+ #elif TARGET_IPHONE_SIMULATOR
+ return true;
+ #else
+ return false;
+ #endif
+}
+
@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.h
index 9253f6a9..9253f6a9 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.h
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.m
index 1581ad3c..0dd3d2cb 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-dialogs/CDVNotification.m
@@ -23,6 +23,7 @@
#define DIALOG_TYPE_PROMPT @"prompt"
static void soundCompletionCallback(SystemSoundID ssid, void* data);
+static NSMutableArray *alertList = nil;
@implementation CDVNotification
@@ -39,7 +40,7 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
- (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons:(NSArray*)buttons defaultText:(NSString*)defaultText callbackId:(NSString*)callbackId dialogType:(NSString*)dialogType
{
- NSUInteger count = [buttons count];
+ int count = (int)[buttons count];
#ifdef __IPHONE_8_0
if (NSClassFromString(@"UIAlertController")) {
@@ -58,33 +59,32 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
alertController.view.frame = alertFrame;
}
-
+
+ __weak CDVNotification* weakNotif = self;
+
for (int n = 0; n < count; n++) {
-
- UIAlertAction* action = [UIAlertAction actionWithTitle:[buttons objectAtIndex:n] style:UIAlertActionStyleDefault handler:^(UIAlertAction * action)
- {
- CDVPluginResult* result;
-
- if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) {
-
- NSString* value0 = [[alertController.textFields objectAtIndex:0] text];
- NSDictionary* info = @{
- @"buttonIndex":@(n + 1),
- @"input1":(value0 ? value0 : [NSNull null])
- };
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
-
- } else {
-
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)(n + 1)];
-
- }
-
- [self.commandDelegate sendPluginResult:result callbackId:callbackId];
-
- }];
- [alertController addAction:action];
-
+ [alertController addAction:[UIAlertAction actionWithTitle:[buttons objectAtIndex:n]
+ style:UIAlertActionStyleDefault
+ handler:^(UIAlertAction * action)
+ {
+ CDVPluginResult* result;
+
+ if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT])
+ {
+ NSString* value0 = [[alertController.textFields objectAtIndex:0] text];
+ NSDictionary* info = @{
+ @"buttonIndex":@(n + 1),
+ @"input1":(value0 ? value0 : [NSNull null])
+ };
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
+ }
+ else
+ {
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)(n + 1)];
+ }
+
+ [weakNotif.commandDelegate sendPluginResult:result callbackId:callbackId];
+ }]];
}
if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) {
@@ -94,12 +94,19 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
}];
}
+ if(!alertList)
+ alertList = [[NSMutableArray alloc] init];
+ [alertList addObject:alertController];
+ if ([alertList count]==1) {
+ [self presentAlertcontroller];
+ }
- [self.viewController presentViewController:alertController animated:YES completion:nil];
-
- } else {
+ }
+ else
+ {
#endif
+
CDVAlertView* alertView = [[CDVAlertView alloc]
initWithTitle:title
message:message
@@ -183,6 +190,14 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
[self.commandDelegate sendPluginResult:result callbackId:cdvAlertView.callbackId];
}
+- (void)didPresentAlertView:(UIAlertView*)alertView
+{
+ //show keyboard on iOS 8
+ if (alertView.alertViewStyle == UIAlertViewStylePlainTextInput){
+ [[alertView textFieldAtIndex:0] selectAll:nil];
+ }
+}
+
static void playBeep(int count) {
SystemSoundID completeSound;
NSInteger cbDataCount = count;
@@ -211,6 +226,26 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data) {
playBeep([count intValue]);
}
+-(UIViewController *)getTopPresentedViewController {
+ UIViewController *presentingViewController = self.viewController;
+ while(presentingViewController.presentedViewController != nil && ![presentingViewController.presentedViewController isBeingDismissed])
+ {
+ presentingViewController = presentingViewController.presentedViewController;
+ }
+ return presentingViewController;
+}
+
+-(void)presentAlertcontroller {
+
+ __weak CDVNotification* weakNotif = self;
+ [self.getTopPresentedViewController presentViewController:[alertList firstObject] animated:YES completion:^{
+ [alertList removeObject:[alertList firstObject]];
+ if ([alertList count]>0) {
+ [weakNotif presentAlertcontroller];
+ }
+ }];
+
+}
@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.h
index cce2738f..cce2738f 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.h
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.m
index 8b543c8e..e4b34a11 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-geolocation/CDVLocation.m
@@ -122,17 +122,17 @@
NSUInteger code = [CLLocationManager authorizationStatus];
if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)] || [self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) { //iOS8+
__highAccuracyEnabled = enableHighAccuracy;
- if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]){
- [self.locationManager requestAlwaysAuthorization];
- } else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]) {
- [self.locationManager requestWhenInUseAuthorization];
+ if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]){
+ [self.locationManager requestWhenInUseAuthorization];
+ } else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]) {
+ [self.locationManager requestAlwaysAuthorization];
} else {
NSLog(@"[Warning] No NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription key is defined in the Info.plist file.");
}
return;
}
#endif
-
+
// Tell the location manager to start notifying us of location updates. We
// first stop, and then start the updating to ensure we get at least one
// update, even if our location did not change.
@@ -148,9 +148,8 @@
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
} else {
__highAccuracyEnabled = NO;
- // TODO: Set distance filter to 10 meters? and desired accuracy to nearest ten meters? arbitrary.
self.locationManager.distanceFilter = 10;
- self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
+ self.locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
}
}
@@ -193,35 +192,37 @@
- (void)getLocation:(CDVInvokedUrlCommand*)command
{
- NSString* callbackId = command.callbackId;
- BOOL enableHighAccuracy = [[command argumentAtIndex:0] boolValue];
+ [self.commandDelegate runInBackground:^{
+ NSString* callbackId = command.callbackId;
+ BOOL enableHighAccuracy = [[command argumentAtIndex:0] boolValue];
- if ([self isLocationServicesEnabled] == NO) {
- NSMutableDictionary* posError = [NSMutableDictionary dictionaryWithCapacity:2];
- [posError setObject:[NSNumber numberWithInt:PERMISSIONDENIED] forKey:@"code"];
- [posError setObject:@"Location services are disabled." forKey:@"message"];
- CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError];
- [self.commandDelegate sendPluginResult:result callbackId:callbackId];
- } else {
- if (!self.locationData) {
- self.locationData = [[CDVLocationData alloc] init];
- }
- CDVLocationData* lData = self.locationData;
- if (!lData.locationCallbacks) {
- lData.locationCallbacks = [NSMutableArray arrayWithCapacity:1];
- }
+ if ([self isLocationServicesEnabled] == NO) {
+ NSMutableDictionary* posError = [NSMutableDictionary dictionaryWithCapacity:2];
+ [posError setObject:[NSNumber numberWithInt:PERMISSIONDENIED] forKey:@"code"];
+ [posError setObject:@"Location services are disabled." forKey:@"message"];
+ CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError];
+ [self.commandDelegate sendPluginResult:result callbackId:callbackId];
+ } else {
+ if (!self.locationData) {
+ self.locationData = [[CDVLocationData alloc] init];
+ }
+ CDVLocationData* lData = self.locationData;
+ if (!lData.locationCallbacks) {
+ lData.locationCallbacks = [NSMutableArray arrayWithCapacity:1];
+ }
- if (!__locationStarted || (__highAccuracyEnabled != enableHighAccuracy)) {
- // add the callbackId into the array so we can call back when get data
- if (callbackId != nil) {
- [lData.locationCallbacks addObject:callbackId];
+ if (!__locationStarted || (__highAccuracyEnabled != enableHighAccuracy)) {
+ // add the callbackId into the array so we can call back when get data
+ if (callbackId != nil) {
+ [lData.locationCallbacks addObject:callbackId];
+ }
+ // Tell the location manager to start notifying us of heading updates
+ [self startLocation:enableHighAccuracy];
+ } else {
+ [self returnLocationInfo:callbackId andKeepCallback:NO];
}
- // Tell the location manager to start notifying us of heading updates
- [self startLocation:enableHighAccuracy];
- } else {
- [self returnLocationInfo:callbackId andKeepCallback:NO];
}
- }
+ }];
}
- (void)addWatch:(CDVInvokedUrlCommand*)command
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.h
index 1ccc7b14..6bb0ec16 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.h
@@ -30,7 +30,6 @@
@class CDVInAppBrowserViewController;
@interface CDVInAppBrowser : CDVPlugin {
- BOOL _injectedIframeBridge;
}
@property (nonatomic, retain) CDVInAppBrowserViewController* inAppBrowserViewController;
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.m
index 47a8ab3a..b342ca73 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.m
@@ -47,6 +47,11 @@
_callbackIdPattern = nil;
}
+- (id)settingForKey:(NSString*)key
+{
+ return [self.commandDelegate.settings objectForKey:[key lowercaseString]];
+}
+
- (void)onReset
{
[self close:nil];
@@ -137,8 +142,16 @@
}
if (self.inAppBrowserViewController == nil) {
- NSString* originalUA = [CDVUserAgentUtil originalUserAgent];
- self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:originalUA prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
+ NSString* userAgent = [CDVUserAgentUtil originalUserAgent];
+ NSString* overrideUserAgent = [self settingForKey:@"OverrideUserAgent"];
+ NSString* appendUserAgent = [self settingForKey:@"AppendUserAgent"];
+ if(overrideUserAgent){
+ userAgent = overrideUserAgent;
+ }
+ if(appendUserAgent){
+ userAgent = [userAgent stringByAppendingString: appendUserAgent];
+ }
+ self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:userAgent prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
self.inAppBrowserViewController.navigationDelegate = self;
if ([self.viewController conformsToProtocol:@protocol(CDVScreenOrientationDelegate)]) {
@@ -218,6 +231,7 @@
initWithRootViewController:self.inAppBrowserViewController];
nav.orientationDelegate = self.inAppBrowserViewController;
nav.navigationBarHidden = YES;
+ nav.modalPresentationStyle = self.inAppBrowserViewController.modalPresentationStyle;
__weak CDVInAppBrowser* weakSelf = self;
@@ -231,25 +245,25 @@
- (void)openInCordovaWebView:(NSURL*)url withOptions:(NSString*)options
{
- if ([self.commandDelegate URLIsWhitelisted:url]) {
- NSURLRequest* request = [NSURLRequest requestWithURL:url];
+ NSURLRequest* request = [NSURLRequest requestWithURL:url];
+
#ifdef __CORDOVA_4_0_0
- [self.webViewEngine loadRequest:request];
+ // the webview engine itself will filter for this according to <allow-navigation> policy
+ // in config.xml for cordova-ios-4.0
+ [self.webViewEngine loadRequest:request];
#else
+ if ([self.commandDelegate URLIsWhitelisted:url]) {
[self.webView loadRequest:request];
-#endif
} else { // this assumes the InAppBrowser can be excepted from the white-list
[self openInInAppBrowser:url withOptions:options];
}
+#endif
}
- (void)openInSystem:(NSURL*)url
{
- if ([[UIApplication sharedApplication] canOpenURL:url]) {
- [[UIApplication sharedApplication] openURL:url];
- } else { // handle any custom schemes to plugins
- [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];
- }
+ [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];
+ [[UIApplication sharedApplication] openURL:url];
}
// This is a helper method for the inject{Script|Style}{Code|File} API calls, which
@@ -263,11 +277,8 @@
- (void)injectDeferredObject:(NSString*)source withWrapper:(NSString*)jsWrapper
{
- if (!_injectedIframeBridge) {
- _injectedIframeBridge = YES;
- // Create an iframe bridge in the new document to communicate with the CDVInAppBrowserViewController
- [self.inAppBrowserViewController.webView stringByEvaluatingJavaScriptFromString:@"(function(d){var e = _cdvIframeBridge = d.createElement('iframe');e.style.display='none';d.body.appendChild(e);})(document)"];
- }
+ // Ensure an iframe bridge is created to communicate with the CDVInAppBrowserViewController
+ [self.inAppBrowserViewController.webView stringByEvaluatingJavaScriptFromString:@"(function(d){_cdvIframeBridge=d.getElementById('_cdvIframeBridge');if(!_cdvIframeBridge) {var e = _cdvIframeBridge = d.createElement('iframe');e.id='_cdvIframeBridge'; e.style.display='none';d.body.appendChild(e);}})(document)"];
if (jsWrapper != nil) {
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@[source] options:0 error:nil];
@@ -390,7 +401,14 @@
[self.commandDelegate sendPluginResult:pluginResult callbackId:scriptCallbackId];
return NO;
}
- } else if ((self.callbackId != nil) && isTopLevelNavigation) {
+ }
+ //if is an app store link, let the system handle it, otherwise it fails to load it
+ else if ([[ url scheme] isEqualToString:@"itms-appss"] || [[ url scheme] isEqualToString:@"itms-apps"]) {
+ [theWebView stopLoading];
+ [self openInSystem:url];
+ return NO;
+ }
+ else if ((self.callbackId != nil) && isTopLevelNavigation) {
// Send a loadstart event for each top-level navigation (includes redirects).
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsDictionary:@{@"type":@"loadstart", @"url":[url absoluteString]}];
@@ -404,7 +422,6 @@
- (void)webViewDidStartLoad:(UIWebView*)theWebView
{
- _injectedIframeBridge = NO;
}
- (void)webViewDidFinishLoad:(UIWebView*)theWebView
@@ -512,15 +529,15 @@
self.webView.scalesPageToFit = NO;
self.webView.userInteractionEnabled = YES;
- self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
+ self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.spinner.alpha = 1.000;
self.spinner.autoresizesSubviews = YES;
- self.spinner.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
+ self.spinner.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin);
self.spinner.clearsContextBeforeDrawing = NO;
self.spinner.clipsToBounds = NO;
self.spinner.contentMode = UIViewContentModeScaleToFill;
- self.spinner.frame = CGRectMake(454.0, 231.0, 20.0, 20.0);
- self.spinner.hidden = YES;
+ self.spinner.frame = CGRectMake(CGRectGetMidX(self.webView.frame), CGRectGetMidY(self.webView.frame), 20.0, 20.0);
+ self.spinner.hidden = NO;
self.spinner.hidesWhenStopped = YES;
self.spinner.multipleTouchEnabled = NO;
self.spinner.opaque = NO;
@@ -749,6 +766,10 @@
return UIStatusBarStyleDefault;
}
+- (BOOL)prefersStatusBarHidden {
+ return NO;
+}
+
- (void)close
{
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
@@ -988,19 +1009,38 @@
@implementation CDVInAppBrowserNavigationController : UINavigationController
+- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
+ if ( self.presentedViewController) {
+ [super dismissViewControllerAnimated:flag completion:completion];
+ }
+}
+
- (void) viewDidLoad {
CGRect frame = [UIApplication sharedApplication].statusBarFrame;
// simplified from: http://stackoverflow.com/a/25669695/219684
- UIToolbar* bgToolbar = [[UIToolbar alloc] initWithFrame:frame];
+ UIToolbar* bgToolbar = [[UIToolbar alloc] initWithFrame:[self invertFrameIfNeeded:frame]];
bgToolbar.barStyle = UIBarStyleDefault;
+ [bgToolbar setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[self.view addSubview:bgToolbar];
[super viewDidLoad];
}
+- (CGRect) invertFrameIfNeeded:(CGRect)rect {
+ // We need to invert since on iOS 7 frames are always in Portrait context
+ if (!IsAtLeastiOSVersion(@"8.0")) {
+ if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
+ CGFloat temp = rect.size.width;
+ rect.size.width = rect.size.height;
+ rect.size.height = temp;
+ }
+ rect.origin = CGPointZero;
+ }
+ return rect;
+}
#pragma mark CDVScreenOrientationDelegate
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.h
index 8add0279..8add0279 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.h
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.m
index 37497675..6715322a 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVConnection.m
@@ -16,6 +16,7 @@
specific language governing permissions and limitations
under the License.
*/
+#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import "CDVConnection.h"
#import "CDVReachability.h"
@@ -57,6 +58,32 @@
if (isConnectionRequired) {
return @"none";
} else {
+ if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) {
+ CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
+ if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) {
+ return @"2g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) {
+ return @"2g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
+ return @"4g";
+ }
+ }
return @"cellular";
}
}
@@ -118,7 +145,9 @@
[self.internetReach startNotifier];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateConnectionType:)
name:kReachabilityChangedNotification object:nil];
- if (&UIApplicationDidEnterBackgroundNotification && &UIApplicationWillEnterForegroundNotification) {
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateConnectionType:)
+ name:CTRadioAccessTechnologyDidChangeNotification object:nil];
+ if (UIApplicationDidEnterBackgroundNotification && UIApplicationWillEnterForegroundNotification) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPause) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onResume) name:UIApplicationWillEnterForegroundNotification object:nil];
}
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.h
index 01a95c35..01a95c35 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.h
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.m
index c60261ae..1399867e 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-network-information/CDVReachability.m
@@ -142,6 +142,9 @@ static void CDVReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkRe
retVal->reachabilityRef = reachability;
retVal->localWiFiRef = NO;
}
+ else {
+ CFRelease(reachability);
+ }
}
return retVal;
}
@@ -156,6 +159,9 @@ static void CDVReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkRe
retVal->reachabilityRef = reachability;
retVal->localWiFiRef = NO;
}
+ else {
+ CFRelease(reachability);
+ }
}
return retVal;
}
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.h
index 0d6ae397..ec5d6022 100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.h
@@ -23,6 +23,7 @@
typedef struct {
BOOL iPhone;
BOOL iPad;
+ BOOL iPhone4;
BOOL iPhone5;
BOOL iPhone6;
BOOL iPhone6Plus;
@@ -35,6 +36,7 @@ typedef struct {
UIImageView* _imageView;
NSString* _curImageName;
BOOL _visible;
+ BOOL _destroyed;
}
- (void)show:(CDVInvokedUrlCommand*)command;
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.m
index a1add304..8ad8116b 100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVSplashScreen.m
@@ -23,6 +23,7 @@
#import "CDVViewController+SplashScreen.h"
#define kSplashScreenDurationDefault 3000.0f
+#define kFadeDurationDefault 500.0f
@implementation CDVSplashScreen
@@ -41,7 +42,7 @@
- (void)hide:(CDVInvokedUrlCommand*)command
{
- [self setVisible:NO];
+ [self setVisible:NO andForce:YES];
}
- (void)pageDidLoad
@@ -76,7 +77,7 @@
BOOL autorotateValue = (device.iPad || device.iPhone6Plus) ?
[(CDVViewController *)self.viewController shouldAutorotateDefaultValue] :
NO;
-
+
[(CDVViewController *)self.viewController setEnabledAutorotation:autorotateValue];
NSString* topActivityIndicator = [self.commandDelegate.settings objectForKey:[@"TopActivityIndicator" lowercaseString]];
@@ -120,6 +121,7 @@
[parentView addObserver:self forKeyPath:@"bounds" options:0 context:nil];
[self updateImage];
+ _destroyed = NO;
}
- (void)hideViews
@@ -130,6 +132,7 @@
- (void)destroyViews
{
+ _destroyed = YES;
[(CDVViewController *)self.viewController setEnabledAutorotation:[(CDVViewController *)self.viewController shouldAutorotateDefaultValue]];
[_imageView removeFromSuperview];
@@ -139,30 +142,39 @@
_curImageName = nil;
self.viewController.view.userInteractionEnabled = YES; // re-enable user interaction upon completion
- [self.viewController.view removeObserver:self forKeyPath:@"frame"];
- [self.viewController.view removeObserver:self forKeyPath:@"bounds"];
+ @try {
+ [self.viewController.view removeObserver:self forKeyPath:@"frame"];
+ [self.viewController.view removeObserver:self forKeyPath:@"bounds"];
+ }
+ @catch (NSException *exception) {
+ // When reloading the page from a remotely connected Safari, there
+ // are no observers, so the removeObserver method throws an exception,
+ // that we can safely ignore.
+ // Alternatively we can check whether there are observers before calling removeObserver
+ }
}
- (CDV_iOSDevice) getCurrentDevice
{
CDV_iOSDevice device;
-
+
UIScreen* mainScreen = [UIScreen mainScreen];
CGFloat mainScreenHeight = mainScreen.bounds.size.height;
CGFloat mainScreenWidth = mainScreen.bounds.size.width;
-
+
int limit = MAX(mainScreenHeight,mainScreenWidth);
-
+
device.iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
device.iPhone = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone);
device.retina = ([mainScreen scale] == 2.0);
+ device.iPhone4 = (device.iPhone && limit == 480.0);
device.iPhone5 = (device.iPhone && limit == 568.0);
// note these below is not a true device detect, for example if you are on an
// iPhone 6/6+ but the app is scaled it will prob set iPhone5 as true, but
// this is appropriate for detecting the runtime screen environment
device.iPhone6 = (device.iPhone && limit == 667.0);
device.iPhone6Plus = (device.iPhone && limit == 736.0);
-
+
return device;
}
@@ -170,15 +182,15 @@
{
// Use UILaunchImageFile if specified in plist. Otherwise, use Default.
NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"];
-
+
NSUInteger supportedOrientations = [orientationDelegate supportedInterfaceOrientations];
-
+
// Checks to see if the developer has locked the orientation to use only one of Portrait or Landscape
BOOL supportsLandscape = (supportedOrientations & UIInterfaceOrientationMaskLandscape);
BOOL supportsPortrait = (supportedOrientations & UIInterfaceOrientationMaskPortrait || supportedOrientations & UIInterfaceOrientationMaskPortraitUpsideDown);
// this means there are no mixed orientations in there
BOOL isOrientationLocked = !(supportsPortrait && supportsLandscape);
-
+
if (imageName)
{
imageName = [imageName stringByDeletingPathExtension];
@@ -187,7 +199,23 @@
{
imageName = @"Default";
}
-
+
+ // Add Asset Catalog specific prefixes
+ if ([imageName isEqualToString:@"LaunchImage"])
+ {
+ if (device.iPhone4 || device.iPhone5 || device.iPad) {
+ imageName = [imageName stringByAppendingString:@"-700"];
+ } else if(device.iPhone6) {
+ imageName = [imageName stringByAppendingString:@"-800"];
+ } else if(device.iPhone6Plus) {
+ imageName = [imageName stringByAppendingString:@"-800"];
+ if (currentOrientation == UIInterfaceOrientationPortrait || currentOrientation == UIInterfaceOrientationPortraitUpsideDown)
+ {
+ imageName = [imageName stringByAppendingString:@"-Portrait"];
+ }
+ }
+ }
+
if (device.iPhone5)
{ // does not support landscape
imageName = [imageName stringByAppendingString:@"-568h"];
@@ -231,7 +259,7 @@
case UIInterfaceOrientationLandscapeRight:
imageName = [imageName stringByAppendingString:@"-Landscape"];
break;
-
+
case UIInterfaceOrientationPortrait:
case UIInterfaceOrientationPortraitUpsideDown:
default:
@@ -240,14 +268,51 @@
}
}
}
-
+
return imageName;
}
+- (UIInterfaceOrientation)getCurrentOrientation
+{
+ UIInterfaceOrientation iOrientation = [UIApplication sharedApplication].statusBarOrientation;
+ UIDeviceOrientation dOrientation = [UIDevice currentDevice].orientation;
+
+ bool landscape;
+
+ if (dOrientation == UIDeviceOrientationUnknown || dOrientation == UIDeviceOrientationFaceUp || dOrientation == UIDeviceOrientationFaceDown) {
+ // If the device is laying down, use the UIInterfaceOrientation based on the status bar.
+ landscape = UIInterfaceOrientationIsLandscape(iOrientation);
+ } else {
+ // If the device is not laying down, use UIDeviceOrientation.
+ landscape = UIDeviceOrientationIsLandscape(dOrientation);
+
+ // There's a bug in iOS!!!! http://openradar.appspot.com/7216046
+ // So values needs to be reversed for landscape!
+ if (dOrientation == UIDeviceOrientationLandscapeLeft)
+ {
+ iOrientation = UIInterfaceOrientationLandscapeRight;
+ }
+ else if (dOrientation == UIDeviceOrientationLandscapeRight)
+ {
+ iOrientation = UIInterfaceOrientationLandscapeLeft;
+ }
+ else if (dOrientation == UIDeviceOrientationPortrait)
+ {
+ iOrientation = UIInterfaceOrientationPortrait;
+ }
+ else if (dOrientation == UIDeviceOrientationPortraitUpsideDown)
+ {
+ iOrientation = UIInterfaceOrientationPortraitUpsideDown;
+ }
+ }
+
+ return iOrientation;
+}
+
// Sets the view's frame and image.
- (void)updateImage
{
- NSString* imageName = [self getImageName:[[UIApplication sharedApplication] statusBarOrientation] delegate:(id<CDVScreenOrientationDelegate>)self.viewController device:[self getCurrentDevice]];
+ NSString* imageName = [self getImageName:[self getCurrentOrientation] delegate:(id<CDVScreenOrientationDelegate>)self.viewController device:[self getCurrentDevice]];
if (![imageName isEqualToString:_curImageName])
{
@@ -273,7 +338,7 @@
CGRect imgBounds = (img) ? CGRectMake(0, 0, img.size.width, img.size.height) : CGRectZero;
CGSize screenSize = [self.viewController.view convertRect:[UIScreen mainScreen].bounds fromView:nil].size;
- UIInterfaceOrientation orientation = self.viewController.interfaceOrientation;
+ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
CGAffineTransform imgTransform = CGAffineTransformIdentity;
/* If and only if an iPhone application is landscape-only as per
@@ -281,8 +346,8 @@
* landscape. In this case the image must be rotated in order to appear
* correctly.
*/
- BOOL isIPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad;
- if (UIInterfaceOrientationIsLandscape(orientation) && !isIPad)
+ CDV_iOSDevice device = [self getCurrentDevice];
+ if (UIInterfaceOrientationIsLandscape(orientation) && !device.iPhone6Plus && !device.iPad)
{
imgTransform = CGAffineTransformMakeRotation(M_PI / 2);
imgBounds.size = CGSizeMake(imgBounds.size.height, imgBounds.size.width);
@@ -322,26 +387,52 @@
- (void)setVisible:(BOOL)visible
{
- if (visible != _visible)
+ [self setVisible:visible andForce:NO];
+}
+
+- (void)setVisible:(BOOL)visible andForce:(BOOL)force
+{
+ if (visible != _visible || force)
{
_visible = visible;
id fadeSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreen" lowercaseString]];
id fadeSplashScreenDuration = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreenDuration" lowercaseString]];
- float fadeDuration = fadeSplashScreenDuration == nil ? kSplashScreenDurationDefault : [fadeSplashScreenDuration floatValue];
+ float fadeDuration = fadeSplashScreenDuration == nil ? kFadeDurationDefault : [fadeSplashScreenDuration floatValue];
+
+ id splashDurationString = [self.commandDelegate.settings objectForKey: [@"SplashScreenDelay" lowercaseString]];
+ float splashDuration = splashDurationString == nil ? kSplashScreenDurationDefault : [splashDurationString floatValue];
- if ((fadeSplashScreenValue == nil) || ![fadeSplashScreenValue boolValue])
+ id autoHideSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"AutoHideSplashScreen" lowercaseString]];
+ BOOL autoHideSplashScreen = true;
+
+ if (autoHideSplashScreenValue != nil) {
+ autoHideSplashScreen = [autoHideSplashScreenValue boolValue];
+ }
+
+ if (!autoHideSplashScreen) {
+ // CB-10412 SplashScreenDelay does not make sense if the splashscreen is hidden manually
+ splashDuration = 0;
+ }
+
+
+ if (fadeSplashScreenValue == nil)
+ {
+ fadeSplashScreenValue = @"true";
+ }
+
+ if (![fadeSplashScreenValue boolValue])
{
fadeDuration = 0;
}
- else if(fadeDuration < 30)
+ else if (fadeDuration < 30)
{
// [CB-9750] This value used to be in decimal seconds, so we will assume that if someone specifies 10
// they mean 10 seconds, and not the meaningless 10ms
fadeDuration *= 1000;
}
-
+
if (_visible)
{
if (_imageView == nil)
@@ -349,26 +440,42 @@
[self createViews];
}
}
- else if (fadeDuration == 0)
+ else if (fadeDuration == 0 && splashDuration == 0)
{
[self destroyViews];
}
else
{
__weak __typeof(self) weakSelf = self;
- [UIView transitionWithView:self.viewController.view
- duration:(fadeDuration / 1000)
- options:UIViewAnimationOptionTransitionNone
- animations:^(void) {
- [weakSelf hideViews];
- }
- completion:^(BOOL finished) {
- if (finished) {
- [weakSelf destroyViews];
- // TODO: It might also be nice to have a js event happen here -jm
- }
- }
- ];
+ float effectiveSplashDuration;
+
+ // [CB-10562] AutoHideSplashScreen may be "true" but we should still be able to hide the splashscreen manually.
+ if (!autoHideSplashScreen || force) {
+ effectiveSplashDuration = (fadeDuration) / 1000;
+ } else {
+ effectiveSplashDuration = (splashDuration - fadeDuration) / 1000;
+ }
+
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (uint64_t) effectiveSplashDuration * NSEC_PER_SEC), dispatch_get_main_queue(), CFBridgingRelease(CFBridgingRetain(^(void) {
+ if (!_destroyed) {
+ [UIView transitionWithView:self.viewController.view
+ duration:(fadeDuration / 1000)
+ options:UIViewAnimationOptionTransitionNone
+ animations:^(void) {
+ [weakSelf hideViews];
+ }
+ completion:^(BOOL finished) {
+ // Always destroy views, otherwise you could have an
+ // invisible splashscreen that is overlayed over your active views
+ // which causes that no touch events are passed
+ if (!_destroyed) {
+ [weakSelf destroyViews];
+ // TODO: It might also be nice to have a js event happen here -jm
+ }
+ }
+ ];
+ }
+ })));
}
}
}
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVViewController+SplashScreen.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVViewController+SplashScreen.m
index 5736b6f2..e483def6 100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVViewController+SplashScreen.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-splashscreen/CDVViewController+SplashScreen.m
@@ -35,6 +35,13 @@
- (BOOL)enabledAutorotation
{
NSNumber *number = (NSNumber *)objc_getAssociatedObject(self, @selector(enabledAutorotation));
+
+ // Defaulting to YES to correspond parent CDVViewController behavior
+ if (number == nil)
+ {
+ return YES;
+ }
+
return [number boolValue];
}
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.h
new file mode 100644
index 00000000..d7da331d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.h
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+
+@interface NSString (URLEncoding)
+@property (readonly) NSString *URLEncodedString;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.m
new file mode 100644
index 00000000..b737626c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/NSString+URLEncoding.m
@@ -0,0 +1,30 @@
+#import "NSString+URLEncoding.h"
+
+@implementation NSString (URLEncoding)
+- (NSString*)URLEncodedString
+{
+ NSString* result = (NSString *)CFBridgingRelease(
+ CFURLCreateStringByAddingPercentEscapes(
+ kCFAllocatorDefault,
+ (CFStringRef)self,
+ CFSTR("#%"), // don't escape these
+ NULL, // allow escaping these
+ kCFStringEncodingUTF8
+ )
+ );
+
+ // we may have a URL with more than one '#' now - which iOS doesn't allow, so escape all but the first one
+ NSArray *parts = [result componentsSeparatedByString:@"#"];
+ NSString *finalResult = parts[0];
+ for (int i=1; i<parts.count; i++) {
+ NSString *part = [parts objectAtIndex:i];
+ if (i==1) {
+ finalResult = [finalResult stringByAppendingString:@"#"];
+ } else {
+ finalResult = [finalResult stringByAppendingString:@"%23"];
+ }
+ finalResult = [finalResult stringByAppendingString:part];
+ }
+ return finalResult;
+}
+@end \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.h
index b51474d3..0c731450 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.h
@@ -4,13 +4,14 @@
@interface SocialSharing : CDVPlugin <UIPopoverControllerDelegate, MFMailComposeViewControllerDelegate, UIDocumentInteractionControllerDelegate>
@property (nonatomic, strong) MFMailComposeViewController *globalMailComposer;
-@property (retain) UIDocumentInteractionController * documentInteractionController;
+@property (nonatomic, strong) UIDocumentInteractionController * documentInteractionController;
@property (retain) NSString * tempStoredFile;
@property (retain) CDVInvokedUrlCommand * command;
- (void)available:(CDVInvokedUrlCommand*)command;
- (void)setIPadPopupCoordinates:(CDVInvokedUrlCommand*)command;
- (void)share:(CDVInvokedUrlCommand*)command;
+- (void)shareWithOptions:(CDVInvokedUrlCommand*)command;
- (void)canShareVia:(CDVInvokedUrlCommand*)command;
- (void)canShareViaEmail:(CDVInvokedUrlCommand*)command;
- (void)shareVia:(CDVInvokedUrlCommand*)command;
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.m
index cd0913a4..014925bd 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-x-socialsharing/SocialSharing.m
@@ -1,4 +1,5 @@
#import "SocialSharing.h"
+#import "NSString+URLEncoding.h"
#import <Cordova/CDV.h>
#import <Social/Social.h>
#import <Foundation/NSException.h>
@@ -6,6 +7,11 @@
#import <MessageUI/MFMailComposeViewController.h>
#import <MobileCoreServices/MobileCoreServices.h>
+static NSString *const kShareOptionMessage = @"message";
+static NSString *const kShareOptionSubject = @"subject";
+static NSString *const kShareOptionFiles = @"files";
+static NSString *const kShareOptionUrl = @"url";
+
@implementation SocialSharing {
UIPopoverController *_popover;
NSString *_popupCoordinates;
@@ -51,23 +57,46 @@
}
- (void)share:(CDVInvokedUrlCommand*)command {
+ [self shareInternal:command
+ withOptions:@{
+ kShareOptionMessage: [command.arguments objectAtIndex:0],
+ kShareOptionSubject: [command.arguments objectAtIndex:1],
+ kShareOptionFiles: [command.arguments objectAtIndex:2],
+ kShareOptionUrl: [command.arguments objectAtIndex:3]
+ }
+ isBooleanResponse:YES
+];
+}
+
+- (void)shareWithOptions:(CDVInvokedUrlCommand*)command {
+ NSDictionary* options = [command.arguments objectAtIndex:0];
+ [self shareInternal:command
+ withOptions:options
+ isBooleanResponse:NO
+ ];
+}
+
+- (void)shareInternal:(CDVInvokedUrlCommand*)command withOptions:(NSDictionary*)options isBooleanResponse:(BOOL)boolResponse {
[self.commandDelegate runInBackground:^{ //avoid main thread block especially if sharing big files from url
if (!NSClassFromString(@"UIActivityViewController")) {
CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"not available"];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
return;
}
-
- NSString *message = [command.arguments objectAtIndex:0];
- NSString *subject = [command.arguments objectAtIndex:1];
- NSArray *filenames = [command.arguments objectAtIndex:2];
- NSString *urlString = [command.arguments objectAtIndex:3];
-
+
+ NSString *message = options[kShareOptionMessage];
+ NSString *subject = options[kShareOptionSubject];
+ NSArray *filenames = options[kShareOptionFiles];
+ NSString *urlString = options[kShareOptionUrl];
+
NSMutableArray *activityItems = [[NSMutableArray alloc] init];
+
+ if (message != (id)[NSNull null] && message != nil) {
[activityItems addObject:message];
-
- NSMutableArray *files = [[NSMutableArray alloc] init];
- if (filenames != (id)[NSNull null] && filenames.count > 0) {
+ }
+
+ if (filenames != (id)[NSNull null] && filenames != nil && filenames.count > 0) {
+ NSMutableArray *files = [[NSMutableArray alloc] init];
for (NSString* filename in filenames) {
NSObject *file = [self getImage:filename];
if (file == nil) {
@@ -79,31 +108,47 @@
}
[activityItems addObjectsFromArray:files];
}
-
- if (urlString != (id)[NSNull null]) {
- [activityItems addObject:[NSURL URLWithString:urlString]];
+
+ if (urlString != (id)[NSNull null] && urlString != nil) {
+ [activityItems addObject:[NSURL URLWithString:[urlString URLEncodedString]]];
}
-
+
UIActivity *activity = [[UIActivity alloc] init];
NSArray *applicationActivities = [[NSArray alloc] initWithObjects:activity, nil];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];
- if (subject != (id)[NSNull null]) {
+ if (subject != (id)[NSNull null] && subject != nil) {
[activityVC setValue:subject forKey:@"subject"];
}
-
- // TODO deprecated in iOS 8.0, change this some day
- [activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
- [self cleanupStoredFiles];
- NSLog(@"SocialSharing app selected: %@", activityType);
- CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:completed];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-
+
+ if ([activityVC respondsToSelector:(@selector(setCompletionWithItemsHandler:))]) {
+ [activityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray * returnedItems, NSError * activityError) {
+ [self cleanupStoredFiles];
+ if (boolResponse) {
+ [self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:completed]
+ callbackId:command.callbackId];
+ } else {
+ NSDictionary * result = @{@"completed":@(completed), @"app":activityType == nil ? @"" : activityType};
+ [self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:result]
+ callbackId:command.callbackId];
+ }
+ }];
+ } else {
+ // let's suppress this warning otherwise folks will start opening issues while it's not relevant
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ [activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
+ [self cleanupStoredFiles];
+ NSDictionary * result = @{@"completed":@(completed), @"app":activityType};
+ CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:result];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+#pragma GCC diagnostic warning "-Wdeprecated-declarations"
+ }
+
NSArray * socialSharingExcludeActivities = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"SocialSharingExcludeActivities"];
if (socialSharingExcludeActivities!=nil && [socialSharingExcludeActivities count] > 0) {
activityVC.excludedActivityTypes = socialSharingExcludeActivities;
}
-
+
dispatch_async(dispatch_get_main_queue(), ^(void){
// iPad on iOS >= 8 needs a different approach
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
@@ -230,27 +275,27 @@
- (void)shareViaInternal:(CDVInvokedUrlCommand*)command
type:(NSString *) type {
-
+
NSString *message = [command.arguments objectAtIndex:0];
// subject is not supported by the SLComposeViewController
NSArray *filenames = [command.arguments objectAtIndex:2];
NSString *urlString = [command.arguments objectAtIndex:3];
-
+
// boldly invoke the target app, because the phone will display a nice message asking to configure the app
SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:type];
if (message != (id)[NSNull null]) {
[composeViewController setInitialText:message];
}
-
+
for (NSString* filename in filenames) {
UIImage* image = [self getImage:filename];
if (image != nil) {
[composeViewController addImage:image];
}
}
-
+
if (urlString != (id)[NSNull null]) {
- [composeViewController addURL:[NSURL URLWithString:urlString]];
+ [composeViewController addURL:[NSURL URLWithString:[urlString URLEncodedString]]];
}
[composeViewController setCompletionHandler:^(SLComposeViewControllerResult result) {
@@ -272,7 +317,7 @@
- (void)shareViaEmail:(CDVInvokedUrlCommand*)command {
if ([self isEmailAvailable]) {
-
+
if (TARGET_IPHONE_SIMULATOR && IsAtLeastiOSVersion(@"8.0")) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SocialSharing plugin"
message:@"Sharing via email is not supported on the iOS 8 simulator."
@@ -282,38 +327,40 @@
[alert show];
return;
}
-
+
+ [self cycleTheGlobalMailComposer];
+
self.globalMailComposer.mailComposeDelegate = self;
-
+
if ([command.arguments objectAtIndex:0] != (id)[NSNull null]) {
NSString *message = [command.arguments objectAtIndex:0];
BOOL isHTML = [message rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch].location != NSNotFound;
[self.globalMailComposer setMessageBody:message isHTML:isHTML];
}
-
+
if ([command.arguments objectAtIndex:1] != (id)[NSNull null]) {
[self.globalMailComposer setSubject: [command.arguments objectAtIndex:1]];
}
-
+
if ([command.arguments objectAtIndex:2] != (id)[NSNull null]) {
[self.globalMailComposer setToRecipients:[command.arguments objectAtIndex:2]];
}
-
+
if ([command.arguments objectAtIndex:3] != (id)[NSNull null]) {
[self.globalMailComposer setCcRecipients:[command.arguments objectAtIndex:3]];
}
-
+
if ([command.arguments objectAtIndex:4] != (id)[NSNull null]) {
[self.globalMailComposer setBccRecipients:[command.arguments objectAtIndex:4]];
}
-
+
if ([command.arguments objectAtIndex:5] != (id)[NSNull null]) {
NSArray* attachments = [command.arguments objectAtIndex:5];
NSFileManager* fileManager = [NSFileManager defaultManager];
for (NSString* path in attachments) {
NSURL *file = [self getFile:path];
NSData* data = [fileManager contentsAtPath:file.path];
-
+
NSString* fileName;
NSString* mimeType;
NSString* basename = [self getBasenameFromAttachmentPath:path];
@@ -331,14 +378,14 @@
[self.globalMailComposer addAttachmentData:data mimeType:mimeType fileName:fileName];
}
}
-
+
// remember the command, because we need it in the didFinishWithResult method
_command = command;
[self.commandDelegate runInBackground:^{
[[self getTopMostViewController] presentViewController:self.globalMailComposer animated:YES completion:nil];
}];
-
+
} else {
CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"not available"];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
@@ -358,7 +405,7 @@
NSString* pathWithoutPrefix = [path stringByReplacingOccurrencesOfString:@"base64:" withString:@""];
return [pathWithoutPrefix substringToIndex:[pathWithoutPrefix rangeOfString:@"//"].location];
}
- return path;
+ return [path componentsSeparatedByString: @"?"][0];
}
- (NSString*) getMimeTypeFromFileExtension:(NSString*)extension {
@@ -406,7 +453,7 @@
NSString *message = [options objectForKey:@"message"];
NSString *subject = [options objectForKey:@"subject"];
NSString *image = [options objectForKey:@"image"];
-
+
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = (id) self;
if (message != (id)[NSNull null]) {
@@ -424,7 +471,7 @@
}
}
}
-
+
if (phonenumbers != (id)[NSNull null]) {
[picker setRecipients:[phonenumbers componentsSeparatedByString:@","]];
}
@@ -469,7 +516,7 @@
}
- (void)shareViaInstagram:(CDVInvokedUrlCommand*)command {
-
+
// on iOS9 canShareVia('instagram'..) will only work if instagram:// is whitelisted.
// If it's not, this method will ask permission to the user on iOS9 for opening the app,
// which is of course better than Instagram sharing not working at all because you forgot to whitelist it.
@@ -492,7 +539,7 @@
image = [self getImage:filename];
break;
}
-
+
// NSData *imageObj = [NSData dataFromBase64String:objectAtIndex0];
NSString *tmpDir = NSTemporaryDirectory();
NSString *path = [tmpDir stringByAppendingPathComponent:@"instagram.igo"];
@@ -513,11 +560,15 @@
// remember the command for the delegate method
_command = command;
- [_documentInteractionController presentOpenInMenuFromRect:CGRectZero inView:self.webView animated:YES];
+
+ // test for #513
+ dispatch_async(dispatch_get_main_queue(), ^(void){
+ [_documentInteractionController presentOpenInMenuFromRect:CGRectZero inView:self.webView animated:YES];
+ });
}
- (void)shareViaWhatsApp:(CDVInvokedUrlCommand*)command {
-
+
// on iOS9 canShareVia('whatsapp'..) will only work if whatsapp:// is whitelisted.
// If it's not, this method will ask permission to the user on iOS9 for opening the app,
// which is of course better than WhatsApp sharing not working at all because you forgot to whitelist it.
@@ -534,6 +585,7 @@
// subject is not supported by the SLComposeViewController
NSArray *filenames = [command.arguments objectAtIndex:2];
NSString *urlString = [command.arguments objectAtIndex:3];
+ NSString *abid = [command.arguments objectAtIndex:4];
// only use the first image (for now.. maybe we can share in a loop?)
UIImage* image = nil;
@@ -561,14 +613,18 @@
if ([shareString isEqual: @""]) {
shareString = urlString;
} else {
- shareString = [NSString stringWithFormat:@"%@ %@", shareString, urlString];
+ shareString = [NSString stringWithFormat:@"%@ %@", shareString, [urlString URLEncodedString]];
}
}
NSString * encodedShareString = [shareString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// also encode the '=' character
encodedShareString = [encodedShareString stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"];
encodedShareString = [encodedShareString stringByReplacingOccurrencesOfString:@"&" withString:@"%26"];
- NSString * encodedShareStringForWhatsApp = [NSString stringWithFormat:@"whatsapp://send?text=%@", encodedShareString];
+ NSString * abidString = @"";
+ if (abid != (id)[NSNull null]) {
+ abidString = [NSString stringWithFormat:@"abid=%@&", abid];
+ }
+ NSString * encodedShareStringForWhatsApp = [NSString stringWithFormat:@"whatsapp://send?%@text=%@", abidString, encodedShareString];
NSURL *whatsappURL = [NSURL URLWithString:encodedShareStringForWhatsApp];
[[UIApplication sharedApplication] openURL: whatsappURL];
@@ -641,7 +697,8 @@
if ([fileName hasPrefix:@"http"]) {
NSURL *url = [NSURL URLWithString:fileName];
NSData *fileData = [NSData dataWithContentsOfURL:url];
- file = [NSURL fileURLWithPath:[self storeInFile:(NSString*)[[fileName componentsSeparatedByString: @"/"] lastObject] fileData:fileData]];
+ NSString *name = (NSString*)[[fileName componentsSeparatedByString: @"/"] lastObject];
+ file = [NSURL fileURLWithPath:[self storeInFile:[name componentsSeparatedByString: @"?"][0] fileData:fileData]];
} else if ([fileName hasPrefix:@"www/"]) {
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", bundlePath, fileName];
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/ios/IonicKeyboard.h b/StoneIsland/platforms/ios/Stone Island/Plugins/ionic-plugin-keyboard/IonicKeyboard.h
index b54f430d..63935dc3 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/ios/IonicKeyboard.h
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/ionic-plugin-keyboard/IonicKeyboard.h
@@ -1,8 +1,11 @@
#import <Cordova/CDVPlugin.h>
+#import <objc/runtime.h>
@interface IonicKeyboard : CDVPlugin <UIScrollViewDelegate> {
@protected
id _keyboardShowObserver, _keyboardHideObserver;
+ IMP wkOriginalImp, uiOriginalImp, nilImp;
+ Method wkMethod, uiMethod;
}
@property (readwrite, assign) BOOL hideKeyboardAccessoryBar;
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/IonicKeyboard.m b/StoneIsland/platforms/ios/Stone Island/Plugins/ionic-plugin-keyboard/IonicKeyboard.m
index 045cc65f..d072ca7f 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/IonicKeyboard.m
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/ionic-plugin-keyboard/IonicKeyboard.m
@@ -1,5 +1,5 @@
#import "IonicKeyboard.h"
-#import "UIWebViewExtension.h"
+// #import "UIWebViewExtension.h"
#import <Cordova/CDVAvailability.h>
@implementation IonicKeyboard
@@ -9,29 +9,38 @@
//@synthesize styleDark = _styleDark;
- (void)pluginInitialize {
-
- NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
- __weak IonicKeyboard* weakSelf = self;
+ Class wkClass = NSClassFromString([@[@"UI", @"Web", @"Browser", @"View"] componentsJoinedByString:@""]);
+ wkMethod = class_getInstanceMethod(wkClass, @selector(inputAccessoryView));
+ wkOriginalImp = method_getImplementation(wkMethod);
+ Class uiClass = NSClassFromString([@[@"WK", @"Content", @"View"] componentsJoinedByString:@""]);
+ uiMethod = class_getInstanceMethod(uiClass, @selector(inputAccessoryView));
+ uiOriginalImp = method_getImplementation(uiMethod);
+ nilImp = imp_implementationWithBlock(^(id _s) {
+ return nil;
+ });
+
//set defaults
- self.hideKeyboardAccessoryBar = NO;
+ self.hideKeyboardAccessoryBar = YES;
self.disableScroll = NO;
//self.styleDark = NO;
+ NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
+ __weak IonicKeyboard* weakSelf = self;
_keyboardShowObserver = [nc addObserverForName:UIKeyboardWillShowNotification
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification* notification) {
-
+
CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrame = [self.viewController.view convertRect:keyboardFrame fromView:nil];
-
+
[weakSelf.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.plugins.Keyboard.isVisible = true; cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight': %@ }); ", [@(keyboardFrame.size.height) stringValue]]];
//deprecated
[weakSelf.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight': %@ }); ", [@(keyboardFrame.size.height) stringValue]]];
}];
-
+
_keyboardHideObserver = [nc addObserverForName:UIKeyboardWillHideNotification
object:nil
queue:[NSOperationQueue mainQueue]
@@ -42,6 +51,7 @@
[weakSelf.commandDelegate evalJs:@"cordova.fireWindowEvent('native.hidekeyboard'); "];
}];
}
+
- (BOOL)disableScroll {
return _disableScroll;
}
@@ -62,6 +72,8 @@
_disableScroll = disableScroll;
}
+//keyboard swizzling inspired by:
+//https://github.com/cjpearson/cordova-plugin-keyboard/
- (BOOL)hideKeyboardAccessoryBar {
return _hideKeyboardAccessoryBar;
@@ -71,13 +83,15 @@
if (hideKeyboardAccessoryBar == _hideKeyboardAccessoryBar) {
return;
}
+
if (hideKeyboardAccessoryBar) {
- self.webView.hackishlyHidesInputAccessoryView = YES;
+ method_setImplementation(wkMethod, nilImp);
+ method_setImplementation(uiMethod, nilImp);
+ } else {
+ method_setImplementation(wkMethod, wkOriginalImp);
+ method_setImplementation(uiMethod, uiOriginalImp);
}
- else {
- self.webView.hackishlyHidesInputAccessoryView = NO;
- }
-
+
_hideKeyboardAccessoryBar = hideKeyboardAccessoryBar;
}
@@ -124,17 +138,19 @@
return;
}
id value = [command.arguments objectAtIndex:0];
-
- self.disableScroll = [value boolValue];
+ if (value != [NSNull null]) {
+ self.disableScroll = [value boolValue];
+ }
}
- (void) hideKeyboardAccessoryBar:(CDVInvokedUrlCommand*)command {
if (!command.arguments || ![command.arguments count]){
- return;
+ return;
}
id value = [command.arguments objectAtIndex:0];
-
- self.hideKeyboardAccessoryBar = [value boolValue];
+ if (value != [NSNull null]) {
+ self.hideKeyboardAccessoryBar = [value boolValue];
+ }
}
- (void) close:(CDVInvokedUrlCommand*)command {
@@ -151,7 +167,7 @@
return;
}
id value = [command.arguments objectAtIndex:0];
-
+
self.styleDark = [value boolValue];
}
*/
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.h b/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.h
deleted file mode 100755
index be79903e..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.h
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// AppDelegate+notification.h
-// pushtest
-//
-// Created by Robert Easterday on 10/26/12.
-//
-//
-
-#import "AppDelegate.h"
-
-@interface AppDelegate (notification)
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
-- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
-- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
-- (void)applicationDidBecomeActive:(UIApplication *)application;
-- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler;
-- (id) getCommandInstance:(NSString*)className;
-
-@property (nonatomic, retain) NSDictionary *launchNotification;
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.m b/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.m
deleted file mode 100755
index 8b4ed161..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/AppDelegate+notification.m
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-// AppDelegate+notification.m
-// pushtest
-//
-// Created by Robert Easterday on 10/26/12.
-//
-//
-
-#import "AppDelegate+notification.h"
-#import "PushPlugin.h"
-#import <objc/runtime.h>
-
-static char launchNotificationKey;
-
-@implementation AppDelegate (notification)
-
-- (id) getCommandInstance:(NSString*)className
-{
- return [self.viewController getCommandInstance:className];
-}
-
-// its dangerous to override a method from within a category.
-// Instead we will use method swizzling. we set this up in the load call.
-+ (void)load
-{
- Method original, swizzled;
-
- original = class_getInstanceMethod(self, @selector(init));
- swizzled = class_getInstanceMethod(self, @selector(swizzled_init));
- method_exchangeImplementations(original, swizzled);
-}
-
-- (AppDelegate *)swizzled_init
-{
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(createNotificationChecker:)
- name:@"UIApplicationDidFinishLaunchingNotification" object:nil];
-
- // This actually calls the original init method over in AppDelegate. Equivilent to calling super
- // on an overrided method, this is not recursive, although it appears that way. neat huh?
- return [self swizzled_init];
-}
-
-// This code will be called immediately after application:didFinishLaunchingWithOptions:. We need
-// to process notifications in cold-start situations
-- (void)createNotificationChecker:(NSNotification *)notification
-{
- if (notification)
- {
- NSDictionary *launchOptions = [notification userInfo];
- if (launchOptions)
- self.launchNotification = [launchOptions objectForKey: @"UIApplicationLaunchOptionsRemoteNotificationKey"];
- }
-}
-
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- [pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
-}
-
-- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- [pushHandler didFailToRegisterForRemoteNotificationsWithError:error];
-}
-
-- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
- NSLog(@"didReceiveNotification with fetchCompletionHandler");
-
- // app is in the foreground so call notification callback
- if (application.applicationState == UIApplicationStateActive) {
- NSLog(@"app active");
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- pushHandler.notificationMessage = userInfo;
- pushHandler.isInline = YES;
- [pushHandler notificationReceived];
-
- completionHandler(UIBackgroundFetchResultNewData);
- }
- // app is in background or in stand by
- else {
- NSLog(@"app in-active");
-
- // do some convoluted logic to find out if this should be a silent push.
- long silent = 0;
- id aps = [userInfo objectForKey:@"aps"];
- id contentAvailable = [aps objectForKey:@"content-available"];
- if ([contentAvailable isKindOfClass:[NSString class]] && [contentAvailable isEqualToString:@"1"]) {
- silent = 1;
- } else if ([contentAvailable isKindOfClass:[NSNumber class]]) {
- silent = [contentAvailable integerValue];
- }
-
- if (silent == 1) {
- NSLog(@"this should be a silent push");
- void (^safeHandler)(UIBackgroundFetchResult) = ^(UIBackgroundFetchResult result){
- dispatch_async(dispatch_get_main_queue(), ^{
- completionHandler(result);
- });
- };
-
- NSMutableDictionary* params = [NSMutableDictionary dictionaryWithCapacity:2];
- [params setObject:safeHandler forKey:@"handler"];
-
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- pushHandler.notificationMessage = userInfo;
- pushHandler.isInline = NO;
- pushHandler.handlerObj = params;
- [pushHandler notificationReceived];
- } else {
- NSLog(@"just put it in the shade");
- //save it for later
- self.launchNotification = userInfo;
-
- completionHandler(UIBackgroundFetchResultNewData);
- }
- }
-}
-
-- (void)applicationDidBecomeActive:(UIApplication *)application {
-
- NSLog(@"active");
-
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- if (pushHandler.clearBadge) {
- NSLog(@"PushPlugin clearing badge");
- //zero badge
- application.applicationIconBadgeNumber = 0;
- } else {
- NSLog(@"PushPlugin skip clear badge");
- }
-
- if (self.launchNotification) {
- pushHandler.isInline = NO;
- pushHandler.notificationMessage = self.launchNotification;
- self.launchNotification = nil;
- [pushHandler performSelectorOnMainThread:@selector(notificationReceived) withObject:pushHandler waitUntilDone:NO];
- }
-}
-
-//For interactive notification only
-- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
-{
- //handle the actions
- if ([identifier isEqualToString:@"declineAction"]){
- }
- else if ([identifier isEqualToString:@"answerAction"]){
- }
-}
-
-
-// The accessors use an Associative Reference since you can't define a iVar in a category
-// http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocAssociativeReferences.html
-- (NSMutableArray *)launchNotification
-{
- return objc_getAssociatedObject(self, &launchNotificationKey);
-}
-
-- (void)setLaunchNotification:(NSDictionary *)aDictionary
-{
- objc_setAssociatedObject(self, &launchNotificationKey, aDictionary, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-- (void)dealloc
-{
- self.launchNotification = nil; // clear the association and release the object
-}
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.h b/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.h
deleted file mode 100755
index 5b88398e..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- Copyright 2009-2011 Urban Airship Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binaryform must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided withthe distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE URBAN AIRSHIP INC``AS IS'' AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- EVENT SHALL URBAN AIRSHIP INC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Foundation/Foundation.h>
-#import <Cordova/CDV.h>
-#import <Cordova/CDVPlugin.h>
-
-@interface PushPlugin : CDVPlugin
-{
- NSDictionary *notificationMessage;
- BOOL isInline;
- NSString *notificationCallbackId;
- NSString *callback;
- BOOL clearBadge;
-
- NSDictionary *handlerObj;
- void (^completionHandler)(UIBackgroundFetchResult);
-
- BOOL ready;
-}
-
-@property (nonatomic, copy) NSString *callbackId;
-@property (nonatomic, copy) NSString *notificationCallbackId;
-@property (nonatomic, copy) NSString *callback;
-
-@property (nonatomic, strong) NSDictionary *notificationMessage;
-@property BOOL isInline;
-@property BOOL clearBadge;
-@property (nonatomic, strong) NSDictionary *handlerObj;
-
-- (void)init:(CDVInvokedUrlCommand*)command;
-- (void)unregister:(CDVInvokedUrlCommand*)command;
-
-- (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
-- (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
-
-- (void)setNotificationMessage:(NSDictionary *)notification;
-- (void)notificationReceived;
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.m b/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.m
deleted file mode 100755
index 40f494d1..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/phonegap-plugin-push/PushPlugin.m
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- Copyright 2009-2011 Urban Airship Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binaryform must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided withthe distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE URBAN AIRSHIP INC``AS IS'' AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- EVENT SHALL URBAN AIRSHIP INC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PushPlugin.h"
-
-@implementation PushPlugin
-
-@synthesize notificationMessage;
-@synthesize isInline;
-
-@synthesize callbackId;
-@synthesize notificationCallbackId;
-@synthesize callback;
-@synthesize clearBadge;
-@synthesize handlerObj;
-
-- (void)unregister:(CDVInvokedUrlCommand*)command;
-{
- self.callbackId = command.callbackId;
-
- [[UIApplication sharedApplication] unregisterForRemoteNotifications];
- [self successWithMessage:@"unregistered"];
-}
-
-- (void)init:(CDVInvokedUrlCommand*)command;
-{
- [self.commandDelegate runInBackground:^ {
-
- NSLog(@"Push Plugin register called");
- self.callbackId = command.callbackId;
-
- NSMutableDictionary* options = [command.arguments objectAtIndex:0];
- NSMutableDictionary* iosOptions = [options objectForKey:@"ios"];
-
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone;
-#endif
- UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeNone;
-
- id badgeArg = [iosOptions objectForKey:@"badge"];
- id soundArg = [iosOptions objectForKey:@"sound"];
- id alertArg = [iosOptions objectForKey:@"alert"];
- id clearBadgeArg = [iosOptions objectForKey:@"clearBadge"];
-
- if (([badgeArg isKindOfClass:[NSString class]] && [badgeArg isEqualToString:@"true"]) || [badgeArg boolValue])
- {
- notificationTypes |= UIRemoteNotificationTypeBadge;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationTypeBadge;
-#endif
- }
-
- if (([soundArg isKindOfClass:[NSString class]] && [soundArg isEqualToString:@"true"]) || [soundArg boolValue])
- {
- notificationTypes |= UIRemoteNotificationTypeSound;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationTypeSound;
-#endif
- }
-
- if (([alertArg isKindOfClass:[NSString class]] && [alertArg isEqualToString:@"true"]) || [alertArg boolValue])
- {
- notificationTypes |= UIRemoteNotificationTypeAlert;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationTypeAlert;
-#endif
- }
-
- notificationTypes |= UIRemoteNotificationTypeNewsstandContentAvailability;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationActivationModeBackground;
-#endif
-
- if (clearBadgeArg == nil || ([clearBadgeArg isKindOfClass:[NSString class]] && [clearBadgeArg isEqualToString:@"false"]) || ![clearBadgeArg boolValue]) {
- NSLog(@"PushPlugin.register: setting badge to false");
- clearBadge = NO;
- } else {
- NSLog(@"PushPlugin.register: setting badge to true");
- clearBadge = YES;
- [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
- }
- NSLog(@"PushPlugin.register: clear badge is set to %d", clearBadge);
-
- if (notificationTypes == UIRemoteNotificationTypeNone)
- NSLog(@"PushPlugin.register: Push notification type is set to none");
-
- isInline = NO;
-
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) {
- UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:nil];
- [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
- [[UIApplication sharedApplication] registerForRemoteNotifications];
- } else {
- [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
- (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
- }
-#else
- [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
- (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
-#endif
-
- if (notificationMessage) // if there is a pending startup notification
- [self notificationReceived]; // go ahead and process it
-
- }];
-}
-
-- (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
- if (self.callbackId == nil) {
- NSLog(@"Unexpected call to didRegisterForRemoteNotificationsWithDeviceToken, ignoring: %@", deviceToken);
- return;
- }
- NSLog(@"Push Plugin register success: %@", deviceToken);
-
- NSMutableDictionary *results = [NSMutableDictionary dictionary];
- NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
- stringByReplacingOccurrencesOfString:@">" withString:@""]
- stringByReplacingOccurrencesOfString: @" " withString: @""];
- [results setValue:token forKey:@"deviceToken"];
-
-#if !TARGET_IPHONE_SIMULATOR
- // Get Bundle Info for Remote Registration (handy if you have more than one app)
- [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] forKey:@"appName"];
- [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] forKey:@"appVersion"];
-
- // Check what Notifications the user has turned on. We registered for all three, but they may have manually disabled some or all of them.
-#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
-
- NSUInteger rntypes;
- if (!SYSTEM_VERSION_LESS_THAN(@"8.0")) {
- rntypes = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
- } else {
- rntypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
- }
-
- // Set the defaults to disabled unless we find otherwise...
- NSString *pushBadge = @"disabled";
- NSString *pushAlert = @"disabled";
- NSString *pushSound = @"disabled";
-
- // Check what Registered Types are turned on. This is a bit tricky since if two are enabled, and one is off, it will return a number 2... not telling you which
- // one is actually disabled. So we are literally checking to see if rnTypes matches what is turned on, instead of by number. The "tricky" part is that the
- // single notification types will only match if they are the ONLY one enabled. Likewise, when we are checking for a pair of notifications, it will only be
- // true if those two notifications are on. This is why the code is written this way
- if(rntypes & UIRemoteNotificationTypeBadge){
- pushBadge = @"enabled";
- }
- if(rntypes & UIRemoteNotificationTypeAlert) {
- pushAlert = @"enabled";
- }
- if(rntypes & UIRemoteNotificationTypeSound) {
- pushSound = @"enabled";
- }
-
- [results setValue:pushBadge forKey:@"pushBadge"];
- [results setValue:pushAlert forKey:@"pushAlert"];
- [results setValue:pushSound forKey:@"pushSound"];
-
- // Get the users Device Model, Display Name, Token & Version Number
- UIDevice *dev = [UIDevice currentDevice];
- [results setValue:dev.name forKey:@"deviceName"];
- [results setValue:dev.model forKey:@"deviceModel"];
- [results setValue:dev.systemVersion forKey:@"deviceSystemVersion"];
-
- // Send result to trigger 'registration' event but keep callback
- NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1];
- [message setObject:token forKey:@"registrationId"];
- CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message];
- [pluginResult setKeepCallbackAsBool:YES];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
-#endif
-}
-
-- (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
-{
- if (self.callbackId == nil) {
- NSLog(@"Unexpected call to didFailToRegisterForRemoteNotificationsWithError, ignoring: %@", error);
- return;
- }
- NSLog(@"Push Plugin register failed");
- [self failWithMessage:@"" withError:error];
-}
-
-- (void)notificationReceived {
- NSLog(@"Notification received");
-
- if (notificationMessage && self.callbackId != nil)
- {
- NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:4];
- NSMutableDictionary* additionalData = [NSMutableDictionary dictionaryWithCapacity:4];
-
-
- for (id key in notificationMessage) {
- if ([key isEqualToString:@"aps"]) {
- id aps = [notificationMessage objectForKey:@"aps"];
-
- for(id key in aps) {
- NSLog(@"Push Plugin key: %@", key);
- id value = [aps objectForKey:key];
-
- if ([key isEqualToString:@"alert"]) {
- if ([value isKindOfClass:[NSDictionary class]]) {
- for (id messageKey in value) {
- id messageValue = [value objectForKey:messageKey];
- if ([messageKey isEqualToString:@"body"]) {
- [message setObject:messageValue forKey:@"message"];
- } else if ([messageKey isEqualToString:@"title"]) {
- [message setObject:messageValue forKey:@"title"];
- } else {
- [additionalData setObject:messageValue forKey:messageKey];
- }
- }
- }
- else {
- [message setObject:value forKey:@"message"];
- }
- } else if ([key isEqualToString:@"title"]) {
- [message setObject:value forKey:@"title"];
- } else if ([key isEqualToString:@"badge"]) {
- [message setObject:value forKey:@"count"];
- } else if ([key isEqualToString:@"sound"]) {
- [message setObject:value forKey:@"sound"];
- } else if ([key isEqualToString:@"image"]) {
- [message setObject:value forKey:@"image"];
- } else {
- [additionalData setObject:value forKey:key];
- }
- }
- } else {
- [additionalData setObject:[notificationMessage objectForKey:key] forKey:key];
- }
- }
-
- if (isInline) {
- [additionalData setObject:[NSNumber numberWithBool:YES] forKey:@"foreground"];
- } else {
- [additionalData setObject:[NSNumber numberWithBool:NO] forKey:@"foreground"];
- }
-
- [message setObject:additionalData forKey:@"additionalData"];
-
- // send notification message
- CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message];
- [pluginResult setKeepCallbackAsBool:YES];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
-
- self.notificationMessage = nil;
- }
-}
-
-- (void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command
-{
- NSMutableDictionary* options = [command.arguments objectAtIndex:0];
- int badge = [[options objectForKey:@"badge"] intValue] ?: 0;
-
- [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badge];
-
- NSString* message = [NSString stringWithFormat:@"app badge count set to %d", badge];
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
- [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
-}
-
-- (void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command
-{
- NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
-
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)badge];
- [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
-}
-
--(void)successWithMessage:(NSString *)message
-{
- if (self.callbackId != nil)
- {
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
- [self.commandDelegate sendPluginResult:commandResult callbackId:self.callbackId];
- }
-}
-
--(void)failWithMessage:(NSString *)message withError:(NSError *)error
-{
- NSString *errorMessage = (error) ? [NSString stringWithFormat:@"%@ - %@", message, [error localizedDescription]] : message;
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:errorMessage];
-
- [self.commandDelegate sendPluginResult:commandResult callbackId:self.callbackId];
-}
-
--(void) finish:(CDVInvokedUrlCommand*)command
-{
- NSLog(@"Push Plugin finish called");
-
- [self.commandDelegate runInBackground:^ {
- UIApplication *app = [UIApplication sharedApplication];
- float finishTimer = (app.backgroundTimeRemaining > 20.0) ? 20.0 : app.backgroundTimeRemaining;
-
- [NSTimer scheduledTimerWithTimeInterval:finishTimer
- target:self
- selector:@selector(stopBackgroundTask:)
- userInfo:nil
- repeats:NO];
-
- CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
--(void)stopBackgroundTask:(NSTimer*)timer
-{
- UIApplication *app = [UIApplication sharedApplication];
-
- NSLog(@"Push Plugin stopBackgroundTask called");
-
- if (handlerObj) {
- NSLog(@"Push Plugin handlerObj");
- completionHandler = [handlerObj[@"handler"] copy];
- if (completionHandler) {
- NSLog(@"Push Plugin: stopBackgroundTask (remaining t: %f)", app.backgroundTimeRemaining);
- completionHandler(UIBackgroundFetchResultNewData);
- completionHandler = nil;
- }
- }
-}
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Resources/CDVNotification.bundle/beep.wav b/StoneIsland/platforms/ios/Stone Island/Resources/CDVNotification.bundle/beep.wav
index 05f5997f..05f5997f 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Resources/CDVNotification.bundle/beep.wav
+++ b/StoneIsland/platforms/ios/Stone Island/Resources/CDVNotification.bundle/beep.wav
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist b/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist
index 903a41d6..2cc9baf9 100644
--- a/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist
+++ b/StoneIsland/platforms/ios/Stone Island/Stone Island-Info.plist
@@ -21,11 +21,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>0.6.1</string>
+ <string>0.7.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
- <string>0.6.1</string>
+ <string>0.7.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSMainNibFile</key>
@@ -64,9 +64,5 @@
</array>
<key>NSLocationWhenInUseUsageDescription</key>
<string/>
- <key>UIBackgroundModes</key>
- <array>
- <string>remote-notification</string>
- </array>
</dict>
</plist> \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/config.xml b/StoneIsland/platforms/ios/Stone Island/config.xml
index 90d98387..0121d04d 100755
--- a/StoneIsland/platforms/ios/Stone Island/config.xml
+++ b/StoneIsland/platforms/ios/Stone Island/config.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<widget id="us.okfoc.stoneisland" version="0.6.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+<widget id="us.okfoc.stoneisland" version="0.7.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<feature name="LocalStorage">
<param name="ios-package" value="CDVLocalStorage" />
</feature>
@@ -15,40 +15,37 @@
<param name="ios-package" value="CDVGestureHandler" />
<param name="onload" value="true" />
</feature>
- <feature name="Keyboard">
- <param name="ios-package" onload="true" value="IonicKeyboard" />
- </feature>
<feature name="ParsePlugin">
<param name="ios-package" value="CDVParsePlugin" />
</feature>
+ <feature name="InAppBrowser">
+ <param name="ios-package" value="CDVInAppBrowser" />
+ </feature>
+ <feature name="SocialSharing">
+ <param name="ios-package" value="SocialSharing" />
+ <param name="onload" value="true" />
+ </feature>
<feature name="Console">
<param name="ios-package" value="CDVLogger" />
</feature>
<feature name="Device">
<param name="ios-package" value="CDVDevice" />
</feature>
- <feature name="Notification">
- <param name="ios-package" value="CDVNotification" />
- </feature>
- <feature name="Geolocation">
- <param name="ios-package" value="CDVLocation" />
- </feature>
- <feature name="InAppBrowser">
- <param name="ios-package" value="CDVInAppBrowser" />
- </feature>
<feature name="NetworkStatus">
<param name="ios-package" value="CDVConnection" />
</feature>
+ <feature name="Notification">
+ <param name="ios-package" value="CDVNotification" />
+ </feature>
<feature name="SplashScreen">
<param name="ios-package" value="CDVSplashScreen" />
<param name="onload" value="true" />
</feature>
- <feature name="SocialSharing">
- <param name="ios-package" value="SocialSharing" />
- <param name="onload" value="true" />
+ <feature name="Geolocation">
+ <param name="ios-package" value="CDVLocation" />
</feature>
- <feature name="PushNotification">
- <param name="ios-package" value="PushPlugin" />
+ <feature name="Keyboard">
+ <param name="ios-package" onload="true" value="IonicKeyboard" />
</feature>
<name>Stone Island</name>
<description>
diff --git a/StoneIsland/platforms/ios/cordova/build-extras.xcconfig b/StoneIsland/platforms/ios/cordova/build-extras.xcconfig
index 7e631112..e69de29b 100755
--- a/StoneIsland/platforms/ios/cordova/build-extras.xcconfig
+++ b/StoneIsland/platforms/ios/cordova/build-extras.xcconfig
@@ -1,22 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-
-//
-// Auto-generated config file to override configuration files (build-release/build-debug).
-//
diff --git a/StoneIsland/platforms/ios/frameworks.json b/StoneIsland/platforms/ios/frameworks.json
index efdb887d..35f16486 100644
--- a/StoneIsland/platforms/ios/frameworks.json
+++ b/StoneIsland/platforms/ios/frameworks.json
@@ -10,5 +10,6 @@
"SystemConfiguration.framework": 2,
"libz.dylib": 1,
"libsqlite3.dylib": 1,
- "MessageUI.framework": 1
+ "MessageUI.framework": 1,
+ "CoreTelephony.framework": 1
} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/ios.json b/StoneIsland/platforms/ios/ios.json
index 433e304a..2a38b9d3 100644
--- a/StoneIsland/platforms/ios/ios.json
+++ b/StoneIsland/platforms/ios/ios.json
@@ -9,35 +9,31 @@
"parents": {
"/*": [
{
- "xml": "<feature name=\"Keyboard\"><param name=\"ios-package\" onload=\"true\" value=\"IonicKeyboard\" /></feature>",
- "count": 1
- },
- {
"xml": "<feature name=\"ParsePlugin\"><param name=\"ios-package\" value=\"CDVParsePlugin\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"Console\"><param name=\"ios-package\" value=\"CDVLogger\" /></feature>",
+ "xml": "<feature name=\"InAppBrowser\"><param name=\"ios-package\" value=\"CDVInAppBrowser\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"Device\"><param name=\"ios-package\" value=\"CDVDevice\" /></feature>",
+ "xml": "<feature name=\"SocialSharing\"><param name=\"ios-package\" value=\"SocialSharing\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"Notification\"><param name=\"ios-package\" value=\"CDVNotification\" /></feature>",
+ "xml": "<feature name=\"Console\"><param name=\"ios-package\" value=\"CDVLogger\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"Geolocation\"><param name=\"ios-package\" value=\"CDVLocation\" /></feature>",
+ "xml": "<feature name=\"Device\"><param name=\"ios-package\" value=\"CDVDevice\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"InAppBrowser\"><param name=\"ios-package\" value=\"CDVInAppBrowser\" /></feature>",
+ "xml": "<feature name=\"NetworkStatus\"><param name=\"ios-package\" value=\"CDVConnection\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"NetworkStatus\"><param name=\"ios-package\" value=\"CDVConnection\" /></feature>",
+ "xml": "<feature name=\"Notification\"><param name=\"ios-package\" value=\"CDVNotification\" /></feature>",
"count": 1
},
{
@@ -45,11 +41,11 @@
"count": 1
},
{
- "xml": "<feature name=\"SocialSharing\"><param name=\"ios-package\" value=\"SocialSharing\" /><param name=\"onload\" value=\"true\" /></feature>",
+ "xml": "<feature name=\"Geolocation\"><param name=\"ios-package\" value=\"CDVLocation\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"PushNotification\"><param name=\"ios-package\" value=\"PushPlugin\" /></feature>",
+ "xml": "<feature name=\"Keyboard\"><param name=\"ios-package\" onload=\"true\" value=\"IonicKeyboard\" /></feature>",
"count": 1
}
]
@@ -69,69 +65,56 @@
"count": 1
}
],
- "UIBackgroundModes": [
- {
- "xml": "<array><string>remote-notification</string></array>",
- "count": 1
- }
- ]
+ "UIBackgroundModes": []
}
}
}
},
"installed_plugins": {
- "com.ionic.keyboard": {
+ "com.parse.cordova.core.pushplugin": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "com.parse.cordova.core.pushplugin": {
+ "cordova-plugin-inappbrowser": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-console": {
+ "cordova-plugin-x-socialsharing": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "stoneisland",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-device": {
+ "cordova-plugin-whitelist": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-dialogs": {
+ "cordova-plugin-console": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-geolocation": {
+ "cordova-plugin-device": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-inappbrowser": {
+ "cordova-plugin-network-information": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-network-information": {
+ "cordova-plugin-dialogs": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
"cordova-plugin-splashscreen": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-whitelist": {
+ "cordova-plugin-compat": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-x-socialsharing": {
+ "cordova-plugin-geolocation": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "phonegap-plugin-push": {
+ "ionic-plugin-keyboard": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
"dependent_plugins": {},
"modules": [
{
- "id": "com.ionic.keyboard.keyboard",
- "file": "plugins/com.ionic.keyboard/www/keyboard.js",
- "pluginId": "com.ionic.keyboard",
- "clobbers": [
- "cordova.plugins.Keyboard"
- ]
- },
- {
"id": "com.parse.cordova.core.pushplugin.ParsePlugin",
"file": "plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js",
"pluginId": "com.parse.cordova.core.pushplugin",
@@ -140,19 +123,20 @@
]
},
{
- "id": "cordova-plugin-console.logger",
- "file": "plugins/cordova-plugin-console/www/logger.js",
- "pluginId": "cordova-plugin-console",
+ "id": "cordova-plugin-inappbrowser.inappbrowser",
+ "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
+ "pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
- "cordova.logger"
+ "cordova.InAppBrowser.open",
+ "window.open"
]
},
{
- "id": "cordova-plugin-console.console",
- "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
- "pluginId": "cordova-plugin-console",
+ "id": "cordova-plugin-x-socialsharing.SocialSharing",
+ "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
+ "pluginId": "cordova-plugin-x-socialsharing",
"clobbers": [
- "console"
+ "window.plugins.socialsharing"
]
},
{
@@ -164,6 +148,22 @@
]
},
{
+ "id": "cordova-plugin-console.console",
+ "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
+ "pluginId": "cordova-plugin-console",
+ "clobbers": [
+ "console"
+ ]
+ },
+ {
+ "id": "cordova-plugin-console.logger",
+ "file": "plugins/cordova-plugin-console/www/logger.js",
+ "pluginId": "cordova-plugin-console",
+ "clobbers": [
+ "cordova.logger"
+ ]
+ },
+ {
"id": "cordova-plugin-device.device",
"file": "plugins/cordova-plugin-device/www/device.js",
"pluginId": "cordova-plugin-device",
@@ -172,6 +172,23 @@
]
},
{
+ "id": "cordova-plugin-network-information.network",
+ "file": "plugins/cordova-plugin-network-information/www/network.js",
+ "pluginId": "cordova-plugin-network-information",
+ "clobbers": [
+ "navigator.connection",
+ "navigator.network.connection"
+ ]
+ },
+ {
+ "id": "cordova-plugin-network-information.Connection",
+ "file": "plugins/cordova-plugin-network-information/www/Connection.js",
+ "pluginId": "cordova-plugin-network-information",
+ "clobbers": [
+ "Connection"
+ ]
+ },
+ {
"id": "cordova-plugin-dialogs.notification",
"file": "plugins/cordova-plugin-dialogs/www/notification.js",
"pluginId": "cordova-plugin-dialogs",
@@ -180,6 +197,14 @@
]
},
{
+ "id": "cordova-plugin-splashscreen.SplashScreen",
+ "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
+ "pluginId": "cordova-plugin-splashscreen",
+ "clobbers": [
+ "navigator.splashscreen"
+ ]
+ },
+ {
"id": "cordova-plugin-geolocation.Coordinates",
"file": "plugins/cordova-plugin-geolocation/www/Coordinates.js",
"pluginId": "cordova-plugin-geolocation",
@@ -212,69 +237,28 @@
]
},
{
- "id": "cordova-plugin-inappbrowser.inappbrowser",
- "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
- "pluginId": "cordova-plugin-inappbrowser",
- "clobbers": [
- "cordova.InAppBrowser.open",
- "window.open"
- ]
- },
- {
- "id": "cordova-plugin-network-information.network",
- "file": "plugins/cordova-plugin-network-information/www/network.js",
- "pluginId": "cordova-plugin-network-information",
+ "id": "ionic-plugin-keyboard.keyboard",
+ "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js",
+ "pluginId": "ionic-plugin-keyboard",
"clobbers": [
- "navigator.connection",
- "navigator.network.connection"
- ]
- },
- {
- "id": "cordova-plugin-network-information.Connection",
- "file": "plugins/cordova-plugin-network-information/www/Connection.js",
- "pluginId": "cordova-plugin-network-information",
- "clobbers": [
- "Connection"
- ]
- },
- {
- "id": "cordova-plugin-splashscreen.SplashScreen",
- "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
- "pluginId": "cordova-plugin-splashscreen",
- "clobbers": [
- "navigator.splashscreen"
- ]
- },
- {
- "id": "cordova-plugin-x-socialsharing.SocialSharing",
- "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
- "pluginId": "cordova-plugin-x-socialsharing",
- "clobbers": [
- "window.plugins.socialsharing"
- ]
- },
- {
- "id": "phonegap-plugin-push.PushNotification",
- "file": "plugins/phonegap-plugin-push/www/push.js",
- "pluginId": "phonegap-plugin-push",
- "clobbers": [
- "PushNotification"
- ]
+ "cordova.plugins.Keyboard"
+ ],
+ "runs": true
}
],
"plugin_metadata": {
- "com.ionic.keyboard": "1.0.4",
"com.parse.cordova.core.pushplugin": "0.1.0",
- "cordova-plugin-console": "1.0.1",
- "cordova-plugin-customurlscheme": "4.0.0",
- "cordova-plugin-device": "1.0.1",
- "cordova-plugin-dialogs": "1.1.1",
- "cordova-plugin-geolocation": "1.0.1",
- "cordova-plugin-inappbrowser": "1.1.0",
- "cordova-plugin-network-information": "1.0.1",
- "cordova-plugin-splashscreen": "3.0.0",
- "cordova-plugin-whitelist": "1.0.0",
- "cordova-plugin-x-socialsharing": "5.0.7",
- "phonegap-plugin-push": "1.4.4"
+ "cordova-plugin-inappbrowser": "1.5.0",
+ "cordova-plugin-x-socialsharing": "5.1.3",
+ "cordova-plugin-customurlscheme": "4.2.0",
+ "cordova-plugin-whitelist": "1.3.0",
+ "cordova-plugin-console": "1.0.4",
+ "cordova-plugin-device": "1.1.3",
+ "cordova-plugin-network-information": "1.3.0",
+ "cordova-plugin-dialogs": "1.3.0",
+ "cordova-plugin-splashscreen": "4.0.0",
+ "cordova-plugin-compat": "1.1.0",
+ "cordova-plugin-geolocation": "2.4.0",
+ "ionic-plugin-keyboard": "2.2.1"
}
} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
index c17b360b..b4bf1fc8 100644
--- a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
+++ b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
@@ -1,14 +1,6 @@
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
- "id": "com.ionic.keyboard.keyboard",
- "file": "plugins/com.ionic.keyboard/www/keyboard.js",
- "pluginId": "com.ionic.keyboard",
- "clobbers": [
- "cordova.plugins.Keyboard"
- ]
- },
- {
"id": "com.parse.cordova.core.pushplugin.ParsePlugin",
"file": "plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js",
"pluginId": "com.parse.cordova.core.pushplugin",
@@ -17,19 +9,20 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-console.logger",
- "file": "plugins/cordova-plugin-console/www/logger.js",
- "pluginId": "cordova-plugin-console",
+ "id": "cordova-plugin-inappbrowser.inappbrowser",
+ "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
+ "pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
- "cordova.logger"
+ "cordova.InAppBrowser.open",
+ "window.open"
]
},
{
- "id": "cordova-plugin-console.console",
- "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
- "pluginId": "cordova-plugin-console",
+ "id": "cordova-plugin-x-socialsharing.SocialSharing",
+ "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
+ "pluginId": "cordova-plugin-x-socialsharing",
"clobbers": [
- "console"
+ "window.plugins.socialsharing"
]
},
{
@@ -41,6 +34,22 @@ module.exports = [
]
},
{
+ "id": "cordova-plugin-console.console",
+ "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
+ "pluginId": "cordova-plugin-console",
+ "clobbers": [
+ "console"
+ ]
+ },
+ {
+ "id": "cordova-plugin-console.logger",
+ "file": "plugins/cordova-plugin-console/www/logger.js",
+ "pluginId": "cordova-plugin-console",
+ "clobbers": [
+ "cordova.logger"
+ ]
+ },
+ {
"id": "cordova-plugin-device.device",
"file": "plugins/cordova-plugin-device/www/device.js",
"pluginId": "cordova-plugin-device",
@@ -49,6 +58,23 @@ module.exports = [
]
},
{
+ "id": "cordova-plugin-network-information.network",
+ "file": "plugins/cordova-plugin-network-information/www/network.js",
+ "pluginId": "cordova-plugin-network-information",
+ "clobbers": [
+ "navigator.connection",
+ "navigator.network.connection"
+ ]
+ },
+ {
+ "id": "cordova-plugin-network-information.Connection",
+ "file": "plugins/cordova-plugin-network-information/www/Connection.js",
+ "pluginId": "cordova-plugin-network-information",
+ "clobbers": [
+ "Connection"
+ ]
+ },
+ {
"id": "cordova-plugin-dialogs.notification",
"file": "plugins/cordova-plugin-dialogs/www/notification.js",
"pluginId": "cordova-plugin-dialogs",
@@ -57,6 +83,14 @@ module.exports = [
]
},
{
+ "id": "cordova-plugin-splashscreen.SplashScreen",
+ "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
+ "pluginId": "cordova-plugin-splashscreen",
+ "clobbers": [
+ "navigator.splashscreen"
+ ]
+ },
+ {
"id": "cordova-plugin-geolocation.Coordinates",
"file": "plugins/cordova-plugin-geolocation/www/Coordinates.js",
"pluginId": "cordova-plugin-geolocation",
@@ -89,72 +123,31 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-inappbrowser.inappbrowser",
- "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
- "pluginId": "cordova-plugin-inappbrowser",
+ "id": "ionic-plugin-keyboard.keyboard",
+ "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js",
+ "pluginId": "ionic-plugin-keyboard",
"clobbers": [
- "cordova.InAppBrowser.open",
- "window.open"
- ]
- },
- {
- "id": "cordova-plugin-network-information.network",
- "file": "plugins/cordova-plugin-network-information/www/network.js",
- "pluginId": "cordova-plugin-network-information",
- "clobbers": [
- "navigator.connection",
- "navigator.network.connection"
- ]
- },
- {
- "id": "cordova-plugin-network-information.Connection",
- "file": "plugins/cordova-plugin-network-information/www/Connection.js",
- "pluginId": "cordova-plugin-network-information",
- "clobbers": [
- "Connection"
- ]
- },
- {
- "id": "cordova-plugin-splashscreen.SplashScreen",
- "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
- "pluginId": "cordova-plugin-splashscreen",
- "clobbers": [
- "navigator.splashscreen"
- ]
- },
- {
- "id": "cordova-plugin-x-socialsharing.SocialSharing",
- "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
- "pluginId": "cordova-plugin-x-socialsharing",
- "clobbers": [
- "window.plugins.socialsharing"
- ]
- },
- {
- "id": "phonegap-plugin-push.PushNotification",
- "file": "plugins/phonegap-plugin-push/www/push.js",
- "pluginId": "phonegap-plugin-push",
- "clobbers": [
- "PushNotification"
- ]
+ "cordova.plugins.Keyboard"
+ ],
+ "runs": true
}
];
module.exports.metadata =
// TOP OF METADATA
{
- "com.ionic.keyboard": "1.0.4",
"com.parse.cordova.core.pushplugin": "0.1.0",
- "cordova-plugin-console": "1.0.1",
- "cordova-plugin-customurlscheme": "4.0.0",
- "cordova-plugin-device": "1.0.1",
- "cordova-plugin-dialogs": "1.1.1",
- "cordova-plugin-geolocation": "1.0.1",
- "cordova-plugin-inappbrowser": "1.1.0",
- "cordova-plugin-network-information": "1.0.1",
- "cordova-plugin-splashscreen": "3.0.0",
- "cordova-plugin-whitelist": "1.0.0",
- "cordova-plugin-x-socialsharing": "5.0.7",
- "phonegap-plugin-push": "1.4.4"
+ "cordova-plugin-inappbrowser": "1.5.0",
+ "cordova-plugin-x-socialsharing": "5.1.3",
+ "cordova-plugin-customurlscheme": "4.2.0",
+ "cordova-plugin-whitelist": "1.3.0",
+ "cordova-plugin-console": "1.0.4",
+ "cordova-plugin-device": "1.1.3",
+ "cordova-plugin-network-information": "1.3.0",
+ "cordova-plugin-dialogs": "1.3.0",
+ "cordova-plugin-splashscreen": "4.0.0",
+ "cordova-plugin-compat": "1.1.0",
+ "cordova-plugin-geolocation": "2.4.0",
+ "ionic-plugin-keyboard": "2.2.1"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js
index f7de4b64..0ecd9cc3 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/console-via-logger.js
@@ -23,7 +23,6 @@ cordova.define("cordova-plugin-console.console", function(require, exports, modu
//------------------------------------------------------------------------------
var logger = require("./logger");
-var utils = require("cordova/utils");
//------------------------------------------------------------------------------
// object that we're exporting
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/logger.js
index dd42c01d..deb07b57 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/logger.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-console/www/logger.js
@@ -44,7 +44,6 @@ cordova.define("cordova-plugin-console.logger", function(require, exports, modul
var logger = exports;
var exec = require('cordova/exec');
-var utils = require('cordova/utils');
var UseConsole = false;
var UseLogger = true;
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-device/www/device.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-device/www/device.js
index 775c123f..977dfc09 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-device/www/device.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-device/www/device.js
@@ -43,6 +43,8 @@ function Device() {
this.cordova = null;
this.model = null;
this.manufacturer = null;
+ this.isVirtual = null;
+ this.serial = null;
var me = this;
@@ -57,7 +59,9 @@ function Device() {
me.uuid = info.uuid;
me.cordova = buildLabel;
me.model = info.model;
+ me.isVirtual = info.isVirtual;
me.manufacturer = info.manufacturer || 'unknown';
+ me.serial = info.serial || 'unknown';
channel.onCordovaInfoReady.fire();
},function(e) {
me.available = false;
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-dialogs/www/notification.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-dialogs/www/notification.js
index adc5c077..4ddf530b 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-dialogs/www/notification.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-dialogs/www/notification.js
@@ -38,9 +38,10 @@ module.exports = {
* @param {String} buttonLabel Label of the close button (default: OK)
*/
alert: function(message, completeCallback, title, buttonLabel) {
- var _title = (title || "Alert");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Alert");
var _buttonLabel = (buttonLabel || "OK");
- exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
+ exec(completeCallback, null, "Notification", "alert", [_message, _title, _buttonLabel]);
},
/**
@@ -53,7 +54,8 @@ module.exports = {
* @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel'])
*/
confirm: function(message, resultCallback, title, buttonLabels) {
- var _title = (title || "Confirm");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Confirm");
var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
// Strings are deprecated!
@@ -61,23 +63,9 @@ module.exports = {
console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
}
- // Some platforms take an array of button label names.
- // Other platforms take a comma separated list.
- // For compatibility, we convert to the desired type based on the platform.
- if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
- platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
- platform.id == "windows8" || platform.id == "windows") {
+ _buttonLabels = convertButtonLabels(_buttonLabels);
- if (typeof _buttonLabels === 'string') {
- _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
- }
- } else {
- if (Array.isArray(_buttonLabels)) {
- var buttonLabelArray = _buttonLabels;
- _buttonLabels = buttonLabelArray.toString();
- }
- }
- exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
+ exec(resultCallback, null, "Notification", "confirm", [_message, _title, _buttonLabels]);
},
/**
@@ -93,9 +81,17 @@ module.exports = {
* @param {String} defaultText Textbox input value (default: empty string)
*/
prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
- var _message = (message || "Prompt message");
- var _title = (title || "Prompt");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Prompt");
var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
+
+ // Strings are deprecated!
+ if (typeof _buttonLabels === 'string') {
+ console.log("Notification.prompt(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
+ }
+
+ _buttonLabels = convertButtonLabels(_buttonLabels);
+
var _defaultText = (defaultText || "");
exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
},
@@ -112,4 +108,26 @@ module.exports = {
}
};
+function convertButtonLabels(buttonLabels) {
+
+ // Some platforms take an array of button label names.
+ // Other platforms take a comma separated list.
+ // For compatibility, we convert to the desired type based on the platform.
+ if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
+ platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
+ platform.id == "windows8" || platform.id == "windows") {
+
+ if (typeof buttonLabels === 'string') {
+ buttonLabels = buttonLabels.split(","); // not crazy about changing the var type here
+ }
+ } else {
+ if (Array.isArray(buttonLabels)) {
+ var buttonLabelArray = buttonLabels;
+ buttonLabels = buttonLabelArray.toString();
+ }
+ }
+
+ return buttonLabels;
+}
+
});
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/Position.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/Position.js
index 116abb4f..97c6c2e3 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/Position.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/Position.js
@@ -28,7 +28,7 @@ var Position = function(coords, timestamp) {
} else {
this.coords = new Coordinates();
}
- this.timestamp = (timestamp !== undefined) ? timestamp : new Date();
+ this.timestamp = (timestamp !== undefined) ? timestamp : new Date().getTime();
};
module.exports = Position;
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js
index c335381e..c26dd754 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/PositionError.js
@@ -32,9 +32,9 @@ var PositionError = function(code, message) {
this.message = message || '';
};
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
+PositionError.prototype.PERMISSION_DENIED = PositionError.PERMISSION_DENIED = 1;
+PositionError.prototype.POSITION_UNAVAILABLE = PositionError.POSITION_UNAVAILABLE = 2;
+PositionError.prototype.TIMEOUT = PositionError.TIMEOUT = 3;
module.exports = PositionError;
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/geolocation.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/geolocation.js
index 37bdaabb..50f1f953 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/geolocation.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-geolocation/www/geolocation.js
@@ -103,7 +103,7 @@ var geolocation = {
velocity:p.velocity,
altitudeAccuracy:p.altitudeAccuracy
},
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
+ p.timestamp
);
geolocation.lastPosition = pos;
successCallback(pos);
@@ -119,7 +119,7 @@ var geolocation = {
// Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just
// fire the success callback with the cached position.
- if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) {
+ if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp) <= options.maximumAge)) {
successCallback(geolocation.lastPosition);
// If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object.
} else if (options.timeout === 0) {
@@ -185,7 +185,7 @@ var geolocation = {
velocity:p.velocity,
altitudeAccuracy:p.altitudeAccuracy
},
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
+ p.timestamp
);
geolocation.lastPosition = pos;
successCallback(pos);
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
index b18a2ba7..3e87a6e7 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
@@ -20,94 +20,95 @@ cordova.define("cordova-plugin-inappbrowser.inappbrowser", function(require, exp
*
*/
-// special patch to correctly work on Ripple emulator (CB-9760)
-if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
- module.exports = window.open.bind(window); // fallback to default window.open behaviour
- return;
-}
+(function() {
+ // special patch to correctly work on Ripple emulator (CB-9760)
+ if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
+ module.exports = window.open.bind(window); // fallback to default window.open behaviour
+ return;
+ }
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-var urlutil = require('cordova/urlutil');
+ var exec = require('cordova/exec');
+ var channel = require('cordova/channel');
+ var modulemapper = require('cordova/modulemapper');
+ var urlutil = require('cordova/urlutil');
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
+ function InAppBrowser() {
+ this.channels = {
+ 'loadstart': channel.create('loadstart'),
+ 'loadstop' : channel.create('loadstop'),
+ 'loaderror' : channel.create('loaderror'),
+ 'exit' : channel.create('exit')
+ };
+ }
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event && (event.type in this.channels)) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- show: function (eventname) {
- exec(null, null, "InAppBrowser", "show", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
+ InAppBrowser.prototype = {
+ _eventHandler: function (event) {
+ if (event && (event.type in this.channels)) {
+ this.channels[event.type].fire(event);
+ }
+ },
+ close: function (eventname) {
+ exec(null, null, "InAppBrowser", "close", []);
+ },
+ show: function (eventname) {
+ exec(null, null, "InAppBrowser", "show", []);
+ },
+ addEventListener: function (eventname,f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].subscribe(f);
+ }
+ },
+ removeEventListener: function(eventname, f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].unsubscribe(f);
+ }
+ },
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
+ executeScript: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('executeScript requires exactly one of code or file to be specified');
+ }
+ },
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
+ insertCSS: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('insertCSS requires exactly one of code or file to be specified');
+ }
}
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
+ };
- strUrl = urlutil.makeAbsolute(strUrl);
- var iab = new InAppBrowser();
+ module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
+ // Don't catch calls that write to existing frames (e.g. named iframes).
+ if (window.frames && window.frames[strWindowName]) {
+ var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
+ return origOpenFunc.apply(window, arguments);
+ }
- callbacks = callbacks || {};
- for (var callbackName in callbacks) {
- iab.addEventListener(callbackName, callbacks[callbackName]);
- }
+ strUrl = urlutil.makeAbsolute(strUrl);
+ var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
+ callbacks = callbacks || {};
+ for (var callbackName in callbacks) {
+ iab.addEventListener(callbackName, callbacks[callbackName]);
+ }
- strWindowFeatures = strWindowFeatures || "";
+ var cb = function(eventname) {
+ iab._eventHandler(eventname);
+ };
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
+ strWindowFeatures = strWindowFeatures || "";
+ exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
+ return iab;
+ };
+})();
});
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
index 2e1295cd..fe0e83ad 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
@@ -1,6 +1,4 @@
cordova.define("cordova-plugin-x-socialsharing.SocialSharing", function(require, exports, module) {
-var cordova = require('cordova');
-
function SocialSharing() {
}
@@ -26,6 +24,11 @@ SocialSharing.prototype.available = function (callback) {
}, null, "SocialSharing", "available", []);
};
+// this is the recommended way to share as it is the most feature-rich with respect to what you pass in and get back
+SocialSharing.prototype.shareWithOptions = function (options, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareWithOptions"), "SocialSharing", "shareWithOptions", [options]);
+};
+
SocialSharing.prototype.share = function (message, subject, fileOrFileArray, url, successCallback, errorCallback) {
cordova.exec(successCallback, this._getErrorCallback(errorCallback, "share"), "SocialSharing", "share", [message, subject, this._asArray(fileOrFileArray), url]);
};
@@ -50,7 +53,11 @@ SocialSharing.prototype.shareViaFacebookWithPasteMessageHint = function (message
};
SocialSharing.prototype.shareViaWhatsApp = function (message, fileOrFileArray, url, successCallback, errorCallback) {
- cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url]);
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, null]);
+};
+
+SocialSharing.prototype.shareViaWhatsAppToReceiver = function (receiver, message, fileOrFileArray, url, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsAppToReceiver"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, receiver]);
};
SocialSharing.prototype.shareViaSMS = function (options, phonenumbers, successCallback, errorCallback) {
@@ -114,5 +121,4 @@ SocialSharing.install = function () {
};
cordova.addConstructor(SocialSharing.install);
-
});
diff --git a/StoneIsland/platforms/ios/www/plugins/com.ionic.keyboard/www/keyboard.js b/StoneIsland/platforms/ios/platform_www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js
index ad09ae2d..c74bb4d6 100644
--- a/StoneIsland/platforms/ios/www/plugins/com.ionic.keyboard/www/keyboard.js
+++ b/StoneIsland/platforms/ios/platform_www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js
@@ -1,4 +1,4 @@
-cordova.define("com.ionic.keyboard.keyboard", function(require, exports, module) {
+cordova.define("ionic-plugin-keyboard.keyboard", function(require, exports, module) {
var argscheck = require('cordova/argscheck'),
utils = require('cordova/utils'),
@@ -12,12 +12,15 @@ Keyboard.hideKeyboardAccessoryBar = function(hide) {
exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
};
-Keyboard.close = function() {
+Keyboard.close = function() {
exec(null, null, "Keyboard", "close", []);
};
Keyboard.show = function() {
- exec(null, null, "Keyboard", "show", []);
+ console.warn('Showing keyboard not supported in iOS due to platform limitations.')
+ console.warn('Instead, use input.focus(), and ensure that you have the following setting in your config.xml: \n');
+ console.warn(' <preference name="KeyboardDisplayRequiresUserAction" value="false"/>\n');
+ // exec(null, null, "Keyboard", "show", []);
};
Keyboard.disableScroll = function(disable) {
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/phonegap-plugin-push/www/push.js b/StoneIsland/platforms/ios/platform_www/plugins/phonegap-plugin-push/www/push.js
deleted file mode 100644
index ea60bc9f..00000000
--- a/StoneIsland/platforms/ios/platform_www/plugins/phonegap-plugin-push/www/push.js
+++ /dev/null
@@ -1,232 +0,0 @@
-cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) {
-/* global cordova:false */
-
-/*!
- * Module dependencies.
- */
-
-var exec = cordova.require('cordova/exec');
-
-/**
- * PushNotification constructor.
- *
- * @param {Object} options to initiate Push Notifications.
- * @return {PushNotification} instance that can be monitored and cancelled.
- */
-
-var PushNotification = function(options) {
- this._handlers = {
- 'registration': [],
- 'notification': [],
- 'error': []
- };
-
- // require options parameter
- if (typeof options === 'undefined') {
- throw new Error('The options argument is required.');
- }
-
- // store the options to this object instance
- this.options = options;
-
- // triggered on registration and notification
- var that = this;
- var success = function(result) {
- if (result && typeof result.registrationId !== 'undefined') {
- that.emit('registration', result);
- } else if (result && typeof result.callback !== 'undefined') {
- var executeFunctionByName = function(functionName, context /*, args */) {
- var args = Array.prototype.slice.call(arguments, 2);
- var namespaces = functionName.split(".");
- var func = namespaces.pop();
- for (var i = 0; i < namespaces.length; i++) {
- context = context[namespaces[i]];
- }
- return context[func].apply(context, args);
- }
-
- executeFunctionByName(result.callback, window, result);
- } else if (result) {
- that.emit('notification', result);
- }
- };
-
- // triggered on error
- var fail = function(msg) {
- var e = (typeof msg === 'string') ? new Error(msg) : msg;
- that.emit('error', e);
- };
-
- // wait at least one process tick to allow event subscriptions
- setTimeout(function() {
- exec(success, fail, 'PushNotification', 'init', [options]);
- }, 10);
-};
-
-/**
- * Unregister from push notifications
- */
-
-PushNotification.prototype.unregister = function(successCallback, errorCallback, options) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.unregister failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.unregister failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "unregister", [options]);
-};
-
-/**
- * Call this to set the application icon badge
- */
-
-PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "setApplicationIconBadgeNumber", [{badge: badge}]);
-};
-
-/**
- * Get the application icon badge
- */
-
-PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "getApplicationIconBadgeNumber", []);
-};
-
-/**
- * Listen for an event.
- *
- * The following events are supported:
- *
- * - registration
- * - notification
- * - error
- *
- * @param {String} eventName to subscribe to.
- * @param {Function} callback triggered on the event.
- */
-
-PushNotification.prototype.on = function(eventName, callback) {
- if (this._handlers.hasOwnProperty(eventName)) {
- this._handlers[eventName].push(callback);
- }
-};
-
-/**
- * Remove event listener.
- *
- * @param {String} eventName to match subscription.
- * @param {Function} handle function associated with event.
- */
-
-PushNotification.prototype.off = function (eventName, handle) {
- if (this._handlers.hasOwnProperty(eventName)) {
- var handleIndex = this._handlers[eventName].indexOf(handle);
- if (handleIndex >= 0)
- this._handlers[eventName].splice(handleIndex, 1);
- }
-};
-
-/**
- * Emit an event.
- *
- * This is intended for internal use only.
- *
- * @param {String} eventName is the event to trigger.
- * @param {*} all arguments are passed to the event listeners.
- *
- * @return {Boolean} is true when the event is triggered otherwise false.
- */
-
-PushNotification.prototype.emit = function() {
- var args = Array.prototype.slice.call(arguments);
- var eventName = args.shift();
-
- if (!this._handlers.hasOwnProperty(eventName)) {
- return false;
- }
-
- for (var i = 0, length = this._handlers[eventName].length; i < length; i++) {
- this._handlers[eventName][i].apply(undefined,args);
- }
-
- return true;
-};
-
-PushNotification.prototype.finish = function(successCallback, errorCallback) {
- if (successCallback == null) { successCallback = function() {}}
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof successCallback != "function") {
- console.log("finish failure: success callback parameter must be a function");
- return
- }
-
- if (typeof errorCallback != "function") {
- console.log("finish failure: failure parameter not a function");
- return
- }
-
- exec(successCallback, errorCallback, 'PushNotification', 'finish', []);
-}
-
-/*!
- * Push Notification Plugin.
- */
-
-module.exports = {
- /**
- * Register for Push Notifications.
- *
- * This method will instantiate a new copy of the PushNotification object
- * and start the registration process.
- *
- * @param {Object} options
- * @return {PushNotification} instance
- */
-
- init: function(options) {
- return new PushNotification(options);
- },
-
- /**
- * PushNotification Object.
- *
- * Expose the PushNotification object for direct use
- * and testing. Typically, you should use the
- * .init helper method.
- */
-
- PushNotification: PushNotification
-};
-});
diff --git a/StoneIsland/platforms/ios/www/cordova_plugins.js b/StoneIsland/platforms/ios/www/cordova_plugins.js
index c17b360b..b4bf1fc8 100644
--- a/StoneIsland/platforms/ios/www/cordova_plugins.js
+++ b/StoneIsland/platforms/ios/www/cordova_plugins.js
@@ -1,14 +1,6 @@
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
- "id": "com.ionic.keyboard.keyboard",
- "file": "plugins/com.ionic.keyboard/www/keyboard.js",
- "pluginId": "com.ionic.keyboard",
- "clobbers": [
- "cordova.plugins.Keyboard"
- ]
- },
- {
"id": "com.parse.cordova.core.pushplugin.ParsePlugin",
"file": "plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js",
"pluginId": "com.parse.cordova.core.pushplugin",
@@ -17,19 +9,20 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-console.logger",
- "file": "plugins/cordova-plugin-console/www/logger.js",
- "pluginId": "cordova-plugin-console",
+ "id": "cordova-plugin-inappbrowser.inappbrowser",
+ "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
+ "pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
- "cordova.logger"
+ "cordova.InAppBrowser.open",
+ "window.open"
]
},
{
- "id": "cordova-plugin-console.console",
- "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
- "pluginId": "cordova-plugin-console",
+ "id": "cordova-plugin-x-socialsharing.SocialSharing",
+ "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
+ "pluginId": "cordova-plugin-x-socialsharing",
"clobbers": [
- "console"
+ "window.plugins.socialsharing"
]
},
{
@@ -41,6 +34,22 @@ module.exports = [
]
},
{
+ "id": "cordova-plugin-console.console",
+ "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
+ "pluginId": "cordova-plugin-console",
+ "clobbers": [
+ "console"
+ ]
+ },
+ {
+ "id": "cordova-plugin-console.logger",
+ "file": "plugins/cordova-plugin-console/www/logger.js",
+ "pluginId": "cordova-plugin-console",
+ "clobbers": [
+ "cordova.logger"
+ ]
+ },
+ {
"id": "cordova-plugin-device.device",
"file": "plugins/cordova-plugin-device/www/device.js",
"pluginId": "cordova-plugin-device",
@@ -49,6 +58,23 @@ module.exports = [
]
},
{
+ "id": "cordova-plugin-network-information.network",
+ "file": "plugins/cordova-plugin-network-information/www/network.js",
+ "pluginId": "cordova-plugin-network-information",
+ "clobbers": [
+ "navigator.connection",
+ "navigator.network.connection"
+ ]
+ },
+ {
+ "id": "cordova-plugin-network-information.Connection",
+ "file": "plugins/cordova-plugin-network-information/www/Connection.js",
+ "pluginId": "cordova-plugin-network-information",
+ "clobbers": [
+ "Connection"
+ ]
+ },
+ {
"id": "cordova-plugin-dialogs.notification",
"file": "plugins/cordova-plugin-dialogs/www/notification.js",
"pluginId": "cordova-plugin-dialogs",
@@ -57,6 +83,14 @@ module.exports = [
]
},
{
+ "id": "cordova-plugin-splashscreen.SplashScreen",
+ "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
+ "pluginId": "cordova-plugin-splashscreen",
+ "clobbers": [
+ "navigator.splashscreen"
+ ]
+ },
+ {
"id": "cordova-plugin-geolocation.Coordinates",
"file": "plugins/cordova-plugin-geolocation/www/Coordinates.js",
"pluginId": "cordova-plugin-geolocation",
@@ -89,72 +123,31 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-inappbrowser.inappbrowser",
- "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
- "pluginId": "cordova-plugin-inappbrowser",
+ "id": "ionic-plugin-keyboard.keyboard",
+ "file": "plugins/ionic-plugin-keyboard/www/ios/keyboard.js",
+ "pluginId": "ionic-plugin-keyboard",
"clobbers": [
- "cordova.InAppBrowser.open",
- "window.open"
- ]
- },
- {
- "id": "cordova-plugin-network-information.network",
- "file": "plugins/cordova-plugin-network-information/www/network.js",
- "pluginId": "cordova-plugin-network-information",
- "clobbers": [
- "navigator.connection",
- "navigator.network.connection"
- ]
- },
- {
- "id": "cordova-plugin-network-information.Connection",
- "file": "plugins/cordova-plugin-network-information/www/Connection.js",
- "pluginId": "cordova-plugin-network-information",
- "clobbers": [
- "Connection"
- ]
- },
- {
- "id": "cordova-plugin-splashscreen.SplashScreen",
- "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
- "pluginId": "cordova-plugin-splashscreen",
- "clobbers": [
- "navigator.splashscreen"
- ]
- },
- {
- "id": "cordova-plugin-x-socialsharing.SocialSharing",
- "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js",
- "pluginId": "cordova-plugin-x-socialsharing",
- "clobbers": [
- "window.plugins.socialsharing"
- ]
- },
- {
- "id": "phonegap-plugin-push.PushNotification",
- "file": "plugins/phonegap-plugin-push/www/push.js",
- "pluginId": "phonegap-plugin-push",
- "clobbers": [
- "PushNotification"
- ]
+ "cordova.plugins.Keyboard"
+ ],
+ "runs": true
}
];
module.exports.metadata =
// TOP OF METADATA
{
- "com.ionic.keyboard": "1.0.4",
"com.parse.cordova.core.pushplugin": "0.1.0",
- "cordova-plugin-console": "1.0.1",
- "cordova-plugin-customurlscheme": "4.0.0",
- "cordova-plugin-device": "1.0.1",
- "cordova-plugin-dialogs": "1.1.1",
- "cordova-plugin-geolocation": "1.0.1",
- "cordova-plugin-inappbrowser": "1.1.0",
- "cordova-plugin-network-information": "1.0.1",
- "cordova-plugin-splashscreen": "3.0.0",
- "cordova-plugin-whitelist": "1.0.0",
- "cordova-plugin-x-socialsharing": "5.0.7",
- "phonegap-plugin-push": "1.4.4"
+ "cordova-plugin-inappbrowser": "1.5.0",
+ "cordova-plugin-x-socialsharing": "5.1.3",
+ "cordova-plugin-customurlscheme": "4.2.0",
+ "cordova-plugin-whitelist": "1.3.0",
+ "cordova-plugin-console": "1.0.4",
+ "cordova-plugin-device": "1.1.3",
+ "cordova-plugin-network-information": "1.3.0",
+ "cordova-plugin-dialogs": "1.3.0",
+ "cordova-plugin-splashscreen": "4.0.0",
+ "cordova-plugin-compat": "1.1.0",
+ "cordova-plugin-geolocation": "2.4.0",
+ "ionic-plugin-keyboard": "2.2.1"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/console-via-logger.js
index f7de4b64..0ecd9cc3 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/console-via-logger.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/console-via-logger.js
@@ -23,7 +23,6 @@ cordova.define("cordova-plugin-console.console", function(require, exports, modu
//------------------------------------------------------------------------------
var logger = require("./logger");
-var utils = require("cordova/utils");
//------------------------------------------------------------------------------
// object that we're exporting
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/logger.js
index dd42c01d..deb07b57 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/logger.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-console/www/logger.js
@@ -44,7 +44,6 @@ cordova.define("cordova-plugin-console.logger", function(require, exports, modul
var logger = exports;
var exec = require('cordova/exec');
-var utils = require('cordova/utils');
var UseConsole = false;
var UseLogger = true;
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-device/www/device.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-device/www/device.js
index 775c123f..977dfc09 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-device/www/device.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-device/www/device.js
@@ -43,6 +43,8 @@ function Device() {
this.cordova = null;
this.model = null;
this.manufacturer = null;
+ this.isVirtual = null;
+ this.serial = null;
var me = this;
@@ -57,7 +59,9 @@ function Device() {
me.uuid = info.uuid;
me.cordova = buildLabel;
me.model = info.model;
+ me.isVirtual = info.isVirtual;
me.manufacturer = info.manufacturer || 'unknown';
+ me.serial = info.serial || 'unknown';
channel.onCordovaInfoReady.fire();
},function(e) {
me.available = false;
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-dialogs/www/notification.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-dialogs/www/notification.js
index adc5c077..4ddf530b 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-dialogs/www/notification.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-dialogs/www/notification.js
@@ -38,9 +38,10 @@ module.exports = {
* @param {String} buttonLabel Label of the close button (default: OK)
*/
alert: function(message, completeCallback, title, buttonLabel) {
- var _title = (title || "Alert");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Alert");
var _buttonLabel = (buttonLabel || "OK");
- exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
+ exec(completeCallback, null, "Notification", "alert", [_message, _title, _buttonLabel]);
},
/**
@@ -53,7 +54,8 @@ module.exports = {
* @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel'])
*/
confirm: function(message, resultCallback, title, buttonLabels) {
- var _title = (title || "Confirm");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Confirm");
var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
// Strings are deprecated!
@@ -61,23 +63,9 @@ module.exports = {
console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
}
- // Some platforms take an array of button label names.
- // Other platforms take a comma separated list.
- // For compatibility, we convert to the desired type based on the platform.
- if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
- platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
- platform.id == "windows8" || platform.id == "windows") {
+ _buttonLabels = convertButtonLabels(_buttonLabels);
- if (typeof _buttonLabels === 'string') {
- _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
- }
- } else {
- if (Array.isArray(_buttonLabels)) {
- var buttonLabelArray = _buttonLabels;
- _buttonLabels = buttonLabelArray.toString();
- }
- }
- exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
+ exec(resultCallback, null, "Notification", "confirm", [_message, _title, _buttonLabels]);
},
/**
@@ -93,9 +81,17 @@ module.exports = {
* @param {String} defaultText Textbox input value (default: empty string)
*/
prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
- var _message = (message || "Prompt message");
- var _title = (title || "Prompt");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Prompt");
var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
+
+ // Strings are deprecated!
+ if (typeof _buttonLabels === 'string') {
+ console.log("Notification.prompt(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
+ }
+
+ _buttonLabels = convertButtonLabels(_buttonLabels);
+
var _defaultText = (defaultText || "");
exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
},
@@ -112,4 +108,26 @@ module.exports = {
}
};
+function convertButtonLabels(buttonLabels) {
+
+ // Some platforms take an array of button label names.
+ // Other platforms take a comma separated list.
+ // For compatibility, we convert to the desired type based on the platform.
+ if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
+ platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
+ platform.id == "windows8" || platform.id == "windows") {
+
+ if (typeof buttonLabels === 'string') {
+ buttonLabels = buttonLabels.split(","); // not crazy about changing the var type here
+ }
+ } else {
+ if (Array.isArray(buttonLabels)) {
+ var buttonLabelArray = buttonLabels;
+ buttonLabels = buttonLabelArray.toString();
+ }
+ }
+
+ return buttonLabels;
+}
+
});
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/Position.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/Position.js
index 116abb4f..97c6c2e3 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/Position.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/Position.js
@@ -28,7 +28,7 @@ var Position = function(coords, timestamp) {
} else {
this.coords = new Coordinates();
}
- this.timestamp = (timestamp !== undefined) ? timestamp : new Date();
+ this.timestamp = (timestamp !== undefined) ? timestamp : new Date().getTime();
};
module.exports = Position;
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/PositionError.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/PositionError.js
index c335381e..c26dd754 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/PositionError.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/PositionError.js
@@ -32,9 +32,9 @@ var PositionError = function(code, message) {
this.message = message || '';
};
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
+PositionError.prototype.PERMISSION_DENIED = PositionError.PERMISSION_DENIED = 1;
+PositionError.prototype.POSITION_UNAVAILABLE = PositionError.POSITION_UNAVAILABLE = 2;
+PositionError.prototype.TIMEOUT = PositionError.TIMEOUT = 3;
module.exports = PositionError;
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/geolocation.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/geolocation.js
index 37bdaabb..50f1f953 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/geolocation.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-geolocation/www/geolocation.js
@@ -103,7 +103,7 @@ var geolocation = {
velocity:p.velocity,
altitudeAccuracy:p.altitudeAccuracy
},
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
+ p.timestamp
);
geolocation.lastPosition = pos;
successCallback(pos);
@@ -119,7 +119,7 @@ var geolocation = {
// Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just
// fire the success callback with the cached position.
- if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) {
+ if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp) <= options.maximumAge)) {
successCallback(geolocation.lastPosition);
// If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object.
} else if (options.timeout === 0) {
@@ -185,7 +185,7 @@ var geolocation = {
velocity:p.velocity,
altitudeAccuracy:p.altitudeAccuracy
},
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
+ p.timestamp
);
geolocation.lastPosition = pos;
successCallback(pos);
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
index b18a2ba7..3e87a6e7 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
@@ -20,94 +20,95 @@ cordova.define("cordova-plugin-inappbrowser.inappbrowser", function(require, exp
*
*/
-// special patch to correctly work on Ripple emulator (CB-9760)
-if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
- module.exports = window.open.bind(window); // fallback to default window.open behaviour
- return;
-}
+(function() {
+ // special patch to correctly work on Ripple emulator (CB-9760)
+ if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
+ module.exports = window.open.bind(window); // fallback to default window.open behaviour
+ return;
+ }
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-var urlutil = require('cordova/urlutil');
+ var exec = require('cordova/exec');
+ var channel = require('cordova/channel');
+ var modulemapper = require('cordova/modulemapper');
+ var urlutil = require('cordova/urlutil');
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
+ function InAppBrowser() {
+ this.channels = {
+ 'loadstart': channel.create('loadstart'),
+ 'loadstop' : channel.create('loadstop'),
+ 'loaderror' : channel.create('loaderror'),
+ 'exit' : channel.create('exit')
+ };
+ }
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event && (event.type in this.channels)) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- show: function (eventname) {
- exec(null, null, "InAppBrowser", "show", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
+ InAppBrowser.prototype = {
+ _eventHandler: function (event) {
+ if (event && (event.type in this.channels)) {
+ this.channels[event.type].fire(event);
+ }
+ },
+ close: function (eventname) {
+ exec(null, null, "InAppBrowser", "close", []);
+ },
+ show: function (eventname) {
+ exec(null, null, "InAppBrowser", "show", []);
+ },
+ addEventListener: function (eventname,f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].subscribe(f);
+ }
+ },
+ removeEventListener: function(eventname, f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].unsubscribe(f);
+ }
+ },
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
+ executeScript: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('executeScript requires exactly one of code or file to be specified');
+ }
+ },
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
+ insertCSS: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('insertCSS requires exactly one of code or file to be specified');
+ }
}
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
+ };
- strUrl = urlutil.makeAbsolute(strUrl);
- var iab = new InAppBrowser();
+ module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
+ // Don't catch calls that write to existing frames (e.g. named iframes).
+ if (window.frames && window.frames[strWindowName]) {
+ var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
+ return origOpenFunc.apply(window, arguments);
+ }
- callbacks = callbacks || {};
- for (var callbackName in callbacks) {
- iab.addEventListener(callbackName, callbacks[callbackName]);
- }
+ strUrl = urlutil.makeAbsolute(strUrl);
+ var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
+ callbacks = callbacks || {};
+ for (var callbackName in callbacks) {
+ iab.addEventListener(callbackName, callbacks[callbackName]);
+ }
- strWindowFeatures = strWindowFeatures || "";
+ var cb = function(eventname) {
+ iab._eventHandler(eventname);
+ };
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
+ strWindowFeatures = strWindowFeatures || "";
+ exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
+ return iab;
+ };
+})();
});
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
index 2e1295cd..fe0e83ad 100644
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
@@ -1,6 +1,4 @@
cordova.define("cordova-plugin-x-socialsharing.SocialSharing", function(require, exports, module) {
-var cordova = require('cordova');
-
function SocialSharing() {
}
@@ -26,6 +24,11 @@ SocialSharing.prototype.available = function (callback) {
}, null, "SocialSharing", "available", []);
};
+// this is the recommended way to share as it is the most feature-rich with respect to what you pass in and get back
+SocialSharing.prototype.shareWithOptions = function (options, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareWithOptions"), "SocialSharing", "shareWithOptions", [options]);
+};
+
SocialSharing.prototype.share = function (message, subject, fileOrFileArray, url, successCallback, errorCallback) {
cordova.exec(successCallback, this._getErrorCallback(errorCallback, "share"), "SocialSharing", "share", [message, subject, this._asArray(fileOrFileArray), url]);
};
@@ -50,7 +53,11 @@ SocialSharing.prototype.shareViaFacebookWithPasteMessageHint = function (message
};
SocialSharing.prototype.shareViaWhatsApp = function (message, fileOrFileArray, url, successCallback, errorCallback) {
- cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url]);
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, null]);
+};
+
+SocialSharing.prototype.shareViaWhatsAppToReceiver = function (receiver, message, fileOrFileArray, url, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsAppToReceiver"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, receiver]);
};
SocialSharing.prototype.shareViaSMS = function (options, phonenumbers, successCallback, errorCallback) {
@@ -114,5 +121,4 @@ SocialSharing.install = function () {
};
cordova.addConstructor(SocialSharing.install);
-
});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/com.ionic.keyboard/www/keyboard.js b/StoneIsland/platforms/ios/www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js
index 7d30ba59..c74bb4d6 100755..100644
--- a/StoneIsland/platforms/android/assets/www/plugins/com.ionic.keyboard/www/keyboard.js
+++ b/StoneIsland/platforms/ios/www/plugins/ionic-plugin-keyboard/www/ios/keyboard.js
@@ -1,4 +1,5 @@
-cordova.define("com.ionic.keyboard.keyboard", function(require, exports, module) {
+cordova.define("ionic-plugin-keyboard.keyboard", function(require, exports, module) {
+
var argscheck = require('cordova/argscheck'),
utils = require('cordova/utils'),
exec = require('cordova/exec');
@@ -11,12 +12,15 @@ Keyboard.hideKeyboardAccessoryBar = function(hide) {
exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
};
-Keyboard.close = function() {
+Keyboard.close = function() {
exec(null, null, "Keyboard", "close", []);
};
Keyboard.show = function() {
- exec(null, null, "Keyboard", "show", []);
+ console.warn('Showing keyboard not supported in iOS due to platform limitations.')
+ console.warn('Instead, use input.focus(), and ensure that you have the following setting in your config.xml: \n');
+ console.warn(' <preference name="KeyboardDisplayRequiresUserAction" value="false"/>\n');
+ // exec(null, null, "Keyboard", "show", []);
};
Keyboard.disableScroll = function(disable) {
diff --git a/StoneIsland/platforms/ios/www/plugins/phonegap-plugin-push/www/push.js b/StoneIsland/platforms/ios/www/plugins/phonegap-plugin-push/www/push.js
deleted file mode 100644
index ea60bc9f..00000000
--- a/StoneIsland/platforms/ios/www/plugins/phonegap-plugin-push/www/push.js
+++ /dev/null
@@ -1,232 +0,0 @@
-cordova.define("phonegap-plugin-push.PushNotification", function(require, exports, module) {
-/* global cordova:false */
-
-/*!
- * Module dependencies.
- */
-
-var exec = cordova.require('cordova/exec');
-
-/**
- * PushNotification constructor.
- *
- * @param {Object} options to initiate Push Notifications.
- * @return {PushNotification} instance that can be monitored and cancelled.
- */
-
-var PushNotification = function(options) {
- this._handlers = {
- 'registration': [],
- 'notification': [],
- 'error': []
- };
-
- // require options parameter
- if (typeof options === 'undefined') {
- throw new Error('The options argument is required.');
- }
-
- // store the options to this object instance
- this.options = options;
-
- // triggered on registration and notification
- var that = this;
- var success = function(result) {
- if (result && typeof result.registrationId !== 'undefined') {
- that.emit('registration', result);
- } else if (result && typeof result.callback !== 'undefined') {
- var executeFunctionByName = function(functionName, context /*, args */) {
- var args = Array.prototype.slice.call(arguments, 2);
- var namespaces = functionName.split(".");
- var func = namespaces.pop();
- for (var i = 0; i < namespaces.length; i++) {
- context = context[namespaces[i]];
- }
- return context[func].apply(context, args);
- }
-
- executeFunctionByName(result.callback, window, result);
- } else if (result) {
- that.emit('notification', result);
- }
- };
-
- // triggered on error
- var fail = function(msg) {
- var e = (typeof msg === 'string') ? new Error(msg) : msg;
- that.emit('error', e);
- };
-
- // wait at least one process tick to allow event subscriptions
- setTimeout(function() {
- exec(success, fail, 'PushNotification', 'init', [options]);
- }, 10);
-};
-
-/**
- * Unregister from push notifications
- */
-
-PushNotification.prototype.unregister = function(successCallback, errorCallback, options) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.unregister failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.unregister failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "unregister", [options]);
-};
-
-/**
- * Call this to set the application icon badge
- */
-
-PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "setApplicationIconBadgeNumber", [{badge: badge}]);
-};
-
-/**
- * Get the application icon badge
- */
-
-PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "getApplicationIconBadgeNumber", []);
-};
-
-/**
- * Listen for an event.
- *
- * The following events are supported:
- *
- * - registration
- * - notification
- * - error
- *
- * @param {String} eventName to subscribe to.
- * @param {Function} callback triggered on the event.
- */
-
-PushNotification.prototype.on = function(eventName, callback) {
- if (this._handlers.hasOwnProperty(eventName)) {
- this._handlers[eventName].push(callback);
- }
-};
-
-/**
- * Remove event listener.
- *
- * @param {String} eventName to match subscription.
- * @param {Function} handle function associated with event.
- */
-
-PushNotification.prototype.off = function (eventName, handle) {
- if (this._handlers.hasOwnProperty(eventName)) {
- var handleIndex = this._handlers[eventName].indexOf(handle);
- if (handleIndex >= 0)
- this._handlers[eventName].splice(handleIndex, 1);
- }
-};
-
-/**
- * Emit an event.
- *
- * This is intended for internal use only.
- *
- * @param {String} eventName is the event to trigger.
- * @param {*} all arguments are passed to the event listeners.
- *
- * @return {Boolean} is true when the event is triggered otherwise false.
- */
-
-PushNotification.prototype.emit = function() {
- var args = Array.prototype.slice.call(arguments);
- var eventName = args.shift();
-
- if (!this._handlers.hasOwnProperty(eventName)) {
- return false;
- }
-
- for (var i = 0, length = this._handlers[eventName].length; i < length; i++) {
- this._handlers[eventName][i].apply(undefined,args);
- }
-
- return true;
-};
-
-PushNotification.prototype.finish = function(successCallback, errorCallback) {
- if (successCallback == null) { successCallback = function() {}}
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof successCallback != "function") {
- console.log("finish failure: success callback parameter must be a function");
- return
- }
-
- if (typeof errorCallback != "function") {
- console.log("finish failure: failure parameter not a function");
- return
- }
-
- exec(successCallback, errorCallback, 'PushNotification', 'finish', []);
-}
-
-/*!
- * Push Notification Plugin.
- */
-
-module.exports = {
- /**
- * Register for Push Notifications.
- *
- * This method will instantiate a new copy of the PushNotification object
- * and start the registration process.
- *
- * @param {Object} options
- * @return {PushNotification} instance
- */
-
- init: function(options) {
- return new PushNotification(options);
- },
-
- /**
- * PushNotification Object.
- *
- * Expose the PushNotification object for direct use
- * and testing. Typically, you should use the
- * .init helper method.
- */
-
- PushNotification: PushNotification
-};
-});
diff --git a/StoneIsland/plugins/android.json b/StoneIsland/plugins/android.json
index 8747af08..3e0b601f 100755
--- a/StoneIsland/plugins/android.json
+++ b/StoneIsland/plugins/android.json
@@ -7,48 +7,52 @@
"files": {}
},
"installed_plugins": {
- "com.ionic.keyboard": {
- "PACKAGE_NAME": "us.okfoc.stoneisland"
- },
"com.parse.cordova.core.pushplugin": {
"APP_ID": "GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB",
"CLIENT_KEY": "hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-console": {
+ "cordova-plugin-inappbrowser": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-customurlscheme": {
- "URL_SCHEME": "stoneisland",
+ "cordova-plugin-x-socialsharing": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-device": {
+ "cordova-plugin-customurlscheme": {
+ "URL_SCHEME": "stoneisland",
+ "ANDROID_SCHEME": " ",
+ "ANDROID_HOST": " ",
+ "ANDROID_PATHPREFIX": "/",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-dialogs": {
+ "cordova-plugin-whitelist": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-geolocation": {
+ "cordova-plugin-console": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-inappbrowser": {
+ "cordova-plugin-device": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
"cordova-plugin-network-information": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-splashscreen": {
+ "cordova-plugin-dialogs": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-whitelist": {
+ "cordova-plugin-splashscreen": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-x-socialsharing": {
+ "cordova-plugin-geolocation": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "phonegap-plugin-push": {
+ "ionic-plugin-keyboard": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
- "dependent_plugins": {}
+ "dependent_plugins": {
+ "cordova-plugin-compat": {
+ "PACKAGE_NAME": "us.okfoc.stoneisland"
+ }
+ }
} \ No newline at end of file
diff --git a/StoneIsland/plugins/com.ionic.keyboard/package.json b/StoneIsland/plugins/com.ionic.keyboard/package.json
deleted file mode 100755
index 4dd54150..00000000
--- a/StoneIsland/plugins/com.ionic.keyboard/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "version": "1.0.4",
- "name": "com.ionic.keyboard",
- "cordova_name": "Keyboard",
- "description": "Ionic Keyboard Plugin",
- "license": "Apache 2.0",
- "repo": "https://github.com/driftyco/ionic-plugins-keyboard.git",
- "issue": "https://github.com/driftyco/ionic-plugins-keyboard/issues",
- "keywords": [
- "Ionic",
- "keyboard"
- ],
- "platforms": [
- "android",
- "ios",
- "blackberry10"
- ],
- "engines": []
-} \ No newline at end of file
diff --git a/StoneIsland/plugins/com.ionic.keyboard/plugin.xml b/StoneIsland/plugins/com.ionic.keyboard/plugin.xml
deleted file mode 100755
index 06688915..00000000
--- a/StoneIsland/plugins/com.ionic.keyboard/plugin.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
- id="com.ionic.keyboard"
- version="1.0.4">
- <name>Keyboard</name>
- <description>Ionic Keyboard Plugin</description>
- <license>Apache 2.0</license>
- <keywords>Ionic,keyboard</keywords>
- <repo>https://github.com/driftyco/ionic-plugins-keyboard.git</repo>
- <issue>https://github.com/driftyco/ionic-plugins-keyboard/issues</issue>
-
- <js-module src="www/keyboard.js" name="keyboard">
- <clobbers target="cordova.plugins.Keyboard" />
- </js-module>
-
- <!-- android -->
- <platform name="android">
-
- <config-file target="res/xml/config.xml" parent="/*">
- <feature name="Keyboard">
- <param name="android-package" value="com.ionic.keyboard.IonicKeyboard" />
- <param name="onload" value="true" />
- </feature>
- </config-file>
-
- <source-file src="src/android/IonicKeyboard.java" target-dir="src/com/ionic/keyboard" />
- </platform>
-
- <!-- ios -->
- <platform name="ios">
- <config-file target="config.xml" parent="/*">
- <feature name="Keyboard">
- <param name="ios-package" value="IonicKeyboard" onload="true" />
- </feature>
- </config-file>
-
- <header-file src="src/ios/IonicKeyboard.h" />
- <source-file src="src/ios/IonicKeyboard.m" />
- <header-file src="src/ios/UIWebViewExtension.h" />
- <source-file src="src/ios/UIWebViewExtension.m" />
- </platform>
-
- <!-- blackberry10 -->
- <platform name="blackberry10">
- <source-file src="src/blackberry10/index.js" target-dir='Keyboard' />
- <lib-file src="src/blackberry10/native/device/libKeyboard.so" arch="device"/>
- <lib-file src="src/blackberry10/native/simulator/libKeyboard.so" arch="simulator"/>
- <config-file target="www/config.xml" parent="/widget">
- <feature name="Keyboard" value="com.ionic.keyboard"/>
-
- </config-file>
- </platform>
-
-</plugin>
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/android/IonicKeyboard.java b/StoneIsland/plugins/com.ionic.keyboard/src/android/IonicKeyboard.java
deleted file mode 100755
index deb914ab..00000000
--- a/StoneIsland/plugins/com.ionic.keyboard/src/android/IonicKeyboard.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.ionic.keyboard;
-
-import org.apache.cordova.CallbackContext;
-import org.apache.cordova.CordovaInterface;
-import org.apache.cordova.CordovaPlugin;
-import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.PluginResult.Status;
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.DisplayMetrics;
-import android.view.View;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
-import android.view.inputmethod.InputMethodManager;
-
-public class IonicKeyboard extends CordovaPlugin{
-
- public void initialize(CordovaInterface cordova, CordovaWebView webView) {
- super.initialize(cordova, webView);
-
- //calculate density-independent pixels (dp)
- //http://developer.android.com/guide/practices/screens_support.html
- DisplayMetrics dm = new DisplayMetrics();
- cordova.getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
- final float density = dm.density;
-
- final CordovaWebView appView = webView;
-
- //http://stackoverflow.com/a/4737265/1091751 detect if keyboard is showing
- final View rootView = cordova.getActivity().getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
- OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
- int previousHeightDiff = 0;
- @Override
- public void onGlobalLayout() {
- Rect r = new Rect();
- //r will be populated with the coordinates of your view that area still visible.
- rootView.getWindowVisibleDisplayFrame(r);
-
- int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);
- int pixelHeightDiff = (int)(heightDiff / density);
- if (pixelHeightDiff > 100 && pixelHeightDiff != previousHeightDiff) { // if more than 100 pixels, its probably a keyboard...
- appView.sendJavascript("cordova.plugins.Keyboard.isVisible = true");
- appView.sendJavascript("cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight':" + Integer.toString(pixelHeightDiff)+"});");
-
- //deprecated
- appView.sendJavascript("cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight':" + Integer.toString(pixelHeightDiff)+"});");
- }
- else if ( pixelHeightDiff != previousHeightDiff && ( previousHeightDiff - pixelHeightDiff ) > 100 ){
- appView.sendJavascript("cordova.plugins.Keyboard.isVisible = false");
- appView.sendJavascript("cordova.fireWindowEvent('native.keyboardhide')");
-
- //deprecated
- appView.sendJavascript("cordova.fireWindowEvent('native.hidekeyboard')");
- }
- previousHeightDiff = pixelHeightDiff;
- }
- };
-
- rootView.getViewTreeObserver().addOnGlobalLayoutListener(list);
- }
-
- public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
- if ("close".equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- //http://stackoverflow.com/a/7696791/1091751
- InputMethodManager inputManager = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- View v = cordova.getActivity().getCurrentFocus();
-
- if (v == null) {
- callbackContext.error("No current focus");
- } else {
- inputManager.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- callbackContext.success(); // Thread-safe.
- }
- }
- });
- return true;
- }
- if ("show".equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- ((InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
- callbackContext.success(); // Thread-safe.
- }
- });
- return true;
- }
- return false; // Returning false results in a "MethodNotFound" error.
- }
-
-
-}
-
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.h b/StoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.h
deleted file mode 100755
index 1d6c293d..00000000
--- a/StoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.h
+++ /dev/null
@@ -1,4 +0,0 @@
-@interface UIWebView (HackishAccessoryHiding)
-@property (nonatomic, assign) BOOL hackishlyHidesInputAccessoryView;
-//@property (nonatomic, assign) BOOL styleDark;
-@end
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.m b/StoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.m
deleted file mode 100755
index 25403e6f..00000000
--- a/StoneIsland/plugins/com.ionic.keyboard/src/ios/UIWebViewExtension.m
+++ /dev/null
@@ -1,109 +0,0 @@
-#import <objc/runtime.h>
-#import <UIKit/UIKit.h>
-#import "UIWebViewExtension.h"
-
-//Credit: https://gist.github.com/bjhomer/2048571
-//Also: http://stackoverflow.com/a/23398487/1091751
-@implementation UIWebView (HackishAccessoryHiding)
-
-static const char * const hackishFixClassName = "UIWebBrowserViewMinusAccessoryView";
-static Class hackishFixClass = Nil;
-
-- (UIView *)hackishlyFoundBrowserView {
- UIScrollView *scrollView = self.scrollView;
-
- UIView *browserView = nil;
- for (UIView *subview in scrollView.subviews) {
- if ([NSStringFromClass([subview class]) hasPrefix:@"UIWebBrowserView"]) {
- browserView = subview;
- break;
- }
- }
- return browserView;
-}
-
-- (id)methodReturningNil {
- return nil;
-}
-
-- (void)ensureHackishSubclassExistsOfBrowserViewClass:(Class)browserViewClass {
- if (!hackishFixClass) {
- Class newClass = objc_allocateClassPair(browserViewClass, hackishFixClassName, 0);
- IMP nilImp = [self methodForSelector:@selector(methodReturningNil)];
- class_addMethod(newClass, @selector(inputAccessoryView), nilImp, "@@:");
- objc_registerClassPair(newClass);
-
- hackishFixClass = newClass;
- }
-}
-
-- (BOOL) hackishlyHidesInputAccessoryView {
- UIView *browserView = [self hackishlyFoundBrowserView];
- return [browserView class] == hackishFixClass;
-}
-
-- (void) setHackishlyHidesInputAccessoryView:(BOOL)value {
- UIView *browserView = [self hackishlyFoundBrowserView];
- if (browserView == nil) {
- return;
- }
- [self ensureHackishSubclassExistsOfBrowserViewClass:[browserView class]];
-
- if (value) {
- object_setClass(browserView, hackishFixClass);
- }
- else {
- Class normalClass = objc_getClass("UIWebBrowserView");
- object_setClass(browserView, normalClass);
- }
- [browserView reloadInputViews];
-}
-/* ---------------------------------------------------------------- */
-
-/*
-- (UIKeyboardAppearance) darkKeyboardAppearanceTemplateMethod {
- return UIKeyboardAppearanceDark;
-}
-
-- (UIKeyboardAppearance) lightKeyboardAppearanceTemplateMethod {
- return UIKeyboardAppearanceLight;
-}
-
-- (BOOL) styleDark {
- UIView *browserView = [self hackishlyFoundBrowserView];
- if (browserView == nil) {
- return false;
- }
-
- Method m = class_getInstanceMethod( [self class], @selector( darkKeyboardAppearanceTemplateMethod ) );
- IMP imp = method_getImplementation( m );
-
- Method m2 = class_getInstanceMethod( [browserView class], @selector(keyboardAppearance) );
- IMP imp2 = method_getImplementation( m2 );
-
- return imp == imp2;
-}
-
-- (void) setStyleDark:(BOOL)styleDark {
- UIView *browserView = [self hackishlyFoundBrowserView];
- if (browserView == nil) {
- return;
- }
-
- if ( styleDark ) {
- Method m = class_getInstanceMethod( [self class], @selector( darkKeyboardAppearanceTemplateMethod ) );
- IMP imp = method_getImplementation( m );
- const char* typeEncoding = method_getTypeEncoding( m );
- class_replaceMethod( [browserView class], @selector(keyboardAppearance), imp, typeEncoding );
- }
- else {
- Method m = class_getInstanceMethod( [self class], @selector( lightKeyboardAppearanceTemplateMethod ) );
- IMP imp = method_getImplementation( m );
- const char* typeEncoding = method_getTypeEncoding( m );
- class_replaceMethod( [browserView class], @selector(keyboardAppearance), imp, typeEncoding );
- }
-}
-*/
-
-@end
-
diff --git a/StoneIsland/plugins/cordova-plugin-compat/README.md b/StoneIsland/plugins/cordova-plugin-compat/README.md
new file mode 100644
index 00000000..095c384b
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-compat/README.md
@@ -0,0 +1,31 @@
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+-->
+
+cordova-plugin-compat
+------------------------
+
+This repo is for remaining backwards compatible with previous versions of Cordova.
+
+## USAGE
+
+Your plugin can depend on this plugin and use it to handle the new run time permissions Android 6.0.0 (cordova-android 5.0.0) introduced.
+
+View [this commit](https://github.com/apache/cordova-plugin-camera/commit/a9c18710f23e86f5b7f8918dfab7c87a85064870) to see how to depend on `cordova-plugin-compat`. View [this file](https://github.com/apache/cordova-plugin-camera/blob/master/src/android/CameraLauncher.java) to see how `PermissionHelper` is being used to request and store permissions. Read more about Android permissions at http://cordova.apache.org/docs/en/latest/guide/platforms/android/plugin.html#android-permissions.
diff --git a/StoneIsland/plugins/cordova-plugin-compat/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-compat/RELEASENOTES.md
new file mode 100644
index 00000000..b7aa1293
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-compat/RELEASENOTES.md
@@ -0,0 +1,29 @@
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+-->
+# Release Notes
+
+### 1.1.0 (Nov 02, 2016)
+* [CB-11625](https://issues.apache.org/jira/browse/CB-11625) Adding the `BuildConfig` fetching code as a backup to using a new preference
+* Add github pull request template
+
+### 1.0.0 (Apr 15, 2016)
+* Initial release
+* Moved `PermissionHelper.java` into `src`
diff --git a/StoneIsland/plugins/cordova-plugin-compat/package.json b/StoneIsland/plugins/cordova-plugin-compat/package.json
new file mode 100644
index 00000000..f31174d1
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-compat/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "cordova-plugin-compat",
+ "description": "This repo is for remaining backwards compatible with previous versions of Cordova.",
+ "version": "1.1.0",
+ "homepage": "http://github.com/apache/cordova-plugin-compat#readme",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/apache/cordova-plugin-compat.git"
+ },
+ "bugs": {
+ "url": "https://github.com/apache/cordova-plugin-compat/issues"
+ },
+ "cordova": {
+ "id": "cordova-plugin-compat",
+ "platforms": [
+ "android"
+ ]
+ },
+ "keywords": [
+ "ecosystem:cordova",
+ "ecosystem:phonegap",
+ "cordova-android"
+ ],
+ "engines": [
+ {
+ "name": "cordova",
+ "version": ">=5.0.0"
+ }
+ ],
+ "author": "Apache Software Foundation",
+ "license": "Apache-2.0"
+}
diff --git a/StoneIsland/plugins/cordova-plugin-compat/plugin.xml b/StoneIsland/plugins/cordova-plugin-compat/plugin.xml
new file mode 100644
index 00000000..40b45ccd
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-compat/plugin.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<plugin xmlns="http://cordova.apache.org/ns/plugins/1.0"
+ id="cordova-plugin-compat"
+ version="1.1.0">
+ <name>Compat</name>
+ <description>Cordova Compatibility Plugin</description>
+ <license>Apache 2.0</license>
+ <keywords>cordova,compat</keywords>
+ <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-compat.git</repo>
+
+ <!-- android -->
+ <platform name="android">
+ <source-file src="src/android/PermissionHelper.java" target-dir="src/org/apache/cordova" />
+ <source-file src="src/android/BuildHelper.java" target-dir="src/org/apache/cordova" />
+ </platform>
+
+</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-compat/src/android/BuildHelper.java b/StoneIsland/plugins/cordova-plugin-compat/src/android/BuildHelper.java
new file mode 100644
index 00000000..d9b18aa2
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-compat/src/android/BuildHelper.java
@@ -0,0 +1,70 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+
+package org.apache.cordova;
+
+/*
+ * This is a utility class that allows us to get the BuildConfig variable, which is required
+ * for the use of different providers. This is not guaranteed to work, and it's better for this
+ * to be set in the build step in config.xml
+ *
+ */
+
+import android.app.Activity;
+import android.content.Context;
+
+import java.lang.reflect.Field;
+
+
+public class BuildHelper {
+
+
+ private static String TAG="BuildHelper";
+
+ /*
+ * This needs to be implemented if you wish to use the Camera Plugin or other plugins
+ * that read the Build Configuration.
+ *
+ * Thanks to Phil@Medtronic and Graham Borland for finding the answer and posting it to
+ * StackOverflow. This is annoying as hell! However, this method does not work with
+ * ProGuard, and you should use the config.xml to define the application_id
+ *
+ */
+
+ public static Object getBuildConfigValue(Context ctx, String key)
+ {
+ try
+ {
+ Class<?> clazz = Class.forName(ctx.getPackageName() + ".BuildConfig");
+ Field field = clazz.getField(key);
+ return field.get(null);
+ } catch (ClassNotFoundException e) {
+ LOG.d(TAG, "Unable to get the BuildConfig, is this built with ANT?");
+ e.printStackTrace();
+ } catch (NoSuchFieldException e) {
+ LOG.d(TAG, key + " is not a valid field. Check your build.gradle");
+ } catch (IllegalAccessException e) {
+ LOG.d(TAG, "Illegal Access Exception: Let's print a stack trace.");
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+}
diff --git a/StoneIsland/plugins/cordova-plugin-compat/src/android/PermissionHelper.java b/StoneIsland/plugins/cordova-plugin-compat/src/android/PermissionHelper.java
new file mode 100644
index 00000000..bbd79112
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-compat/src/android/PermissionHelper.java
@@ -0,0 +1,138 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+package org.apache.cordova;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.LOG;
+
+import android.content.pm.PackageManager;
+
+/**
+ * This class provides reflective methods for permission requesting and checking so that plugins
+ * written for cordova-android 5.0.0+ can still compile with earlier cordova-android versions.
+ */
+public class PermissionHelper {
+ private static final String LOG_TAG = "CordovaPermissionHelper";
+
+ /**
+ * Requests a "dangerous" permission for the application at runtime. This is a helper method
+ * alternative to cordovaInterface.requestPermission() that does not require the project to be
+ * built with cordova-android 5.0.0+
+ *
+ * @param plugin The plugin the permission is being requested for
+ * @param requestCode A requestCode to be passed to the plugin's onRequestPermissionResult()
+ * along with the result of the permission request
+ * @param permission The permission to be requested
+ */
+ public static void requestPermission(CordovaPlugin plugin, int requestCode, String permission) {
+ PermissionHelper.requestPermissions(plugin, requestCode, new String[] {permission});
+ }
+
+ /**
+ * Requests "dangerous" permissions for the application at runtime. This is a helper method
+ * alternative to cordovaInterface.requestPermissions() that does not require the project to be
+ * built with cordova-android 5.0.0+
+ *
+ * @param plugin The plugin the permissions are being requested for
+ * @param requestCode A requestCode to be passed to the plugin's onRequestPermissionResult()
+ * along with the result of the permissions request
+ * @param permissions The permissions to be requested
+ */
+ public static void requestPermissions(CordovaPlugin plugin, int requestCode, String[] permissions) {
+ try {
+ Method requestPermission = CordovaInterface.class.getDeclaredMethod(
+ "requestPermissions", CordovaPlugin.class, int.class, String[].class);
+
+ // If there is no exception, then this is cordova-android 5.0.0+
+ requestPermission.invoke(plugin.cordova, plugin, requestCode, permissions);
+ } catch (NoSuchMethodException noSuchMethodException) {
+ // cordova-android version is less than 5.0.0, so permission is implicitly granted
+ LOG.d(LOG_TAG, "No need to request permissions " + Arrays.toString(permissions));
+
+ // Notify the plugin that all were granted by using more reflection
+ deliverPermissionResult(plugin, requestCode, permissions);
+ } catch (IllegalAccessException illegalAccessException) {
+ // Should never be caught; this is a public method
+ LOG.e(LOG_TAG, "IllegalAccessException when requesting permissions " + Arrays.toString(permissions), illegalAccessException);
+ } catch(InvocationTargetException invocationTargetException) {
+ // This method does not throw any exceptions, so this should never be caught
+ LOG.e(LOG_TAG, "invocationTargetException when requesting permissions " + Arrays.toString(permissions), invocationTargetException);
+ }
+ }
+
+ /**
+ * Checks at runtime to see if the application has been granted a permission. This is a helper
+ * method alternative to cordovaInterface.hasPermission() that does not require the project to
+ * be built with cordova-android 5.0.0+
+ *
+ * @param plugin The plugin the permission is being checked against
+ * @param permission The permission to be checked
+ *
+ * @return True if the permission has already been granted and false otherwise
+ */
+ public static boolean hasPermission(CordovaPlugin plugin, String permission) {
+ try {
+ Method hasPermission = CordovaInterface.class.getDeclaredMethod("hasPermission", String.class);
+
+ // If there is no exception, then this is cordova-android 5.0.0+
+ return (Boolean) hasPermission.invoke(plugin.cordova, permission);
+ } catch (NoSuchMethodException noSuchMethodException) {
+ // cordova-android version is less than 5.0.0, so permission is implicitly granted
+ LOG.d(LOG_TAG, "No need to check for permission " + permission);
+ return true;
+ } catch (IllegalAccessException illegalAccessException) {
+ // Should never be caught; this is a public method
+ LOG.e(LOG_TAG, "IllegalAccessException when checking permission " + permission, illegalAccessException);
+ } catch(InvocationTargetException invocationTargetException) {
+ // This method does not throw any exceptions, so this should never be caught
+ LOG.e(LOG_TAG, "invocationTargetException when checking permission " + permission, invocationTargetException);
+ }
+ return false;
+ }
+
+ private static void deliverPermissionResult(CordovaPlugin plugin, int requestCode, String[] permissions) {
+ // Generate the request results
+ int[] requestResults = new int[permissions.length];
+ Arrays.fill(requestResults, PackageManager.PERMISSION_GRANTED);
+
+ try {
+ Method onRequestPermissionResult = CordovaPlugin.class.getDeclaredMethod(
+ "onRequestPermissionResult", int.class, String[].class, int[].class);
+
+ onRequestPermissionResult.invoke(plugin, requestCode, permissions, requestResults);
+ } catch (NoSuchMethodException noSuchMethodException) {
+ // Should never be caught since the plugin must be written for cordova-android 5.0.0+ if it
+ // made it to this point
+ LOG.e(LOG_TAG, "NoSuchMethodException when delivering permissions results", noSuchMethodException);
+ } catch (IllegalAccessException illegalAccessException) {
+ // Should never be caught; this is a public method
+ LOG.e(LOG_TAG, "IllegalAccessException when delivering permissions results", illegalAccessException);
+ } catch(InvocationTargetException invocationTargetException) {
+ // This method may throw a JSONException. We are just duplicating cordova-android's
+ // exception handling behavior here; all it does is log the exception in CordovaActivity,
+ // print the stacktrace, and ignore it
+ LOG.e(LOG_TAG, "InvocationTargetException when delivering permissions results", invocationTargetException);
+ }
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md
index f7dbcaba..4c8e6a5e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md
+++ b/StoneIsland/plugins/cordova-plugin-console/CONTRIBUTING.md
@@ -27,7 +27,7 @@ There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
For instructions on this, start with the
-[contribution overview](http://cordova.apache.org/#contribute).
+[contribution overview](http://cordova.apache.org/contribute/).
The details are explained there, but the important items are:
- Sign and submit an Apache ICLA (Contributor License Agreement).
diff --git a/StoneIsland/plugins/cordova-plugin-console/LICENSE b/StoneIsland/plugins/cordova-plugin-console/LICENSE
index 7a4a3ea2..7a4a3ea2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/LICENSE
+++ b/StoneIsland/plugins/cordova-plugin-console/LICENSE
diff --git a/StoneIsland/plugins/cordova-plugin-console/NOTICE b/StoneIsland/plugins/cordova-plugin-console/NOTICE
index 8ec56a52..8ec56a52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/NOTICE
+++ b/StoneIsland/plugins/cordova-plugin-console/NOTICE
diff --git a/StoneIsland/plugins/cordova-plugin-console/README.md b/StoneIsland/plugins/cordova-plugin-console/README.md
index 73e89084..ebd09398 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/README.md
@@ -1,3 +1,7 @@
+---
+title: Console
+description: Get JavaScript logs in your native logs.
+---
<!---
# license: Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,9 +21,11 @@
# under the License.
-->
-# cordova-plugin-console
+|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI |
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-console)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-console/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-console)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-console/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-console)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-console/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-console)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-console/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-console)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-console/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-console.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-console)
-[![Build Status](https://travis-ci.org/apache/cordova-plugin-console.svg)](https://travis-ci.org/apache/cordova-plugin-console)
+# cordova-plugin-console
This plugin is meant to ensure that console.log() is as useful as it can be.
It adds additional function for iOS, Ubuntu, Windows Phone 8, and Windows. If
@@ -36,6 +42,9 @@ are not available until after the `deviceready` event.
console.log("console.log works well");
}
+:warning: Report issues on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Console%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
+
+
## Installation
cordova plugin add cordova-plugin-console
@@ -46,3 +55,55 @@ On some platforms other than Android, console.log() will act on multiple
arguments, such as console.log("1", "2", "3"). However, Android will act only
on the first argument. Subsequent arguments to console.log() will be ignored.
This plugin is not the cause of that, it is a limitation of Android itself.
+
+## Supported Methods
+
+The plugin support following methods of the `console` object:
+
+- `console.log`
+- `console.error`
+- `console.exception`
+- `console.warn`
+- `console.info`
+- `console.debug`
+- `console.assert`
+- `console.dir`
+- `console.dirxml`
+- `console.time`
+- `console.timeEnd`
+- `console.table`
+
+## Partially supported Methods
+
+Methods of the `console` object which implemented, but behave different from browser implementation:
+
+- `console.group`
+- `console.groupCollapsed`
+
+The grouping methods are just log name of the group and don't actually indicate grouping for later
+calls to `console` object methods.
+
+## Not supported Methods
+
+Methods of the `console` object which are implemented, but do nothing:
+
+- `console.clear`
+- `console.trace`
+- `console.groupEnd`
+- `console.timeStamp`
+- `console.profile`
+- `console.profileEnd`
+- `console.count`
+
+## Supported formatting
+
+The following formatting options available:
+
+Format chars:
+
+* `%j` - format arg as JSON
+* `%o` - format arg as JSON
+* `%c` - format arg as `''`. No color formatting could be done.
+* `%%` - replace with `'%'`
+
+Any other char following `%` will format its arg via `toString()`.
diff --git a/StoneIsland/plugins/cordova-plugin-console/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-console/RELEASENOTES.md
index 5b1fdd1d..76cc093b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-console/RELEASENOTES.md
@@ -20,65 +20,85 @@
-->
# Release Notes
-### 0.2.3 (Sept 25, 2013)
-* CB-4889 bumping&resetting version
-* CB-4889 renaming org.apache.cordova.core.console to org.apache.cordova.console
-* Rename CHANGELOG.md -> RELEASENOTES.md
-* [CB-4752] Incremented plugin version on dev branch.
+### 1.0.4 (Sep 08, 2016)
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to `cordovaDependencies`
+* add `JIRA` issue tracker link
+* Add badges for paramedic builds on Jenkins
+* Add pull request template.
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md
- ### 0.2.4 (Oct 28, 2013)
-* CB-5154 log formatting incorrectly to native
-* CB-5128: added repo + issue tag to plugin.xml for console plugin
-* [CB-4915] Incremented plugin version on dev branch.
+### 1.0.3 (Apr 15, 2016)
+* [CB-10720](https://issues.apache.org/jira/browse/CB-10720) Minor spelling/formatting changes.
+* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins
-### 0.2.5 (Dec 4, 2013)
-* add ubuntu platform
+### 1.0.2 (Nov 18, 2015)
+* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
+* Fixing contribute link.
+* Document formatting options for the console object
+* [CB-5089](https://issues.apache.org/jira/browse/CB-5089) Document supported methods for console object
+* reverted `d58f218b9149d362ebb0b8ce697cf403569d14cd` because `logger` is not needed on **Android**
-### 0.2.6 (Jan 02, 2014)
-* CB-5658 Add doc/index.md for Console plugin
+### 1.0.1 (Jun 17, 2015)
+* move logger.js and console-via-logger.js to common modules, instead of the numerous repeats that were there.
+* clean up tests, info is below log level so it does not exist by default.
+* add a couple tests
+* [CB-9191](https://issues.apache.org/jira/browse/CB-9191) Add basic test
+* [CB-9128](https://issues.apache.org/jira/browse/CB-9128) cordova-plugin-console documentation translation: cordova-plugin-console
+* attempt to fix npm markdown issue
-### 0.2.7 (Feb 05, 2014)
-* Native console needs to be called DebugConsole to avoid ambiguous reference. This commit requires the 3.4.0 version of the native class factory
-* CB-4718 fixed Console plugin not working on wp
+### 1.0.0 (Apr 15, 2015)
+* [CB-8746](https://issues.apache.org/jira/browse/CB-8746) gave plugin major version bump
+* [CB-8683](https://issues.apache.org/jira/browse/CB-8683) changed plugin-id to pacakge-name
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) updated translated docs to use new id
+* Use TRAVIS_BUILD_DIR, install paramedic by npm
+* docs: renamed Windows8 to Windows
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) Updated Readme
+* [CB-8560](https://issues.apache.org/jira/browse/CB-8560) Integrate TravisCI
+* [CB-8438](https://issues.apache.org/jira/browse/CB-8438) cordova-plugin-console documentation translation: cordova-plugin-console
+* [CB-8538](https://issues.apache.org/jira/browse/CB-8538) Added package.json file
+* [CB-8362](https://issues.apache.org/jira/browse/CB-8362) Add Windows platform section to Console plugin
+
+### 0.2.13 (Feb 04, 2015)
+* [CB-8351](https://issues.apache.org/jira/browse/CB-8351) ios: Use argumentForIndex rather than NSArray extension
+
+### 0.2.12 (Dec 02, 2014)
+* [CB-7977](https://issues.apache.org/jira/browse/CB-7977) Mention `deviceready` in plugin docs
+* [CB-7700](https://issues.apache.org/jira/browse/CB-7700) cordova-plugin-console documentation translation: cordova-plugin-console
+
+### 0.2.11 (Sep 17, 2014)
+* [CB-7249](https://issues.apache.org/jira/browse/CB-7249) cordova-plugin-console documentation translation
+
+### 0.2.10 (Aug 06, 2014)
+* [CB-6127](https://issues.apache.org/jira/browse/CB-6127) Updated translations for docs
+
+### 0.2.9 (Jun 05, 2014)
+* [CB-6848](https://issues.apache.org/jira/browse/CB-6848) Add Android quirk, list applicable platforms
+* [CB-6796](https://issues.apache.org/jira/browse/CB-6796) Add license
+* [CB-6491](https://issues.apache.org/jira/browse/CB-6491) add CONTRIBUTING.md
### 0.2.8 (Apr 17, 2014)
-* CB-6460: Update license headers
+* [CB-6460](https://issues.apache.org/jira/browse/CB-6460): Update license headers
* Add NOTICE file
-### 0.2.9 (Jun 05, 2014)
-* CB-6848 Add Android quirk, list applicable platforms
-* CB-6796 Add license
-* CB-6491 add CONTRIBUTING.md
+### 0.2.7 (Feb 05, 2014)
+* Native console needs to be called DebugConsole to avoid ambiguous reference. This commit requires the 3.4.0 version of the native class factory
+* [CB-4718](https://issues.apache.org/jira/browse/CB-4718) fixed Console plugin not working on wp
-### 0.2.10 (Aug 06, 2014)
-* CB-6127 Updated translations for docs
+### 0.2.6 (Jan 02, 2014)
+* [CB-5658](https://issues.apache.org/jira/browse/CB-5658) Add doc/index.md for Console plugin
-### 0.2.11 (Sep 17, 2014)
-* CB-7249 cordova-plugin-console documentation translation
+### 0.2.5 (Dec 4, 2013)
+* add ubuntu platform
-### 0.2.12 (Dec 02, 2014)
-* CB-7977 Mention `deviceready` in plugin docs
-* CB-7700 cordova-plugin-console documentation translation: cordova-plugin-console
+### 0.2.4 (Oct 28, 2013)
+* [CB-5154](https://issues.apache.org/jira/browse/CB-5154) log formatting incorrectly to native
+* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): added repo + issue tag to plugin.xml for console plugin
+* [CB-4915](https://issues.apache.org/jira/browse/CB-4915) Incremented plugin version on dev branch.
-### 0.2.13 (Feb 04, 2015)
-* CB-8351 ios: Use argumentForIndex rather than NSArray extension
+### 0.2.3 (Sept 25, 2013)
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) bumping&resetting version
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) renaming org.apache.cordova.core.console to org.apache.cordova.console
+* Rename CHANGELOG.md -> RELEASENOTES.md
+* [CB-4752](https://issues.apache.org/jira/browse/CB-4752) Incremented plugin version on dev branch.
-### 1.0.0 (Apr 15, 2015)
-* CB-8746 gave plugin major version bump
-* CB-8683 changed plugin-id to pacakge-name
-* CB-8653 updated translated docs to use new id
-* Use TRAVIS_BUILD_DIR, install paramedic by npm
-* docs: renamed Windows8 to Windows
-* CB-8653 Updated Readme
-* CB-8560 Integrate TravisCI
-* CB-8438 cordova-plugin-console documentation translation: cordova-plugin-console
-* CB-8538 Added package.json file
-* CB-8362 Add Windows platform section to Console plugin
-### 1.0.1 (Jun 17, 2015)
-* move logger.js and console-via-logger.js to common modules, instead of the numerous repeats that were there.
-* clean up tests, info is below log level so it does not exist by default.
-* add a couple tests
-* CB-9191 Add basic test
-* CB-9128 cordova-plugin-console documentation translation: cordova-plugin-console
-* attempt to fix npm markdown issue
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/de/README.md
index 933c1b7a..933c1b7a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/de/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/de/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/de/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/de/index.md
index 95517827..95517827 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/de/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/de/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/es/README.md
index b089d639..b089d639 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/es/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/es/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/es/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/es/index.md
index e6b8e684..e6b8e684 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/es/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/es/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md
index 74207ac4..74207ac4 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/fr/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md
index d0dbba55..d0dbba55 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/fr/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/it/README.md
index 5394d551..5394d551 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/it/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/it/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/it/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/it/index.md
index f0625b39..f0625b39 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/it/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/it/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md
index 059c373c..059c373c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/ja/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md
index 413593ce..413593ce 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/ja/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md
index d03ee5aa..d03ee5aa 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/ko/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md
index ca631e44..ca631e44 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/ko/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md
index 78ab9d2c..78ab9d2c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/pl/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md
index 922b577c..922b577c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/pl/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md
index 3cfe15dc..3cfe15dc 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/ru/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md
index ce27c3e1..ce27c3e1 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/zh/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md b/StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md
index e18a141b..e18a141b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md
+++ b/StoneIsland/plugins/cordova-plugin-console/doc/zh/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-console/package.json b/StoneIsland/plugins/cordova-plugin-console/package.json
index 9f667f00..39dc7614 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/package.json
+++ b/StoneIsland/plugins/cordova-plugin-console/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-console",
- "version": "1.0.1",
+ "version": "1.0.4",
"description": "Cordova Console Plugin",
"cordova": {
"id": "cordova-plugin-console",
@@ -28,6 +28,20 @@
"cordova-windows8",
"cordova-windows"
],
+ "scripts": {
+ "test": "npm run jshint",
+ "jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
+ },
"author": "Apache Software Foundation",
- "license": "Apache 2.0"
+ "license": "Apache-2.0",
+ "engines": {
+ "cordovaDependencies": {
+ "2.0.0": {
+ "cordova": ">100"
+ }
+ }
+ },
+ "devDependencies": {
+ "jshint": "^2.6.0"
+ }
}
diff --git a/StoneIsland/plugins/cordova-plugin-console/plugin.xml b/StoneIsland/plugins/cordova-plugin-console/plugin.xml
index f902cc74..b2fb3f06 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-console/plugin.xml
@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-console"
- version="1.0.1">
+ version="1.0.4">
<name>Console</name>
<description>Cordova Console Plugin</description>
@@ -29,14 +29,6 @@
<repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git</repo>
<issue>https://issues.apache.org/jira/browse/CB/component/12320644</issue>
- <js-module src="www/logger.js" name="logger">
- <clobbers target="cordova.logger" />
- </js-module>
-
- <js-module src="www/console-via-logger.js" name="console">
- <clobbers target="console" />
- </js-module>
-
<!-- ios -->
<platform name="ios">
@@ -46,6 +38,14 @@
</feature>
</config-file>
+ <js-module src="www/console-via-logger.js" name="console">
+ <clobbers target="console" />
+ </js-module>
+
+ <js-module src="www/logger.js" name="logger">
+ <clobbers target="cordova.logger" />
+ </js-module>
+
<header-file src="src/ios/CDVLogger.h" />
<source-file src="src/ios/CDVLogger.m" />
@@ -53,6 +53,13 @@
<!-- ubuntu -->
<platform name="ubuntu">
+ <js-module src="www/console-via-logger.js" name="console">
+ <clobbers target="console" />
+ </js-module>
+
+ <js-module src="www/logger.js" name="logger">
+ <clobbers target="cordova.logger" />
+ </js-module>
<header-file src="src/ubuntu/console.h" />
<source-file src="src/ubuntu/console.cpp" />
@@ -67,6 +74,14 @@
</feature>
</config-file>
+ <js-module src="www/console-via-logger.js" name="console">
+ <clobbers target="console" />
+ </js-module>
+
+ <js-module src="www/logger.js" name="logger">
+ <clobbers target="cordova.logger" />
+ </js-module>
+
<source-file src="src/wp/DebugConsole.cs" />
</platform>
@@ -78,15 +93,35 @@
</feature>
</config-file>
+ <js-module src="www/console-via-logger.js" name="console">
+ <clobbers target="console" />
+ </js-module>
+
+ <js-module src="www/logger.js" name="logger">
+ <clobbers target="cordova.logger" />
+ </js-module>
+
<source-file src="src/wp/DebugConsole.cs" />
</platform>
<!-- windows8 -->
<platform name="windows8">
+ <js-module src="www/logger.js" name="logger">
+ <clobbers target="cordova.logger" />
+ </js-module>
+ <js-module src="www/console-via-logger.js" name="console">
+ <clobbers target="console" />
+ </js-module>
</platform>
<!-- Windows universal platform -->
<platform name="windows">
+ <js-module src="www/logger.js" name="logger">
+ <clobbers target="cordova.logger" />
+ </js-module>
+ <js-module src="www/console-via-logger.js" name="console">
+ <clobbers target="console" />
+ </js-module>
</platform>
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.h b/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.h
index 7cfb3063..7cfb3063 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.h
+++ b/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.h
diff --git a/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.m b/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.m
index ccfa3a51..ccfa3a51 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.m
+++ b/StoneIsland/plugins/cordova-plugin-console/src/ios/CDVLogger.m
diff --git a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp b/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp
index 9de09f43..9de09f43 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp
+++ b/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.cpp
diff --git a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h b/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h
index 3f3d1634..3f3d1634 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h
+++ b/StoneIsland/plugins/cordova-plugin-console/src/ubuntu/console.h
diff --git a/StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs b/StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs
index 9bb5476d..9bb5476d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs
+++ b/StoneIsland/plugins/cordova-plugin-console/src/wp/DebugConsole.cs
diff --git a/StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml
index a44db3bc..cce2c53f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-console/tests/plugin.xml
@@ -22,7 +22,7 @@
xmlns:rim="http://www.blackberry.com/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-console-tests"
- version="1.0.1">
+ version="1.0.4">
<name>Cordova Console Plugin Tests</name>
<license>Apache 2.0</license>
diff --git a/StoneIsland/plugins/cordova-plugin-console/tests/tests.js b/StoneIsland/plugins/cordova-plugin-console/tests/tests.js
index 6479e41d..74765d98 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/tests/tests.js
+++ b/StoneIsland/plugins/cordova-plugin-console/tests/tests.js
@@ -19,24 +19,24 @@
*
*/
+/* jshint jasmine: true */
+
exports.defineAutoTests = function () {
describe("Console", function () {
it("console.spec.1 should exist", function() {
expect(window.console).toBeDefined();
});
-
+
it("console.spec.2 has required methods log|warn|error", function(){
expect(window.console.log).toBeDefined();
expect(typeof window.console.log).toBe('function');
-
+
expect(window.console.warn).toBeDefined();
expect(typeof window.console.warn).toBe('function');
-
+
expect(window.console.error).toBeDefined();
- expect(typeof window.console.error).toBe('function');
-
+ expect(typeof window.console.error).toBe('function');
});
-
});
};
diff --git a/StoneIsland/plugins/cordova-plugin-console/www/console-via-logger.js b/StoneIsland/plugins/cordova-plugin-console/www/console-via-logger.js
index 4095eb3e..ffee3263 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/www/console-via-logger.js
+++ b/StoneIsland/plugins/cordova-plugin-console/www/console-via-logger.js
@@ -22,7 +22,6 @@
//------------------------------------------------------------------------------
var logger = require("./logger");
-var utils = require("cordova/utils");
//------------------------------------------------------------------------------
// object that we're exporting
diff --git a/StoneIsland/plugins/cordova-plugin-console/www/logger.js b/StoneIsland/plugins/cordova-plugin-console/www/logger.js
index cbf81b9c..430d887d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-console/www/logger.js
+++ b/StoneIsland/plugins/cordova-plugin-console/www/logger.js
@@ -43,7 +43,6 @@
var logger = exports;
var exec = require('cordova/exec');
-var utils = require('cordova/utils');
var UseConsole = false;
var UseLogger = true;
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/LaunchMyApp-PhoneGap-Plugin.iws b/StoneIsland/plugins/cordova-plugin-customurlscheme/LaunchMyApp-PhoneGap-Plugin.iws
deleted file mode 100644
index 9879f7f4..00000000
--- a/StoneIsland/plugins/cordova-plugin-customurlscheme/LaunchMyApp-PhoneGap-Plugin.iws
+++ /dev/null
@@ -1,1242 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="ChangeListManager">
- <list default="true" id="96110866-69f3-4eb0-8539-5f26f68fe1ac" name="Default" comment="" />
- <ignored path="LaunchMyApp-PhoneGap-Plugin.iws" />
- <ignored path=".idea/workspace.xml" />
- <ignored path="$PROJECT_DIR$/out/" />
- <ignored path=".idea/dataSources.local.xml" />
- <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
- <option name="TRACKING_ENABLED" value="true" />
- <option name="SHOW_DIALOG" value="false" />
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
- <option name="LAST_RESOLUTION" value="IGNORE" />
- </component>
- <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
- <component name="CreatePatchCommitExecutor">
- <option name="PATCH_PATH" value="" />
- </component>
- <component name="DaemonCodeAnalyzer">
- <disable_hints />
- </component>
- <component name="DebuggerManager">
- <breakpoint_any default_suspend_policy="SuspendAll" default_condition_enabled="true" converted="true">
- <breakpoint>
- <option name="NOTIFY_CAUGHT" value="true" />
- <option name="NOTIFY_UNCAUGHT" value="true" />
- <option name="ENABLED" value="false" />
- <option name="LOG_ENABLED" value="false" />
- <option name="LOG_EXPRESSION_ENABLED" value="false" />
- <option name="REMOVE_AFTER_HIT" value="false" />
- <option name="SUSPEND_POLICY" value="SuspendAll" />
- <option name="SUSPEND" value="true" />
- <option name="COUNT_FILTER_ENABLED" value="false" />
- <option name="COUNT_FILTER" value="0" />
- <option name="CONDITION_ENABLED" value="true" />
- <option name="CLASS_FILTERS_ENABLED" value="false" />
- <option name="INSTANCE_FILTERS_ENABLED" value="false" />
- <option name="CONDITION" value="" />
- <option name="LOG_MESSAGE" value="" />
- </breakpoint>
- <breakpoint>
- <option name="NOTIFY_CAUGHT" value="true" />
- <option name="NOTIFY_UNCAUGHT" value="true" />
- <option name="ENABLED" value="false" />
- <option name="LOG_ENABLED" value="false" />
- <option name="LOG_EXPRESSION_ENABLED" value="false" />
- <option name="REMOVE_AFTER_HIT" value="false" />
- <option name="SUSPEND_POLICY" value="SuspendAll" />
- <option name="SUSPEND" value="true" />
- <option name="COUNT_FILTER_ENABLED" value="false" />
- <option name="COUNT_FILTER" value="0" />
- <option name="CONDITION_ENABLED" value="true" />
- <option name="CLASS_FILTERS_ENABLED" value="false" />
- <option name="INSTANCE_FILTERS_ENABLED" value="false" />
- <option name="CONDITION" value="" />
- <option name="LOG_MESSAGE" value="" />
- </breakpoint>
- </breakpoint_any>
- <breakpoint_rules converted="true" />
- <ui_properties converted="true" />
- </component>
- <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
- <component name="FavoritesManager">
- <favorites_list name="LaunchMyApp-PhoneGap-Plugin" />
- </component>
- <component name="FileEditorManager">
- <leaf>
- <file leaf-file-name="package.json" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/package.json">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="-5.625" vertical-offset="0" max-vertical-offset="720">
- <caret line="9" column="17" selection-start-line="9" selection-start-column="17" selection-end-line="9" selection-end-column="17" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- <file leaf-file-name="plugin.xml" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1695">
- <caret line="7" column="0" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- <file leaf-file-name="README.md" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/README.md">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="-2.0" vertical-offset="0" max-vertical-offset="3105">
- <caret line="4" column="24" selection-start-line="4" selection-start-column="24" selection-end-line="4" selection-end-column="24" />
- <folding />
- </state>
- </provider>
- <provider editor-type-id="MarkdownPreviewEditor">
- <state />
- </provider>
- </entry>
- </file>
- <file leaf-file-name="LaunchMyApp.java" pinned="false" current-in-tab="true">
- <entry file="file://$PROJECT_DIR$/src/android/nl/xservices/plugins/LaunchMyApp.java">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.13907285" vertical-offset="60" max-vertical-offset="1920">
- <caret line="22" column="43" selection-start-line="22" selection-start-column="43" selection-end-line="22" selection-end-column="43" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- </leaf>
- </component>
- <component name="FindManager">
- <FindUsagesManager>
- <setting name="OPEN_NEW_TAB" value="false" />
- </FindUsagesManager>
- </component>
- <component name="Git.Settings">
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
- </component>
- <component name="GitLogSettings">
- <option name="myDateState">
- <MyDateState />
- </option>
- </component>
- <component name="IdeDocumentHistory">
- <option name="CHANGED_PATHS">
- <list>
- <option value="$PROJECT_DIR$/www/android/LaunchMyApp.js" />
- <option value="$PROJECT_DIR$/plugin.xml" />
- <option value="$PROJECT_DIR$/README.md" />
- <option value="$PROJECT_DIR$/package.json" />
- <option value="$PROJECT_DIR$/src/android/nl/xservices/plugins/LaunchMyApp.java" />
- </list>
- </option>
- </component>
- <component name="JsGulpfileManager">
- <detection-done>true</detection-done>
- </component>
- <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
- <component name="ProjectFrameBounds">
- <option name="x" value="587" />
- <option name="y" value="23" />
- <option name="width" value="1095" />
- <option name="height" value="926" />
- </component>
- <component name="ProjectLevelVcsManager" settingsEditedManually="false">
- <OptionsSetting value="true" id="Add" />
- <OptionsSetting value="true" id="Remove" />
- <OptionsSetting value="true" id="Checkout" />
- <OptionsSetting value="false" id="Update" />
- <OptionsSetting value="true" id="Status" />
- <OptionsSetting value="true" id="Edit" />
- <OptionsSetting value="true" id="Undo Check Out" />
- <OptionsSetting value="true" id="Get Latest Version" />
- <ConfirmationsSetting value="1" id="Add" />
- <ConfirmationsSetting value="0" id="Remove" />
- </component>
- <component name="ProjectView">
- <navigator currentView="ProjectPane" proportions="" version="1">
- <flattenPackages />
- <showMembers />
- <showModules />
- <showLibraryContents />
- <hideEmptyPackages />
- <abbreviatePackageNames />
- <autoscrollToSource />
- <autoscrollFromSource />
- <sortByType />
- </navigator>
- <panes>
- <pane id="ProjectPane">
- <subPane>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="www" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="windows" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="www" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="www" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="android" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="LaunchMyApp-PhoneGap-Plugin" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="android" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="nl" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="xservices" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="plugins" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- </subPane>
- </pane>
- <pane id="Scope" />
- <pane id="PackagesPane" />
- </panes>
- </component>
- <component name="PropertiesComponent">
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatWidth0" value="64" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatWidth1" value="72" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeWidth0" value="90" />
- <property name="MemberChooser.sorted" value="false" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatOrder1" value="1" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatOrder0" value="0" />
- <property name="last_opened_file_path" value="$PROJECT_DIR$/LaunchMyApp-PhoneGap-Plugin.ipr" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatWidth2" value="75" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeWidth3" value="749" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatWidth3" value="812" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeWidth2" value="94" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeWidth1" value="90" />
- <property name="GoToClass.toSaveIncludeLibraries" value="false" />
- <property name="WebServerToolWindowFactoryState" value="true" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatOrder2" value="2" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_flatOrder3" value="3" />
- <property name="MemberChooser.showClasses" value="true" />
- <property name="FullScreen" value="false" />
- <property name="GoToClass.includeLibraries" value="false" />
- <property name="GoToFile.includeJavaFiles" value="false" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder0" value="0" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder3" value="3" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder1" value="1" />
- <property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder2" value="2" />
- <property name="MemberChooser.copyJavadoc" value="false" />
- </component>
- <component name="RecentsManager">
- <key name="CopyFile.RECENT_KEYS">
- <recent name="$PROJECT_DIR$" />
- <recent name="$PROJECT_DIR$/www/ios" />
- <recent name="$PROJECT_DIR$/www/android" />
- <recent name="$PROJECT_DIR$/www" />
- </key>
- <key name="MoveFile.RECENT_KEYS">
- <recent name="$PROJECT_DIR$/www/android" />
- <recent name="$PROJECT_DIR$/www" />
- </key>
- </component>
- <component name="RunManager">
- <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
- <module name="" />
- <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m" />
- <option name="PROGRAM_PARAMETERS" />
- <method />
- </configuration>
- <configuration default="true" type="GrailsRunConfigurationType" factoryName="Grails">
- <module name="" />
- <setting name="vmparams" value="" />
- <setting name="cmdLine" value="run-app" />
- <setting name="depsClasspath" value="false" />
- <setting name="passParentEnv" value="true" />
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <setting name="launchBrowser" value="false" />
- <method />
- </configuration>
- <configuration default="true" type="Remote" factoryName="Remote">
- <option name="USE_SOCKET_TRANSPORT" value="true" />
- <option name="SERVER_MODE" value="false" />
- <option name="SHMEM_ADDRESS" value="javadebug" />
- <option name="HOST" value="localhost" />
- <option name="PORT" value="5005" />
- <method />
- </configuration>
- <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console">
- <method />
- </configuration>
- <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
- <method />
- </configuration>
- <configuration default="true" type="Applet" factoryName="Applet">
- <module name="" />
- <option name="MAIN_CLASS_NAME" />
- <option name="HTML_FILE_NAME" />
- <option name="HTML_USED" value="false" />
- <option name="WIDTH" value="400" />
- <option name="HEIGHT" value="300" />
- <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
- <option name="VM_PARAMETERS" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <method />
- </configuration>
- <configuration default="true" type="TestNG" factoryName="TestNG">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <module name="" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="SUITE_NAME" />
- <option name="PACKAGE_NAME" />
- <option name="MAIN_CLASS_NAME" />
- <option name="METHOD_NAME" />
- <option name="GROUP_NAME" />
- <option name="TEST_OBJECT" value="CLASS" />
- <option name="VM_PARAMETERS" value="-ea" />
- <option name="PARAMETERS" />
- <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
- <option name="OUTPUT_DIRECTORY" />
- <option name="ANNOTATION_TYPE" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <option name="TEST_SEARCH_SCOPE">
- <value defaultName="moduleWithDependencies" />
- </option>
- <option name="USE_DEFAULT_REPORTERS" value="false" />
- <option name="PROPERTIES_FILE" />
- <envs />
- <properties />
- <listeners />
- <method />
- </configuration>
- <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
- <node-options />
- <gulpfile />
- <tasks />
- <pass-parent-envs>true</pass-parent-envs>
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="PhpUnitRemoteRunConfigurationType" factoryName="PHPUnit on Server">
- <method />
- </configuration>
- <configuration default="true" type="JUnit" factoryName="JUnit">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <module name="" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="PACKAGE_NAME" />
- <option name="MAIN_CLASS_NAME" />
- <option name="METHOD_NAME" />
- <option name="TEST_OBJECT" value="class" />
- <option name="VM_PARAMETERS" value="-ea" />
- <option name="PARAMETERS" />
- <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <option name="TEST_SEARCH_SCOPE">
- <value defaultName="moduleWithDependencies" />
- </option>
- <envs />
- <patterns />
- <method />
- </configuration>
- <configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App">
- <option name="BCName" value="" />
- <option name="IOSSimulatorSdkPath" value="" />
- <option name="adlOptions" value="" />
- <option name="airProgramParameters" value="" />
- <option name="appDescriptorForEmulator" value="Android" />
- <option name="debugTransport" value="USB" />
- <option name="debuggerSdkRaw" value="BC SDK" />
- <option name="emulator" value="NexusOne" />
- <option name="emulatorAdlOptions" value="" />
- <option name="fastPackaging" value="true" />
- <option name="fullScreenHeight" value="0" />
- <option name="fullScreenWidth" value="0" />
- <option name="launchUrl" value="false" />
- <option name="launcherParameters">
- <LauncherParameters>
- <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
- <option name="launcherType" value="OSDefault" />
- <option name="newPlayerInstance" value="false" />
- <option name="playerPath" value="/Applications/Flash Player Debugger.app" />
- </LauncherParameters>
- </option>
- <option name="mobileRunTarget" value="Emulator" />
- <option name="moduleName" value="" />
- <option name="overriddenMainClass" value="" />
- <option name="overriddenOutputFileName" value="" />
- <option name="overrideMainClass" value="false" />
- <option name="runTrusted" value="true" />
- <option name="screenDpi" value="0" />
- <option name="screenHeight" value="0" />
- <option name="screenWidth" value="0" />
- <option name="url" value="http://" />
- <option name="usbDebugPort" value="7936" />
- <method />
- </configuration>
- <configuration default="true" type="PHPUnitRunConfigurationType" factoryName="PHPUnit">
- <TestRunner />
- <method />
- </configuration>
- <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
- <module name="" />
- <option name="TESTING_TYPE" value="0" />
- <option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
- <option name="METHOD_NAME" value="" />
- <option name="CLASS_NAME" value="" />
- <option name="PACKAGE_NAME" value="" />
- <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
- <option name="USE_LAST_SELECTED_DEVICE" value="false" />
- <option name="PREFERRED_AVD" value="" />
- <option name="USE_COMMAND_LINE" value="true" />
- <option name="COMMAND_LINE" value="" />
- <option name="WIPE_USER_DATA" value="false" />
- <option name="DISABLE_BOOT_ANIMATION" value="false" />
- <option name="NETWORK_SPEED" value="full" />
- <option name="NETWORK_LATENCY" value="none" />
- <option name="CLEAR_LOGCAT" value="false" />
- <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
- <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" />
- <method />
- </configuration>
- <configuration default="true" type="BashConfigurationType" factoryName="Bash">
- <option name="INTERPRETER_OPTIONS" value="" />
- <option name="INTERPRETER_PATH" value="/bin/bash" />
- <option name="WORKING_DIRECTORY" value="" />
- <option name="PARENT_ENVS" value="true" />
- <option name="SCRIPT_NAME" value="" />
- <option name="PARAMETERS" value="" />
- <module name="" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="JarApplication" factoryName="JAR Application">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="GradleRunConfiguration" factoryName="Gradle">
- <ExternalSystemSettings>
- <option name="executionName" />
- <option name="externalProjectPath" />
- <option name="externalSystemIdString" value="GRADLE" />
- <option name="scriptParameters" />
- <option name="taskDescriptions">
- <list />
- </option>
- <option name="taskNames">
- <list />
- </option>
- <option name="vmOptions" />
- </ExternalSystemSettings>
- <method />
- </configuration>
- <configuration default="true" type="FlexUnitRunConfigurationType" factoryName="FlexUnit" appDescriptorForEmulator="Android" class_name="" emulatorAdlOptions="" method_name="" package_name="" scope="Class">
- <option name="BCName" value="" />
- <option name="launcherParameters">
- <LauncherParameters>
- <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
- <option name="launcherType" value="OSDefault" />
- <option name="newPlayerInstance" value="false" />
- <option name="playerPath" value="/Applications/Flash Player Debugger.app" />
- </LauncherParameters>
- </option>
- <option name="moduleName" value="" />
- <option name="trusted" value="true" />
- <method />
- </configuration>
- <configuration default="true" type="CucumberJavaRunConfigurationType" factoryName="Cucumber java">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <option name="myFilePath" />
- <option name="GLUE" />
- <option name="myNameFilter" />
- <option name="myGeneratedName" />
- <option name="MAIN_CLASS_NAME" />
- <option name="VM_PARAMETERS" />
- <option name="PROGRAM_PARAMETERS" />
- <option name="WORKING_DIRECTORY" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="ENABLE_SWING_INSPECTOR" value="false" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <module name="" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="Application" factoryName="Application">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <option name="MAIN_CLASS_NAME" />
- <option name="VM_PARAMETERS" />
- <option name="PROGRAM_PARAMETERS" />
- <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="ENABLE_SWING_INSPECTOR" value="false" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <module name="" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application">
- <module name="" />
- <option name="ACTIVITY_CLASS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
- <option name="USE_LAST_SELECTED_DEVICE" value="false" />
- <option name="PREFERRED_AVD" value="" />
- <option name="USE_COMMAND_LINE" value="true" />
- <option name="COMMAND_LINE" value="" />
- <option name="WIPE_USER_DATA" value="false" />
- <option name="DISABLE_BOOT_ANIMATION" value="false" />
- <option name="NETWORK_SPEED" value="full" />
- <option name="NETWORK_LATENCY" value="none" />
- <option name="CLEAR_LOGCAT" value="false" />
- <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
- <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" />
- <method />
- </configuration>
- <list size="0" />
- <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
- <Host>localhost</Host>
- <Port>5050</Port>
- </configuration>
- </component>
- <component name="ShelveChangesManager" show_recycled="false" />
- <component name="SvnConfiguration" myUseAcceleration="nothing">
- <configuration />
- </component>
- <component name="TaskManager">
- <task active="true" id="Default" summary="Default task">
- <changelist id="96110866-69f3-4eb0-8539-5f26f68fe1ac" name="Default" comment="" />
- <created>1380298653954</created>
- <option name="number" value="Default" />
- <updated>1380298653954</updated>
- <workItem from="1390857442497" duration="680000" />
- <workItem from="1391027761184" duration="538000" />
- <workItem from="1402047801442" duration="226000" />
- <workItem from="1417632415028" duration="123000" />
- <workItem from="1417702903217" duration="1164000" />
- <workItem from="1417732337674" duration="68000" />
- <workItem from="1432718035482" duration="300000" />
- <workItem from="1434477283713" duration="33000" />
- <workItem from="1434530183600" duration="166000" />
- <workItem from="1434576966771" duration="61000" />
- <workItem from="1435160289082" duration="779000" />
- <workItem from="1437822576701" duration="751000" />
- <workItem from="1440661703645" duration="1158000" />
- </task>
- <task id="LOCAL-00001" summary="initial checkin">
- <created>1380299229689</created>
- <option name="number" value="00001" />
- <option name="project" value="LOCAL" />
- <updated>1380299229689</updated>
- </task>
- <task id="LOCAL-00002" summary="initial checkin">
- <created>1380302935690</created>
- <option name="number" value="00002" />
- <option name="project" value="LOCAL" />
- <updated>1380302935690</updated>
- </task>
- <task id="LOCAL-00003" summary="testing scheme">
- <created>1380305538088</created>
- <option name="number" value="00003" />
- <option name="project" value="LOCAL" />
- <updated>1380305538088</updated>
- </task>
- <task id="LOCAL-00004" summary="testing scheme">
- <created>1380305862564</created>
- <option name="number" value="00004" />
- <option name="project" value="LOCAL" />
- <updated>1380305862564</updated>
- </task>
- <task id="LOCAL-00005" summary="testing scheme">
- <created>1380306489891</created>
- <option name="number" value="00005" />
- <option name="project" value="LOCAL" />
- <updated>1380306489891</updated>
- </task>
- <task id="LOCAL-00006" summary="testing scheme">
- <created>1380307532008</created>
- <option name="number" value="00006" />
- <option name="project" value="LOCAL" />
- <updated>1380307532008</updated>
- </task>
- <task id="LOCAL-00007" summary="testing scheme">
- <created>1380307669209</created>
- <option name="number" value="00007" />
- <option name="project" value="LOCAL" />
- <updated>1380307669209</updated>
- </task>
- <task id="LOCAL-00008" summary="testing scheme">
- <created>1380311306948</created>
- <option name="number" value="00008" />
- <option name="project" value="LOCAL" />
- <updated>1380311306949</updated>
- </task>
- <task id="LOCAL-00009" summary="testing scheme">
- <created>1380311921427</created>
- <option name="number" value="00009" />
- <option name="project" value="LOCAL" />
- <updated>1380311921427</updated>
- </task>
- <task id="LOCAL-00010" summary="Android w.i.p.">
- <created>1380317008739</created>
- <option name="number" value="00010" />
- <option name="project" value="LOCAL" />
- <updated>1380317008739</updated>
- </task>
- <task id="LOCAL-00011" summary="Android w.i.p.">
- <created>1380317829887</created>
- <option name="number" value="00011" />
- <option name="project" value="LOCAL" />
- <updated>1380317829888</updated>
- </task>
- <task id="LOCAL-00012" summary="Android w.i.p.">
- <created>1380353871771</created>
- <option name="number" value="00012" />
- <option name="project" value="LOCAL" />
- <updated>1380353871771</updated>
- </task>
- <task id="LOCAL-00013" summary="testing schemes">
- <created>1380358237732</created>
- <option name="number" value="00013" />
- <option name="project" value="LOCAL" />
- <updated>1380358237732</updated>
- </task>
- <task id="LOCAL-00014" summary="testing schemes">
- <created>1380358605885</created>
- <option name="number" value="00014" />
- <option name="project" value="LOCAL" />
- <updated>1380358605885</updated>
- </task>
- <task id="LOCAL-00015" summary="testing schemes">
- <created>1380376149014</created>
- <option name="number" value="00015" />
- <option name="project" value="LOCAL" />
- <updated>1380376149014</updated>
- </task>
- <task id="LOCAL-00016" summary="testing schemes">
- <created>1380378153190</created>
- <option name="number" value="00016" />
- <option name="project" value="LOCAL" />
- <updated>1380378153205</updated>
- </task>
- <task id="LOCAL-00017" summary="cleanup">
- <created>1380383948466</created>
- <option name="number" value="00017" />
- <option name="project" value="LOCAL" />
- <updated>1380383948466</updated>
- </task>
- <task id="LOCAL-00018" summary="docs">
- <created>1380393159906</created>
- <option name="number" value="00018" />
- <option name="project" value="LOCAL" />
- <updated>1380393159906</updated>
- </task>
- <task id="LOCAL-00019" summary="docs">
- <created>1380393508799</created>
- <option name="number" value="00019" />
- <option name="project" value="LOCAL" />
- <updated>1380393508799</updated>
- </task>
- <task id="LOCAL-00020" summary="docs">
- <created>1380393757355</created>
- <option name="number" value="00020" />
- <option name="project" value="LOCAL" />
- <updated>1380393757355</updated>
- </task>
- <task id="LOCAL-00021" summary="docs">
- <created>1380393772924</created>
- <option name="number" value="00021" />
- <option name="project" value="LOCAL" />
- <updated>1380393772924</updated>
- </task>
- <task id="LOCAL-00022" summary="docs">
- <created>1380402190419</created>
- <option name="number" value="00022" />
- <option name="project" value="LOCAL" />
- <updated>1380402190419</updated>
- </task>
- <task id="LOCAL-00023" summary="docs">
- <created>1380402398063</created>
- <option name="number" value="00023" />
- <option name="project" value="LOCAL" />
- <updated>1380402398063</updated>
- </task>
- <task id="LOCAL-00024" summary="docs">
- <created>1380402815702</created>
- <option name="number" value="00024" />
- <option name="project" value="LOCAL" />
- <updated>1380402815702</updated>
- </task>
- <task id="LOCAL-00025" summary="found a way to pass a custom urlscheme when the plugin is added">
- <created>1380488689110</created>
- <option name="number" value="00025" />
- <option name="project" value="LOCAL" />
- <updated>1380488689110</updated>
- </task>
- <task id="LOCAL-00026" summary="docs">
- <created>1380488797067</created>
- <option name="number" value="00026" />
- <option name="project" value="LOCAL" />
- <updated>1380488797067</updated>
- </task>
- <task id="LOCAL-00027" summary="docs">
- <created>1380488875151</created>
- <option name="number" value="00027" />
- <option name="project" value="LOCAL" />
- <updated>1380488875151</updated>
- </task>
- <task id="LOCAL-00028" summary="docs">
- <created>1380489049263</created>
- <option name="number" value="00028" />
- <option name="project" value="LOCAL" />
- <updated>1380489049263</updated>
- </task>
- <task id="LOCAL-00029" summary="- docs&#10;- version++">
- <created>1380489820453</created>
- <option name="number" value="00029" />
- <option name="project" value="LOCAL" />
- <updated>1380489820453</updated>
- </task>
- <task id="LOCAL-00030" summary="Implemented feedback by Adobe (plugin should indeed work if no JS handler. Thx guys!).">
- <created>1380567506465</created>
- <option name="number" value="00030" />
- <option name="project" value="LOCAL" />
- <updated>1380567506465</updated>
- </task>
- <task id="LOCAL-00031" summary="Implemented feedback by Adobe (plugin should indeed work if no JS handler. Thx guys!).">
- <created>1380567576964</created>
- <option name="number" value="00031" />
- <option name="project" value="LOCAL" />
- <updated>1380567576964</updated>
- </task>
- <task id="LOCAL-00032" summary="Implemented feedback by Adobe (plugin should indeed work if no JS handler. Thx guys!).">
- <created>1380567665822</created>
- <option name="number" value="00032" />
- <option name="project" value="LOCAL" />
- <updated>1380567665822</updated>
- </task>
- <task id="LOCAL-00033" summary="Upgrading to PhoneGap 3.x">
- <created>1383169425770</created>
- <option name="number" value="00033" />
- <option name="project" value="LOCAL" />
- <updated>1383169425770</updated>
- </task>
- <task id="LOCAL-00034" summary="Upgrading to PhoneGap 3.x (DroidGap is gone)">
- <created>1383172326587</created>
- <option name="number" value="00034" />
- <option name="project" value="LOCAL" />
- <updated>1383172326587</updated>
- </task>
- <task id="LOCAL-00035" summary="Upgrading to PhoneGap 3.x (DroidGap is gone)">
- <created>1383174045796</created>
- <option name="number" value="00035" />
- <option name="project" value="LOCAL" />
- <updated>1383174045796</updated>
- </task>
- <task id="LOCAL-00036" summary="- Check intent when the app is resumed&#10;- Plugin rename: launchMyApp --&gt; Custom URL Scheme">
- <created>1390857761557</created>
- <option name="number" value="00036" />
- <option name="project" value="LOCAL" />
- <updated>1390857761557</updated>
- </task>
- <task id="LOCAL-00037" summary="- Check intent when the app is resumed&#10;- Plugin rename: launchMyApp --&gt; Custom URL Scheme&#10;">
- <created>1390857936690</created>
- <option name="number" value="00037" />
- <option name="project" value="LOCAL" />
- <updated>1390857936690</updated>
- </task>
- <task id="LOCAL-00038" summary="Hotfix for silly clobbers comment f*$%#p">
- <created>1391028041914</created>
- <option name="number" value="00038" />
- <option name="project" value="LOCAL" />
- <updated>1391028041914</updated>
- </task>
- <task id="LOCAL-00039" summary="[#13] cleaned up some now obsolete workarounds for singleTask mode, thanks a lot https://github.com/cef62 !">
- <created>1402048017666</created>
- <option name="number" value="00039" />
- <option name="project" value="LOCAL" />
- <updated>1402048017666</updated>
- </task>
- <task id="LOCAL-00040" summary="Hardening against XSS attacks, thanks Neil Bergman (nbergman@cigital.com)!">
- <created>1417632494865</created>
- <option name="number" value="00040" />
- <option name="project" value="LOCAL" />
- <updated>1417632494865</updated>
- </task>
- <task id="LOCAL-00041" summary="#55 #2 Less aggressive cleanup of the intent">
- <created>1417703047123</created>
- <option name="number" value="00041" />
- <option name="project" value="LOCAL" />
- <updated>1417703047123</updated>
- </task>
- <task id="LOCAL-00042" summary="#55 #2 Less aggressive cleanup of the intent">
- <created>1417706007258</created>
- <option name="number" value="00042" />
- <option name="project" value="LOCAL" />
- <updated>1417706007258</updated>
- </task>
- <task id="LOCAL-00043" summary="Possible fix for #65">
- <created>1434477311221</created>
- <option name="number" value="00043" />
- <option name="project" value="LOCAL" />
- <updated>1434477311221</updated>
- </task>
- <task id="LOCAL-00044" summary="Definite fix for #65">
- <created>1434530307503</created>
- <option name="number" value="00044" />
- <option name="project" value="LOCAL" />
- <updated>1434530307503</updated>
- </task>
- <task id="LOCAL-00045" summary="More definite fix for #65">
- <created>1434577022103</created>
- <option name="number" value="00045" />
- <option name="project" value="LOCAL" />
- <updated>1434577022103</updated>
- </task>
- <task id="LOCAL-00046" summary="Even more definite fix for #65, now also compatible with launching your app from another app (which frankly... doesn't pass a category=browsable)">
- <created>1435161053225</created>
- <option name="number" value="00046" />
- <option name="project" value="LOCAL" />
- <updated>1435161053225</updated>
- </task>
- <task id="LOCAL-00047" summary="#95 Make plugin available on npm">
- <created>1440664137793</created>
- <option name="number" value="00047" />
- <option name="project" value="LOCAL" />
- <updated>1440664137793</updated>
- </task>
- <task id="LOCAL-00048" summary="#90 Attempted to send a second callback for ID: LaunchMyApp Result was: &quot;Invalid action&quot;">
- <created>1440664585797</created>
- <option name="number" value="00048" />
- <option name="project" value="LOCAL" />
- <updated>1440664585797</updated>
- </task>
- <option name="localTasksCounter" value="49" />
- <servers />
- </component>
- <component name="TimeTrackingManager">
- <option name="totallyTimeSpent" value="6047000" />
- </component>
- <component name="ToolWindowManager">
- <frame x="587" y="23" width="1095" height="926" extended-state="0" />
- <editor active="true" />
- <layout>
- <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Changes" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32763532" sideWeight="0.6703807" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Atlassian " active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
- <window_info id="Remote Host" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
- <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
- <window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
- <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32439336" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
- <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
- <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
- <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24121557" sideWeight="0.67006487" order="0" side_tool="false" content_ui="combo" />
- <window_info id="CDI" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
- <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
- <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="9" side_tool="false" content_ui="combo" />
- <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
- <window_info id="JetGradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
- <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
- <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
- </layout>
- <layout-to-restore>
- <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Changes" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32763532" sideWeight="0.6703807" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
- <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Remote Host" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
- <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
- <window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
- <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32439336" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
- <window_info id="CDI" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="13" side_tool="false" content_ui="tabs" />
- <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
- <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24121557" sideWeight="0.67006487" order="1" side_tool="false" content_ui="combo" />
- <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
- <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="11" side_tool="false" content_ui="combo" />
- <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
- <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="JetGradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
- <window_info id="Atlassian " active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
- <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
- <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="4" side_tool="true" content_ui="tabs" />
- <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
- <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
- <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
- <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" />
- </layout-to-restore>
- </component>
- <component name="Vcs.Log.UiProperties">
- <option name="RECENTLY_FILTERED_USER_GROUPS">
- <collection />
- </option>
- <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
- <collection />
- </option>
- </component>
- <component name="VcsContentAnnotationSettings">
- <option name="myLimit" value="2678400000" />
- </component>
- <component name="VcsManagerConfiguration">
- <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
- <option name="CHECK_NEW_TODO" value="false" />
- <option name="myTodoPanelSettings">
- <TodoPanelSettings />
- </option>
- <MESSAGE value="initial checkin" />
- <MESSAGE value="testing scheme" />
- <MESSAGE value="Android w.i.p." />
- <MESSAGE value="testing schemes" />
- <MESSAGE value="cleanup" />
- <MESSAGE value="found a way to pass a custom urlscheme when the plugin is added" />
- <MESSAGE value="docs" />
- <MESSAGE value="- docs&#10;- version++" />
- <MESSAGE value="Implemented feedback by Adobe (plugin should indeed work if no JS handler. Thx guys!)." />
- <MESSAGE value="Upgrading to PhoneGap 3.x" />
- <MESSAGE value="Upgrading to PhoneGap 3.x (DroidGap is gone)" />
- <MESSAGE value="- Check intent when the app is resumed&#10;- Plugin rename: launchMyApp --&gt; Custom URL Scheme" />
- <MESSAGE value="- Check intent when the app is resumed&#10;- Plugin rename: launchMyApp --&gt; Custom URL Scheme&#10;" />
- <MESSAGE value="Hotfix for silly clobbers comment f*$%#p" />
- <MESSAGE value="[#13] cleaned up some now obsolete workarounds for singleTask mode, thanks a lot https://github.com/cef62 !" />
- <MESSAGE value="Hardening against XSS attacks, thanks Neil Bergman (nbergman@cigital.com)!" />
- <MESSAGE value="#55 #2 Less aggressive cleanup of the intent" />
- <MESSAGE value="Possible fix for #65" />
- <MESSAGE value="Definite fix for #65" />
- <MESSAGE value="More definite fix for #65" />
- <MESSAGE value="Even more definite fix for #65, now also compatible with launching your app from another app (which frankly... doesn't pass a category=browsable)" />
- <MESSAGE value="#95 Make plugin available on npm" />
- <MESSAGE value="#90 Attempted to send a second callback for ID: LaunchMyApp Result was: &quot;Invalid action&quot;" />
- <option name="LAST_COMMIT_MESSAGE" value="#90 Attempted to send a second callback for ID: LaunchMyApp Result was: &quot;Invalid action&quot;" />
- </component>
- <component name="XDebuggerManager">
- <breakpoint-manager>
- <option name="time" value="1" />
- </breakpoint-manager>
- <watches-manager />
- </component>
- <component name="antWorkspaceConfiguration">
- <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
- <option name="FILTER_TARGETS" value="false" />
- </component>
- <component name="atlassian-ide-plugin-workspace">
- <option name="bambooConfiguration">
- <BambooWorkspaceConfiguration>
- <option name="view">
- <BambooViewConfigurationBean />
- </option>
- </BambooWorkspaceConfiguration>
- </option>
- <option name="defaultCredentials">
- <UserCfgBean />
- </option>
- </component>
- <component name="atlassian-ide-plugin-workspace-issues">
- <option name="view">
- <JiraViewConfigurationBean>
- <option name="viewFilterId" value="" />
- </JiraViewConfigurationBean>
- </option>
- </component>
- <component name="editorHistoryManager">
- <entry file="file://$PROJECT_DIR$/www/android/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="450">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="285" max-vertical-offset="1035">
- <caret line="19" column="12" selection-start-line="19" selection-start-column="12" selection-end-line="19" selection-end-column="12" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/android/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="225" max-vertical-offset="315">
- <caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/android/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="8" column="22" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/android/nl/xservices/plugins/LaunchMyApp.java">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="19" column="16" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="28" column="14" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/android/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="6" column="25" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/android/nl/xservices/plugins/LaunchMyApp.java">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="26" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/android/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="8" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/android/nl/xservices/plugins/LaunchMyApp.java">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="26" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/android/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="8" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="38" column="18" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/android/nl/xservices/plugins/LaunchMyApp.java">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="26" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="16" column="16" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/.gitignore">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.014299333" vertical-offset="0" max-vertical-offset="0">
- <caret line="1" column="5" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/../mgggplus/mgggplus-frontend/www/config.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="0">
- <caret line="12" column="23" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/ios/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="743">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/android/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="450">
- <caret line="18" column="22" selection-start-line="18" selection-start-column="22" selection-end-line="18" selection-end-column="22" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/www/windows/LaunchMyApp.js">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.1986755" vertical-offset="0" max-vertical-offset="755">
- <caret line="10" column="0" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/README.md">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="-2.0" vertical-offset="0" max-vertical-offset="3105">
- <caret line="4" column="24" selection-start-line="4" selection-start-column="24" selection-end-line="4" selection-end-column="24" />
- <folding />
- </state>
- </provider>
- <provider editor-type-id="MarkdownPreviewEditor">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/package.json">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="-5.625" vertical-offset="0" max-vertical-offset="720">
- <caret line="9" column="17" selection-start-line="9" selection-start-column="17" selection-end-line="9" selection-end-column="17" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/plugin.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1695">
- <caret line="7" column="0" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/android/nl/xservices/plugins/LaunchMyApp.java">
- <provider selected="true" editor-type-id="text-editor">
- <state vertical-scroll-proportion="0.13907285" vertical-offset="60" max-vertical-offset="1920">
- <caret line="22" column="43" selection-start-line="22" selection-start-column="43" selection-end-line="22" selection-end-column="43" />
- <folding />
- </state>
- </provider>
- </entry>
- </component>
-</project> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md b/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md
index 2de829c2..d7222e90 100644
--- a/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md
@@ -1,6 +1,6 @@
# Custom URL scheme PhoneGap Plugin
#### launch your app by a link like this: `mycoolapp://`
-for iOS and Android, by [Eddy Verbruggen](http://www.x-services.nl)
+for iOS, Android and WP, by [Eddy Verbruggen](http://www.x-services.nl)
- This repo is for PhoneGap 3.0.0 and up
- For PhoneGap 2.9.0 and lower, [switch to the phonegap-2.9.0-and-lower branch](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin/tree/phonegap-2.9.0-and-lower)
@@ -10,11 +10,15 @@ for iOS and Android, by [Eddy Verbruggen](http://www.x-services.nl)
2. [Manually](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#manually)
2. [PhoneGap Build](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#phonegap-build)
3. [Usage](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#3-usage)
+ 2. [iOS](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#ios-usage)
+ 2. [Meteor](https://github.com/EddyVerbruggen/Custom-URL-scheme#meteor--getlastintent-android-only)
4. [URL Scheme hints](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#4-url-scheme-hints)
5. [License](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#5-license)
-### BEWARE: [This Apache Cordova issue](https://issues.apache.org/jira/browse/CB-7606) causes problems with Cordova-iOS 3.7.0: the `handleOpenURL` function is not invoked upon cold start. Use a higher or lower version than 3.7.0.
+### BEWARE:
+### - [This Apache Cordova issue](https://issues.apache.org/jira/browse/CB-7606) causes problems with Cordova-iOS 3.7.0: the `handleOpenURL` function is not invoked upon cold start. Use a higher or lower version than 3.7.0.
+### - As of iOS 9.2, the dialog `Open in "mycoolapp"?` no longer blocks JS, so if you have a short timeout that opens the app store, the user will be taken to the store before they have a chance to see and answer the dialog. [See below](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#ios-usage) for available solutions.
## 1. Description
@@ -32,6 +36,8 @@ This plugin allows you to start your app by calling it with a URL like `mycoolap
### Android specifics
* Unlike iOS, there is no way to use config.xml to define a scheme for your app. Now there is.
* Tested on Android 4.3, will most likely work with 2.2 and up.
+* If you're trying to launch your app from an In-App Browser it opened previously, then [use this In-App Browser plugin fork](https://github.com/Innovation-District/cordova-plugin-inappbrowser) which allows that.
+* In case you have a multi-page app (multiple HTML files, and all implementing handleOpenURL), set the preference `CustomURLSchemePluginClearsAndroidIntent` to `true` in `config.xml` so the function won't be triggered multiple times. Note that this may interfere with other plugins requiring the intent data.
## 2. Installation
@@ -168,6 +174,37 @@ function handleOpenURL(url) {
A more useful implementation would mean parsing the URL, saving any params to sessionStorage and redirecting the app to the correct page inside your app.
All this happens before the first page is loaded.
+### iOS Usage
+A common method of deeplinking is to give the user the URL of a webpage (for instance http://linker.myapp.com/pathfoo) that opens the app if installed or the app store if not. This can be done in the following ways, depending on the desired UX:
+
+1. The page content has a button that says "Install app" and when clicked opens the app store by doing `location.href = 'itms-apps://itunes.apple.com/us/app/mycoolapp/idfoo'`. On page load, do `location.href = 'mycoolapp://pathfoo'`. If the user has the app, they will see a dialog that says `Open in "mycoolapp"? [Cancel] [Open]`. If the user does not have the app, they will see an alert that says `Cannot Open Page: Safari cannot open the page because the address is invalid`. Once they dismiss the alert, they see the button that opens the app store, and they tap it.
+2. The page has two buttons: one that opens the app, and one that opens the app store.
+3. On page load, open a Universal Link using [cordova-universal-links-plugin](https://github.com/nordnet/cordova-universal-links-plugin). (A Universal Link either opens the app or the app store.) Then fall back to one of the above methods if Univeral Links is not supported.
+
+You can also use a service that provides pages that do #3 for you, such as [Branch](https://branch.io/).
+
+### CSP - or: `handleOpenURL` doesn't work
+The Whitelist plugin will prevent inline JS from executing, unless you whitelist the url scheme. Please see [this SO issue](http://stackoverflow.com/questions/34257097/using-handleopenurl-with-custom-url-scheme-in-cordova/34281420#34281420) for details.
+
+### Meteor / getLastIntent (Android only)
+When running a [meteor](meteor.com) app in the cordova environment, `handleOpenURL` doesn't get called after a cold start, because cordova resets the javascript world during startup and our timer waiting for `handleOpenURL` gets vanished (see [#98](https://github.com/EddyVerbruggen/Custom-URL-scheme/issues/98)). To get the intent by which the app was started in a meteor cordova app you need to ask for it from the meteor side with `getLastIntent` like this.
+```javascript
+Meteor.startup(function() {
+ if (Meteor.isCordova) {
+ window.plugins.launchmyapp.getLastIntent(function(url) {
+ if (intent.indexOf('mycoolapp://' > -1)) {
+ console.log("received url: " + url);
+ } else {
+ return console.log("ignore intent: " + url);
+ }
+ }, function(error) {
+ return console.log("no intent received");
+ });
+ return;
+ }
+});
+```
+
## 4. URL Scheme hints
Please choose a URL_SCHEME which which complies to these restrictions:
- Don't use an already registered scheme (like `fb`, `twitter`, `comgooglemaps`, etc).
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/atlassian-ide-plugin.xml b/StoneIsland/plugins/cordova-plugin-customurlscheme/atlassian-ide-plugin.xml
deleted file mode 100644
index 858eed55..00000000
--- a/StoneIsland/plugins/cordova-plugin-customurlscheme/atlassian-ide-plugin.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<atlassian-ide-plugin>
- <project-configuration id="1">
- <servers id="2" />
- </project-configuration>
-</atlassian-ide-plugin> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/package.json b/StoneIsland/plugins/cordova-plugin-customurlscheme/package.json
index de90c8e2..3d0a4eaf 100644
--- a/StoneIsland/plugins/cordova-plugin-customurlscheme/package.json
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-customurlscheme",
- "version": "4.0.0",
+ "version": "4.2.0",
"description": "Launch your app by using this URL: mycoolapp://, you can add a path and even pass params like this: mycoolerapp://somepath?foo=bar",
"cordova": {
"id": "cordova-plugin-customurlscheme",
@@ -40,4 +40,4 @@
"url": "https://github.com/EddyVerbruggen/Custom-URL-scheme/issues"
},
"homepage": "https://github.com/EddyVerbruggen/Custom-URL-scheme#readme"
-} \ No newline at end of file
+}
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/plugin.xml b/StoneIsland/plugins/cordova-plugin-customurlscheme/plugin.xml
index 1e43e724..0fde67b0 100755
--- a/StoneIsland/plugins/cordova-plugin-customurlscheme/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/plugin.xml
@@ -2,7 +2,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-customurlscheme"
- version="4.0.0">
+ version="4.2.0">
<name>Custom URL scheme</name>
@@ -47,6 +47,10 @@
<!-- android -->
<platform name="android">
+ <preference name="ANDROID_SCHEME" default=" " />
+ <preference name="ANDROID_HOST" default=" " />
+ <preference name="ANDROID_PATHPREFIX" default="/" />
+
<js-module src="www/android/LaunchMyApp.js" name="LaunchMyApp">
<clobbers target="window.plugins.launchmyapp" />
</js-module>
@@ -59,16 +63,24 @@
<source-file src="src/android/nl/xservices/plugins/LaunchMyApp.java" target-dir="src/nl/xservices/plugins"/>
- <config-file target="AndroidManifest.xml" parent="/*/application/activity">
+ <config-file target="AndroidManifest.xml" parent="/manifest/application/activity">
<intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="$URL_SCHEME"/>
+ </intent-filter>
+ <intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="$ANDROID_SCHEME"
+ android:host="$ANDROID_HOST"
+ android:pathPrefix="$ANDROID_PATHPREFIX" />
</intent-filter>
</config-file>
</platform>
-
+
<!-- windows8 -->
<platform name="windows8">
<config-file target="package.appxmanifest" parent="/Package/Applications/Application/Extensions">
@@ -76,14 +88,20 @@
<Protocol Name="$URL_SCHEME" />
</Extension>
</config-file>
-
+
<js-module src="www/windows/LaunchMyApp.js" name="LaunchMyApp">
<clobbers target="window.plugins.launchmyapp" />
</js-module>
</platform>
-
+
<!-- windows -->
<platform name="windows">
+ <hook type="before_prepare" src="src/windows/hooks/prepare-manifest.js" />
+ <config-file target="package.windows10.appxmanifest" parent="/Package/Applications/Application/Extensions">
+ <uap:Extension Category="windows.protocol" StartPage="www/index.html">
+ <uap:Protocol Name="$URL_SCHEME" />
+ </uap:Extension>
+ </config-file>
<config-file target="package.windows.appxmanifest" parent="/Package/Applications/Application/Extensions">
<Extension Category="windows.protocol" StartPage="www/index.html">
<Protocol Name="$URL_SCHEME" />
@@ -104,4 +122,28 @@
</js-module>
</platform>
+ <!-- wp8 -->
+ <platform name="wp8">
+ <config-file target="config.xml" parent="/*">
+ <feature name="CustomUriMapperCommand">
+ <param name="wp-package" value="CustomUriMapperCommand"/>
+ <param name="onload" value="true" />
+ </feature>
+ </config-file>
+
+ <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App" after="Tokens">
+ <Extensions>
+ <Protocol Name="$URL_SCHEME" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
+ </Extensions>
+ </config-file>
+
+ <source-file src="src/wp8/CompositeUriMapper.cs" />
+ <source-file src="src/wp8/ICustomUriMapper.cs" />
+ <source-file src="src/wp8/CustomUriMapperCommand.cs" />
+ <js-module src="www/wp8/LaunchMyApp.js" name="LaunchMyApp">
+ <clobbers target="window.plugins.launchmyapp" />
+ </js-module>
+ <hook type="after_plugin_install" src="src/wp8/hooks/add-uri-mapper.js" />
+ </platform>
+
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/android/nl/xservices/plugins/LaunchMyApp.java b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/android/nl/xservices/plugins/LaunchMyApp.java
index 9d3f3d63..3a52d287 100644
--- a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/android/nl/xservices/plugins/LaunchMyApp.java
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/android/nl/xservices/plugins/LaunchMyApp.java
@@ -4,6 +4,8 @@ import android.content.Intent;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaActivity;
import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaWebView;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
@@ -16,19 +18,52 @@ import java.util.Locale;
public class LaunchMyApp extends CordovaPlugin {
private static final String ACTION_CHECKINTENT = "checkIntent";
+ private static final String ACTION_CLEARINTENT = "clearIntent";
+ private static final String ACTION_GETLASTINTENT = "getLastIntent";
+
+ private String lastIntentString = null;
+
+ /**
+ * We don't want to interfere with other plugins requiring the intent data,
+ * but in case of a multi-page app your app may receive the same intent data
+ * multiple times, that's why you'll get an option to reset it (null it).
+ *
+ * Add this to config.xml to enable that behaviour (default false):
+ * <preference name="CustomURLSchemePluginClearsAndroidIntent" value="true"/>
+ */
+ private boolean resetIntent;
+
+ @Override
+ public void initialize(final CordovaInterface cordova, CordovaWebView webView){
+ this.resetIntent = preferences.getBoolean("resetIntent", false) ||
+ preferences.getBoolean("CustomURLSchemePluginClearsAndroidIntent", false);
+ }
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (ACTION_CHECKINTENT.equalsIgnoreCase(action)) {
+ if (ACTION_CLEARINTENT.equalsIgnoreCase(action)) {
+ final Intent intent = ((CordovaActivity) this.webView.getContext()).getIntent();
+ if (resetIntent){
+ intent.setData(null);
+ }
+ return true;
+ } else if (ACTION_CHECKINTENT.equalsIgnoreCase(action)) {
final Intent intent = ((CordovaActivity) this.webView.getContext()).getIntent();
final String intentString = intent.getDataString();
- if (intentString != null && intentString.contains("://") && intent.getScheme() != null) {
+ if (intentString != null && intent.getScheme() != null) {
+ lastIntentString = intentString;
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, intent.getDataString()));
- intent.setData(null);
} else {
callbackContext.error("App was not started via the launchmyapp URL scheme. Ignoring this errorcallback is the best approach.");
}
return true;
+ } else if (ACTION_GETLASTINTENT.equalsIgnoreCase(action)) {
+ if(lastIntentString != null) {
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, lastIntentString));
+ } else {
+ callbackContext.error("No intent received so far.");
+ }
+ return true;
} else {
callbackContext.error("This plugin only responds to the " + ACTION_CHECKINTENT + " action.");
return false;
@@ -38,8 +73,10 @@ public class LaunchMyApp extends CordovaPlugin {
@Override
public void onNewIntent(Intent intent) {
final String intentString = intent.getDataString();
- if (intentString != null && intentString.contains("://") && intent.getScheme() != null) {
- intent.setData(null);
+ if (intentString != null && intent.getScheme() != null) {
+ if (resetIntent){
+ intent.setData(null);
+ }
try {
StringWriter writer = new StringWriter(intentString.length() * 2);
escapeJavaStyleString(writer, intentString, true, false);
@@ -133,4 +170,4 @@ public class LaunchMyApp extends CordovaPlugin {
private static String hex(char ch) {
return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
}
-} \ No newline at end of file
+}
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/windows/hooks/prepare-manifest.js b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/windows/hooks/prepare-manifest.js
new file mode 100644
index 00000000..06e237f7
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/windows/hooks/prepare-manifest.js
@@ -0,0 +1,30 @@
+module.exports = function(context) {
+ var fs = context.requireCordovaModule('fs'),
+ et = context.requireCordovaModule('elementtree'),
+ path = context.requireCordovaModule('path'),
+ xml= context.requireCordovaModule('cordova-common').xmlHelpers,
+ projectRoot = path.join(context.opts.projectRoot, "platforms", "windows");
+
+ var MANIFEST_WINDOWS = 'package.windows.appxmanifest',
+ MANIFEST_PHONE = 'package.phone.appxmanifest',
+ MANIFEST_WINDOWS10 = 'package.windows10.appxmanifest',
+ MANIFEST_WINDOWS80 = 'package.windows80.appxmanifest';
+
+ function updateManifestFile(manifestPath) {
+ var doc = xml.parseElementtreeSync(manifestPath);
+ var root = doc.getroot();
+ var app = root.find('./Applications/Application');
+ if (!app) {
+ throw new Error(manifestPath + ' has incorrect XML structure.');
+ }
+ if (!app.find('./Extensions')) {
+ app.append(new et.Element('Extensions'));
+ }
+ fs.writeFileSync(manifestPath, doc.write({indent: 4}), 'utf-8');
+ }
+
+ [MANIFEST_PHONE, MANIFEST_WINDOWS80, MANIFEST_WINDOWS, MANIFEST_WINDOWS10]
+ .forEach(function(manifestFile) {
+ updateManifestFile(path.join(projectRoot, manifestFile));
+ });
+}
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CompositeUriMapper.cs b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CompositeUriMapper.cs
new file mode 100644
index 00000000..8db593b8
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CompositeUriMapper.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Linq;
+using System.Windows.Navigation;
+
+internal class CompositeUriMapper : UriMapperBase
+{
+ public static string launchUrl;
+
+ public override Uri MapUri(Uri uri)
+ {
+ string launchUri = uri.ToString();
+ if (launchUri.StartsWith("/Protocol?encodedLaunchUri="))
+ {
+ int launchUrlIndex = launchUri.IndexOf("encodedLaunchUri=");
+ launchUrl = System.Net.HttpUtility.UrlDecode(launchUri.Substring(launchUrlIndex+17));
+ return new Uri("/MainPage.xaml", UriKind.Relative);
+ }
+ var assemblies = AppDomain.CurrentDomain.GetAssemblies();
+ var types = assemblies.SelectMany(a =>
+ {
+ try
+ {
+ return a.ExportedTypes.Where(et => typeof(ICustomUriMapper).IsAssignableFrom(et));
+ }
+ catch
+ {
+ return Enumerable.Empty<Type>();
+ }
+ });
+
+ foreach (var type in types)
+ {
+ if (type != typeof(ICustomUriMapper))
+ {
+ var worker = (ICustomUriMapper)Activator.CreateInstance(type);
+ var mappedUri = worker.CustomMapUri(uri);
+ if (mappedUri != null)
+ {
+ return mappedUri;
+ }
+ }
+ }
+
+ return uri;
+ }
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CustomUriMapperCommand.cs b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CustomUriMapperCommand.cs
new file mode 100644
index 00000000..2004f2ec
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/CustomUriMapperCommand.cs
@@ -0,0 +1,9 @@
+using System;
+using WPCordovaClassLib.Cordova.Commands;
+
+namespace Cordova.Extension.Commands
+{
+ public class CustomUriMapperCommand : BaseCommand
+ {
+ }
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/ICustomUriMapper.cs b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/ICustomUriMapper.cs
new file mode 100644
index 00000000..2cc31e5c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/ICustomUriMapper.cs
@@ -0,0 +1,7 @@
+using System;
+using System.Linq;
+
+public interface ICustomUriMapper
+{
+ Uri CustomMapUri(Uri uri);
+}
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js
new file mode 100644
index 00000000..1c1db69c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js
@@ -0,0 +1,80 @@
+module.exports = function (context) {
+ var deferred = context.requireCordovaModule('q').defer(),
+ fs = context.requireCordovaModule('fs'),
+ path = context.requireCordovaModule('path'),
+ projectRoot = context.opts.projectRoot;
+
+ // While on AppBuilder this may work, the Cordova CLI doesn't like it
+ // (or at least not all versions of it).
+ var appXaml = path.join(projectRoot, "App.xaml.cs");
+ var mainPageXaml = path.join(projectRoot, "MainPage.xaml.cs");
+ try {
+ fs.statSync(appXaml);
+ fs.statSync(mainPageXaml);
+ } catch (err) {
+ appXaml = path.join(projectRoot, "platforms", "wp8", "App.xaml.cs");
+ mainPageXaml = path.join(projectRoot, "platforms", "wp8", "MainPage.xaml.cs");
+ try {
+ fs.statSync(appXaml);
+ fs.statSync(mainPageXaml);
+ } catch (err2) {
+ console.error("Custom URL Scheme plugin couldn't find your App's xaml file! Try to adjust the file manually according to the 'add-uri-mapper.js' hook.");
+ return;
+ }
+ }
+
+ fs.readFile(appXaml, 'utf8', function (err,data) {
+ if (err) {
+ console.error("Error while configuring the Custom URL Scheme: " + err);
+ deferred.reject(err);
+ return;
+ }
+
+ var result = data.replace(/^(\s*?)(RootFrame.NavigationFailed\s*?\+=\s*?RootFrame_NavigationFailed;)/gm,
+ "$1$2\n\n$1// Assign the URI-mapper class to the application frame\n$1RootFrame.UriMapper = new CompositeUriMapper();");
+
+ fs.writeFile(appXaml, result, 'utf8', function (err) {
+ if (err){
+ deferred.reject(err);
+ } else{
+ deferred.resolve();
+ }
+ });
+ });
+
+ fs.readFile(mainPageXaml, 'utf8', function (err,data) {
+ if (err) {
+ console.error("Error while configuring the Custom URL Scheme: " + err);
+ deferred.reject(err);
+ return;
+ }
+
+ // first add a line to refer to a new method
+ var result = data.replace(/^(\s*?)(this.CordovaView.Loaded\s*?\+=\s*?CordovaView_Loaded;)/gm,
+ "$1$2\n\n$1// Wire a handler so we can check for our custom scheme\n$1this.CordovaView.Browser.LoadCompleted += CordovaBrowser_LoadCompleted;");
+
+ // now add that new method
+ result = result.replace(/^(\s*?)(\/\/ Constructor)/gm,
+ "$1void CordovaBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) {\n"+
+ "$1\tif (CompositeUriMapper.launchUrl != null) {\n" +
+ "$1\t\tstring handleOpenURL = string.Format(\"(function() {{ document.addEventListener('deviceready', function() {{ if (typeof handleOpenURL === 'function') {{ handleOpenURL(\\\"{0}\\\"); }} }}); }})()\", CompositeUriMapper.launchUrl);\n" +
+ "$1\t\ttry {\n" +
+ "$1\t\t\tthis.CordovaView.CordovaBrowser.InvokeScript(\"eval\", new string[] { handleOpenURL });\n" +
+ "$1\t\t} catch (Exception) {}\n" +
+ "$1\t\tCompositeUriMapper.launchUrl = null;\n" +
+ "$1\t}\n" +
+ "$1\tthis.CordovaView.Browser.LoadCompleted -= CordovaBrowser_LoadCompleted;\n" +
+ "$1}\n\n" +
+ "$1$2");
+
+ fs.writeFile(mainPageXaml, result, 'utf8', function (err) {
+ if (err){
+ deferred.reject(err);
+ } else{
+ deferred.resolve();
+ }
+ });
+ });
+
+ return deferred.promise;
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js b/StoneIsland/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
index 19dbdc0b..18fe0112 100644
--- a/StoneIsland/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js
@@ -4,10 +4,18 @@
var remainingAttempts = 10;
function waitForAndCallHandlerFunction(url) {
- if (typeof window.handleOpenURL == "function") {
+ if (typeof window.handleOpenURL === "function") {
+ // Clear the intent when we have a handler (note that this is only done when the preference 'CustomURLSchemePluginClearsAndroidIntent' is 'true' in config.xml
+ cordova.exec(
+ null,
+ null,
+ "LaunchMyApp",
+ "clearIntent",
+ []);
+
window.handleOpenURL(url);
} else if (remainingAttempts-- > 0) {
- setTimeout(function(){waitForAndCallHandlerFunction(url)}, 500);
+ setTimeout(function(){waitForAndCallHandlerFunction(url);}, 500);
}
}
@@ -21,4 +29,18 @@
}
document.addEventListener("deviceready", triggerOpenURL, false);
+
+ var launchmyapp = {
+ getLastIntent: function(success, failure) {
+ cordova.exec(
+ success,
+ failure,
+ "LaunchMyApp",
+ "getLastIntent",
+ []);
+ }
+ }
+
+ module.exports = launchmyapp;
+
}());
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/www/wp8/LaunchMyApp.js b/StoneIsland/plugins/cordova-plugin-customurlscheme/www/wp8/LaunchMyApp.js
new file mode 100644
index 00000000..a8172f0f
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/www/wp8/LaunchMyApp.js
@@ -0,0 +1,12 @@
+(function () {
+ function activatedHandlerWinUI(e) {
+ if (typeof handleOpenURL == 'function' && e.uri) {
+ handleOpenURL(e.uri.rawUri);
+ }
+ };
+
+ if (typeof Windows != 'undefined') {
+ var wui = Windows.UI.WebUI.WebUIApplication;
+ wui.addEventListener("activated", activatedHandlerWinUI, false);
+ }
+}()); \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-device/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-device/CONTRIBUTING.md
index f7dbcaba..4c8e6a5e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/CONTRIBUTING.md
+++ b/StoneIsland/plugins/cordova-plugin-device/CONTRIBUTING.md
@@ -27,7 +27,7 @@ There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
For instructions on this, start with the
-[contribution overview](http://cordova.apache.org/#contribute).
+[contribution overview](http://cordova.apache.org/contribute/).
The details are explained there, but the important items are:
- Sign and submit an Apache ICLA (Contributor License Agreement).
diff --git a/StoneIsland/plugins/cordova-plugin-device/LICENSE b/StoneIsland/plugins/cordova-plugin-device/LICENSE
index 7a4a3ea2..7a4a3ea2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/LICENSE
+++ b/StoneIsland/plugins/cordova-plugin-device/LICENSE
diff --git a/StoneIsland/plugins/cordova-plugin-device/NOTICE b/StoneIsland/plugins/cordova-plugin-device/NOTICE
index 8ec56a52..8ec56a52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/NOTICE
+++ b/StoneIsland/plugins/cordova-plugin-device/NOTICE
diff --git a/StoneIsland/plugins/cordova-plugin-device/README.md b/StoneIsland/plugins/cordova-plugin-device/README.md
index d3d7673d..10b80160 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/README.md
@@ -1,3 +1,7 @@
+---
+title: Device
+description: Get device information.
+---
<!--
# license: Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,17 +21,24 @@
# under the License.
-->
-# cordova-plugin-device
+|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI |
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-device)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-device/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-device)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-device/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-device)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-device/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-device)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-device/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-device)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-device/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-device.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-device)|
-[![Build Status](https://travis-ci.org/apache/cordova-plugin-device.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-device)
+# cordova-plugin-device
This plugin defines a global `device` object, which describes the device's hardware and software.
Although the object is in the global scope, it is not available until after the `deviceready` event.
- document.addEventListener("deviceready", onDeviceReady, false);
- function onDeviceReady() {
- console.log(device.cordova);
- }
+```js
+document.addEventListener("deviceready", onDeviceReady, false);
+function onDeviceReady() {
+ console.log(device.cordova);
+}
+```
+
+Report issues with this plugin on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Device%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
+
## Installation
@@ -40,6 +51,9 @@ Although the object is in the global scope, it is not available until after the
- device.platform
- device.uuid
- device.version
+- device.manufacturer
+- device.isVirtual
+- device.serial
## device.cordova
@@ -55,7 +69,8 @@ Get the version of Cordova running on the device.
- iOS
- Tizen
- Windows Phone 7 and 8
-- Windows 8
+- Windows
+- OSX
## device.model
@@ -71,18 +86,22 @@ different across versions of the same product.
- iOS
- Tizen
- Windows Phone 7 and 8
-- Windows 8
+- Windows
+- OSX
### Quick Example
- // Android: Nexus One returns "Passion" (Nexus One code name)
- // Motorola Droid returns "voles"
- // BlackBerry: Torch 9800 returns "9800"
- // Browser: Google Chrome returns "Chrome"
- // Safari returns "Safari"
- // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models
- //
- var model = device.model;
+```js
+// Android: Nexus One returns "Passion" (Nexus One code name)
+// Motorola Droid returns "voles"
+// BlackBerry: Torch 9800 returns "9800"
+// Browser: Google Chrome returns "Chrome"
+// Safari returns "Safari"
+// iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models
+// OSX: returns "x86_64"
+//
+var model = device.model;
+```
### Android Quirks
@@ -100,30 +119,34 @@ different across versions of the same product.
Get the device's operating system name.
- var string = device.platform;
-
+```js
+var string = device.platform;
+```
### Supported Platforms
- Android
- BlackBerry 10
-- Browser4
+- Browser
- Firefox OS
- iOS
- Tizen
- Windows Phone 7 and 8
-- Windows 8
+- Windows
+- OSX
### Quick Example
- // Depending on the device, a few examples are:
- // - "Android"
- // - "BlackBerry 10"
- // - Browser: returns "MacIntel" on Mac
- // returns "Win32" on Windows
- // - "iOS"
- // - "WinCE"
- // - "Tizen"
- var devicePlatform = device.platform;
+```js
+// Depending on the device, a few examples are:
+// - "Android"
+// - "BlackBerry 10"
+// - "browser"
+// - "iOS"
+// - "WinCE"
+// - "Tizen"
+// - "Mac OS X"
+var devicePlatform = device.platform;
+```
### Windows Phone 7 Quirks
@@ -137,7 +160,9 @@ Windows Phone 8 devices report the platform as `Win32NT`.
Get the device's Universally Unique Identifier ([UUID](http://en.wikipedia.org/wiki/Universally_Unique_Identifier)).
- var string = device.uuid;
+```js
+var string = device.uuid;
+```
### Description
@@ -150,33 +175,36 @@ The details of how a UUID is generated are determined by the device manufacturer
- iOS
- Tizen
- Windows Phone 7 and 8
-- Windows 8
+- Windows
+- OSX
### Quick Example
- // Android: Returns a random 64-bit integer (as a string, again!)
- // The integer is generated on the device's first boot
- //
- // BlackBerry: Returns the PIN number of the device
- // This is a nine-digit unique integer (as a string, though!)
- //
- // iPhone: (Paraphrased from the UIDevice Class documentation)
- // Returns a string of hash values created from multiple hardware identifies.
- // It is guaranteed to be unique for every device and can't be tied
- // to the user account.
- // Windows Phone 7 : Returns a hash of device+current user,
- // if the user is not defined, a guid is generated and will persist until the app is uninstalled
- // Tizen: returns the device IMEI (International Mobile Equipment Identity or IMEI is a number
- // unique to every GSM and UMTS mobile phone.
- var deviceID = device.uuid;
+```js
+// Android: Returns a random 64-bit integer (as a string, again!)
+// The integer is generated on the device's first boot
+//
+// BlackBerry: Returns the PIN number of the device
+// This is a nine-digit unique integer (as a string, though!)
+//
+// iPhone: (Paraphrased from the UIDevice Class documentation)
+// Returns the [UIDevice identifierForVendor] UUID which is unique and the same for all apps installed by the same vendor. However the UUID can be different if the user deletes all apps from the vendor and then reinstalls it.
+// Windows Phone 7 : Returns a hash of device+current user,
+// if the user is not defined, a guid is generated and will persist until the app is uninstalled
+// Tizen: returns the device IMEI (International Mobile Equipment Identity or IMEI is a number
+// unique to every GSM and UMTS mobile phone.
+var deviceID = device.uuid;
+```
### iOS Quirk
-The `uuid` on iOS is not unique to a device, but varies for each
-application, for each installation. It changes if you delete and
-re-install the app, and possibly also when you upgrade iOS, or even
-upgrade the app per version (apparent in iOS 5.1). The `uuid` is not
-a reliable value.
+The `uuid` on iOS uses the identifierForVendor property. It is unique to the device across the same vendor, but will be different for different vendors and will change if all apps from the vendor are deleted and then reinstalled.
+Refer [here](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDevice_Class/#//apple_ref/occ/instp/UIDevice/identifierForVendor) for details.
+The UUID will be the same if app is restored from a backup or iCloud as it is saved in preferences. Users using older versions of this plugin will still receive the same previous UUID generated by another means as it will be retrieved from preferences.
+
+### OSX Quirk
+
+The `uuid` on OSX is generated automatically if it does not exist yet and is stored in the `standardUserDefaults` in the `CDVUUID` property.
### Windows Phone 7 and 8 Quirks
@@ -200,21 +228,84 @@ Get the operating system version.
- iOS
- Tizen
- Windows Phone 7 and 8
-- Windows 8
+- Windows
+- OSX
+
+### Quick Example
+
+```js
+// Android: Froyo OS would return "2.2"
+// Eclair OS would return "2.1", "2.0.1", or "2.0"
+// Version can also return update level "2.1-update1"
+//
+// BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
+//
+// Browser: Returns version number for the browser
+//
+// iPhone: iOS 3.2 returns "3.2"
+//
+// Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
+// Windows 8: return the current OS version, ex on Windows 8.1 returns 6.3.9600.16384
+// Tizen: returns "TIZEN_20120425_2"
+// OSX: El Capitan would return "10.11.2"
+//
+var deviceVersion = device.version;
+```
+
+## device.manufacturer
+
+Get the device's manufacturer.
+
+ var string = device.manufacturer;
+
+### Supported Platforms
+
+- Android
+- BlackBerry 10
+- iOS
+- Windows Phone 7 and 8
+- Windows
### Quick Example
- // Android: Froyo OS would return "2.2"
- // Eclair OS would return "2.1", "2.0.1", or "2.0"
- // Version can also return update level "2.1-update1"
- //
- // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600"
- //
- // Browser: Returns version number for the browser
- //
- // iPhone: iOS 3.2 returns "3.2"
- //
- // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720
- // Tizen: returns "TIZEN_20120425_2"
- var deviceVersion = device.version;
+```js
+// Android: Motorola XT1032 would return "motorola"
+// BlackBerry: returns "BlackBerry"
+// iPhone: returns "Apple"
+//
+var deviceManufacturer = device.manufacturer;
+```
+
+## device.isVirtual
+
+whether the device is running on a simulator.
+
+```js
+var isSim = device.isVirtual;
+```
+
+### Supported Platforms
+
+- Android 2.1+
+- iOS
+- Windows Phone 8
+- Windows
+- OSX
+
+### OSX Quirk
+
+The `isVirtual` property on OS X always returns false.
+
+## device.serial
+
+Get the device hardware serial number ([SERIAL](http://developer.android.com/reference/android/os/Build.html#SERIAL)).
+
+```js
+var string = device.serial;
+```
+
+### Supported Platforms
+
+- Android
+- OSX
diff --git a/StoneIsland/plugins/cordova-plugin-device/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-device/RELEASENOTES.md
index f06fc6b5..4167735b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-device/RELEASENOTES.md
@@ -20,95 +20,129 @@
-->
# Release Notes
-### 0.2.1 (Sept 5, 2013)
-* removed extraneous print statement
-* [CB-4432] copyright notice change
-
-### 0.2.3 (Sept 25, 2013)
-* CB-4889 bumping&resetting version
-* [windows8] commandProxy has moved
-* [BlackBerry10] removed uneeded permission tags in plugin.xml
-* CB-4889 renaming org.apache.cordova.core.device to org.apache.cordova.device
-* Rename CHANGELOG.md -> RELEASENOTES.md
-* updated to use commandProxy for ffos
-* add firefoxos support
-* [CB-4752] Incremented plugin version on dev branch.
-
-### 0.2.4 (Oct 28, 2013)
-* CB-5128: added repo + issue tag in plugin.xml for device plugin
-* CB-5085 device.cordova returning wrong value
-* [CB-4915] Incremented plugin version on dev branch.
+### 1.1.3 (Sep 08, 2016)
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies
+* Add badges for paramedic builds on Jenkins
+* Add pull request template.
+* Readme: Add fenced code blocks with langauage hints
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to `README.md`
-### 0.2.5 (Dec 4, 2013)
-* CB-5316 Spell Cordova as a brand unless it's a command or script
-* [ubuntu] use cordova/exec/proxy
-* add ubuntu platform
-* Modify Device.platform logic to use amazon-fireos as the platform for Amazon Devices
-* 1. Added amazon-fireos platform. 2. Change to use cordova-amazon-fireos as the platform if user agent contains 'cordova-amazon-fireos'
+### 1.1.2 (Apr 15, 2016)
+* Use passed device, follow create policy forf `CFUUIDCreate`
+* [CB-10631](https://issues.apache.org/jira/browse/CB-10631) Fix for `device.uuid` in **iOS 5.1.1**
+* Updating the comment to exclude URL
+* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins
+* Refactored `deviceInfo` on **iOS** for better readability.
-### 0.2.6 (Jan 02, 2014)
-* CB-5658 Add doc/index.md for Device plugin
-* CB-5504 Moving Telephony Logic out of Device
+### 1.1.1 (Jan 15, 2016)
+* [CB-10238](https://issues.apache.org/jira/browse/CB-10238) **OSX** Move `device-plugin` out from `cordovalib` to the plugin repository
+* [CB-9923](https://issues.apache.org/jira/browse/CB-9923) Update `device.platform` documentation for **Browser** platform
-### 0.2.7 (Jan 07, 2014)
-* CB-5737 Fix exception on close caused by left over telephony code from CB-5504
+### 1.1.0 (Nov 18, 2015)
+* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
+* Add `isVirtual` for **Windows Phone 8.x**
+* Added basic **Android** support for hardware serial number
+* [CB-9865](https://issues.apache.org/jira/browse/CB-9865) Better simulator detection for **iOS**
+* Fixing contribute link.
+* Added **WP8** implementation
+* update to use `TARGET_OS_SIMULATOR` as `TARGET_IPHONE_SIMULATOR` is deprecated.
+* update code to use 'isVirtual'
+* create test to verify existence and type of new property 'isVirtual'
+* add `isSimulator` for **iOS** & **Android** device
+* Updated documentation to mention backwards compatibility
+* Updated **README** to reflect new behaviour and quirks on **iOS**
+* Check user defaults first to maintain backwards compatibility
+* Changed `UUID` to use `[UIDevice identifierForVendor]`
-### 0.2.8 (Feb 05, 2014)
-* Tizen support added
+### 1.0.1 (Jun 17, 2015)
+* [CB-9128](https://issues.apache.org/jira/browse/CB-9128) cordova-plugin-device documentation translation: cordova-plugin-device
+* Attempts to corrent npm markdown issue
-### 0.2.9 (Apr 17, 2014)
-* CB-5105: [Android, windows8, WP, BlackBerry10] Removed dead code for device.version
-* CB-6422: [windows8] use cordova/exec/proxy
-* CB-6460: Update license headers
-* Add NOTICE file
+### 1.0.0 (Apr 15, 2015)
+* [CB-8746](https://issues.apache.org/jira/browse/CB-8746) gave plugin major version bump
+* [CB-8683](https://issues.apache.org/jira/browse/CB-8683) changed plugin-id to pacakge-name
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) properly updated translated docs to use new id
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) updated translated docs to use new id
+* Use TRAVIS_BUILD_DIR, install paramedic by npm
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) Updated Readme
+* remove defunct windows8 version
+* add travis badge
+* Add cross-plugin ios paramedic test running for TravisCI
+* [CB-8538](https://issues.apache.org/jira/browse/CB-8538) Added package.json file
-### 0.2.10 (Jun 05, 2014)
-* CB-6127 Spanish and French Translations added. Github close #12
-* Changing 1.5 to 2.0
-* added firefoxos version - conversion
-* added firefoxos version
-* CB-6800 Add license
-* CB-6491 add CONTRIBUTING.md
+### 0.3.0 (Feb 04, 2015)
+* Added device.manufacturer property for Android, iOS, Blackberry, WP8
+* Support for Windows Phone 8 ANID2 ANID is only supported up to Windows Phone 7.5
+* [CB-8351](https://issues.apache.org/jira/browse/CB-8351) Use a local copy of uniqueAppInstanceIdentifier rather than CordovaLib's version
+* browser: Fixed a bug that caused an "cannot call method of undefined" error if the browser's user agent wasn't recognized
-### 0.2.11 (Aug 06, 2014)
-* [FFOS] update DeviceProxy.js
-* CB-6127 Updated translations for docs
-* Use Windows system calls to get better info
+### 0.2.13 (Dec 02, 2014)
+* Changing `device.platform` to always report the platform as "browser".
+* [CB-5892](https://issues.apache.org/jira/browse/CB-5892) - Remove deprecated `window.Settings`
+* [CB-7700](https://issues.apache.org/jira/browse/CB-7700) cordova-plugin-device documentation translation: cordova-plugin-device
+* [CB-7571](https://issues.apache.org/jira/browse/CB-7571) Bump version of nested plugin to match parent plugin
### 0.2.12 (Sep 17, 2014)
-* CB-7471 cordova-plugin-device documentation translation
-* CB-7552 device.name docs have not been removed
+* [CB-7471](https://issues.apache.org/jira/browse/CB-7471) cordova-plugin-device documentation translation
+* [CB-7552](https://issues.apache.org/jira/browse/CB-7552) device.name docs have not been removed
* [fxos] Fix cordova version
* added status box and documentation to manual tests
* [fxos] Fix cordova version
* added status box and documentation to manual tests
* Added plugin support for the browser
-* CB-7262 Adds support for universal windows apps.
+* [CB-7262](https://issues.apache.org/jira/browse/CB-7262) Adds support for universal windows apps.
-### 0.2.13 (Dec 02, 2014)
-* Changing `device.platform` to always report the platform as "browser".
-* CB-5892 - Remove deprecated `window.Settings`
-* CB-7700 cordova-plugin-device documentation translation: cordova-plugin-device
-* CB-7571 Bump version of nested plugin to match parent plugin
+### 0.2.11 (Aug 06, 2014)
+* [FFOS] update DeviceProxy.js
+* [CB-6127](https://issues.apache.org/jira/browse/CB-6127) Updated translations for docs
+* Use Windows system calls to get better info
-### 0.3.0 (Feb 04, 2015)
-* Added device.manufacturer property for Android, iOS, Blackberry, WP8
-* Support for Windows Phone 8 ANID2 ANID is only supported up to Windows Phone 7.5
-* CB-8351 Use a local copy of uniqueAppInstanceIdentifier rather than CordovaLib's version
-* browser: Fixed a bug that caused an "cannot call method of undefined" error if the browser's user agent wasn't recognized
+### 0.2.10 (Jun 05, 2014)
+* [CB-6127](https://issues.apache.org/jira/browse/CB-6127) Spanish and French Translations added. Github close #12
+* Changing 1.5 to 2.0
+* added firefoxos version - conversion
+* added firefoxos version
+* [CB-6800](https://issues.apache.org/jira/browse/CB-6800) Add license
+* [CB-6491](https://issues.apache.org/jira/browse/CB-6491) add CONTRIBUTING.md
-### 1.0.0 (Apr 15, 2015)
-* CB-8746 gave plugin major version bump
-* CB-8683 changed plugin-id to pacakge-name
-* CB-8653 properly updated translated docs to use new id
-* CB-8653 updated translated docs to use new id
-* Use TRAVIS_BUILD_DIR, install paramedic by npm
-* CB-8653 Updated Readme
-* remove defunct windows8 version
-* add travis badge
-* Add cross-plugin ios paramedic test running for TravisCI
-* CB-8538 Added package.json file
+### 0.2.9 (Apr 17, 2014)
+* [CB-5105](https://issues.apache.org/jira/browse/CB-5105): [Android, windows8, WP, BlackBerry10] Removed dead code for device.version
+* [CB-6422](https://issues.apache.org/jira/browse/CB-6422): [windows8] use cordova/exec/proxy
+* [CB-6460](https://issues.apache.org/jira/browse/CB-6460): Update license headers
+* Add NOTICE file
-### 1.0.1 (Jun 17, 2015)
-* CB-9128 cordova-plugin-device documentation translation: cordova-plugin-device
-* Attempts to corrent npm markdown issue
+### 0.2.8 (Feb 05, 2014)
+* Tizen support added
+
+### 0.2.7 (Jan 07, 2014)
+* [CB-5737](https://issues.apache.org/jira/browse/CB-5737) Fix exception on close caused by left over telephony code from [CB-5504](https://issues.apache.org/jira/browse/CB-5504)
+
+### 0.2.6 (Jan 02, 2014)
+* [CB-5658](https://issues.apache.org/jira/browse/CB-5658) Add doc/index.md for Device plugin
+* [CB-5504](https://issues.apache.org/jira/browse/CB-5504) Moving Telephony Logic out of Device
+
+### 0.2.5 (Dec 4, 2013)
+* [CB-5316](https://issues.apache.org/jira/browse/CB-5316) Spell Cordova as a brand unless it's a command or script
+* [ubuntu] use cordova/exec/proxy
+* add ubuntu platform
+* Modify Device.platform logic to use amazon-fireos as the platform for Amazon Devices
+* 1. Added amazon-fireos platform. 2. Change to use cordova-amazon-fireos as the platform if user agent contains 'cordova-amazon-fireos'
+
+### 0.2.4 (Oct 28, 2013)
+* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): added repo + issue tag in plugin.xml for device plugin
+* [CB-5085](https://issues.apache.org/jira/browse/CB-5085) device.cordova returning wrong value
+* [CB-4915](https://issues.apache.org/jira/browse/CB-4915) Incremented plugin version on dev branch.
+
+### 0.2.3 (Sept 25, 2013)
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) bumping&resetting version
+* [windows8] commandProxy has moved
+* [BlackBerry10] removed uneeded permission tags in plugin.xml
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) renaming org.apache.cordova.core.device to org.apache.cordova.device
+* Rename CHANGELOG.md -> RELEASENOTES.md
+* updated to use commandProxy for ffos
+* add firefoxos support
+* [CB-4752](https://issues.apache.org/jira/browse/CB-4752) Incremented plugin version on dev branch.
+
+### 0.2.1 (Sept 5, 2013)
+* removed extraneous print statement
+* [CB-4432](https://issues.apache.org/jira/browse/CB-4432) copyright notice change
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/de/README.md
index 81f89e99..81f89e99 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/de/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/de/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/de/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/de/index.md
index e3a537ed..e3a537ed 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/de/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/de/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/es/README.md
index a27abfb8..a27abfb8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/es/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/es/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/es/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/es/index.md
index f4a58977..f4a58977 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/es/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/es/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/fr/README.md
index 4101fd94..4101fd94 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/fr/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/fr/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/fr/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/fr/index.md
index 163e498c..163e498c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/fr/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/fr/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/it/README.md
index 79749626..79749626 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/it/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/it/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/it/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/it/index.md
index 98c6200a..98c6200a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/it/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/it/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/ja/README.md
index 5a345f87..5a345f87 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/ja/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/ja/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/ja/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/ja/index.md
index b4030fd0..b4030fd0 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/ja/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/ja/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/ko/README.md
index a818aacb..a818aacb 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/ko/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/ko/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/ko/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/ko/index.md
index 0fe38a7a..0fe38a7a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/ko/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/ko/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/pl/README.md
index c38832df..c38832df 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/pl/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/pl/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/pl/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/pl/index.md
index acc8f9c8..acc8f9c8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/pl/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/pl/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/ru/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/ru/index.md
index 263b1cd9..263b1cd9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/ru/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/ru/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-device/doc/zh/README.md
index 9a18a55e..9a18a55e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/zh/README.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/zh/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/doc/zh/index.md b/StoneIsland/plugins/cordova-plugin-device/doc/zh/index.md
index 5626d696..5626d696 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/doc/zh/index.md
+++ b/StoneIsland/plugins/cordova-plugin-device/doc/zh/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-device/package.json b/StoneIsland/plugins/cordova-plugin-device/package.json
index 388b81d5..1357f229 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/package.json
+++ b/StoneIsland/plugins/cordova-plugin-device/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-device",
- "version": "1.0.1",
+ "version": "1.1.3",
"description": "Cordova Device Plugin",
"cordova": {
"id": "cordova-plugin-device",
@@ -16,7 +16,8 @@
"wp8",
"windows8",
"windows",
- "browser"
+ "browser",
+ "osx"
]
},
"repository": {
@@ -38,8 +39,23 @@
"cordova-wp8",
"cordova-windows8",
"cordova-windows",
- "cordova-browser"
+ "cordova-browser",
+ "cordova-osx"
],
+ "scripts": {
+ "test": "npm run jshint",
+ "jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
+ },
"author": "Apache Software Foundation",
- "license": "Apache 2.0"
+ "license": "Apache-2.0",
+ "engines": {
+ "cordovaDependencies": {
+ "2.0.0": {
+ "cordova": ">100"
+ }
+ }
+ },
+ "devDependencies": {
+ "jshint": "^2.6.0"
+ }
}
diff --git a/StoneIsland/plugins/cordova-plugin-device/plugin.xml b/StoneIsland/plugins/cordova-plugin-device/plugin.xml
index 172cff23..7d041252 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-device/plugin.xml
@@ -22,7 +22,7 @@
xmlns:rim="http://www.blackberry.com/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-device"
- version="1.0.1">
+ version="1.1.3">
<name>Device</name>
<description>Cordova Device Plugin</description>
<license>Apache 2.0</license>
@@ -158,4 +158,17 @@
</js-module>
</platform>
+ <!-- osx -->
+ <platform name="osx">
+ <config-file target="config.xml" parent="/*">
+ <feature name="Device">
+ <param name="ios-package" value="CDVDevice"/>
+ </feature>
+ </config-file>
+
+ <header-file src="src/osx/CDVDevice.h" />
+ <source-file src="src/osx/CDVDevice.m" />
+ </platform>
+
+
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/android/Device.java b/StoneIsland/plugins/cordova-plugin-device/src/android/Device.java
index 5eded907..e9efcb49 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/android/Device.java
+++ b/StoneIsland/plugins/cordova-plugin-device/src/android/Device.java
@@ -67,13 +67,15 @@ public class Device extends CordovaPlugin {
* @return True if the action was valid, false if not.
*/
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (action.equals("getDeviceInfo")) {
+ if ("getDeviceInfo".equals(action)) {
JSONObject r = new JSONObject();
r.put("uuid", Device.uuid);
r.put("version", this.getOSVersion());
r.put("platform", this.getPlatform());
r.put("model", this.getModel());
r.put("manufacturer", this.getManufacturer());
+ r.put("isVirtual", this.isVirtual());
+ r.put("serial", this.getSerialNumber());
callbackContext.success(r);
}
else {
@@ -88,7 +90,7 @@ public class Device extends CordovaPlugin {
/**
* Get the OS name.
- *
+ *
* @return
*/
public String getPlatform() {
@@ -125,6 +127,12 @@ public class Device extends CordovaPlugin {
String manufacturer = android.os.Build.MANUFACTURER;
return manufacturer;
}
+
+ public String getSerialNumber() {
+ String serial = android.os.Build.SERIAL;
+ return serial;
+ }
+
/**
* Get the OS version.
*
@@ -148,7 +156,7 @@ public class Device extends CordovaPlugin {
/**
* Function to check if the device is manufactured by Amazon
- *
+ *
* @return
*/
public boolean isAmazonDevice() {
@@ -158,4 +166,9 @@ public class Device extends CordovaPlugin {
return false;
}
+ public boolean isVirtual() {
+ return android.os.Build.FINGERPRINT.contains("generic") ||
+ android.os.Build.PRODUCT.contains("sdk");
+ }
+
}
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/blackberry10/index.js b/StoneIsland/plugins/cordova-plugin-device/src/blackberry10/index.js
index 77f25a9e..ef0543bc 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/blackberry10/index.js
+++ b/StoneIsland/plugins/cordova-plugin-device/src/blackberry10/index.js
@@ -19,6 +19,8 @@
*
*/
+/* global PluginResult */
+
function getModelName () {
var modelName = window.qnx.webplatform.device.modelName;
//Pre 10.2 (meaning Z10 or Q10)
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/browser/DeviceProxy.js b/StoneIsland/plugins/cordova-plugin-device/src/browser/DeviceProxy.js
index fcaed20c..a8632016 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/browser/DeviceProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-device/src/browser/DeviceProxy.js
@@ -19,7 +19,6 @@
*
*/
var browser = require('cordova/platform');
-var cordova = require('cordova');
function getPlatform() {
return "browser";
@@ -36,6 +35,7 @@ function getVersion() {
function getBrowserInfo(getModel) {
var userAgent = navigator.userAgent;
var returnVal = '';
+ var offset;
if ((offset = userAgent.indexOf('Chrome')) !== -1) {
returnVal = (getModel) ? 'Chrome' : userAgent.substring(offset + 7);
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/firefoxos/DeviceProxy.js b/StoneIsland/plugins/cordova-plugin-device/src/firefoxos/DeviceProxy.js
index 79f3a2b0..a05d7ca0 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/firefoxos/DeviceProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-device/src/firefoxos/DeviceProxy.js
@@ -20,8 +20,6 @@
*/
//example UA String for Firefox OS
//Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0
-var firefoxos = require('cordova/platform');
-var cordova = require('cordova');
//UA parsing not recommended but currently this is the only way to get the Firefox OS version
//https://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.h b/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.h
index a146d882..a146d882 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.h
+++ b/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.h
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.m b/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.m
index 5a3f4708..4d75a574 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.m
+++ b/StoneIsland/plugins/cordova-plugin-device/src/ios/CDVDevice.m
@@ -19,6 +19,7 @@
#include <sys/types.h>
#include <sys/sysctl.h>
+#include "TargetConditionals.h"
#import <Cordova/CDV.h>
#import "CDVDevice.h"
@@ -49,21 +50,23 @@
{
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
static NSString* UUID_KEY = @"CDVUUID";
-
+
+ // Check user defaults first to maintain backwards compaitibility with previous versions
+ // which didn't user identifierForVendor
NSString* app_uuid = [userDefaults stringForKey:UUID_KEY];
-
if (app_uuid == nil) {
- CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
- CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
+ if ([device respondsToSelector:@selector(identifierForVendor)]) {
+ app_uuid = [[device identifierForVendor] UUIDString];
+ } else {
+ CFUUIDRef uuid = CFUUIDCreate(NULL);
+ app_uuid = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
+ CFRelease(uuid);
+ }
- app_uuid = [NSString stringWithString:(__bridge NSString*)uuidString];
[userDefaults setObject:app_uuid forKey:UUID_KEY];
[userDefaults synchronize];
-
- CFRelease(uuidString);
- CFRelease(uuidRef);
}
-
+
return app_uuid;
}
@@ -78,17 +81,16 @@
- (NSDictionary*)deviceProperties
{
UIDevice* device = [UIDevice currentDevice];
- NSMutableDictionary* devProps = [NSMutableDictionary dictionaryWithCapacity:4];
- [devProps setObject:@"Apple" forKey:@"manufacturer"];
- [devProps setObject:[device modelVersion] forKey:@"model"];
- [devProps setObject:@"iOS" forKey:@"platform"];
- [devProps setObject:[device systemVersion] forKey:@"version"];
- [devProps setObject:[self uniqueAppInstanceIdentifier:device] forKey:@"uuid"];
- [devProps setObject:[[self class] cordovaVersion] forKey:@"cordova"];
-
- NSDictionary* devReturn = [NSDictionary dictionaryWithDictionary:devProps];
- return devReturn;
+ return @{
+ @"manufacturer": @"Apple",
+ @"model": [device modelVersion],
+ @"platform": @"iOS",
+ @"version": [device systemVersion],
+ @"uuid": [self uniqueAppInstanceIdentifier:device],
+ @"cordova": [[self class] cordovaVersion],
+ @"isVirtual": @([self isVirtual])
+ };
}
+ (NSString*)cordovaVersion
@@ -96,4 +98,15 @@
return CDV_VERSION;
}
+- (BOOL)isVirtual
+{
+ #if TARGET_OS_SIMULATOR
+ return true;
+ #elif TARGET_IPHONE_SIMULATOR
+ return true;
+ #else
+ return false;
+ #endif
+}
+
@end
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/src/ios/CDVNavigationWhitelistPlugin.h b/StoneIsland/plugins/cordova-plugin-device/src/osx/CDVDevice.h
index d0b93654..9def2548 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/src/ios/CDVNavigationWhitelistPlugin.h
+++ b/StoneIsland/plugins/cordova-plugin-device/src/osx/CDVDevice.h
@@ -17,15 +17,12 @@
under the License.
*/
-#import <UIKit/UIKit.h>
#import <Cordova/CDVPlugin.h>
-#import <Cordova/CDVWhitelist.h>
-@interface CDVNavigationWhitelistPlugin : CDVPlugin {}
+@interface CDVDevice : CDVPlugin
-@property (nonatomic, readonly, strong) CDVWhitelist* whitelist; // readonly for public
++ (NSString*) cordovaVersion;
-- (BOOL)shouldAllowNavigationToURL:(NSURL *)url;
-- (BOOL)shouldAllowRequestForURL:(NSURL *)url;
+- (void) getDeviceInfo:(CDVInvokedUrlCommand*)command;
@end
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/osx/CDVDevice.m b/StoneIsland/plugins/cordova-plugin-device/src/osx/CDVDevice.m
new file mode 100644
index 00000000..3a63588f
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-device/src/osx/CDVDevice.m
@@ -0,0 +1,113 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#include <sys/sysctl.h>
+
+#import "CDVDevice.h"
+
+#define SYSTEM_VERSION_PLIST @"/System/Library/CoreServices/SystemVersion.plist"
+
+@implementation CDVDevice
+
+- (NSString*) modelVersion {
+ size_t size;
+
+ sysctlbyname("hw.machine", NULL, &size, NULL, 0);
+ char* machine = malloc(size);
+ sysctlbyname("hw.machine", machine, &size, NULL, 0);
+ NSString* modelVersion = [NSString stringWithUTF8String:machine];
+ free(machine);
+
+ return modelVersion;
+}
+
+
+- (NSString*) getSerialNr {
+ NSString* serialNr;
+ io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"));
+ if (platformExpert) {
+ CFTypeRef serialNumberAsCFString =
+ IORegistryEntryCreateCFProperty(platformExpert,
+ CFSTR(kIOPlatformSerialNumberKey),
+ kCFAllocatorDefault, 0);
+ if (serialNumberAsCFString) {
+ serialNr = (__bridge NSString*) serialNumberAsCFString;
+ }
+ IOObjectRelease(platformExpert);
+ }
+ return serialNr;
+}
+
+- (NSString*) uniqueAppInstanceIdentifier {
+ NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
+ static NSString* UUID_KEY = @"CDVUUID";
+
+ NSString* app_uuid = [userDefaults stringForKey:UUID_KEY];
+
+ if (app_uuid == nil) {
+ CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
+ CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
+
+ app_uuid = [NSString stringWithString:(__bridge NSString*) uuidString];
+ [userDefaults setObject:app_uuid forKey:UUID_KEY];
+ [userDefaults synchronize];
+
+ CFRelease(uuidString);
+ CFRelease(uuidRef);
+ }
+
+ return app_uuid;
+}
+
+- (NSString*) platform {
+ return [NSDictionary dictionaryWithContentsOfFile:SYSTEM_VERSION_PLIST][@"ProductName"];
+}
+
+- (NSString*) systemVersion {
+ return [NSDictionary dictionaryWithContentsOfFile:SYSTEM_VERSION_PLIST][@"ProductVersion"];
+}
+
+- (void) getDeviceInfo:(CDVInvokedUrlCommand*) command {
+ NSDictionary* deviceProperties = [self deviceProperties];
+ CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:deviceProperties];
+
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (NSDictionary*) deviceProperties {
+ NSMutableDictionary* devProps = [NSMutableDictionary dictionaryWithCapacity:4];
+
+ devProps[@"manufacturer"] = @"Apple";
+ devProps[@"model"] = [self modelVersion];
+ devProps[@"platform"] = [self platform];
+ devProps[@"version"] = [self systemVersion];
+ devProps[@"uuid"] = [self uniqueAppInstanceIdentifier];
+ devProps[@"cordova"] = [[self class] cordovaVersion];
+ devProps[@"serial"] = [self getSerialNr];
+ devProps[@"isVirtual"] = @NO;
+
+ NSDictionary* devReturn = [NSDictionary dictionaryWithDictionary:devProps];
+ return devReturn;
+}
+
++ (NSString*) cordovaVersion {
+ return CDV_VERSION;
+}
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/tizen/DeviceProxy.js b/StoneIsland/plugins/cordova-plugin-device/src/tizen/DeviceProxy.js
index 2afc3243..973b7162 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/tizen/DeviceProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-device/src/tizen/DeviceProxy.js
@@ -20,7 +20,6 @@
*/
var tizen = require('cordova/platform');
-var cordova = require('cordova');
module.exports = {
getDeviceInfo: function(success, error) {
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.cpp b/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.cpp
index eb5a012d..eb5a012d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.cpp
+++ b/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.cpp
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.h b/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.h
index 91cb9377..91cb9377 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.h
+++ b/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.h
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.js b/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.js
index 3adb110b..838586c3 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.js
+++ b/StoneIsland/plugins/cordova-plugin-device/src/ubuntu/device.js
@@ -19,8 +19,7 @@
*
*/
-var cordova = require('cordova');
-var exec = require('cordova/exec');
+/* global Cordova */
module.exports = {
getInfo:function(win,fail,args) {
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/windows/DeviceProxy.js b/StoneIsland/plugins/cordova-plugin-device/src/windows/DeviceProxy.js
index 69ed4446..f338ad3a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/windows/DeviceProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-device/src/windows/DeviceProxy.js
@@ -19,13 +19,14 @@
*
*/
+/* global Windows, createUUID */
+
var ROOT_CONTAINER = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}";
var DEVICE_CLASS_KEY = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10";
-var DEVICE_CLASS_KEY_NO_SEMICOLON = '{A45C254E-DF1C-4EFD-8020-67D146A850E0}10';
+var DEVICE_CLASS_KEY_NO_SEMICOLON = "{A45C254E-DF1C-4EFD-8020-67D146A850E0}10";
var ROOT_CONTAINER_QUERY = "System.Devices.ContainerId:=\"" + ROOT_CONTAINER + "\"";
var HAL_DEVICE_CLASS = "4d36e966-e325-11ce-bfc1-08002be10318";
var DEVICE_DRIVER_VERSION_KEY = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3";
-var MANU_KEY = "System.Devices.Manufacturer";
module.exports = {
@@ -33,8 +34,6 @@ module.exports = {
// deviceId aka uuid, stored in Windows.Storage.ApplicationData.current.localSettings.values.deviceId
var deviceId;
- var manufacturer = "unknown";
-
// get deviceId, or create and store one
var localSettings = Windows.Storage.ApplicationData.current.localSettings;
if (localSettings.values.deviceId) {
@@ -55,51 +54,42 @@ module.exports = {
var userAgent = window.clientInformation.userAgent;
- // this will report "windows" in windows8.1 and windows phone 8.1 apps
- // and "windows8" in windows 8.0 apps similar to cordova.js
- // See https://github.com/apache/cordova-js/blob/master/src/windows/platform.js#L25
+ // this will report "windows" in windows8.1 and windows phone 8.1 apps
+ // and "windows8" in windows 8.0 apps similar to cordova.js
+ // See https://github.com/apache/cordova-js/blob/master/src/windows/platform.js#L25
var devicePlatform = userAgent.indexOf("MSAppHost/1.0") == -1 ? "windows" : "windows8";
var versionString = userAgent.match(/Windows (?:Phone |NT )?([0-9.]+)/)[1];
-
+ var deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
+ // Running in the Windows Simulator is a remote session.
+ // Running in the Windows Phone Emulator has the systemProductName set to "Virtual"
+ var isVirtual = Windows.System.RemoteDesktop.InteractiveSession.isRemote || deviceInfo.systemProductName == "Virtual";
+ var manufacturer = deviceInfo.systemManufacturer;
+ var model = deviceInfo.systemProductName;
var Pnp = Windows.Devices.Enumeration.Pnp;
- Pnp.PnpObject.findAllAsync(Pnp.PnpObjectType.deviceContainer,[MANU_KEY])
- .then(function (infoList) {
- var numDevices = infoList.length;
- if (numDevices) {
- for (var i = 0; i < numDevices; i++) {
- var devContainer = infoList[i];
- if (devContainer.id == ROOT_CONTAINER) {
- manufacturer = devContainer.properties[MANU_KEY];
+ Pnp.PnpObject.findAllAsync(Pnp.PnpObjectType.device,
+ [DEVICE_DRIVER_VERSION_KEY, DEVICE_CLASS_KEY],
+ ROOT_CONTAINER_QUERY)
+ .then(function (rootDevices) {
+ for (var i = 0; i < rootDevices.length; i++) {
+ var rootDevice = rootDevices[i];
+ if (!rootDevice.properties) continue;
+ if (rootDevice.properties[DEVICE_CLASS_KEY_NO_SEMICOLON] == HAL_DEVICE_CLASS) {
+ versionString = rootDevice.properties[DEVICE_DRIVER_VERSION_KEY];
break;
}
}
- }
- })
- .then(function () {
- Pnp.PnpObject.findAllAsync(Pnp.PnpObjectType.device,
- [DEVICE_DRIVER_VERSION_KEY, DEVICE_CLASS_KEY],
- ROOT_CONTAINER_QUERY)
- .then(function (rootDevices) {
- for (var i = 0; i < rootDevices.length; i++) {
- var rootDevice = rootDevices[i];
- if (!rootDevice.properties) continue;
- if (rootDevice.properties[DEVICE_CLASS_KEY_NO_SEMICOLON] == HAL_DEVICE_CLASS) {
- versionString = rootDevice.properties[DEVICE_DRIVER_VERSION_KEY];
- break;
- }
- }
- setTimeout(function () {
- win({ platform: devicePlatform,
- version: versionString,
- uuid: deviceId,
- model: window.clientInformation.platform,
- manufacturer:manufacturer});
- }, 0);
- });
+ setTimeout(function () {
+ win({ platform: devicePlatform,
+ version: versionString,
+ uuid: deviceId,
+ isVirtual: isVirtual,
+ model: model,
+ manufacturer:manufacturer});
+ }, 0);
});
}
diff --git a/StoneIsland/plugins/cordova-plugin-device/src/wp/Device.cs b/StoneIsland/plugins/cordova-plugin-device/src/wp/Device.cs
index 897a35af..76fe8cf2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/src/wp/Device.cs
+++ b/StoneIsland/plugins/cordova-plugin-device/src/wp/Device.cs
@@ -1,32 +1,21 @@
/*
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
*/
-using System;
-using System.Net;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Ink;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
using Microsoft.Phone.Info;
-using System.IO.IsolatedStorage;
-using System.Windows.Resources;
+using System;
using System.IO;
-using System.Diagnostics;
+using System.IO.IsolatedStorage;
namespace WPCordovaClassLib.Cordova.Commands
{
@@ -34,55 +23,27 @@ namespace WPCordovaClassLib.Cordova.Commands
{
public void getDeviceInfo(string notused)
{
-
- string res = String.Format("\"name\":\"{0}\",\"platform\":\"{1}\",\"uuid\":\"{2}\",\"version\":\"{3}\",\"model\":\"{4}\",\"manufacturer\":\"{5}\"",
- this.name,
- this.platform,
- this.uuid,
- this.version,
- this.model,
- this.manufacturer);
-
- res = "{" + res + "}";
- //Debug.WriteLine("Result::" + res);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, res));
+ string res = String.Format("\"name\":\"{0}\",\"platform\":\"{1}\",\"uuid\":\"{2}\",\"version\":\"{3}\",\"model\":\"{4}\",\"manufacturer\":\"{5}\",\"isVirtual\":{6}",
+ DeviceStatus.DeviceName,
+ Environment.OSVersion.Platform.ToString(),
+ UUID,
+ Environment.OSVersion.Version.ToString(),
+ DeviceStatus.DeviceName,
+ DeviceStatus.DeviceManufacturer,
+ IsVirtual ? "true" : "false");
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "{" + res + "}"));
}
- public string model
- {
- get
- {
- return DeviceStatus.DeviceName;
- //return String.Format("{0},{1},{2}", DeviceStatus.DeviceManufacturer, DeviceStatus.DeviceHardwareVersion, DeviceStatus.DeviceFirmwareVersion);
- }
- }
- public string manufacturer
+ public bool IsVirtual
{
- get
+ get
{
- return DeviceStatus.DeviceManufacturer;
+ return (Microsoft.Devices.Environment.DeviceType == Microsoft.Devices.DeviceType.Emulator);
}
}
- public string name
- {
- get
- {
- return DeviceStatus.DeviceName;
-
- }
- }
-
- public string platform
- {
- get
- {
- return Environment.OSVersion.Platform.ToString();
- }
- }
-
- public string uuid
+ public string UUID
{
get
{
@@ -122,14 +83,5 @@ namespace WPCordovaClassLib.Cordova.Commands
return returnVal;
}
}
-
- public string version
- {
- get
- {
- return Environment.OSVersion.Version.ToString();
- }
- }
-
}
}
diff --git a/StoneIsland/plugins/cordova-plugin-device/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-device/tests/plugin.xml
index bcca190e..ad4433c9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-device/tests/plugin.xml
@@ -22,7 +22,7 @@
xmlns:rim="http://www.blackberry.com/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-device-tests"
- version="1.0.1">
+ version="1.1.3">
<name>Cordova Device Plugin Tests</name>
<license>Apache 2.0</license>
diff --git a/StoneIsland/plugins/cordova-plugin-device/tests/tests.js b/StoneIsland/plugins/cordova-plugin-device/tests/tests.js
index 1f49d7e1..ac9a2810 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/tests/tests.js
+++ b/StoneIsland/plugins/cordova-plugin-device/tests/tests.js
@@ -19,6 +19,8 @@
*
*/
+/* jshint jasmine: true */
+
exports.defineAutoTests = function() {
describe('Device Information (window.device)', function () {
it("should exist", function() {
@@ -27,18 +29,18 @@ exports.defineAutoTests = function() {
it("should contain a platform specification that is a string", function() {
expect(window.device.platform).toBeDefined();
- expect((new String(window.device.platform)).length > 0).toBe(true);
+ expect((String(window.device.platform)).length > 0).toBe(true);
});
it("should contain a version specification that is a string", function() {
expect(window.device.version).toBeDefined();
- expect((new String(window.device.version)).length > 0).toBe(true);
+ expect((String(window.device.version)).length > 0).toBe(true);
});
it("should contain a UUID specification that is a string or a number", function() {
expect(window.device.uuid).toBeDefined();
if (typeof window.device.uuid == 'string' || typeof window.device.uuid == 'object') {
- expect((new String(window.device.uuid)).length > 0).toBe(true);
+ expect((String(window.device.uuid)).length > 0).toBe(true);
} else {
expect(window.device.uuid > 0).toBe(true);
}
@@ -46,12 +48,12 @@ exports.defineAutoTests = function() {
it("should contain a cordova specification that is a string", function() {
expect(window.device.cordova).toBeDefined();
- expect((new String(window.device.cordova)).length > 0).toBe(true);
+ expect((String(window.device.cordova)).length > 0).toBe(true);
});
it("should depend on the presence of cordova.version string", function() {
expect(window.cordova.version).toBeDefined();
- expect((new String(window.cordova.version)).length > 0).toBe(true);
+ expect((String(window.cordova.version)).length > 0).toBe(true);
});
it("should contain device.cordova equal to cordova.version", function() {
@@ -60,18 +62,30 @@ exports.defineAutoTests = function() {
it("should contain a model specification that is a string", function() {
expect(window.device.model).toBeDefined();
- expect((new String(window.device.model)).length > 0).toBe(true);
+ expect((String(window.device.model)).length > 0).toBe(true);
});
it("should contain a manufacturer property that is a string", function() {
expect(window.device.manufacturer).toBeDefined();
- expect((new String(window.device.manufacturer)).length > 0).toBe(true);
+ expect((String(window.device.manufacturer)).length > 0).toBe(true);
+ });
+
+ it("should contain an isVirtual property that is a boolean", function() {
+ expect(window.device.isVirtual).toBeDefined();
+ expect(typeof window.device.isVirtual).toBe("boolean");
});
+
+ it("should contain a serial number specification that is a string", function() {
+ expect(window.device.serial).toBeDefined();
+ expect((String(window.device.serial)).length > 0).toBe(true);
+
+ });
+
});
};
exports.defineManualTests = function(contentEl, createActionButton) {
- var logMessage = function (message, color) {
+ var logMessage = function (message, color) {
var log = document.getElementById('info');
var logLine = document.createElement('div');
if (color) {
@@ -79,12 +93,12 @@ exports.defineManualTests = function(contentEl, createActionButton) {
}
logLine.innerHTML = message;
log.appendChild(logLine);
- }
+ };
var clearLog = function () {
var log = document.getElementById('info');
log.innerHTML = '';
- }
+ };
var device_tests = '<h3>Press Dump Device button to get device information</h3>' +
'<div id="dump_device"></div>' +
diff --git a/StoneIsland/plugins/cordova-plugin-device/www/device.js b/StoneIsland/plugins/cordova-plugin-device/www/device.js
index b1d0d25d..f7ed19f9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-device/www/device.js
+++ b/StoneIsland/plugins/cordova-plugin-device/www/device.js
@@ -42,6 +42,8 @@ function Device() {
this.cordova = null;
this.model = null;
this.manufacturer = null;
+ this.isVirtual = null;
+ this.serial = null;
var me = this;
@@ -56,7 +58,9 @@ function Device() {
me.uuid = info.uuid;
me.cordova = buildLabel;
me.model = info.model;
+ me.isVirtual = info.isVirtual;
me.manufacturer = info.manufacturer || 'unknown';
+ me.serial = info.serial || 'unknown';
channel.onCordovaInfoReady.fire();
},function(e) {
me.available = false;
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-dialogs/CONTRIBUTING.md
index f7dbcaba..4c8e6a5e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/CONTRIBUTING.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/CONTRIBUTING.md
@@ -27,7 +27,7 @@ There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
For instructions on this, start with the
-[contribution overview](http://cordova.apache.org/#contribute).
+[contribution overview](http://cordova.apache.org/contribute/).
The details are explained there, but the important items are:
- Sign and submit an Apache ICLA (Contributor License Agreement).
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/LICENSE b/StoneIsland/plugins/cordova-plugin-dialogs/LICENSE
index 7a4a3ea2..7a4a3ea2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/LICENSE
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/LICENSE
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/NOTICE b/StoneIsland/plugins/cordova-plugin-dialogs/NOTICE
index 8ec56a52..8ec56a52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/NOTICE
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/NOTICE
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/README.md
index b16b9f9a..ea2b9311 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/README.md
@@ -1,3 +1,7 @@
+---
+title: Dialogs
+description: Use native dialog UI elements
+---
<!--
# license: Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,9 +21,11 @@
# under the License.
-->
-# cordova-plugin-dialogs
+|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI |
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-dialogs)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-dialogs/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-dialogs)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-dialogs/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-dialogs)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-dialogs/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-dialogs)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-dialogs/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-dialogs)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-dialogs/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-dialogs.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-dialogs)|
-[![Build Status](https://travis-ci.org/apache/cordova-plugin-dialogs.svg)](https://travis-ci.org/apache/cordova-plugin-dialogs)
+# cordova-plugin-dialogs
This plugin provides access to some native dialog UI elements
via a global `navigator.notification` object.
@@ -31,6 +37,8 @@ Although the object is attached to the global scoped `navigator`, it is not avai
console.log(navigator.notification);
}
+Report issues on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Dialogs%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
+
## Installation
cordova plugin add cordova-plugin-dialogs
@@ -77,6 +85,7 @@ function, which is typically less customizable.
- Amazon Fire OS
- Android
- BlackBerry 10
+- Browser
- Firefox OS
- iOS
- Tizen
@@ -141,6 +150,7 @@ indexing, so the value is `1`, `2`, `3`, etc.
- Amazon Fire OS
- Android
- BlackBerry 10
+- Browser
- Firefox OS
- iOS
- Tizen
@@ -212,6 +222,7 @@ contains the following properties:
- Amazon Fire OS
- Android
+- Browser
- Firefox OS
- iOS
- Windows Phone 7 and 8
@@ -250,6 +261,7 @@ The device plays a beep sound.
- Amazon Fire OS
- Android
- BlackBerry 10
+- Browser
- iOS
- Tizen
- Windows Phone 7 and 8
@@ -272,4 +284,3 @@ The device plays a beep sound.
- Tizen implements beeps by playing an audio file via the media API.
- The beep file must be short, must be located in a `sounds` subdirectory of the application's root directory, and must be named `beep.wav`.
-
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-dialogs/RELEASENOTES.md
index 79571543..2b34048b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/RELEASENOTES.md
@@ -20,120 +20,147 @@
-->
# Release Notes
-### 0.2.2 (Sept 25, 2013)
-* CB-4889 bumping&resetting version
-* [windows8] commandProxy was moved
-* CB-4889 renaming reference in Notification.cs
-* CB-4889 renaming org.apache.cordova.core.dialogs to org.apache.cordova.dialogs
-* Rename CHANGELOG.md -> RELEASENOTES.md
-* [CB-4592] [Blackberry10] Added beep support
-* [CB-4752] Incremented plugin version on dev branch.
+### 1.3.0 (Sep 08, 2016)
+* [CB-11832](https://issues.apache.org/jira/browse/CB-11832) updated missing header file
+* Select the text and put default value in the input directly.
+* [CB-11281](https://issues.apache.org/jira/browse/CB-11281) **windows**: `defaultText` is not taken as input if no input by user fixed
+* Separated `CSS` from `JS` code. Fixed the prompt dialog CSS to look close to native. Fixed the positioning of the prompt dialog for Windows. Fixed minor JSHint issues.
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies
+* [CB-8773](https://issues.apache.org/jira/browse/CB-8773) Fix for **iOS 8** keyboard not appearing on prompt
+* [CB-11677](https://issues.apache.org/jira/browse/CB-11677) **Android**: made text, entered to prompt dialog visible
+* CB-8947:(**ios**) Fix crash. Convert non-string messages to strings. Added tests.
+* Add badges for paramedic builds on Jenkins
+* Add pull request template.
+* [CB-11218](https://issues.apache.org/jira/browse/CB-11218) Convert button list to appropriate type
+* Simply add **Browser** to supported platforms
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md
- ### 0.2.3 (Oct 28, 2013)
-* CB-5128: added repo + issue tag to plugin.xml for dialogs plugin
-* new plugin execute arguments supported
-* new plugin style
-* smaller fonts styling input
-* img files copied inside plugin
-* style added
-* prompt added
-* styling from James
-* fixed "exec" calls addedd css, but not working yet
-* first (blind) try
-* [CB-4915] Incremented plugin version on dev branch.
+### 1.2.1 (Apr 15, 2016)
+* [CB-10097](https://issues.apache.org/jira/browse/CB-10097) dialog doesn't show on **iOS** when called from a select list `onChange` event
+* Remove `warning` emoji, as it doesn't correctly display in the docs website: http://cordova.apache.org/docs/en/dev/cordova-plugin-dialogs/index.html
+* [CB-10727](https://issues.apache.org/jira/browse/CB-10727) Dialogs plugin has warnings on **iOS**
+* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins
-
-### 0.2.4 (Dec 4, 2013)
-* add ubuntu platform
-* 1. Added amazon-fireos platform. 2. Change to use amazon-fireos as a platform if user agent string contains 'cordova-amazon-fireos'.
-* added beep funtionality using ms-winsoundevent:Notfication.Default
+### 1.2.0 (Nov 18, 2015)
+* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
+* [CB-8549](https://issues.apache.org/jira/browse/CB-8549) Updated source to pass `Fortify` scan.
+* Fixing contribute link.
+* add `CSS class` to prompt `div` for **Windows** platform
+* [CB-9347](https://issues.apache.org/jira/browse/CB-9347) - fix to allow to stack multiple `UIAlertControllers`
-### 0.2.5 (Jan 02, 2014)
-* CB-4696 Fix compile error for Xcode 4.5.
-* CB-5658 Add doc/index.md for Dialogs plugin
-* CB-3762 Change prompt default to empty string
-* Move images from css to img
+### 1.1.1 (Jun 17, 2015)
+* [CB-9128](https://issues.apache.org/jira/browse/CB-9128) cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs
+* fix npm md
-### 0.2.6 (Feb 05, 2014)
-* no need to recreate the manifest.webapp file after each `cordova prepare` for FFOS
-* FFOS description added
+### 1.1.0 (May 06, 2015)
+* [CB-8928](https://issues.apache.org/jira/browse/CB-8928): Removed direct call to `toStaticHTML`, only call it if we are sure it's present. This closes #52
+* [CB-7734](https://issues.apache.org/jira/browse/CB-7734) - `navigator.notification.alert` or `navigator.notification.confirm` seem have a "many words" issue. (closes #39)
+
+### 1.0.0 (Apr 15, 2015)
+* [CB-8746](https://issues.apache.org/jira/browse/CB-8746) gave plugin major version bump
+* [CB-8683](https://issues.apache.org/jira/browse/CB-8683) updated wp and bb specific references of old id to new id
+* [CB-8683](https://issues.apache.org/jira/browse/CB-8683) changed plugin-id to pacakge-name
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) properly updated translated docs to use new id
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) updated translated docs to use new id
+* Use TRAVIS_BUILD_DIR, install paramedic by npm
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) Updated Readme
+* [CB-8659](https://issues.apache.org/jira/browse/CB-8659): ios: 4.0.x Compatibility: Remove use of deprecated headers
+* [CB-8565](https://issues.apache.org/jira/browse/CB-8565) Integrate TravisCI
+* [CB-8438](https://issues.apache.org/jira/browse/CB-8438) cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs
+* [CB-8538](https://issues.apache.org/jira/browse/CB-8538) Added package.json file
+* [CB-8367](https://issues.apache.org/jira/browse/CB-8367) [org.apache.cordova.dialogs] Add Prompt support on Windows
-### 0.2.7 (Apr 17, 2014)
-* CB-6212: [iOS] fix warnings compiled under arm64 64-bit
-* CB-6411: [BlackBerry10] Work around Audio playback issue
-* CB-6411: [BlackBerry10] Updates to beep
-* CB-6422: [windows8] use cordova/exec/proxy
-* CB-6460: Update license headers
-* Add NOTICE file
+### 0.3.0 (Feb 04, 2015)
+* Correct way to specify Windows platform in config.xml
+* [CB-8351](https://issues.apache.org/jira/browse/CB-8351) ios: Use argumentForIndex rather than NSArray extension
+* [CB-7955](https://issues.apache.org/jira/browse/CB-7955) Add support "browser" platform
-### 0.2.8 (Jun 05, 2014)
-* CB-6801 Add license
-* running original windows.open, inAppBrowser is overriding it no need to place CSS in every page anymore
-* CB-5945 [Windows8] do not call success callbacks until dialog is dismissed
-* CB-4616 Returned index 0 was not documented for notification.prompt
-* update docs to state that prompt is supported on windowsphone
-* CB-6528 allow scroll on alert message content
-* [CB-6628][amazon-fireos]dialogs plugin's confirm and prompt methods dont work confirm() method was missing amazon-fireos platform check. added that. prompt() method had bug. It is executed in a worker thread that does not have a message queue(or Looper object) associated with it and hence "can't create a handler" exception is thrown. To fix this issue, we need to create the EditText widget from within the UI thread. This was fixed sometime ago when we added fireos platform but commit got lost somewhere. So fixing it again now.
-* CB-6491 add CONTRIBUTING.md
-* Added check for isFinishing() on the parent activity to prevent crashes when trying to display dialogs when activity is in this phase of it's lifecycle
-* CB-4966 Dialogs are in window now No need to add anything to manifest or index.html
-* Removing FirefoxOS Quirks * no need to add special permission (it's different API with the same name) * notification.css is added automatically
+### 0.2.11 (Dec 02, 2014)
+* [CB-7737](https://issues.apache.org/jira/browse/CB-7737) lower min height for alert
+* [CB-8038](https://issues.apache.org/jira/browse/CB-8038) backslash getting escaped twice in **BB10**
+* [CB-8029](https://issues.apache.org/jira/browse/CB-8029) test 1-based indexing for confirm
+* [CB-7639](https://issues.apache.org/jira/browse/CB-7639) Update docs + manual tests
+* [CB-7639](https://issues.apache.org/jira/browse/CB-7639) Revert back `isAlertShowing` flag in case of exception to prevent queuing of future dialogs.
+* [CB-7639](https://issues.apache.org/jira/browse/CB-7639) Handle button labels as array on windows
+* [CB-7977](https://issues.apache.org/jira/browse/CB-7977) Mention `deviceready` in plugin docs
+* Check for `setTextDirection` API level
+* **Android** Make spinner dialog to use `THEME_DEVICE_DEFAULT_LIGHT` (same as the other dialogs)
+* **Android** Unbreak `API` level < `14`
+* [CB-7414](https://issues.apache.org/jira/browse/CB-7414) **BB10** Document callback parameter for `navigator.notification.alert`
+* [CB-7700](https://issues.apache.org/jira/browse/CB-7700) cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs
+* [CB-7571](https://issues.apache.org/jira/browse/CB-7571) Bump version of nested plugin to match parent plugin
+
+### 0.2.10 (Sep 17, 2014)
+* [CB-7538](https://issues.apache.org/jira/browse/CB-7538) Android beep thread fix Beep now executes in it's own thread. It was previously executing in the main UI thread which was causing the application to lock up will the beep was occurring. Closing pull request
+* Set dialog text dir to locale
+* Renamed test dir, added nested plugin.xml
+* added documentation for manual tests
+* [CB-6965](https://issues.apache.org/jira/browse/CB-6965) Added manual tests
+* [CB-6965](https://issues.apache.org/jira/browse/CB-6965) Port notification tests to test-framework
### 0.2.9 (Aug 06, 2014)
* ubuntu: pass proper arguments to prompt callback
* ubuntu: use TextField instead of TextInput
* ubuntu: proper message escaping before passing to qml
* **FFOS** update notification.js
-* CB-6127 Updated translations for docs
+* [CB-6127](https://issues.apache.org/jira/browse/CB-6127) Updated translations for docs
* android: Explicitly apply default theme to dialogs
* Fix Beep exception on Android when no argument passed
-### 0.2.10 (Sep 17, 2014)
-* CB-7538 Android beep thread fix Beep now executes in it's own thread. It was previously executing in the main UI thread which was causing the application to lock up will the beep was occurring. Closing pull request
-* Set dialog text dir to locale
-* Renamed test dir, added nested plugin.xml
-* added documentation for manual tests
-* CB-6965 Added manual tests
-* CB-6965 Port notification tests to test-framework
+### 0.2.8 (Jun 05, 2014)
+* [CB-6801](https://issues.apache.org/jira/browse/CB-6801) Add license
+* running original windows.open, inAppBrowser is overriding it no need to place CSS in every page anymore
+* [CB-5945](https://issues.apache.org/jira/browse/CB-5945) [Windows8] do not call success callbacks until dialog is dismissed
+* [CB-4616](https://issues.apache.org/jira/browse/CB-4616) Returned index 0 was not documented for notification.prompt
+* update docs to state that prompt is supported on windowsphone
+* [CB-6528](https://issues.apache.org/jira/browse/CB-6528) allow scroll on alert message content
+* [CB-6628][amazon-fireos]dialogs plugin's confirm and prompt methods dont work confirm() method was missing amazon-fireos platform check. added that. prompt() method had bug. It is executed in a worker thread that does not have a message queue(or Looper object) associated with it and hence "can't create a handler" exception is thrown. To fix this issue, we need to create the EditText widget from within the UI thread. This was fixed sometime ago when we added fireos platform but commit got lost somewhere. So fixing it again now.
+* [CB-6491](https://issues.apache.org/jira/browse/CB-6491) add CONTRIBUTING.md
+* Added check for isFinishing() on the parent activity to prevent crashes when trying to display dialogs when activity is in this phase of it's lifecycle
+* [CB-4966](https://issues.apache.org/jira/browse/CB-4966) Dialogs are in window now No need to add anything to manifest or index.html
+* Removing FirefoxOS Quirks * no need to add special permission (it's different API with the same name) * notification.css is added automatically
-### 0.2.11 (Dec 02, 2014)
-* [CB-7737] lower min height for alert
-* CB-8038 backslash getting escaped twice in **BB10**
-* CB-8029 test 1-based indexing for confirm
-* CB-7639 Update docs + manual tests
-* CB-7639 Revert back `isAlertShowing` flag in case of exception to prevent queuing of future dialogs.
-* CB-7639 Handle button labels as array on windows
-* CB-7977 Mention `deviceready` in plugin docs
-* Check for `setTextDirection` API level
-* **Android** Make spinner dialog to use `THEME_DEVICE_DEFAULT_LIGHT` (same as the other dialogs)
-* **Android** Unbreak `API` level < `14`
-* CB-7414 **BB10** Document callback parameter for `navigator.notification.alert`
-* CB-7700 cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs
-* CB-7571 Bump version of nested plugin to match parent plugin
+### 0.2.7 (Apr 17, 2014)
+* [CB-6212](https://issues.apache.org/jira/browse/CB-6212): [iOS] fix warnings compiled under arm64 64-bit
+* [CB-6411](https://issues.apache.org/jira/browse/CB-6411): [BlackBerry10] Work around Audio playback issue
+* [CB-6411](https://issues.apache.org/jira/browse/CB-6411): [BlackBerry10] Updates to beep
+* [CB-6422](https://issues.apache.org/jira/browse/CB-6422): [windows8] use cordova/exec/proxy
+* [CB-6460](https://issues.apache.org/jira/browse/CB-6460): Update license headers
+* Add NOTICE file
-### 0.3.0 (Feb 04, 2015)
-* Correct way to specify Windows platform in config.xml
-* CB-8351 ios: Use argumentForIndex rather than NSArray extension
-* CB-7955 Add support "browser" platform
+### 0.2.6 (Feb 05, 2014)
+* no need to recreate the manifest.webapp file after each `cordova prepare` for FFOS
+* FFOS description added
-### 1.0.0 (Apr 15, 2015)
-* CB-8746 gave plugin major version bump
-* CB-8683 updated wp and bb specific references of old id to new id
-* CB-8683 changed plugin-id to pacakge-name
-* CB-8653 properly updated translated docs to use new id
-* CB-8653 updated translated docs to use new id
-* Use TRAVIS_BUILD_DIR, install paramedic by npm
-* CB-8653 Updated Readme
-* CB-8659: ios: 4.0.x Compatibility: Remove use of deprecated headers
-* CB-8565 Integrate TravisCI
-* CB-8438 cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs
-* CB-8538 Added package.json file
-* CB-8367 [org.apache.cordova.dialogs] Add Prompt support on Windows
+### 0.2.5 (Jan 02, 2014)
+* [CB-4696](https://issues.apache.org/jira/browse/CB-4696) Fix compile error for Xcode 4.5.
+* [CB-5658](https://issues.apache.org/jira/browse/CB-5658) Add doc/index.md for Dialogs plugin
+* [CB-3762](https://issues.apache.org/jira/browse/CB-3762) Change prompt default to empty string
+* Move images from css to img
-### 1.1.0 (May 06, 2015)
-* CB-8928: Removed direct call to `toStaticHTML`, only call it if we are sure it's present. This closes #52
-* CB-7734 - `navigator.notification.alert` or `navigator.notification.confirm` seem have a "many words" issue. (closes #39)
+### 0.2.4 (Dec 4, 2013)
+* add ubuntu platform
+* 1. Added amazon-fireos platform. 2. Change to use amazon-fireos as a platform if user agent string contains 'cordova-amazon-fireos'.
+* added beep funtionality using ms-winsoundevent:Notfication.Default
-### 1.1.1 (Jun 17, 2015)
-* CB-9128 cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs
-* fix npm md
+### 0.2.3 (Oct 28, 2013)
+* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): added repo + issue tag to plugin.xml for dialogs plugin
+* new plugin execute arguments supported
+* new plugin style
+* smaller fonts styling input
+* img files copied inside plugin
+* style added
+* prompt added
+* styling from James
+* fixed "exec" calls addedd css, but not working yet
+* first (blind) try
+* [CB-4915](https://issues.apache.org/jira/browse/CB-4915) Incremented plugin version on dev branch.
+
+### 0.2.2 (Sept 25, 2013)
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) bumping&resetting version
+* [windows8] commandProxy was moved
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) renaming reference in Notification.cs
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) renaming org.apache.cordova.core.dialogs to org.apache.cordova.dialogs
+* Rename CHANGELOG.md -> RELEASENOTES.md
+* [CB-4592](https://issues.apache.org/jira/browse/CB-4592) [Blackberry10] Added beep support
+* [CB-4752](https://issues.apache.org/jira/browse/CB-4752) Incremented plugin version on dev branch.
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/README.md
index 355cd4d1..355cd4d1 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/index.md
index c003d401..c003d401 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/de/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/README.md
index e7df5fea..e7df5fea 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/index.md
index 9ff4251e..9ff4251e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/es/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/README.md
index 994c8264..994c8264 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/index.md
index fec09396..fec09396 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/fr/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/README.md
index 8a72905d..8a72905d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/index.md
index e8e02c7a..e8e02c7a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/it/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/README.md
index 0722658b..0722658b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/index.md
index b5308605..b5308605 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ja/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/README.md
index 04532da8..04532da8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/index.md
index 8216d8cf..8216d8cf 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ko/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/README.md
index 45fa937c..45fa937c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/index.md
index 462d5ac2..462d5ac2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/pl/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ru/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ru/index.md
index 49474ead..49474ead 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/ru/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/ru/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/README.md
index c8c26c3d..c8c26c3d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/README.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/index.md b/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/index.md
index b47fc5f9..b47fc5f9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/index.md
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/doc/zh/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/package.json b/StoneIsland/plugins/cordova-plugin-dialogs/package.json
index 3fd10da8..f85f14ce 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/package.json
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-dialogs",
- "version": "1.1.1",
+ "version": "1.3.0",
"description": "Cordova Notification Plugin",
"cordova": {
"id": "cordova-plugin-dialogs",
@@ -38,6 +38,20 @@
"cordova-windows8",
"cordova-windows"
],
+ "scripts": {
+ "test": "npm run jshint",
+ "jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
+ },
"author": "Apache Software Foundation",
- "license": "Apache 2.0"
+ "license": "Apache-2.0",
+ "engines": {
+ "cordovaDependencies": {
+ "2.0.0": {
+ "cordova": ">100"
+ }
+ }
+ },
+ "devDependencies": {
+ "jshint": "^2.6.0"
+ }
}
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/plugin.xml b/StoneIsland/plugins/cordova-plugin-dialogs/plugin.xml
index 6d6235fa..1069cce1 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/plugin.xml
@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-dialogs"
- version="1.1.1">
+ version="1.3.0">
<name>Notification</name>
<description>Cordova Notification Plugin</description>
@@ -41,13 +41,13 @@
</feature>
</config-file>
- <asset src="www/firefoxos/notification.css" target="css/notification.css" />
- <asset src="www/firefoxos/danger-press.png" target="img/danger-press.png" />
- <asset src="www/firefoxos/danger.png" target="img/danger.png" />
- <asset src="www/firefoxos/default.png" target="img/default.png" />
- <asset src="www/firefoxos/gradient.png" target="img/gradient.png" />
- <asset src="www/firefoxos/pattern.png" target="img/pattern.png" />
- <asset src="www/firefoxos/recommend.png" target="img/recommend.png" />
+ <asset src="www/firefoxos/notification.css" target="css/notification.css" />
+ <asset src="www/firefoxos/danger-press.png" target="img/danger-press.png" />
+ <asset src="www/firefoxos/danger.png" target="img/danger.png" />
+ <asset src="www/firefoxos/default.png" target="img/default.png" />
+ <asset src="www/firefoxos/gradient.png" target="img/gradient.png" />
+ <asset src="www/firefoxos/pattern.png" target="img/pattern.png" />
+ <asset src="www/firefoxos/recommend.png" target="img/recommend.png" />
<js-module src="src/firefoxos/notification.js" name="dialogs-impl">
<runs />
</js-module>
@@ -110,9 +110,9 @@
</feature>
</config-file>
<header-file src="src/ios/CDVNotification.h" />
- <source-file src="src/ios/CDVNotification.m" />
- <resource-file src="src/ios/CDVNotification.bundle" />
- <framework src="AudioToolbox.framework" weak="true" />
+ <source-file src="src/ios/CDVNotification.m" />
+ <resource-file src="src/ios/CDVNotification.bundle" />
+ <framework src="AudioToolbox.framework" weak="true" />
</platform>
<!-- blackberry10 -->
@@ -167,5 +167,7 @@
<js-module src="src/windows/NotificationProxy.js" name="NotificationProxy">
<merges target="" />
</js-module>
+
+ <asset src="www/windows/notification.css" target="css/notification.css" />
</platform>
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/android/Notification.java b/StoneIsland/plugins/cordova-plugin-dialogs/src/android/Notification.java
index 3bc3cee6..f19bc888 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/android/Notification.java
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/android/Notification.java
@@ -21,6 +21,7 @@ package org.apache.cordova.dialogs;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.LOG;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
@@ -31,6 +32,7 @@ import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
+import android.content.res.Resources;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
@@ -48,6 +50,8 @@ import android.widget.TextView;
*/
public class Notification extends CordovaPlugin {
+ private static final String LOG_TAG = "Notification";
+
public int confirmResult = -1;
public ProgressDialog spinnerDialog = null;
public ProgressDialog progressDialog = null;
@@ -139,6 +143,7 @@ public class Notification extends CordovaPlugin {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
}
}
}
@@ -215,7 +220,9 @@ public class Notification extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 1));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on first button.");
+ }
}
// Second button
@@ -228,7 +235,9 @@ public class Notification extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 2));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on second button.");
+ }
}
// Third button
@@ -241,7 +250,9 @@ public class Notification extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 3));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on third button.");
+ }
}
dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
public void onCancel(DialogInterface dialog)
@@ -276,7 +287,14 @@ public class Notification extends CordovaPlugin {
Runnable runnable = new Runnable() {
public void run() {
final EditText promptInput = new EditText(cordova.getActivity());
- promptInput.setHint(defaultText);
+
+ /* CB-11677 - By default, prompt input text color is set according current theme.
+ But for some android versions is not visible (for example 5.1.1).
+ android.R.color.primary_text_light will make text visible on all versions. */
+ Resources resources = cordova.getActivity().getResources();
+ int promptInputTextColor = resources.getColor(android.R.color.primary_text_light);
+ promptInput.setTextColor(promptInputTextColor);
+ promptInput.setText(defaultText);
AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
dlg.setMessage(message);
dlg.setTitle(title);
@@ -296,11 +314,15 @@ public class Notification extends CordovaPlugin {
try {
result.put("buttonIndex",1);
result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on first button.", e);
+ }
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on first button.");
+ }
}
// Second button
@@ -313,11 +335,15 @@ public class Notification extends CordovaPlugin {
try {
result.put("buttonIndex",2);
result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on second button.", e);
+ }
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on second button.");
+ }
}
// Third button
@@ -330,11 +356,15 @@ public class Notification extends CordovaPlugin {
try {
result.put("buttonIndex",3);
result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on third button.", e);
+ }
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
}
});
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG,"JSONException on third button.");
+ }
}
dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
public void onCancel(DialogInterface dialog){
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/blackberry10/index.js b/StoneIsland/plugins/cordova-plugin-dialogs/src/blackberry10/index.js
index 3660f667..4969a770 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/blackberry10/index.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/blackberry10/index.js
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+/* global qnx, PluginResult */
+
function showDialog(args, dialogType, result) {
//Unpack and map the args
var msg = JSON.parse(decodeURIComponent(args[0])),
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/firefoxos/notification.js b/StoneIsland/plugins/cordova-plugin-dialogs/src/firefoxos/notification.js
index b6986fd0..aea562d0 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/firefoxos/notification.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/firefoxos/notification.js
@@ -60,7 +60,8 @@ function modal(message, callback, title, buttonLabels, domObjects) {
var menu = modalDocument.createElement('menu');
box.appendChild(menu);
for (var index = 0; index < buttonLabels.length; index++) {
- addButton(buttonLabels[index], index, (index === 0));
+ // TODO: last button listens to the cancel key
+ addButton(buttonLabels[index], (index+1), (index === 0));
}
modalDocument.body.appendChild(box);
@@ -83,12 +84,12 @@ function modal(message, callback, title, buttonLabels, domObjects) {
result = {
input1: '',
buttonIndex: 0
- }
+ };
}
mainWindow.setTimeout(function() {
callback(result);
}, 10);
- };
+ }
modalWindow.addEventListener('unload', onUnload, false);
// call callback and destroy modal
@@ -109,7 +110,7 @@ function modal(message, callback, title, buttonLabels, domObjects) {
}
response = response || labelIndex;
callback(response);
- }
+ };
}
}
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.bundle/beep.wav b/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.bundle/beep.wav
index 05f5997f..05f5997f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.bundle/beep.wav
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.bundle/beep.wav
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.h b/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.h
index 9253f6a9..9253f6a9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.h
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.h
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.m b/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.m
index 1581ad3c..0dd3d2cb 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.m
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/ios/CDVNotification.m
@@ -23,6 +23,7 @@
#define DIALOG_TYPE_PROMPT @"prompt"
static void soundCompletionCallback(SystemSoundID ssid, void* data);
+static NSMutableArray *alertList = nil;
@implementation CDVNotification
@@ -39,7 +40,7 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
- (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons:(NSArray*)buttons defaultText:(NSString*)defaultText callbackId:(NSString*)callbackId dialogType:(NSString*)dialogType
{
- NSUInteger count = [buttons count];
+ int count = (int)[buttons count];
#ifdef __IPHONE_8_0
if (NSClassFromString(@"UIAlertController")) {
@@ -58,33 +59,32 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
alertController.view.frame = alertFrame;
}
-
+
+ __weak CDVNotification* weakNotif = self;
+
for (int n = 0; n < count; n++) {
-
- UIAlertAction* action = [UIAlertAction actionWithTitle:[buttons objectAtIndex:n] style:UIAlertActionStyleDefault handler:^(UIAlertAction * action)
- {
- CDVPluginResult* result;
-
- if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) {
-
- NSString* value0 = [[alertController.textFields objectAtIndex:0] text];
- NSDictionary* info = @{
- @"buttonIndex":@(n + 1),
- @"input1":(value0 ? value0 : [NSNull null])
- };
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
-
- } else {
-
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)(n + 1)];
-
- }
-
- [self.commandDelegate sendPluginResult:result callbackId:callbackId];
-
- }];
- [alertController addAction:action];
-
+ [alertController addAction:[UIAlertAction actionWithTitle:[buttons objectAtIndex:n]
+ style:UIAlertActionStyleDefault
+ handler:^(UIAlertAction * action)
+ {
+ CDVPluginResult* result;
+
+ if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT])
+ {
+ NSString* value0 = [[alertController.textFields objectAtIndex:0] text];
+ NSDictionary* info = @{
+ @"buttonIndex":@(n + 1),
+ @"input1":(value0 ? value0 : [NSNull null])
+ };
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info];
+ }
+ else
+ {
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)(n + 1)];
+ }
+
+ [weakNotif.commandDelegate sendPluginResult:result callbackId:callbackId];
+ }]];
}
if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) {
@@ -94,12 +94,19 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
}];
}
+ if(!alertList)
+ alertList = [[NSMutableArray alloc] init];
+ [alertList addObject:alertController];
+ if ([alertList count]==1) {
+ [self presentAlertcontroller];
+ }
- [self.viewController presentViewController:alertController animated:YES completion:nil];
-
- } else {
+ }
+ else
+ {
#endif
+
CDVAlertView* alertView = [[CDVAlertView alloc]
initWithTitle:title
message:message
@@ -183,6 +190,14 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data);
[self.commandDelegate sendPluginResult:result callbackId:cdvAlertView.callbackId];
}
+- (void)didPresentAlertView:(UIAlertView*)alertView
+{
+ //show keyboard on iOS 8
+ if (alertView.alertViewStyle == UIAlertViewStylePlainTextInput){
+ [[alertView textFieldAtIndex:0] selectAll:nil];
+ }
+}
+
static void playBeep(int count) {
SystemSoundID completeSound;
NSInteger cbDataCount = count;
@@ -211,6 +226,26 @@ static void soundCompletionCallback(SystemSoundID ssid, void* data) {
playBeep([count intValue]);
}
+-(UIViewController *)getTopPresentedViewController {
+ UIViewController *presentingViewController = self.viewController;
+ while(presentingViewController.presentedViewController != nil && ![presentingViewController.presentedViewController isBeingDismissed])
+ {
+ presentingViewController = presentingViewController.presentedViewController;
+ }
+ return presentingViewController;
+}
+
+-(void)presentAlertcontroller {
+
+ __weak CDVNotification* weakNotif = self;
+ [self.getTopPresentedViewController presentViewController:[alertList firstObject] animated:YES completion:^{
+ [alertList removeObject:[alertList firstObject]];
+ if ([alertList count]>0) {
+ [weakNotif presentAlertcontroller];
+ }
+ }];
+
+}
@end
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.cpp b/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.cpp
index d0adf892..d0adf892 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.cpp
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.cpp
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.h b/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.h
index 53430738..53430738 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.h
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.h
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.qml b/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.qml
index 5fdc7d31..5fdc7d31 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.qml
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/ubuntu/notification.qml
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/windows/NotificationProxy.js b/StoneIsland/plugins/cordova-plugin-dialogs/src/windows/NotificationProxy.js
index d1eb3448..2d32f836 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/windows/NotificationProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/windows/NotificationProxy.js
@@ -17,17 +17,36 @@
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
-/*global Windows:true */
+/*global Windows:true, WinJS, toStaticHTML */
var cordova = require('cordova');
+var urlutil = require('cordova/urlutil');
var isAlertShowing = false;
var alertStack = [];
+function createCSSElem(fileName) {
+ var elemId = fileName.substr(0, fileName.lastIndexOf(".")) + "-plugin-style";
+ // If the CSS element exists, don't recreate it.
+ if (document.getElementById(elemId)) {
+ return false;
+ }
+
+ // Create CSS and append it to DOM.
+ var $elem = document.createElement('link');
+ $elem.id = elemId;
+ $elem.rel = "stylesheet";
+ $elem.type = "text/css";
+ $elem.href = urlutil.makeAbsolute("/www/css/" + fileName);
+
+ document.head.appendChild($elem);
+ return true;
+}
+
// CB-8928: When toStaticHTML is undefined, prompt fails to run
-function _cleanHtml(html) { return html; }
+var _cleanHtml = function(html) { return html; };
if (typeof toStaticHTML !== 'undefined') {
_cleanHtml = toStaticHTML;
}
@@ -36,66 +55,53 @@ if (typeof toStaticHTML !== 'undefined') {
// simple html-based implementation until it is available
function createPromptDialog(title, message, buttons, defaultText, callback) {
- var isPhone = cordova.platformId == "windows" && WinJS.Utilities.isPhone;;
+ var isPhone = cordova.platformId === "windows" && WinJS.Utilities.isPhone;
+ var isWindows = !!cordova.platformId.match(/windows/);
+
+ createCSSElem("notification.css");
var dlgWrap = document.createElement("div");
- dlgWrap.style.position = "absolute";
- dlgWrap.style.width = "100%";
- dlgWrap.style.height = "100%";
- dlgWrap.style.backgroundColor = "rgba(0,0,0,0.25)";
- dlgWrap.style.zIndex = "100000";
+ dlgWrap.className = "dlgWrap";
var dlg = document.createElement("div");
- dlg.style.width = "100%";
- dlg.style.minHeight = "180px";
- dlg.style.height = "auto";
- dlg.style.overflow = "auto";
- dlg.style.backgroundColor = "white";
- dlg.style.position = "relative";
- dlg.style.lineHeight = "2";
+ dlg.className = "dlgContainer";
- if (isPhone) {
- dlg.style.padding = "0px 5%";
- } else {
- dlg.style.top = "50%"; // center vertically
- dlg.style.transform = "translateY(-50%)";
- dlg.style.padding = "0px 30%";
+ if (isWindows) {
+ dlg.className += " dlgContainer-windows";
+ } else if (isPhone) {
+ dlg.className += " dlgContainer-phone";
}
+
// dialog layout template
- dlg.innerHTML = _cleanHtml("<span id='lbl-title' style='font-size: 24pt'></span><br/>" // title
- + "<span id='lbl-message'></span><br/>" // message
- + "<input id='prompt-input' style='width: 100%'/><br/>"); // input fields
+ dlg.innerHTML = _cleanHtml("<span id='lbl-title'></span><br/>" + // title
+ "<span id='lbl-message'></span><br/>" + // message
+ "<input id='prompt-input'/><br/>"); // input fields
dlg.querySelector('#lbl-title').appendChild(document.createTextNode(title));
dlg.querySelector('#lbl-message').appendChild(document.createTextNode(message));
dlg.querySelector('#prompt-input').setAttribute('placeholder', defaultText);
+ dlg.querySelector('#prompt-input').setAttribute('value', defaultText);
function makeButtonCallback(idx) {
return function () {
- var value = promptInput = dlg.querySelector('#prompt-input').value;
+ var value = dlg.querySelector('#prompt-input').value || defaultText;
dlgWrap.parentNode.removeChild(dlgWrap);
if (callback) {
callback({ input1: value, buttonIndex: idx });
}
- }
+ };
}
function addButton(idx, label) {
var button = document.createElement('button');
- button.style.margin = "8px 0 8px 16px";
- button.style.float = "right";
- button.style.fontSize = "12pt";
+ button.className = "dlgButton";
button.tabIndex = idx;
button.onclick = makeButtonCallback(idx + 1);
- if (idx == 0) {
- button.style.color = "white";
- button.style.backgroundColor = "#464646";
- } else {
- button.style.backgroundColor = "#cccccc";
+ if (idx === 0) {
+ button.className += " dlgButtonFirst";
}
- button.style.border = "none";
button.appendChild(document.createTextNode(label));
dlg.appendChild(button);
}
@@ -109,7 +115,7 @@ function createPromptDialog(title, message, buttons, defaultText, callback) {
document.body.appendChild(dlgWrap);
// make sure input field is under focus
- dlg.querySelector('#prompt-input').focus();
+ dlg.querySelector('#prompt-input').select();
return dlgWrap;
}
@@ -134,7 +140,9 @@ module.exports = {
md.commands.append(new Windows.UI.Popups.UICommand(_buttonLabel));
md.showAsync().then(function() {
isAlertShowing = false;
- win && win();
+ if (win) {
+ win();
+ }
if (alertStack.length) {
setTimeout(alertStack.shift(), 0);
@@ -204,7 +212,9 @@ module.exports = {
md.showAsync().then(function(res) {
isAlertShowing = false;
var result = res ? buttons.indexOf(res.label) + 1 : 0;
- win && win(result);
+ if (win) {
+ win(result);
+ }
if (alertStack.length) {
setTimeout(alertStack.shift(), 0);
}
@@ -236,7 +246,9 @@ module.exports = {
} else {
snd.removeEventListener("ended", onEvent);
snd = null;
- winX && winX(); // notification.js just sends null, but this is future friendly
+ if (winX) {
+ winX(); // notification.js just sends null, but this is future friendly
+ }
}
count--;
};
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/Notification.cs b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/Notification.cs
index b6216848..b6216848 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/Notification.cs
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/Notification.cs
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml
index 2d564fba..2d564fba 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml.cs b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml.cs
index 50b2f2a8..50b2f2a8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml.cs
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/NotificationBox.xaml.cs
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/notification-beep.wav b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/notification-beep.wav
index d0ad085f..d0ad085f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/notification-beep.wav
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/src/wp/notification-beep.wav
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-dialogs/tests/plugin.xml
index f021ddd5..55675b20 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/tests/plugin.xml
@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-dialogs-tests"
- version="1.1.1">
+ version="1.3.0">
<name>Cordova Notification Plugin Tests</name>
<license>Apache 2.0</license>
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/tests/tests.js b/StoneIsland/plugins/cordova-plugin-dialogs/tests/tests.js
index 16e9cd99..7056c0db 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/tests/tests.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/tests/tests.js
@@ -19,6 +19,9 @@
*
*/
+/* jshint jasmine: true */
+/* global cordova */
+
exports.defineAutoTests = function () {
describe('Notification (navigator.notification)', function () {
it("should exist", function () {
@@ -57,12 +60,12 @@ exports.defineManualTests = function (contentEl, createActionButton) {
var logLine = document.createElement('div');
logLine.innerHTML = message;
log.appendChild(logLine);
- }
+ };
var clearLog = function () {
var log = document.getElementById('info');
log.innerHTML = '';
- }
+ };
var beep = function () {
console.log("beep()");
@@ -111,14 +114,14 @@ exports.defineManualTests = function (contentEl, createActionButton) {
buttons);
};
- var promptDialog = function (message, title, buttons) {
+ var promptDialog = function (message, title, buttons,defaultText) {
clearLog();
navigator.notification.prompt(message,
function (r) {
if (r && r.buttonIndex === 0) {
var msg = "Dismissed dialog";
if (r.input1) {
- msg += " with input: " + r.input1
+ msg += " with input: " + r.input1;
}
logMessage(msg);
console.log(msg);
@@ -128,7 +131,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
}
},
title,
- buttons);
+ buttons,defaultText);
};
/******************************************************************************/
@@ -144,13 +147,15 @@ exports.defineManualTests = function (contentEl, createActionButton) {
'<p/> <div id="confirm"></div>' +
'Expected result: Dialog will say "You pressed confirm". Press Yes, No, or Maybe, Not Sure to close dialog. Status box will tell you what option you selected, and should use 1-based indexing.' +
'<p/> <div id="prompt"></div>' +
- 'Expected result: Dialog will say "You pressed prompt". Enter any message and press Yes, No, or Maybe, Not Sure to close dialog. Status box will tell you what option you selected and message you entered, and should use 1-based indexing.' +
+ 'Expected result: Dialog will say "You pressed prompt". Enter any message and press Yes, No, or Maybe, Not Sure to close dialog. Status box will tell you what option you selected and message you entered or if empty, it will display "Default Text", and should use 1-based indexing.' +
'<p/> <div id="built_in_alert"></div>' +
'Expected result: Dialog will have title "index.html" and say "You pressed alert" Press OK to close dialog. Nothing will get updated in status box.' +
'<p/> <div id="built_in_confirm"></div>' +
'Expected result: Dialog will have title "index.html" and say "You selected confirm". Press Cancel or OK to close dialog. Nothing will get updated in status box.' +
'<p/> <div id="built_in_prompt"></div>' +
- 'Expected result: Dialog will have title "index.html" and say "This is a prompt". "Default value" will be in text box. Press Cancel or OK to close dialog. Nothing will get updated in status box.';
+ 'Expected result: Dialog will have title "index.html" and say "This is a prompt". "Default value" will be in text box. Press Cancel or OK to close dialog. Nothing will get updated in status box.' +
+ '<p/> <h3>CB-8947 Tests</h3><div id="cb8947"></div>' +
+ 'Expected results: Dialogs will not crash iOS';
contentEl.innerHTML = '<div id="info"></div>' +
dialogs_tests;
@@ -177,18 +182,52 @@ exports.defineManualTests = function (contentEl, createActionButton) {
}, 'confirm');
createActionButton('Prompt Dialog', function () {
- promptDialog('You pressed prompt.', 'Prompt Dialog', ['Yes', 'No', 'Maybe, Not Sure']);
+ promptDialog('You pressed prompt.', 'Prompt Dialog', ['Yes', 'No', 'Maybe, Not Sure'],'Default Text');
}, 'prompt');
createActionButton('Built-in Alert Dialog', function () {
- typeof alert === 'function' && alert('You pressed alert');
+ if (typeof alert === 'function') {
+ alert('You pressed alert');
+ }
}, 'built_in_alert');
createActionButton('Built-in Confirm Dialog', function () {
- typeof confirm === 'function' && confirm('You selected confirm');
+ if (typeof confirm === 'function') {
+ confirm('You selected confirm');
+ }
}, 'built_in_confirm');
createActionButton('Built-in Prompt Dialog', function () {
- typeof prompt === 'function' && prompt('This is a prompt', 'Default value');
+ if (typeof prompt === 'function') {
+ prompt('This is a prompt', 'Default value');
+ }
}, 'built_in_prompt');
+
+ // CB-8947 - ensure number messages don't crash iOS
+ createActionButton('Alert Dialog with Number', function () {
+ var callback = function() { clearLog(); console.log("Test passed"); };
+ navigator.notification.alert(17, callback);
+ }, 'cb8947');
+
+ // CB-8947 - ensure object messages don't crash iOS
+ createActionButton('Alert Dialog with Object', function () {
+ var object = { number: 42, message: "Make sure an object doesn't crash iOS", issue: 'CB-8947'};
+ var callback = function() { clearLog(); console.log("Test passed"); };
+ navigator.notification.alert(object, callback);
+ }, 'cb8947');
+
+ // CB-8947 - ensure object messages don't crash iOS
+ createActionButton('Confirm Dialog with Object', function () {
+ var object = { number: 42, message: "Make sure an object doesn't crash iOS", issue: 'CB-8947'};
+ var callback = function() { clearLog(); console.log("Test passed"); };
+ navigator.notification.confirm(object, callback);
+ }, 'cb8947');
+
+ // CB-8947 - ensure object messages don't crash iOS
+ createActionButton('Prompt Dialog with Object', function () {
+ var object = { number: 42, message: "Make sure an object doesn't crash iOS", issue: 'CB-8947'};
+ var callback = function() { clearLog(); console.log("Test passed"); };
+ navigator.notification.prompt(object, callback);
+ }, 'cb8947');
+
};
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/android/notification.js b/StoneIsland/plugins/cordova-plugin-dialogs/www/android/notification.js
index 8936a5c2..8936a5c2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/android/notification.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/android/notification.js
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/beep.js b/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/beep.js
index 401049e8..da2e75d1 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/beep.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/beep.js
@@ -21,20 +21,24 @@
module.exports = function (quantity) {
var count = 0,
- beepObj,
- play = function () {
- //create new object every time due to strage playback behaviour
- beepObj = new Audio('local:///chrome/plugin/cordova-plugin-dialogs/notification-beep.wav');
- beepObj.addEventListener("ended", callback);
- beepObj.play();
- },
- callback = function () {
- if (--count > 0) {
- play();
- } else {
- delete beepObj;
- }
- };
+ beepObj;
+
+ function callback() {
+ if (--count > 0) {
+ play();
+ } else {
+ beepObj.removeEventListener("ended", callback);
+ beepObj = null;
+ }
+ }
+
+ function play() {
+ //create new object every time due to strage playback behaviour
+ beepObj = new Audio('local:///chrome/plugin/cordova-plugin-dialogs/notification-beep.wav');
+ beepObj.addEventListener("ended", callback);
+ beepObj.play();
+ }
+
count += quantity || 1;
if (count > 0) {
play();
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/notification-beep.wav b/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/notification-beep.wav
index d0ad085f..d0ad085f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/notification-beep.wav
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/blackberry10/notification-beep.wav
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/browser/notification.js b/StoneIsland/plugins/cordova-plugin-dialogs/www/browser/notification.js
index e8753093..1fdfafd7 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/browser/notification.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/browser/notification.js
@@ -65,6 +65,21 @@ module.exports.prompt = window.navigator.notification.prompt = function(message,
};
+var audioContext = (function() {
+ // Determine if the Audio API is supported by this browser
+ var AudioApi = window.AudioContext;
+ if (!AudioApi) {
+ AudioApi = window.webkitAudioContext;
+ }
+
+ if (AudioApi) {
+ // The Audio API is supported, so create a singleton instance of the AudioContext
+ return new AudioApi();
+ }
+
+ return undefined;
+}());
+
module.exports.beep = window.navigator.notification.beep = function(times) {
if (times > 0) {
var BEEP_DURATION = 700;
@@ -98,18 +113,3 @@ module.exports.beep = window.navigator.notification.beep = function(times) {
}
}
};
-
-var audioContext = (function() {
- // Determine if the Audio API is supported by this browser
- var AudioApi = window.AudioContext;
- if (!AudioApi) {
- AudioApi = window.webkitAudioContext;
- }
-
- if (AudioApi) {
- // The Audio API is supported, so create a singleton instance of the AudioContext
- return new AudioApi();
- }
-
- return undefined;
-}());
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger-press.png b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger-press.png
index d7529b5b..d7529b5b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger-press.png
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger-press.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger.png b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger.png
index 400e3ae3..400e3ae3 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger.png
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/danger.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/default.png b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/default.png
index 2ff298a1..2ff298a1 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/default.png
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/default.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/gradient.png b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/gradient.png
index b2885450..b2885450 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/gradient.png
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/gradient.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/notification.css b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/notification.css
index 34d92b88..34d92b88 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/notification.css
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/notification.css
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/pattern.png b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/pattern.png
index af03f569..af03f569 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/pattern.png
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/pattern.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/recommend.png b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/recommend.png
index 42aed390..42aed390 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/recommend.png
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/firefoxos/recommend.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/notification.js b/StoneIsland/plugins/cordova-plugin-dialogs/www/notification.js
index c3f70d07..4db8f0f2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-dialogs/www/notification.js
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/notification.js
@@ -37,9 +37,10 @@ module.exports = {
* @param {String} buttonLabel Label of the close button (default: OK)
*/
alert: function(message, completeCallback, title, buttonLabel) {
- var _title = (title || "Alert");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Alert");
var _buttonLabel = (buttonLabel || "OK");
- exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
+ exec(completeCallback, null, "Notification", "alert", [_message, _title, _buttonLabel]);
},
/**
@@ -52,7 +53,8 @@ module.exports = {
* @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel'])
*/
confirm: function(message, resultCallback, title, buttonLabels) {
- var _title = (title || "Confirm");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Confirm");
var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
// Strings are deprecated!
@@ -60,23 +62,9 @@ module.exports = {
console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
}
- // Some platforms take an array of button label names.
- // Other platforms take a comma separated list.
- // For compatibility, we convert to the desired type based on the platform.
- if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
- platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
- platform.id == "windows8" || platform.id == "windows") {
+ _buttonLabels = convertButtonLabels(_buttonLabels);
- if (typeof _buttonLabels === 'string') {
- _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
- }
- } else {
- if (Array.isArray(_buttonLabels)) {
- var buttonLabelArray = _buttonLabels;
- _buttonLabels = buttonLabelArray.toString();
- }
- }
- exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
+ exec(resultCallback, null, "Notification", "confirm", [_message, _title, _buttonLabels]);
},
/**
@@ -92,9 +80,17 @@ module.exports = {
* @param {String} defaultText Textbox input value (default: empty string)
*/
prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
- var _message = (message || "Prompt message");
- var _title = (title || "Prompt");
+ var _message = (typeof message === "string" ? message : JSON.stringify(message));
+ var _title = (typeof title === "string" ? title : "Prompt");
var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
+
+ // Strings are deprecated!
+ if (typeof _buttonLabels === 'string') {
+ console.log("Notification.prompt(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
+ }
+
+ _buttonLabels = convertButtonLabels(_buttonLabels);
+
var _defaultText = (defaultText || "");
exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
},
@@ -110,3 +106,25 @@ module.exports = {
exec(null, null, "Notification", "beep", [ defaultedCount ]);
}
};
+
+function convertButtonLabels(buttonLabels) {
+
+ // Some platforms take an array of button label names.
+ // Other platforms take a comma separated list.
+ // For compatibility, we convert to the desired type based on the platform.
+ if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" ||
+ platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" ||
+ platform.id == "windows8" || platform.id == "windows") {
+
+ if (typeof buttonLabels === 'string') {
+ buttonLabels = buttonLabels.split(","); // not crazy about changing the var type here
+ }
+ } else {
+ if (Array.isArray(buttonLabels)) {
+ var buttonLabelArray = buttonLabels;
+ buttonLabels = buttonLabelArray.toString();
+ }
+ }
+
+ return buttonLabels;
+}
diff --git a/StoneIsland/plugins/cordova-plugin-dialogs/www/windows/notification.css b/StoneIsland/plugins/cordova-plugin-dialogs/www/windows/notification.css
new file mode 100644
index 00000000..785039ba
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-dialogs/www/windows/notification.css
@@ -0,0 +1,84 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+.dlgWrap {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.25);
+ z-index: 100000;
+ top: 0;
+}
+
+.dlgContainer {
+ width: 100%;
+ min-height: 180px;
+ height: auto;
+ overflow: auto;
+ background-color: white;
+ position: relative;
+ line-height: 2;
+ top: 50%;
+ transform: translateY(-50%);
+ padding: 0 30%;
+}
+
+.dlgContainer #lbl-title {
+ font-size: 24pt;
+}
+
+.dlgContainer #prompt-input {
+ width: 100%;
+}
+
+.dlgButton {
+ margin: 8px 0 0 16px;
+ float: right;
+ font-size: 11pt;
+ background-color: #cccccc;
+ border: none;
+ font-weight: 600;
+ font-family: "Segoe UI", Arial, sans-serif;
+ padding: 0 22px;
+}
+
+.dlgButton.dlgButtonFirst {
+ color: white;
+ background-color: #464646;
+}
+
+.dlgContainer.dlgContainer-windows {
+ width: 50%;
+ max-width: 680px;
+ padding: 0 5%;
+ top: 50%;
+ left: 50%;
+ position: fixed;
+ transform: translate(-50%, -50%);
+ border: 1px solid rgb(24, 160, 191);
+ border-image: none;
+ box-shadow: 0 0 14px 6px rgba(0,0,0,0.16);
+ text-transform: none;
+}
+
+.dlgContainer.dlgContainer-phone {
+ padding: 0 5%;
+}
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-geolocation/CONTRIBUTING.md
index f7dbcaba..4c8e6a5e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/CONTRIBUTING.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/CONTRIBUTING.md
@@ -27,7 +27,7 @@ There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
For instructions on this, start with the
-[contribution overview](http://cordova.apache.org/#contribute).
+[contribution overview](http://cordova.apache.org/contribute/).
The details are explained there, but the important items are:
- Sign and submit an Apache ICLA (Contributor License Agreement).
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/LICENSE b/StoneIsland/plugins/cordova-plugin-geolocation/LICENSE
index 7a4a3ea2..7a4a3ea2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/LICENSE
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/LICENSE
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/NOTICE b/StoneIsland/plugins/cordova-plugin-geolocation/NOTICE
index 8ec56a52..8ec56a52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/NOTICE
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/NOTICE
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/README.md
index eb10b9f8..77a3c9a7 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/README.md
@@ -1,3 +1,7 @@
+---
+title: Geolocation
+description: Access GPS data.
+---
<!--
# license: Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,17 +21,23 @@
# under the License.
-->
-# cordova-plugin-geolocation
+|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI |
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-geolocation)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-geolocation/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-geolocation)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-geolocation/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-geolocation)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-geolocation/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-geolocation)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-geolocation/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-geolocation)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-geolocation/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-geolocation.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-geolocation)|
-[![Build Status](https://travis-ci.org/apache/cordova-plugin-geolocation.svg)](https://travis-ci.org/apache/cordova-plugin-geolocation)
+# cordova-plugin-geolocation
This plugin provides information about the device's location, such as
-latitude and longitude. Common sources of location information include
+latitude and longitude.
+
+Common sources of location information include
Global Positioning System (GPS) and location inferred from network
signals such as IP address, RFID, WiFi and Bluetooth MAC addresses,
and GSM/CDMA cell IDs. There is no guarantee that the API returns the
device's actual location.
+> To get a few ideas, check out the [sample](#sample) at the bottom of this page or go straight to the [reference](#reference) content.
+
This API is based on the
[W3C Geolocation API Specification](http://dev.w3.org/geo/api/spec-source.html),
and only executes on devices that don't already provide an implementation.
@@ -45,7 +55,7 @@ accesses geolocation data (if the device operating system doesn't do
so already). That notice should provide the same information noted
above, as well as obtaining the user's permission (e.g., by presenting
choices for __OK__ and __No Thanks__). For more information, please
-see the Privacy Guide.
+see the [Privacy Guide](http://cordova.apache.org/docs/en/latest/guide/appdev/privacy/index.html).
This plugin defines a global `navigator.geolocation` object (for platforms
where it is otherwise missing).
@@ -53,11 +63,15 @@ where it is otherwise missing).
Although the object is in the global scope, features provided by this plugin
are not available until after the `deviceready` event.
+```javascript
+
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log("navigator.geolocation works well");
}
+```
+## <a id="reference"></a>Reference
## Installation
This requires cordova 5.0+ ( current stable 1.0.0 )
@@ -81,7 +95,6 @@ It is also possible to install via repo url directly ( unstable )
- iOS
- Tizen
- Windows Phone 7 and 8
-- Windows 8
- Windows
## Methods
@@ -118,6 +131,8 @@ error, the `geolocationError` callback is passed a
### Example
+```javascript
+
// onSuccess Callback
// This method accepts a Position object, which contains the
// current GPS coordinates
@@ -142,6 +157,13 @@ error, the `geolocationError` callback is passed a
navigator.geolocation.getCurrentPosition(onSuccess, onError);
+```
+
+### Android Quirks
+
+If Geolocation service is turned off the `onError` callback is invoked after `timeout` interval (if specified).
+If `timeout` parameter is not specified then no callback is called.
+
## navigator.geolocation.watchPosition
Returns the device's current position when a change in position is detected.
@@ -168,6 +190,8 @@ there is an error, the `geolocationError` callback executes with a
### Example
+```javascript
+
// onSuccess Callback
// This method accepts a `Position` object, which contains
// the current GPS coordinates
@@ -190,6 +214,7 @@ there is an error, the `geolocationError` callback executes with a
//
var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 30000 });
+```
## geolocationOptions
@@ -208,7 +233,8 @@ Optional parameters to customize the retrieval of the geolocation
### Android Quirks
-Android 2.x emulators do not return a geolocation result unless the `enableHighAccuracy` option is set to `true`.
+If Geolocation service is turned off the `onError` callback is invoked after `timeout` interval (if specified).
+If `timeout` parameter is not specified then no callback is called.
## navigator.geolocation.clearWatch
@@ -223,6 +249,8 @@ Stop watching for changes to the device's location referenced by the
### Example
+```javascript
+
// Options: watch for changes in position, and use the most
// accurate position acquisition method available.
//
@@ -232,6 +260,8 @@ Stop watching for changes to the device's location referenced by the
navigator.geolocation.clearWatch(watchID);
+```
+
## Position
Contains `Position` coordinates and timestamp, created by the geolocation API.
@@ -240,7 +270,7 @@ Contains `Position` coordinates and timestamp, created by the geolocation API.
- __coords__: A set of geographic coordinates. _(Coordinates)_
-- __timestamp__: Creation timestamp for `coords`. _(Date)_
+- __timestamp__: Creation timestamp for `coords`. _(DOMTimeStamp)_
## Coordinates
@@ -291,3 +321,438 @@ callback function when an error occurs with navigator.geolocation.
- Returned when the device is unable to retrieve a position. In general, this means the device is not connected to a network or can't get a satellite fix.
- `PositionError.TIMEOUT`
- Returned when the device is unable to retrieve a position within the time specified by the `timeout` included in `geolocationOptions`. When used with `navigator.geolocation.watchPosition`, this error could be repeatedly passed to the `geolocationError` callback every `timeout` milliseconds.
+
+
+## <a id="sample"></a>Sample: Get the weather, find stores, and see photos of things nearby with Geolocation ##
+
+Use this plugin to help users find things near them such as Groupon deals, houses for sale, movies playing, sports and entertainment events and more.
+
+Here's a "cookbook" of ideas to get you started. In the snippets below, we'll show you some basic ways to add these features to your app.
+
+* [Get your coordinates](#coords).
+* [Get the weather forecast](#weather).
+* [Receive updated weather forecasts as you drive around](#receive).
+* [See where you are on a map](#see).
+* [Find stores near you](#find).
+* [See pictures of things around you](#see).
+
+## <a id="coord"></a>Get your geolocation coordinates
+
+```javascript
+
+function getWeatherLocation() {
+
+ navigator.geolocation.getCurrentPosition
+ (onWeatherSuccess, onWeatherError, { enableHighAccuracy: true });
+}
+
+```
+## <a id="weather"></a>Get the weather forecast
+
+```javascript
+
+// Success callback for get geo coordinates
+
+var onWeatherSuccess = function (position) {
+
+ Latitude = position.coords.latitude;
+ Longitude = position.coords.longitude;
+
+ getWeather(Latitude, Longitude);
+}
+
+// Get weather by using coordinates
+
+function getWeather(latitude, longitude) {
+
+ // Get a free key at http://openweathermap.org/. Replace the "Your_Key_Here" string with that key.
+ var OpenWeatherAppKey = "Your_Key_Here";
+
+ var queryString =
+ 'http://api.openweathermap.org/data/2.5/weather?lat='
+ + latitude + '&lon=' + longitude + '&appid=' + OpenWeatherAppKey + '&units=imperial';
+
+ $.getJSON(queryString, function (results) {
+
+ if (results.weather.length) {
+
+ $.getJSON(queryString, function (results) {
+
+ if (results.weather.length) {
+
+ $('#description').text(results.name);
+ $('#temp').text(results.main.temp);
+ $('#wind').text(results.wind.speed);
+ $('#humidity').text(results.main.humidity);
+ $('#visibility').text(results.weather[0].main);
+
+ var sunriseDate = new Date(results.sys.sunrise);
+ $('#sunrise').text(sunriseDate.toLocaleTimeString());
+
+ var sunsetDate = new Date(results.sys.sunrise);
+ $('#sunset').text(sunsetDate.toLocaleTimeString());
+ }
+
+ });
+ }
+ }).fail(function () {
+ console.log("error getting location");
+ });
+}
+
+// Error callback
+
+function onWeatherError(error) {
+ console.log('code: ' + error.code + '\n' +
+ 'message: ' + error.message + '\n');
+}
+
+```
+
+## <a id="receive"></a>Receive updated weather forecasts as you drive around
+
+```javascript
+
+// Watch your changing position
+
+function watchWeatherPosition() {
+
+ return navigator.geolocation.watchPosition
+ (onWeatherWatchSuccess, onWeatherError, { enableHighAccuracy: true });
+}
+
+// Success callback for watching your changing position
+
+var onWeatherWatchSuccess = function (position) {
+
+ var updatedLatitude = position.coords.latitude;
+ var updatedLongitude = position.coords.longitude;
+
+ if (updatedLatitude != Latitude && updatedLongitude != Longitude) {
+
+ Latitude = updatedLatitude;
+ Longitude = updatedLongitude;
+
+ // Calls function we defined earlier.
+ getWeather(updatedLatitude, updatedLongitude);
+ }
+}
+
+```
+
+## <a id="see"></a>See where you are on a map
+
+Both Bing and Google have map services. We'll use Google's. You'll need a key but it's free if you're just trying things out.
+
+Add a reference to the **maps** service.
+
+```HTML
+
+ <script src="https://maps.googleapis.com/maps/api/js?key=Your_API_Key"></script>
+
+```
+Then, add code to use it.
+
+```javascript
+
+var Latitude = undefined;
+var Longitude = undefined;
+
+// Get geo coordinates
+
+function getMapLocation() {
+
+ navigator.geolocation.getCurrentPosition
+ (onMapSuccess, onMapError, { enableHighAccuracy: true });
+}
+
+// Success callback for get geo coordinates
+
+var onMapSuccess = function (position) {
+
+ Latitude = position.coords.latitude;
+ Longitude = position.coords.longitude;
+
+ getMap(Latitude, Longitude);
+
+}
+
+// Get map by using coordinates
+
+function getMap(latitude, longitude) {
+
+ var mapOptions = {
+ center: new google.maps.LatLng(0, 0),
+ zoom: 1,
+ mapTypeId: google.maps.MapTypeId.ROADMAP
+ };
+
+ map = new google.maps.Map
+ (document.getElementById("map"), mapOptions);
+
+
+ var latLong = new google.maps.LatLng(latitude, longitude);
+
+ var marker = new google.maps.Marker({
+ position: latLong
+ });
+
+ marker.setMap(map);
+ map.setZoom(15);
+ map.setCenter(marker.getPosition());
+}
+
+// Success callback for watching your changing position
+
+var onMapWatchSuccess = function (position) {
+
+ var updatedLatitude = position.coords.latitude;
+ var updatedLongitude = position.coords.longitude;
+
+ if (updatedLatitude != Latitude && updatedLongitude != Longitude) {
+
+ Latitude = updatedLatitude;
+ Longitude = updatedLongitude;
+
+ getMap(updatedLatitude, updatedLongitude);
+ }
+}
+
+// Error callback
+
+function onMapError(error) {
+ console.log('code: ' + error.code + '\n' +
+ 'message: ' + error.message + '\n');
+}
+
+// Watch your changing position
+
+function watchMapPosition() {
+
+ return navigator.geolocation.watchPosition
+ (onMapWatchSuccess, onMapError, { enableHighAccuracy: true });
+}
+
+```
+
+## <a id="find"></a>Find stores near you
+
+You can use the same Google key for this.
+
+Add a reference to the **places** service.
+
+```HTML
+
+<script src=
+"https://maps.googleapis.com/maps/api/js?key=Your_API_Key&libraries=places">
+</script>
+
+```
+
+Then, add code to use it.
+
+```javascript
+
+var Map;
+var Infowindow;
+var Latitude = undefined;
+var Longitude = undefined;
+
+// Get geo coordinates
+
+function getPlacesLocation() {
+ navigator.geolocation.getCurrentPosition
+ (onPlacesSuccess, onPlacesError, { enableHighAccuracy: true });
+}
+
+// Success callback for get geo coordinates
+
+var onPlacesSuccess = function (position) {
+
+ Latitude = position.coords.latitude;
+ Longitude = position.coords.longitude;
+
+ getPlaces(Latitude, Longitude);
+
+}
+
+// Get places by using coordinates
+
+function getPlaces(latitude, longitude) {
+
+ var latLong = new google.maps.LatLng(latitude, longitude);
+
+ var mapOptions = {
+
+ center: new google.maps.LatLng(latitude, longitude),
+ zoom: 15,
+ mapTypeId: google.maps.MapTypeId.ROADMAP
+
+ };
+
+ Map = new google.maps.Map(document.getElementById("places"), mapOptions);
+
+ Infowindow = new google.maps.InfoWindow();
+
+ var service = new google.maps.places.PlacesService(Map);
+ service.nearbySearch({
+
+ location: latLong,
+ radius: 500,
+ type: ['store']
+ }, foundStoresCallback);
+
+}
+
+// Success callback for watching your changing position
+
+var onPlacesWatchSuccess = function (position) {
+
+ var updatedLatitude = position.coords.latitude;
+ var updatedLongitude = position.coords.longitude;
+
+ if (updatedLatitude != Latitude && updatedLongitude != Longitude) {
+
+ Latitude = updatedLatitude;
+ Longitude = updatedLongitude;
+
+ getPlaces(updatedLatitude, updatedLongitude);
+ }
+}
+
+// Success callback for locating stores in the area
+
+function foundStoresCallback(results, status) {
+
+ if (status === google.maps.places.PlacesServiceStatus.OK) {
+
+ for (var i = 0; i < results.length; i++) {
+
+ createMarker(results[i]);
+
+ }
+ }
+}
+
+// Place a pin for each store on the map
+
+function createMarker(place) {
+
+ var placeLoc = place.geometry.location;
+
+ var marker = new google.maps.Marker({
+ map: Map,
+ position: place.geometry.location
+ });
+
+ google.maps.event.addListener(marker, 'click', function () {
+
+ Infowindow.setContent(place.name);
+ Infowindow.open(Map, this);
+
+ });
+}
+
+// Error callback
+
+function onPlacesError(error) {
+ console.log('code: ' + error.code + '\n' +
+ 'message: ' + error.message + '\n');
+}
+
+// Watch your changing position
+
+function watchPlacesPosition() {
+
+ return navigator.geolocation.watchPosition
+ (onPlacesWatchSuccess, onPlacesError, { enableHighAccuracy: true });
+}
+
+```
+
+## <a id="pictures"></a>See pictures of things around you
+
+Digital photos can contain geo coordinates that identify where the picture was taken.
+
+Use Flickr API's to find pictures that folks have taken near you. Like Google services, you'll need a key, but it's free if you just want to try things out.
+
+```javascript
+
+var Latitude = undefined;
+var Longitude = undefined;
+
+// Get geo coordinates
+
+function getPicturesLocation() {
+
+ navigator.geolocation.getCurrentPosition
+ (onPicturesSuccess, onPicturesError, { enableHighAccuracy: true });
+
+}
+
+// Success callback for get geo coordinates
+
+var onPicturesSuccess = function (position) {
+
+ Latitude = position.coords.latitude;
+ Longitude = position.coords.longitude;
+
+ getPictures(Latitude, Longitude);
+}
+
+// Get pictures by using coordinates
+
+function getPictures(latitude, longitude) {
+
+ $('#pictures').empty();
+
+ var queryString =
+ "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=Your_API_Key&lat="
+ + latitude + "&lon=" + longitude + "&format=json&jsoncallback=?";
+
+ $.getJSON(queryString, function (results) {
+ $.each(results.photos.photo, function (index, item) {
+
+ var photoURL = "http://farm" + item.farm + ".static.flickr.com/" +
+ item.server + "/" + item.id + "_" + item.secret + "_m.jpg";
+
+ $('#pictures').append($("<img />").attr("src", photoURL));
+
+ });
+ }
+ );
+}
+
+// Success callback for watching your changing position
+
+var onPicturesWatchSuccess = function (position) {
+
+ var updatedLatitude = position.coords.latitude;
+ var updatedLongitude = position.coords.longitude;
+
+ if (updatedLatitude != Latitude && updatedLongitude != Longitude) {
+
+ Latitude = updatedLatitude;
+ Longitude = updatedLongitude;
+
+ getPictures(updatedLatitude, updatedLongitude);
+ }
+}
+
+// Error callback
+
+function onPicturesError(error) {
+
+ console.log('code: ' + error.code + '\n' +
+ 'message: ' + error.message + '\n');
+}
+
+// Watch your changing position
+
+function watchPicturePosition() {
+
+ return navigator.geolocation.watchPosition
+ (onPicturesWatchSuccess, onPicturesError, { enableHighAccuracy: true });
+}
+
+```
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-geolocation/RELEASENOTES.md
index 197b28e5..f622086b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/RELEASENOTES.md
@@ -20,110 +20,152 @@
-->
# Release Notes
-### 0.3.0 (Sept 5, 2013)
-* Added support for windows 8 (Adds required permission)
+### 2.4.0 (Sep 26, 2016)
+* **Ubuntu** Fix altitude & accuracies retrieval
+* [CB-11875](https://issues.apache.org/jira/browse/CB-11875) added `android.hardware.location.gps` `uses-feature`.
-### 0.3.2 (Sept 25, 2013)
-* CB-4889 bumping&resetting version
-* [BlackBerry10] removed uneeded permission tags in plugin.xml
-* CB-4889 renaming org.apache.cordova.core.geolocation to org.apache.cordova.geolocation
+### 2.3.0 (Sep 08, 2016)
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies
+* Plugin uses `Android Log class` and not `Cordova LOG class`
+* Add badges for paramedic builds on Jenkins
+* Add pull request template.
+* Adding links to reference content and sample content to the top of the readme file
+* Update **iOS** geolocation plugin to avoid `THREAD WARNING: ['Geolocation']`, operation occurs in new Thread
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md
-### 0.3.3 (Oct 28, 2013)
-* CB-5128: add repo + issue tag to plugin.xml for geolocation plugin
-* [CB-4915] Incremented plugin version on dev branch.
+### 2.2.0 (Apr 15, 2016)
+* Replace `PermissionHelper.java` with `cordova-plugin-compat`
+* [CB-10691](https://issues.apache.org/jira/browse/CB-10691) Check the context to avoid null errors
+* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins
+* Using a fallback epsilon in case `Number.EPSILON` is not defined.
+* [CB-10574](https://issues.apache.org/jira/browse/CB-10574) MobileSpec can't get results for **WP8.1** Builds
-### 0.3.4 (Dec 4, 2013)
-* Append proxy to platform definition in plugin.xml
-* Append windows 8 Geolocation proxy
-* Code clean-up for android src.
-* Updated amazon-fireos platform + reverting some of the fixes in android code.
-* Added amazon-fireos platform + some of the fixes in android code.
-* CB-5334 [BlackBerry10] Use command proxy
-* call FxOS's getCurrentProxy added
-* pass by only coords
-* proper implementation for firefoxos
-
-### 0.3.5 (Jan 02, 2014)
-* CB-5658 Add doc/index.md for Geolocation plugin
-* windows8: adds missing reference to PositionError (w/o it the app crashes)
-* Removing incorrectly added closing comments for wp7 platform in plugin.xml
+### 2.1.0 (Jan 15, 2016)
+* [CB-10319](https://issues.apache.org/jira/browse/CB-10319) **Android** Adding reflective helper methods for permission requests
+* [CB-8523](https://issues.apache.org/jira/browse/CB-8523) Fixed accuracy when `enableHighAccuracy: false` on **iOS**.
+* [CB-10286](https://issues.apache.org/jira/browse/CB-10286) Don't skip automatic tests on **Android** devices
+* [CB-10277](https://issues.apache.org/jira/browse/CB-10277) Error callback should be called w/ `PositionError` when location access is denied
+* [CB-10285](https://issues.apache.org/jira/browse/CB-10285) Added tests for `PositionError` constants
+* [CB-10278](https://issues.apache.org/jira/browse/CB-10278) geolocation `watchPosition` doesn't return `watchID` string
+* [CB-8443](https://issues.apache.org/jira/browse/CB-8443) **Android** nothing happens if `GPS` is turned off
+* [CB-10204](https://issues.apache.org/jira/browse/CB-10204) Fix `getCurrentPosition` options on **Android**
+* [CB-7146](https://issues.apache.org/jira/browse/CB-7146) Remove built-in `WebView navigator.geolocation` manual tests
+* [CB-2845](https://issues.apache.org/jira/browse/CB-2845) `PositionError` constants not attached to prototype as specified in W3C document
-### 0.3.6 (Feb 05, 2014)
-* add ubuntu platform support
-* CB-5326 adding FFOS permission and updating supported platforms
-* CB-5729 [BlackBerry10] Update GeolocationProxy to return collapsed object
+### 2.0.0 (Nov 18, 2015)
+* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
+* [CB-9907](https://issues.apache.org/jira/browse/CB-9907) Handle **iOS** tests that fail when ios simulator does not have a location
+* [CB-8826](https://issues.apache.org/jira/browse/CB-8826) Check for `NSLocationWhenInUseUsageDescription` first
+* [CB-9105](https://issues.apache.org/jira/browse/CB-9105): Fixing `JS` errors in the shim
+* Added support for new permissions model for **Android 6.0** aka **Marshmallow**
+* Expect `lastPosition` to have a `timestamp` that is already in `msecs`
+* [CB-4596](https://issues.apache.org/jira/browse/CB-4596) Date objects are supposed to be `DOMTimeStamp`
+* Fixing contribute link.
+* [CB-9355](https://issues.apache.org/jira/browse/CB-9355) Fix Geolocation plugin start watch fail related to unset `MovementThreshold` on **Windows 10**
-### 0.3.7 (Apr 17, 2014)
-* CB-6422: [windows8] use cordova/exec/proxy
-* CB-6212: [iOS] fix warnings compiled under arm64 64-bit
-* CB-5977: [android] Removing the Android Geolocation Code. Mission Accomplished.
-* CB-6460: Update license headers
-* Add NOTICE file
+### 1.0.1 (Jun 17, 2015)
+* [CB-9128](https://issues.apache.org/jira/browse/CB-9128) cordova-plugin-geolocation documentation translation: cordova-plugin-geolocation
+* fix npm md issue
+* [CB-8845](https://issues.apache.org/jira/browse/CB-8845) Updated comment why Android tests are currently pended
+* [CB-8845](https://issues.apache.org/jira/browse/CB-8845) Pended tests for Android
+* Add more install text for legacy versions of cordova tools. This closes #36
-### 0.3.8 (Jun 05, 2014)
-* CB-6127 Spanish and French Translations added. Github close #14
-* CB-6804 Add license
-* CB-5416 - Adding support for auto-managing permissions
-* CB-6491 add CONTRIBUTING.md
-* pass by only coords
-* proper implementation for firefoxos
-* call FxOS's getCurrentProxy added
+### 1.0.0 (Apr 15, 2015)
+* [CB-8746](https://issues.apache.org/jira/browse/CB-8746) gave plugin major version bump
+* [CB-8683](https://issues.apache.org/jira/browse/CB-8683) changed plugin-id to pacakge-name
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) properly updated translated docs to use new id
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) updated translated docs to use new id
+* Use TRAVIS_BUILD_DIR, install paramedic by npm
+* [CB-8681](https://issues.apache.org/jira/browse/CB-8681) Fixed occasional test failures
+* docs: added Windows to supported platforms
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) Updated Readme
+* [CB-8659](https://issues.apache.org/jira/browse/CB-8659): ios: 4.0.x Compatibility: Remove use of initWebView method
+* [CB-8659](https://issues.apache.org/jira/browse/CB-8659): ios: 4.0.x Compatibility: Remove use of deprecated headers
+* Wrong parameter in Firefox OS plugin
+* [CB-8568](https://issues.apache.org/jira/browse/CB-8568) Integrate TravisCI
+* [CB-8438](https://issues.apache.org/jira/browse/CB-8438) cordova-plugin-geolocation documentation translation: cordova-plugin-geolocation
+* [CB-8538](https://issues.apache.org/jira/browse/CB-8538) Added package.json file
+* [CB-8443](https://issues.apache.org/jira/browse/CB-8443) Geolocation tests fail on Windows due to done is called multiple times
-### 0.3.9 (Aug 06, 2014)
-* **FFOS** update GeolocationProxy.js
-* CB-7187 ios: Add explicit dependency on CoreLocation.framework
-* CB-7187 Delete unused #import of CDVShared.h
-* CB-6127 Updated translations for docs
-* ios: Changed distanceFilter from none to 5 meters, prevents it from spamming the callback even though nothing changed.
+### 0.3.12 (Feb 04, 2015)
+* [CB-8351](https://issues.apache.org/jira/browse/CB-8351) ios: Use argumentForIndex rather than NSArray extension
+### 0.3.11 (Dec 02, 2014)
+* Do not stop updating location when the error is `kCLErrorLocationUnknown`
+* [CB-8094](https://issues.apache.org/jira/browse/CB-8094) Pended auto tests for **Windows** Store since they require user interaction
+* [CB-8085](https://issues.apache.org/jira/browse/CB-8085) Fix geolocation plugin on **Windows**
+* [CB-7977](https://issues.apache.org/jira/browse/CB-7977) Mention `deviceready` in plugin docs
+* [CB-7700](https://issues.apache.org/jira/browse/CB-7700) cordova-plugin-geolocation documentation translation: cordova-plugin-geolocation
### 0.3.10 (Sep 17, 2014)
-* CB-7556 iOS: Clearing all Watches does not stop Location Services
-* CB-7158 Fix geolocation for ios 8
-* Revert CB-6911 partially (keeping Info.plist key installation for iOS 8)
-* CB-6911 Geolocation fails in iOS 8
-* CB-5114 Windows 8.1 - Use a new proxy as old geolocation methods is deprecated
-* CB-5114 Append Windows 8.1 into plugin.xml + Optimize Windows 8 Geolocation proxy
+* [CB-7556](https://issues.apache.org/jira/browse/CB-7556) iOS: Clearing all Watches does not stop Location Services
+* [CB-7158](https://issues.apache.org/jira/browse/CB-7158) Fix geolocation for ios 8
+* Revert [CB-6911](https://issues.apache.org/jira/browse/CB-6911) partially (keeping Info.plist key installation for iOS 8)
+* [CB-6911](https://issues.apache.org/jira/browse/CB-6911) Geolocation fails in iOS 8
+* [CB-5114](https://issues.apache.org/jira/browse/CB-5114) Windows 8.1 - Use a new proxy as old geolocation methods is deprecated
+* [CB-5114](https://issues.apache.org/jira/browse/CB-5114) Append Windows 8.1 into plugin.xml + Optimize Windows 8 Geolocation proxy
* Renamed test dir, added nested plugin.xml
* added documentation for manual tests
-* CB-7146 Added manual tests
+* [CB-7146](https://issues.apache.org/jira/browse/CB-7146) Added manual tests
* Removed js-module for tests from plugin.xml
* Changing cdvtest format to use module exports
* register tests using new style
* Convert tests to new style
* Removed amazon-fireos code for geolocation.
-* CB-7571 Bump version of nested plugin to match parent plugin
+* [CB-7571](https://issues.apache.org/jira/browse/CB-7571) Bump version of nested plugin to match parent plugin
-### 0.3.11 (Dec 02, 2014)
-* Do not stop updating location when the error is `kCLErrorLocationUnknown`
-* CB-8094 Pended auto tests for **Windows** Store since they require user interaction
-* CB-8085 Fix geolocation plugin on **Windows**
-* CB-7977 Mention `deviceready` in plugin docs
-* CB-7700 cordova-plugin-geolocation documentation translation: cordova-plugin-geolocation
+### 0.3.9 (Aug 06, 2014)
+* **FFOS** update GeolocationProxy.js
+* [CB-7187](https://issues.apache.org/jira/browse/CB-7187) ios: Add explicit dependency on CoreLocation.framework
+* [CB-7187](https://issues.apache.org/jira/browse/CB-7187) Delete unused #import of CDVShared.h
+* [CB-6127](https://issues.apache.org/jira/browse/CB-6127) Updated translations for docs
+* ios: Changed distanceFilter from none to 5 meters, prevents it from spamming the callback even though nothing changed.
-### 0.3.12 (Feb 04, 2015)
-* CB-8351 ios: Use argumentForIndex rather than NSArray extension
+### 0.3.8 (Jun 05, 2014)
+* [CB-6127](https://issues.apache.org/jira/browse/CB-6127) Spanish and French Translations added. Github close #14
+* [CB-6804](https://issues.apache.org/jira/browse/CB-6804) Add license
+* [CB-5416](https://issues.apache.org/jira/browse/CB-5416) - Adding support for auto-managing permissions
+* [CB-6491](https://issues.apache.org/jira/browse/CB-6491) add CONTRIBUTING.md
+* pass by only coords
+* proper implementation for firefoxos
+* call FxOS's getCurrentProxy added
-### 1.0.0 (Apr 15, 2015)
-* CB-8746 gave plugin major version bump
-* CB-8683 changed plugin-id to pacakge-name
-* CB-8653 properly updated translated docs to use new id
-* CB-8653 updated translated docs to use new id
-* Use TRAVIS_BUILD_DIR, install paramedic by npm
-* CB-8681 Fixed occasional test failures
-* docs: added Windows to supported platforms
-* CB-8653 Updated Readme
-* CB-8659: ios: 4.0.x Compatibility: Remove use of initWebView method
-* CB-8659: ios: 4.0.x Compatibility: Remove use of deprecated headers
-* Wrong parameter in Firefox OS plugin
-* CB-8568 Integrate TravisCI
-* CB-8438 cordova-plugin-geolocation documentation translation: cordova-plugin-geolocation
-* CB-8538 Added package.json file
-* CB-8443 Geolocation tests fail on Windows due to done is called multiple times
+### 0.3.7 (Apr 17, 2014)
+* [CB-6422](https://issues.apache.org/jira/browse/CB-6422): [windows8] use cordova/exec/proxy
+* [CB-6212](https://issues.apache.org/jira/browse/CB-6212): [iOS] fix warnings compiled under arm64 64-bit
+* [CB-5977](https://issues.apache.org/jira/browse/CB-5977): [android] Removing the Android Geolocation Code. Mission Accomplished.
+* [CB-6460](https://issues.apache.org/jira/browse/CB-6460): Update license headers
+* Add NOTICE file
-### 1.0.1 (Jun 17, 2015)
-* CB-9128 cordova-plugin-geolocation documentation translation: cordova-plugin-geolocation
-* fix npm md issue
-* CB-8845 Updated comment why Android tests are currently pended
-* CB-8845 Pended tests for Android
-* Add more install text for legacy versions of cordova tools. This closes #36
+### 0.3.6 (Feb 05, 2014)
+* add ubuntu platform support
+* [CB-5326](https://issues.apache.org/jira/browse/CB-5326) adding FFOS permission and updating supported platforms
+* [CB-5729](https://issues.apache.org/jira/browse/CB-5729) [BlackBerry10] Update GeolocationProxy to return collapsed object
+
+### 0.3.5 (Jan 02, 2014)
+* [CB-5658](https://issues.apache.org/jira/browse/CB-5658) Add doc/index.md for Geolocation plugin
+* windows8: adds missing reference to PositionError (w/o it the app crashes)
+* Removing incorrectly added closing comments for wp7 platform in plugin.xml
+
+### 0.3.4 (Dec 4, 2013)
+* Append proxy to platform definition in plugin.xml
+* Append windows 8 Geolocation proxy
+* Code clean-up for android src.
+* Updated amazon-fireos platform + reverting some of the fixes in android code.
+* Added amazon-fireos platform + some of the fixes in android code.
+* [CB-5334](https://issues.apache.org/jira/browse/CB-5334) [BlackBerry10] Use command proxy
+* call FxOS's getCurrentProxy added
+* pass by only coords
+* proper implementation for firefoxos
+
+### 0.3.3 (Oct 28, 2013)
+* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): add repo + issue tag to plugin.xml for geolocation plugin
+* [CB-4915](https://issues.apache.org/jira/browse/CB-4915) Incremented plugin version on dev branch.
+
+### 0.3.2 (Sept 25, 2013)
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) bumping&resetting version
+* [BlackBerry10] removed uneeded permission tags in plugin.xml
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) renaming org.apache.cordova.core.geolocation to org.apache.cordova.geolocation
+
+### 0.3.0 (Sept 5, 2013)
+* Added support for windows 8 (Adds required permission)
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/README.md
index 9cf693e5..17e14a53 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/README.md
@@ -218,7 +218,7 @@ Enthält `Position` koordinaten und Timestamp, erstellt von der Geolocation API.
* **coords**: eine Reihe von geographischen Koordinaten. *(Coordinates)*
- * **timestamp**: Zeitstempel der Erstellung für `coords` . *(Date)*
+ * **timestamp**: Zeitstempel der Erstellung für `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/index.md
index 3fe4e4a8..92b2079b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/de/index.md
@@ -205,7 +205,7 @@ Enthält `Position` koordinaten und Timestamp, erstellt von der Geolocation API.
* **coords**: eine Reihe von geographischen Koordinaten. *(Coordinates)*
-* **timestamp**: Zeitstempel der Erstellung für `coords` . *(Date)*
+* **timestamp**: Zeitstempel der Erstellung für `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/README.md
index 1a4bf006..7808a0e3 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/README.md
@@ -216,7 +216,7 @@ Contiene `Position` coordenadas y timestamp, creado por la API de geolocalizaciÃ
* **coordenadas**: un conjunto de coordenadas geográficas. *(Coordenadas)*
- * **timestamp**: fecha y hora de creación `coords` . *(Fecha)*
+ * **timestamp**: fecha y hora de creación `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/index.md
index 043e9294..041f3f82 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/es/index.md
@@ -164,7 +164,7 @@ Contiene `Position` coordenadas y timestamp, creado por la API de geolocalizaciÃ
* **coordenadas**: un conjunto de coordenadas geográficas. *(Coordenadas)*
-* **timestamp**: fecha y hora de creación `coords` . *(Fecha)*
+* **timestamp**: fecha y hora de creación `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/README.md
index f9865dc6..775a487f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/README.md
@@ -177,7 +177,7 @@ Contient `Position` coordonnées et timestamp, créé par l'API de géolocalisat
* **coords** : un ensemble de coordonnées géographiques. *(Coordinates)*
- * **timestamp** : horodatage de la création de `coords`. *(Date)*
+ * **timestamp** : horodatage de la création de `coords`. *(DOMTimeStamp)*
## Coordonnées
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/index.md
index bea18ddc..4d486375 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/fr/index.md
@@ -164,7 +164,7 @@ Contient `Position` coordonnées et timestamp, créé par l'API de géolocalisat
* **coords** : un ensemble de coordonnées géographiques. *(Coordinates)*
-* **timestamp** : horodatage de la création de `coords`. *(Date)*
+* **timestamp** : horodatage de la création de `coords`. *(DOMTimeStamp)*
## Coordonnées
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/README.md
index 8eb44be9..ffa472b3 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/README.md
@@ -218,7 +218,7 @@ Contiene le coordinate della `Position` e timestamp, creato da geolocation API.
* **CoOrds**: un insieme di coordinate geografiche. *(Coordinate)*
- * **timestamp**: timestamp di creazione per `coords` . *(Data)*
+ * **timestamp**: timestamp di creazione per `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/index.md
index 41412a07..7ba7c5c6 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/it/index.md
@@ -205,7 +205,7 @@ Contiene le coordinate della `Position` e timestamp, creato da geolocation API.
* **CoOrds**: un insieme di coordinate geografiche. *(Coordinate)*
-* **timestamp**: timestamp di creazione per `coords` . *(Data)*
+* **timestamp**: timestamp di creazione per `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/README.md
index a519d2c2..59c5ed6c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/README.md
@@ -218,7 +218,7 @@
* **coords**: 地ç†çš„座標ã®ã‚»ãƒƒãƒˆã€‚*(座標)*
- * **timestamp**: 作æˆã®ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’ `coords` 。*(日)*
+ * **timestamp**: 作æˆã®ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’ `coords` 。*(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/index.md
index 3a8b73a5..3a8b73a5 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ja/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/README.md
index 1c032293..dab50057 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/README.md
@@ -218,7 +218,7 @@
* **coords**: ì§€ë¦¬ì  ì¢Œí‘œ ì§‘í•©. *(좌표)*
- * **timestamp**: ìƒì„± 타임 ìŠ¤íƒ¬í”„ì— ëŒ€ 한 `coords` . *(ë‚ ì§œ)*
+ * **timestamp**: ìƒì„± 타임 ìŠ¤íƒ¬í”„ì— ëŒ€ 한 `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/index.md
index 2a3e7349..19f47c72 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ko/index.md
@@ -205,7 +205,7 @@
* **coords**: ì§€ë¦¬ì  ì¢Œí‘œ ì§‘í•©. *(좌표)*
-* **timestamp**: ìƒì„± 타임 ìŠ¤íƒ¬í”„ì— ëŒ€ 한 `coords` . *(ë‚ ì§œ)*
+* **timestamp**: ìƒì„± 타임 ìŠ¤íƒ¬í”„ì— ëŒ€ 한 `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/README.md
index 8d6717fd..0ef35c4e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/README.md
@@ -218,7 +218,7 @@ Zawiera współrzędne `Position` i sygnatury czasowej, stworzony przez geolocat
* **coords**: zestaw współrzędnych geograficznych. *(Współrzędne)*
- * **timestamp**: Sygnatura czasowa utworzenia dla `coords` . *(Data)*
+ * **timestamp**: Sygnatura czasowa utworzenia dla `coords` . *(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/index.md
index 6d08320e..6d08320e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/pl/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ru/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ru/index.md
index 3d9c766e..3d9c766e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/ru/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/ru/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/README.md
index 1ad9931e..b2afea51 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/README.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/README.md
@@ -218,7 +218,7 @@ Android 2.x 模擬器ä¸é™¤éž `enableHighAccuracy` é¸é …設置為 `true`,å¦
* **coords**: 一組的地ç†åº§æ¨™ã€‚*(座標)*
- * **timestamp**: 創建時間戳記為 `coords` 。*(日期)*
+ * **timestamp**: 創建時間戳記為 `coords` 。*(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/index.md b/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/index.md
index d6d831e7..c78a9f79 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/index.md
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/doc/zh/index.md
@@ -205,7 +205,7 @@ Android 2.x 模擬器ä¸é™¤éž `enableHighAccuracy` é¸é …設置為 `true`,å¦
* **coords**: 一組的地ç†åº§æ¨™ã€‚*(座標)*
-* **timestamp**: 創建時間戳記為 `coords` 。*(日期)*
+* **timestamp**: 創建時間戳記為 `coords` 。*(DOMTimeStamp)*
## Coordinates
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/package.json b/StoneIsland/plugins/cordova-plugin-geolocation/package.json
index dee3543b..a043d278 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/package.json
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-geolocation",
- "version": "1.0.1",
+ "version": "2.4.0",
"description": "Cordova Geolocation Plugin",
"cordova": {
"id": "cordova-plugin-geolocation",
@@ -36,6 +36,20 @@
"cordova-windows",
"cordova-firefoxos"
],
+ "scripts": {
+ "test": "npm run jshint",
+ "jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
+ },
"author": "Apache Software Foundation",
- "license": "Apache 2.0"
+ "license": "Apache-2.0",
+ "engines": {
+ "cordovaDependencies": {
+ "3.0.0": {
+ "cordova": ">100"
+ }
+ }
+ },
+ "devDependencies": {
+ "jshint": "^2.6.0"
+ }
}
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/plugin.xml b/StoneIsland/plugins/cordova-plugin-geolocation/plugin.xml
index 4c0a41d1..48abcafc 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/plugin.xml
@@ -22,7 +22,7 @@
xmlns:rim="http://www.blackberry.com/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-geolocation"
- version="1.0.1">
+ version="2.4.0">
<name>Geolocation</name>
<description>Cordova Geolocation Plugin</description>
@@ -31,14 +31,34 @@ xmlns:android="http://schemas.android.com/apk/res/android"
<repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git</repo>
<issue>https://issues.apache.org/jira/browse/CB/component/12320638</issue>
+ <dependency id="cordova-plugin-compat" version="^1.0.0" />
+
<!-- android -->
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-feature android:name="android.hardware.location.gps" />
+ </config-file>
+
+ <config-file target="res/xml/config.xml" parent="/*">
+ <feature name="Geolocation">
+ <param name="android-package" value="org.apache.cordova.geolocation.Geolocation" />
+ </feature>
</config-file>
+ <source-file src="src/android/Geolocation.java" target-dir="src/org/apache/cordova/geolocation/" />
+
+ <js-module src="www/android/geolocation.js" name="geolocation">
+ <clobbers target="navigator.geolocation" />
+ </js-module>
+
+ <!-- We don't expose PositionError via clobber on Android as we use it internally only -->
+ <js-module src="www/PositionError.js" name="PositionError">
+ <runs />
+ </js-module>
+
</platform>
<!-- amazon-fireos -->
@@ -48,9 +68,9 @@ xmlns:android="http://schemas.android.com/apk/res/android"
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</config-file>
-
+
</platform>
-
+
<!-- ios -->
<platform name="ios">
@@ -71,18 +91,18 @@ xmlns:android="http://schemas.android.com/apk/res/android"
</js-module>
<config-file target="config.xml" parent="/*">
- <feature name="Geolocation">
- <param name="ios-package" value="CDVLocation"/>
- </feature>
+ <feature name="Geolocation">
+ <param name="ios-package" value="CDVLocation"/>
+ </feature>
</config-file>
<header-file src="src/ios/CDVLocation.h" />
<source-file src="src/ios/CDVLocation.m" />
<framework src="CoreLocation.framework" />
-
+
<config-file target="*-Info.plist" parent="NSLocationWhenInUseUsageDescription">
<string></string>
</config-file>
-
+
</platform>
<!-- blackberry10 -->
@@ -218,7 +238,7 @@ xmlns:android="http://schemas.android.com/apk/res/android"
<clobbers target="navigator.geolocation" />
</js-module>
</platform>
-
+
<!-- firefoxos -->
<platform name="firefoxos">
<config-file target="config.xml" parent="/*">
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/android/Geolocation.java b/StoneIsland/plugins/cordova-plugin-geolocation/src/android/Geolocation.java
new file mode 100644
index 00000000..6452170a
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/android/Geolocation.java
@@ -0,0 +1,107 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+
+package org.apache.cordova.geolocation;
+
+import android.content.pm.PackageManager;
+import android.Manifest;
+import android.os.Build;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaArgs;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PermissionHelper;
+import org.apache.cordova.PluginResult;
+import org.apache.cordova.LOG;
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import javax.security.auth.callback.Callback;
+
+public class Geolocation extends CordovaPlugin {
+
+ String TAG = "GeolocationPlugin";
+ CallbackContext context;
+
+ String [] permissions = { Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION };
+
+
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ LOG.d(TAG, "We are entering execute");
+ context = callbackContext;
+ if(action.equals("getPermission"))
+ {
+ if(hasPermisssion())
+ {
+ PluginResult r = new PluginResult(PluginResult.Status.OK);
+ context.sendPluginResult(r);
+ return true;
+ }
+ else {
+ PermissionHelper.requestPermissions(this, 0, permissions);
+ }
+ return true;
+ }
+ return false;
+ }
+
+
+ public void onRequestPermissionResult(int requestCode, String[] permissions,
+ int[] grantResults) throws JSONException
+ {
+ PluginResult result;
+ //This is important if we're using Cordova without using Cordova, but we have the geolocation plugin installed
+ if(context != null) {
+ for (int r : grantResults) {
+ if (r == PackageManager.PERMISSION_DENIED) {
+ LOG.d(TAG, "Permission Denied!");
+ result = new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION);
+ context.sendPluginResult(result);
+ return;
+ }
+
+ }
+ result = new PluginResult(PluginResult.Status.OK);
+ context.sendPluginResult(result);
+ }
+ }
+
+ public boolean hasPermisssion() {
+ for(String p : permissions)
+ {
+ if(!PermissionHelper.hasPermission(this, p))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /*
+ * We override this so that we can access the permissions variable, which no longer exists in
+ * the parent class, since we can't initialize it reliably in the constructor!
+ */
+
+ public void requestPermissions(int requestCode)
+ {
+ PermissionHelper.requestPermissions(this, requestCode, permissions);
+ }
+
+
+
+}
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/firefoxos/GeolocationProxy.js b/StoneIsland/plugins/cordova-plugin-geolocation/src/firefoxos/GeolocationProxy.js
index e4b40529..e4b40529 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/src/firefoxos/GeolocationProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/firefoxos/GeolocationProxy.js
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.h b/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.h
index cce2738f..cce2738f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.h
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.h
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.m b/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.m
index 8b543c8e..e4b34a11 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.m
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/ios/CDVLocation.m
@@ -122,17 +122,17 @@
NSUInteger code = [CLLocationManager authorizationStatus];
if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)] || [self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) { //iOS8+
__highAccuracyEnabled = enableHighAccuracy;
- if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]){
- [self.locationManager requestAlwaysAuthorization];
- } else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]) {
- [self.locationManager requestWhenInUseAuthorization];
+ if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]){
+ [self.locationManager requestWhenInUseAuthorization];
+ } else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]) {
+ [self.locationManager requestAlwaysAuthorization];
} else {
NSLog(@"[Warning] No NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription key is defined in the Info.plist file.");
}
return;
}
#endif
-
+
// Tell the location manager to start notifying us of location updates. We
// first stop, and then start the updating to ensure we get at least one
// update, even if our location did not change.
@@ -148,9 +148,8 @@
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
} else {
__highAccuracyEnabled = NO;
- // TODO: Set distance filter to 10 meters? and desired accuracy to nearest ten meters? arbitrary.
self.locationManager.distanceFilter = 10;
- self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
+ self.locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
}
}
@@ -193,35 +192,37 @@
- (void)getLocation:(CDVInvokedUrlCommand*)command
{
- NSString* callbackId = command.callbackId;
- BOOL enableHighAccuracy = [[command argumentAtIndex:0] boolValue];
+ [self.commandDelegate runInBackground:^{
+ NSString* callbackId = command.callbackId;
+ BOOL enableHighAccuracy = [[command argumentAtIndex:0] boolValue];
- if ([self isLocationServicesEnabled] == NO) {
- NSMutableDictionary* posError = [NSMutableDictionary dictionaryWithCapacity:2];
- [posError setObject:[NSNumber numberWithInt:PERMISSIONDENIED] forKey:@"code"];
- [posError setObject:@"Location services are disabled." forKey:@"message"];
- CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError];
- [self.commandDelegate sendPluginResult:result callbackId:callbackId];
- } else {
- if (!self.locationData) {
- self.locationData = [[CDVLocationData alloc] init];
- }
- CDVLocationData* lData = self.locationData;
- if (!lData.locationCallbacks) {
- lData.locationCallbacks = [NSMutableArray arrayWithCapacity:1];
- }
+ if ([self isLocationServicesEnabled] == NO) {
+ NSMutableDictionary* posError = [NSMutableDictionary dictionaryWithCapacity:2];
+ [posError setObject:[NSNumber numberWithInt:PERMISSIONDENIED] forKey:@"code"];
+ [posError setObject:@"Location services are disabled." forKey:@"message"];
+ CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError];
+ [self.commandDelegate sendPluginResult:result callbackId:callbackId];
+ } else {
+ if (!self.locationData) {
+ self.locationData = [[CDVLocationData alloc] init];
+ }
+ CDVLocationData* lData = self.locationData;
+ if (!lData.locationCallbacks) {
+ lData.locationCallbacks = [NSMutableArray arrayWithCapacity:1];
+ }
- if (!__locationStarted || (__highAccuracyEnabled != enableHighAccuracy)) {
- // add the callbackId into the array so we can call back when get data
- if (callbackId != nil) {
- [lData.locationCallbacks addObject:callbackId];
+ if (!__locationStarted || (__highAccuracyEnabled != enableHighAccuracy)) {
+ // add the callbackId into the array so we can call back when get data
+ if (callbackId != nil) {
+ [lData.locationCallbacks addObject:callbackId];
+ }
+ // Tell the location manager to start notifying us of heading updates
+ [self startLocation:enableHighAccuracy];
+ } else {
+ [self returnLocationInfo:callbackId andKeepCallback:NO];
}
- // Tell the location manager to start notifying us of heading updates
- [self startLocation:enableHighAccuracy];
- } else {
- [self returnLocationInfo:callbackId andKeepCallback:NO];
}
- }
+ }];
}
- (void)addWatch:(CDVInvokedUrlCommand*)command
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.cpp b/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.cpp
index c820cfef..3d40ab4c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.cpp
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.cpp
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2013 Canonical Ltd.
+ * Copyright 2013-2016 Canonical Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,11 +21,19 @@
#include "geolocation.h"
-Geolocation::Geolocation(Cordova *cordova): CPlugin(cordova),
- _geoPositionInfoSource(QGeoPositionInfoSource::createDefaultSource(this)) {
+Geolocation::Geolocation(Cordova *cordova)
+ : CPlugin(cordova),
+ _geoPositionInfoSource(QGeoPositionInfoSource::createDefaultSource(this)) {
if (_geoPositionInfoSource.data() != 0) {
- QObject::connect(_geoPositionInfoSource.data(), SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionUpdated(QGeoPositionInfo)));
- QObject::connect(_geoPositionInfoSource.data(), SIGNAL(updateTimeout()), this, SLOT(updateTimeout()));
+ QObject::connect(_geoPositionInfoSource.data(),
+ SIGNAL(positionUpdated(QGeoPositionInfo)),
+ this,
+ SLOT(positionUpdated(QGeoPositionInfo)));
+
+ QObject::connect(_geoPositionInfoSource.data(),
+ SIGNAL(updateTimeout()),
+ this,
+ SLOT(updateTimeout()));
}
}
@@ -81,16 +89,22 @@ void Geolocation::positionUpdated(const QGeoPositionInfo &update) {
p.insert("latitude", coordinate.latitude());
p.insert("longitude", coordinate.longitude());
- p.insert("altitude", coordinate.altitude());
- if (update.hasAttribute(QGeoPositionInfo::VerticalAccuracy))
- p.insert("accuracy", update.attribute(QGeoPositionInfo::VerticalAccuracy));
+ if (coordinate.type() == QGeoCoordinate::Coordinate3D)
+ p.insert("altitude", coordinate.altitude());
+
+ if (update.hasAttribute(QGeoPositionInfo::HorizontalAccuracy))
+ p.insert("accuracy", update.attribute(QGeoPositionInfo::HorizontalAccuracy));
+
if (update.hasAttribute(QGeoPositionInfo::Direction))
p.insert("heading", update.attribute(QGeoPositionInfo::Direction));
+
if (update.hasAttribute(QGeoPositionInfo::GroundSpeed))
p.insert("velocity", update.attribute(QGeoPositionInfo::GroundSpeed));
- if (update.hasAttribute(QGeoPositionInfo::HorizontalAccuracy))
- p.insert("altitudeAccuracy", update.attribute(QGeoPositionInfo::HorizontalAccuracy));
+
+ if (update.hasAttribute(QGeoPositionInfo::VerticalAccuracy))
+ p.insert("altitudeAccuracy", update.attribute(QGeoPositionInfo::VerticalAccuracy));
+
p.insert("timestamp", update.timestamp().toMSecsSinceEpoch());
for (const QString &id: _id2sc.keys()) {
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.h b/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.h
index 7345bec9..7345bec9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.h
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/ubuntu/geolocation.h
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/windows/GeolocationProxy.js b/StoneIsland/plugins/cordova-plugin-geolocation/src/windows/GeolocationProxy.js
index 9cab6a4d..03ed4950 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/src/windows/GeolocationProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/windows/GeolocationProxy.js
@@ -14,27 +14,48 @@
* limitations under the License.
*/
-var PositionError = require('./PositionError'),
- ids = {},
- loc;
+/* global Windows, WinJS */
-function ensureLocator() {
- if (loc == null)
- loc = new Windows.Devices.Geolocation.Geolocator();
+var PositionError = require('./PositionError');
+var callbacks = {};
+var locs = {};
- return loc;
+// constants
+var FALLBACK_EPSILON = 0.001;
+
+function ensureAndCreateLocator() {
+ var deferral;
+
+ var loc = new Windows.Devices.Geolocation.Geolocator();
+
+ if (typeof Windows.Devices.Geolocation.Geolocator.requestAccessAsync === 'function') {
+ deferral = Windows.Devices.Geolocation.Geolocator.requestAccessAsync().then(function (result) {
+ if (result === Windows.Devices.Geolocation.GeolocationAccessStatus.allowed) {
+ return loc;
+ }
+
+ return WinJS.Promise.wrapError({
+ code: PositionError.PERMISSION_DENIED,
+ message: 'Geolocation access has not been allowed by user.'
+ });
+ });
+ } else {
+ deferral = WinJS.Promise.wrap(loc);
+ }
+
+ return deferral;
}
-function createErrorCode() {
+function createErrorCode(loc) {
switch (loc.locationStatus) {
case Windows.Devices.Geolocation.PositionStatus.initializing:
// This status indicates that a location device is still initializing
case Windows.Devices.Geolocation.PositionStatus.noData:
- // No location data is currently available
+ // No location data is currently available
case Windows.Devices.Geolocation.PositionStatus.notInitialized:
// This status indicates that the app has not yet requested
- // location data by calling GetGeolocationAsync() or
- // registering an event handler for the positionChanged event.
+ // location data by calling GetGeolocationAsync() or
+ // registering an event handler for the positionChanged event.
case Windows.Devices.Geolocation.PositionStatus.notAvailable:
// Location is not available on this version of Windows
return PositionError.POSITION_UNAVAILABLE;
@@ -55,8 +76,8 @@ function createResult(pos) {
velocity: pos.coordinate.speed,
altitudeAccuracy: pos.coordinate.altitudeAccuracy,
timestamp: pos.coordinate.timestamp
- }
-
+ };
+
if (pos.coordinate.point) {
res.latitude = pos.coordinate.point.position.latitude;
res.longitude = pos.coordinate.point.position.longitude;
@@ -66,55 +87,54 @@ function createResult(pos) {
res.longitude = pos.coordinate.longitude;
res.altitude = pos.coordinate.altitude;
}
-
+
return res;
}
module.exports = {
getLocation: function (success, fail, args, env) {
- ensureLocator();
- if (loc != null)
- {
- var highAccuracy = args[0],
- maxAge = args[1];
+ ensureAndCreateLocator().done(function (loc) {
+ if (loc) {
+ var highAccuracy = args[0],
+ maxAge = args[1];
- loc.desiredAccuracy = highAccuracy ?
- Windows.Devices.Geolocation.PositionAccuracy.high :
- Windows.Devices.Geolocation.PositionAccuracy.default;
+ loc.desiredAccuracy = highAccuracy ?
+ Windows.Devices.Geolocation.PositionAccuracy.high :
+ Windows.Devices.Geolocation.PositionAccuracy.default;
- loc.reportInterval = maxAge ? maxAge : 0;
+ loc.reportInterval = maxAge ? maxAge : 0;
- loc.getGeopositionAsync().then(
- function (pos) {
- success(createResult(pos));
- },
- function (err) {
- fail({
- code: createErrorCode(),
- message: err.message
- });
- }
- );
- }
- else
- {
- fail({
- code: PositionError.POSITION_UNAVAILABLE,
- message: "You do not have the required location services present on your system."
- });
- }
+ loc.getGeopositionAsync().then(
+ function (pos) {
+ success(createResult(pos));
+ },
+ function (err) {
+ fail({
+ code: createErrorCode(loc),
+ message: err.message
+ });
+ }
+ );
+ }
+ else {
+ fail({
+ code: PositionError.POSITION_UNAVAILABLE,
+ message: "You do not have the required location services present on your system."
+ });
+ }
+ }, fail);
},
addWatch: function (success, fail, args, env) {
- ensureLocator();
- var clientId = args[0],
- highAccuracy = args[1],
+ ensureAndCreateLocator().done(function (loc) {
+ var clientId = args[0];
+ var highAccuracy = args[1];
- onPositionChanged = function (e) {
- success(createResult(e.position), {keepCallback: true});
- },
+ var onPositionChanged = function (e) {
+ success(createResult(e.position), { keepCallback: true });
+ };
- onStatusChanged = function (e) {
+ var onStatusChanged = function (e) {
switch (e.status) {
case Windows.Devices.Geolocation.PositionStatus.noData:
case Windows.Devices.Geolocation.PositionStatus.notAvailable:
@@ -131,44 +151,52 @@ module.exports = {
});
break;
- case Windows.Devices.Geolocation.PositionStatus.initializing:
- case Windows.Devices.Geolocation.PositionStatus.ready:
+ // case Windows.Devices.Geolocation.PositionStatus.initializing:
+ // case Windows.Devices.Geolocation.PositionStatus.ready:
default:
break;
}
};
- loc.desiredAccuracy = highAccuracy ?
- Windows.Devices.Geolocation.PositionAccuracy.high :
- Windows.Devices.Geolocation.PositionAccuracy.default;
+ loc.desiredAccuracy = highAccuracy ?
+ Windows.Devices.Geolocation.PositionAccuracy.high :
+ Windows.Devices.Geolocation.PositionAccuracy.default;
- if (cordova.platformId == 'windows' && WinJS.Utilities.isPhone) {
- // on Windows Phone 8.1 'positionchanged' event fails with error below if movementThreshold is not set
- // JavaScript runtime error: Operation aborted
- // You must set the MovementThreshold property or the ReportInterval property before adding event handlers.
- // WinRT information: You must set the MovementThreshold property or the ReportInterval property before adding event handlers
- loc.movementThreshold = loc.movementThreshold || 1; // 1 meter
- }
+ if (cordova.platformId == 'windows') {
+ // 'positionchanged' event fails with error below if movementThreshold is not set
+ // JavaScript runtime error: Operation aborted
+ // You must set the MovementThreshold property or the ReportInterval property before adding event handlers.
+ // WinRT information: You must set the MovementThreshold property or the ReportInterval property before adding event handlers
+ if (Number.EPSILON) {
+ loc.movementThreshold = Number.EPSILON;
+ } else {
+ loc.movementThreshold = FALLBACK_EPSILON;
+ }
+ }
- loc.addEventListener("positionchanged", onPositionChanged);
- loc.addEventListener("statuschanged", onStatusChanged);
+ loc.addEventListener("positionchanged", onPositionChanged);
+ loc.addEventListener("statuschanged", onStatusChanged);
- ids[clientId] = { pos: onPositionChanged, status: onStatusChanged };
+ callbacks[clientId] = { pos: onPositionChanged, status: onStatusChanged };
+ locs[clientId] = loc;
+ }, fail);
},
clearWatch: function (success, fail, args, env) {
- var clientId = args[0],
- callbacks = ids[clientId];
+ var clientId = args[0];
+ var callback = callbacks[clientId];
+ var loc = locs[clientId];
- if (callbacks) {
- loc.removeEventListener("positionchanged", callbacks.pos);
- loc.removeEventListener("statuschanged", callbacks.status);
+ if (callback && loc) {
+ loc.removeEventListener("positionchanged", callback.pos);
+ loc.removeEventListener("statuschanged", callback.status);
- delete ids[clientId];
+ delete callbacks[clientId];
+ delete locs[clientId];
}
- success && success();
+ success();
}
};
-require("cordova/exec/proxy").add("Geolocation", module.exports); \ No newline at end of file
+require("cordova/exec/proxy").add("Geolocation", module.exports);
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/src/wp/GeoLocation.cs b/StoneIsland/plugins/cordova-plugin-geolocation/src/wp/GeoLocation.cs
index 42af72de..42af72de 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/src/wp/GeoLocation.cs
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/src/wp/GeoLocation.cs
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-geolocation/tests/plugin.xml
index edeb62e1..cf0f2f6d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/tests/plugin.xml
@@ -22,10 +22,11 @@
xmlns:rim="http://www.blackberry.com/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-geolocation-tests"
- version="1.0.1">
+ version="2.4.0">
<name>Cordova Geolocation Plugin Tests</name>
<license>Apache 2.0</license>
+ <dependency id="cordova-plugin-device" url="https://github.com/apache/cordova-plugin-device" />
<js-module src="tests.js" name="tests">
</js-module>
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/tests/tests.js b/StoneIsland/plugins/cordova-plugin-geolocation/tests/tests.js
index e07caf88..50c5bfb2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/tests/tests.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/tests/tests.js
@@ -18,43 +18,59 @@
* under the License.
*
*/
+
+/* jshint jasmine: true */
+/* global WinJS, device */
+
exports.defineAutoTests = function () {
var fail = function (done, context, message) {
- // prevents done() to be called several times
- if (context) {
- if (context.done) return;
- context.done = true;
- }
+ // prevents done() to be called several times
+ if (context) {
+ if (context.done) return;
+ context.done = true;
+ }
- if (message) {
- expect(false).toBe(true, message);
- } else {
- expect(false).toBe(true);
- }
+ if (message) {
+ expect(false).toBe(true, message);
+ } else {
+ expect(false).toBe(true);
+ }
- // watchPosition could call its callback sync (before returning the value)
- // so we invoke done async to make sure we know watcher id to .clear in afterEach
- setTimeout(function () {
- done();
- });
- },
- succeed = function (done, context) {
- // prevents done() to be called several times
- if (context) {
- if (context.done) return;
- context.done = true;
- }
+ // watchPosition could call its callback sync (before returning the value)
+ // so we invoke done async to make sure we know watcher id to .clear in afterEach
+ setTimeout(function () {
+ done();
+ });
+ };
+
+ var succeed = function (done, context) {
+ // prevents done() to be called several times
+ if (context) {
+ if (context.done) return;
+ context.done = true;
+ }
- expect(true).toBe(true);
+ expect(true).toBe(true);
+
+ // watchPosition could call its callback sync (before returning the value)
+ // so we invoke done async to make sure we know watcher id to .clear in afterEach
+ setTimeout(function () {
+ done();
+ });
+ };
+
+ // On Windows, some tests prompt user for permission to use geolocation and interrupt autotests run
+ var isWindowsStore = (cordova.platformId == "windows8") || (cordova.platformId == "windows" && !WinJS.Utilities.isPhone);
+ var majorDeviceVersion = null;
+ var versionRegex = /(\d)\..+/.exec(device.version);
+ if (versionRegex !== null) {
+ majorDeviceVersion = Number(versionRegex[1]);
+ }
+ // Starting from Android 6.0 there are confirmation dialog which prevents us from running auto tests in silent mode (user interaction needed)
+ // Also, Android emulator doesn't provide geo fix without manual interactions or mocks
+ var skipAndroid = cordova.platformId == "android" && (device.isVirtual || majorDeviceVersion >= 6);
+ var isIOSSim = false; // if iOS simulator does not have a location set, it will fail.
- // watchPosition could call its callback sync (before returning the value)
- // so we invoke done async to make sure we know watcher id to .clear in afterEach
- setTimeout(function () {
- done();
- });
- },
- isWindowsStore = (cordova.platformId == "windows8") || (cordova.platformId == "windows" && !WinJS.Utilities.isPhone),
- isAndroid = cordova.platformId == "android";
describe('Geolocation (navigator.geolocation)', function () {
@@ -84,10 +100,7 @@ exports.defineAutoTests = function () {
describe('error callback', function () {
it("geolocation.spec.5 should be called if we set timeout to 0 and maximumAge to a very small number", function (done) {
- // On Windows, this test prompts user for permission to use geolocation and interrupts autotests running.
- // On Android geolocation Api is not available on emulator so we pended tests until we found the way to detect
- // whether we run on emulator or real device from JavaScript. You can still run the tests on Android manually.
- if (isWindowsStore || isAndroid) {
+ if (isWindowsStore || skipAndroid) {
pending();
}
@@ -100,15 +113,32 @@ exports.defineAutoTests = function () {
});
});
+ it("geolocation.spec.9 on failure should return PositionError object with error code constants", function (done) {
+ if (isWindowsStore || skipAndroid) {
+ pending();
+ }
+
+ navigator.geolocation.getCurrentPosition(
+ fail.bind(this, done),
+ function(gpsError) {
+ // W3C specs: http://dev.w3.org/geo/api/spec-source.html#position_error_interface
+ expect(gpsError.PERMISSION_DENIED).toBe(1);
+ expect(gpsError.POSITION_UNAVAILABLE).toBe(2);
+ expect(gpsError.TIMEOUT).toBe(3);
+ done();
+ },
+ {
+ maximumAge: 0,
+ timeout: 0
+ });
+ });
+
});
describe('success callback', function () {
it("geolocation.spec.6 should be called with a Position object", function (done) {
- // On Windows, this test prompts user for permission to use geolocation and interrupts autotests running.
- // On Android geolocation Api is not available on emulator so we pended tests until we found the way to detect
- // whether we run on emulator or real device from JavaScript. You can still run the tests on Android manually.
- if (isWindowsStore || isAndroid) {
+ if (isWindowsStore || skipAndroid) {
pending();
}
@@ -116,8 +146,17 @@ exports.defineAutoTests = function () {
expect(p.coords).toBeDefined();
expect(p.timestamp).toBeDefined();
done();
+ }, function(err){
+ if(err.message && err.message.indexOf('kCLErrorDomain') > -1){
+ console.log("Error: Location not set in simulator, tests will fail.");
+ expect(true).toBe(true);
+ isIOSSim = true;
+ done();
+ }
+ else {
+ fail(done);
+ }
},
- fail.bind(null, done),
{
maximumAge: (5 * 60 * 1000) // 5 minutes maximum age of cached position
});
@@ -144,10 +183,7 @@ exports.defineAutoTests = function () {
});
it("geolocation.spec.7 should be called if we set timeout to 0 and maximumAge to a very small number", function (done) {
- // On Windows, this test prompts user for permission to use geolocation and interrupts autotests running.
- // On Android geolocation Api is not available on emulator so we pended tests until we found the way to detect
- // whether we run on emulator or real device from JavaScript. You can still run the tests on Android manually.
- if (isWindowsStore || isAndroid) {
+ if (isWindowsStore || skipAndroid) {
pending();
}
@@ -161,6 +197,31 @@ exports.defineAutoTests = function () {
});
});
+ it("geolocation.spec.10 on failure should return PositionError object with error code constants", function (done) {
+ if (isWindowsStore || skipAndroid) {
+ pending();
+ }
+
+ var context = this;
+ errorWatch = navigator.geolocation.watchPosition(
+ fail.bind(this, done, context, 'Unexpected win'),
+ function(gpsError) {
+ if (context.done) return;
+ context.done = true;
+
+ // W3C specs: http://dev.w3.org/geo/api/spec-source.html#position_error_interface
+ expect(gpsError.PERMISSION_DENIED).toBe(1);
+ expect(gpsError.POSITION_UNAVAILABLE).toBe(2);
+ expect(gpsError.TIMEOUT).toBe(3);
+
+ done();
+ },
+ {
+ maximumAge: 0,
+ timeout: 0
+ });
+ });
+
});
describe('success callback', function () {
@@ -171,10 +232,7 @@ exports.defineAutoTests = function () {
});
it("geolocation.spec.8 should be called with a Position object", function (done) {
- // On Windows, this test prompts user for permission to use geolocation and interrupts autotests running.
- // On Android geolocation Api is not available on emulator so we pended tests until we found the way to detect
- // whether we run on emulator or real device from JavaScript. You can still run the tests on Android manually.
- if (isWindowsStore || isAndroid) {
+ if (isWindowsStore || skipAndroid || isIOSSim) {
pending();
}
@@ -196,6 +254,7 @@ exports.defineAutoTests = function () {
{
maximumAge: (5 * 60 * 1000) // 5 minutes maximum age of cached position
});
+ expect(successWatch).toBeDefined();
});
});
@@ -209,23 +268,49 @@ exports.defineAutoTests = function () {
/******************************************************************************/
exports.defineManualTests = function (contentEl, createActionButton) {
- var newGeolocation = navigator.geolocation;
- var origGeolocation = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
- if (!origGeolocation) {
- origGeolocation = newGeolocation;
- newGeolocation = null;
+ var watchLocationId = null;
+
+ /**
+ * Set location status
+ */
+ function setLocationStatus(status) {
+ document.getElementById('location_status').innerHTML = status;
+ }
+ function setLocationDetails(p) {
+ var date = (new Date(p.timestamp));
+ document.getElementById('latitude').innerHTML = p.coords.latitude;
+ document.getElementById('longitude').innerHTML = p.coords.longitude;
+ document.getElementById('altitude').innerHTML = p.coords.altitude;
+ document.getElementById('accuracy').innerHTML = p.coords.accuracy;
+ document.getElementById('heading').innerHTML = p.coords.heading;
+ document.getElementById('speed').innerHTML = p.coords.speed;
+ document.getElementById('altitude_accuracy').innerHTML = p.coords.altitudeAccuracy;
+ document.getElementById('timestamp').innerHTML = date.toDateString() + " " + date.toTimeString();
}
- var watchLocationId = null;
+ /**
+ * Stop watching the location
+ */
+ function stopLocation() {
+ var geo = navigator.geolocation;
+ if (!geo) {
+ alert('navigator.geolocation object is missing.');
+ return;
+ }
+ setLocationStatus("Stopped");
+ if (watchLocationId) {
+ geo.clearWatch(watchLocationId);
+ watchLocationId = null;
+ }
+ }
/**
* Start watching location
*/
- var watchLocation = function (usePlugin) {
- console.log("watchLocation()");
- var geo = usePlugin ? newGeolocation : origGeolocation;
+ var watchLocation = function () {
+ var geo = navigator.geolocation;
if (!geo) {
- alert('geolocation object is missing. usePlugin = ' + usePlugin);
+ alert('navigator.geolocation object is missing.');
return;
}
@@ -246,30 +331,12 @@ exports.defineManualTests = function (contentEl, createActionButton) {
};
/**
- * Stop watching the location
- */
- var stopLocation = function (usePlugin) {
- console.log("stopLocation()");
- var geo = usePlugin ? newGeolocation : origGeolocation;
- if (!geo) {
- alert('geolocation object is missing. usePlugin = ' + usePlugin);
- return;
- }
- setLocationStatus("Stopped");
- if (watchLocationId) {
- geo.clearWatch(watchLocationId);
- watchLocationId = null;
- }
- };
-
- /**
* Get current location
*/
- var getLocation = function (usePlugin, opts) {
- console.log("getLocation()");
- var geo = usePlugin ? newGeolocation : origGeolocation;
+ var getLocation = function (opts) {
+ var geo = navigator.geolocation;
if (!geo) {
- alert('geolocation object is missing. usePlugin = ' + usePlugin);
+ alert('navigator.geolocation object is missing.');
return;
}
@@ -295,24 +362,6 @@ exports.defineManualTests = function (contentEl, createActionButton) {
};
- /**
- * Set location status
- */
- var setLocationStatus = function (status) {
- document.getElementById('location_status').innerHTML = status;
- };
- var setLocationDetails = function (p) {
- var date = (new Date(p.timestamp));
- document.getElementById('latitude').innerHTML = p.coords.latitude;
- document.getElementById('longitude').innerHTML = p.coords.longitude;
- document.getElementById('altitude').innerHTML = p.coords.altitude;
- document.getElementById('accuracy').innerHTML = p.coords.accuracy;
- document.getElementById('heading').innerHTML = p.coords.heading;
- document.getElementById('speed').innerHTML = p.coords.speed;
- document.getElementById('altitude_accuracy').innerHTML = p.coords.altitudeAccuracy;
- document.getElementById('timestamp').innerHTML = date.toDateString() + " " + date.toTimeString();
- }
-
/******************************************************************************/
var location_div = '<div id="info">' +
@@ -365,16 +414,6 @@ exports.defineManualTests = function (contentEl, createActionButton) {
'</table>' +
'</div>',
actions =
- '<h2>Use Built-in WebView navigator.geolocation</h2>' +
- '<div id="built-in-getLocation"></div>' +
- 'Expected result: Will update all applicable values in status box for current location. Status will read Retrieving Location (may not see this if location is retrieved immediately) then Done.' +
- '<p/> <div id="built-in-watchLocation"></div>' +
- 'Expected result: Will update all applicable values in status box for current location and update as location changes. Status will read Running.' +
- '<p/> <div id="built-in-stopLocation"></div>' +
- 'Expected result: Will stop watching the location so values will not be updated. Status will read Stopped.' +
- '<p/> <div id="built-in-getOld"></div>' +
- 'Expected result: Will update location values with a cached position that is up to 30 seconds old. Verify with time value. Status will read Done.' +
- '<h2>Use Cordova Geolocation Plugin</h2>' +
'<div id="cordova-getLocation"></div>' +
'Expected result: Will update all applicable values in status box for current location. Status will read Retrieving Location (may not see this if location is retrieved immediately) then Done.' +
'<p/> <div id="cordova-watchLocation"></div>' +
@@ -388,38 +427,22 @@ exports.defineManualTests = function (contentEl, createActionButton) {
note =
'<h3>Allow use of current location, if prompted</h3>';
- contentEl.innerHTML = values_info + location_div + latitude + longitude + altitude + accuracy + heading + speed
- + altitude_accuracy + time + note + actions;
-
- createActionButton('Get Location', function () {
- getLocation(false);
- }, 'built-in-getLocation');
-
- createActionButton('Start Watching Location', function () {
- watchLocation(false);
- }, 'built-in-watchLocation');
-
- createActionButton('Stop Watching Location', function () {
- stopLocation(false);
- }, 'built-in-stopLocation');
-
- createActionButton('Get Location Up to 30 Sec Old', function () {
- getLocation(false, { maximumAge: 30000 });
- }, 'built-in-getOld');
+ contentEl.innerHTML = values_info + location_div + latitude + longitude + altitude + accuracy + heading + speed +
+ altitude_accuracy + time + note + actions;
createActionButton('Get Location', function () {
- getLocation(true);
+ getLocation();
}, 'cordova-getLocation');
createActionButton('Start Watching Location', function () {
- watchLocation(true);
+ watchLocation();
}, 'cordova-watchLocation');
createActionButton('Stop Watching Location', function () {
- stopLocation(true);
+ stopLocation();
}, 'cordova-stopLocation');
createActionButton('Get Location Up to 30 Sec Old', function () {
- getLocation(true, { maximumAge: 30000 });
+ getLocation({ maximumAge: 30000 });
}, 'cordova-getOld');
};
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/www/Coordinates.js b/StoneIsland/plugins/cordova-plugin-geolocation/www/Coordinates.js
index 84fdd5b8..84fdd5b8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/www/Coordinates.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/www/Coordinates.js
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/www/Position.js b/StoneIsland/plugins/cordova-plugin-geolocation/www/Position.js
index f0470dea..d6b2c0cc 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/www/Position.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/www/Position.js
@@ -27,7 +27,7 @@ var Position = function(coords, timestamp) {
} else {
this.coords = new Coordinates();
}
- this.timestamp = (timestamp !== undefined) ? timestamp : new Date();
+ this.timestamp = (timestamp !== undefined) ? timestamp : new Date().getTime();
};
module.exports = Position;
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/www/PositionError.js b/StoneIsland/plugins/cordova-plugin-geolocation/www/PositionError.js
index 9403f11f..94562407 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/www/PositionError.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/www/PositionError.js
@@ -31,8 +31,8 @@ var PositionError = function(code, message) {
this.message = message || '';
};
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
+PositionError.prototype.PERMISSION_DENIED = PositionError.PERMISSION_DENIED = 1;
+PositionError.prototype.POSITION_UNAVAILABLE = PositionError.POSITION_UNAVAILABLE = 2;
+PositionError.prototype.TIMEOUT = PositionError.TIMEOUT = 3;
module.exports = PositionError;
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/www/android/geolocation.js b/StoneIsland/plugins/cordova-plugin-geolocation/www/android/geolocation.js
new file mode 100644
index 00000000..7265bec0
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/www/android/geolocation.js
@@ -0,0 +1,71 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var exec = cordova.require('cordova/exec');
+var utils = require('cordova/utils');
+var PositionError = require('./PositionError');
+
+// Native watchPosition method is called async after permissions prompt.
+// So we use additional map and own ids to return watch id synchronously.
+var pluginToNativeWatchMap = {};
+
+module.exports = {
+ getCurrentPosition: function(success, error, args) {
+ var win = function() {
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ geo.getCurrentPosition(success, error, args);
+ };
+ var fail = function() {
+ if (error) {
+ error(new PositionError (PositionError.PERMISSION_DENIED, 'Illegal Access'));
+ }
+ };
+ exec(win, fail, "Geolocation", "getPermission", []);
+ },
+
+ watchPosition: function(success, error, args) {
+ var pluginWatchId = utils.createUUID();
+
+ var win = function() {
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ pluginToNativeWatchMap[pluginWatchId] = geo.watchPosition(success, error, args);
+ };
+
+ var fail = function() {
+ if (error) {
+ error(new PositionError(PositionError.PERMISSION_DENIED, 'Illegal Access'));
+ }
+ };
+ exec(win, fail, "Geolocation", "getPermission", []);
+
+ return pluginWatchId;
+ },
+
+ clearWatch: function(pluginWatchId) {
+ var win = function() {
+ var nativeWatchId = pluginToNativeWatchMap[pluginWatchId];
+ var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
+ geo.clearWatch(nativeWatchId);
+ };
+
+ exec(win, null, "Geolocation", "getPermission", []);
+ }
+};
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/www/blackberry10/GeolocationProxy.js b/StoneIsland/plugins/cordova-plugin-geolocation/www/blackberry10/GeolocationProxy.js
index 0bba2263..0bba2263 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/www/blackberry10/GeolocationProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/www/blackberry10/GeolocationProxy.js
diff --git a/StoneIsland/plugins/cordova-plugin-geolocation/www/geolocation.js b/StoneIsland/plugins/cordova-plugin-geolocation/www/geolocation.js
index 3814919a..f1f64456 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-geolocation/www/geolocation.js
+++ b/StoneIsland/plugins/cordova-plugin-geolocation/www/geolocation.js
@@ -102,7 +102,7 @@ var geolocation = {
velocity:p.velocity,
altitudeAccuracy:p.altitudeAccuracy
},
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
+ p.timestamp
);
geolocation.lastPosition = pos;
successCallback(pos);
@@ -118,7 +118,7 @@ var geolocation = {
// Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just
// fire the success callback with the cached position.
- if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) {
+ if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp) <= options.maximumAge)) {
successCallback(geolocation.lastPosition);
// If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object.
} else if (options.timeout === 0) {
@@ -184,7 +184,7 @@ var geolocation = {
velocity:p.velocity,
altitudeAccuracy:p.altitudeAccuracy
},
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
+ p.timestamp
);
geolocation.lastPosition = pos;
successCallback(pos);
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/CONTRIBUTING.md
index 4c8e6a5e..39378f26 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/CONTRIBUTING.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/CONTRIBUTING.md
@@ -26,7 +26,7 @@ Anyone can contribute to Cordova. And we need your contributions.
There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
-For instructions on this, start with the
+For instructions on this, start with the
[contribution overview](http://cordova.apache.org/contribute/).
The details are explained there, but the important items are:
@@ -35,3 +35,30 @@ The details are explained there, but the important items are:
- Run the tests so your patch doesn't break existing functionality.
We look forward to your contributions!
+
+The notes on [Commit Workflow](https://github.com/apache/cordova-coho/blob/master/docs/committer-workflow.md#commit-workflow) can be helpful even if you are not a committer.
+
+## Running plugin tests
+
+* clone and install [cordova-plugin-test-framework](https://github.com/apache/cordova-plugin-test-framework)
+```
+git clone git@github.com:apache/cordova-plugin-test-framework.git
+```
+* edit ```cordova-plugin-test-framework/www/assets/index.html``` and add the following line
+```
+<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com http://cordova.apache.org http://google.co.uk https://google.co.uk 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
+```
+* create test project
+```
+cordova create plugintest
+cd plugintest
+cordova platform add android
+cordova plugin add ../cordova-plugin-inappbrowser
+cordova plugin add ../cordova-plugin-inappbrowser/tests
+cordova plugin add ../cordova-plugin-test-framework
+```
+* edit ```config.xml``` and replace ```<content src="index.html" />``` with ```<content src="cdvtests/index.html" />```
+* run application
+```
+cordova run
+```
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/LICENSE b/StoneIsland/plugins/cordova-plugin-inappbrowser/LICENSE
index 7a4a3ea2..7a4a3ea2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/LICENSE
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/LICENSE
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/NOTICE b/StoneIsland/plugins/cordova-plugin-inappbrowser/NOTICE
index 8ec56a52..8ec56a52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/NOTICE
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/NOTICE
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/README.md
index f5c847d1..e7e96972 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/README.md
@@ -1,3 +1,7 @@
+---
+title: Inappbrowser
+description: Open an in-app browser window.
+---
<!--
# license: Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,8 +21,16 @@
# under the License.
-->
+|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI |
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-inappbrowser)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-inappbrowser/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-inappbrowser.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-inappbrowser)|
+
# cordova-plugin-inappbrowser
+You can show helpful articles, videos, and web resources inside of your app. Users can view web pages without leaving your app.
+
+> To get a few ideas, check out the [sample](#sample) at the bottom of this page or go straight to the [reference](#reference) content.
+
This plugin provides a web browser view that displays when calling `cordova.InAppBrowser.open()`.
var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
@@ -54,10 +66,10 @@ Although `window.open` is in the global scope, InAppBrowser is not available unt
console.log("window.open works well");
}
-:warning: Report issues on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20InAppBrowser%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
-
+Report issues with this plugin on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20InAppBrowser%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
+## <a id="reference">Reference
## Installation
cordova plugin add cordova-plugin-inappbrowser
@@ -77,7 +89,7 @@ instance, or the system browser.
var ref = cordova.InAppBrowser.open(url, target, options);
-- __ref__: Reference to the `InAppBrowser` window. _(InAppBrowser)_
+- __ref__: Reference to the `InAppBrowser` window when the target is set to `'_blank'`. _(InAppBrowser)_
- __url__: The URL to load _(String)_. Call `encodeURI()` on this if the URL contains Unicode characters.
@@ -100,6 +112,8 @@ instance, or the system browser.
- __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened
- __zoom__: set to `yes` to show Android browser's zoom controls, set to `no` to hide them. Default value is `yes`.
- __hardwareback__: set to `yes` to use the hardware back button to navigate backwards through the `InAppBrowser`'s history. If there is no previous page, the `InAppBrowser` will close. The default value is `yes`, so you must set it to `no` if you want the back button to simply close the InAppBrowser.
+ - __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
+ - __shouldPauseOnSuspend__: Set to `yes` to make InAppBrowser WebView to pause/resume with the app to stop background audio (this may be required to avoid Google Play issues like described in [CB-11013](https://issues.apache.org/jira/browse/CB-11013)).
iOS only:
@@ -110,7 +124,7 @@ instance, or the system browser.
- __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened
- __toolbar__: set to `yes` or `no` to turn the toolbar on or off for the InAppBrowser (defaults to `yes`)
- __enableViewportScale__: Set to `yes` or `no` to prevent viewport scaling through a meta tag (defaults to `no`).
- - __mediaPlaybackRequiresUserAction__: Set to `yes` or `no` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
+ - __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`).
- __allowInlineMediaPlayback__: Set to `yes` or `no` to allow in-line HTML5 media playback, displaying within the browser window rather than a device-specific playback interface. The HTML's `video` element must also include the `webkit-playsinline` attribute (defaults to `no`)
- __keyboardDisplayRequiresUserAction__: Set to `yes` or `no` to open the keyboard when form elements receive focus via JavaScript's `focus()` call (defaults to `yes`).
- __suppressesIncrementalRendering__: Set to `yes` or `no` to wait until all new view content is received before being rendered (defaults to `no`).
@@ -122,6 +136,7 @@ instance, or the system browser.
- __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally.
- __fullscreen__: set to `yes` to create the browser control without a border around it. Please note that if __location=no__ is also specified, there will be no control presented to user to close IAB window.
+ - __hardwareback__: works the same way as on Android platform.
### Supported Platforms
@@ -172,6 +187,10 @@ opened with `target='_blank'`. The rules might look like these
### Windows Quirks
+Windows 8.0, 8.1 and Windows Phone 8.1 don't support remote urls to be opened in the Cordova WebView so remote urls are always showed in the system's web browser if opened with `target='_self'`.
+
+On Windows 10 if the URL is NOT in the white list and is opened with `target='_self'` it will be showed in the system's web browser instead of InAppBrowser popup.
+
Similar to Firefox OS IAB window visual behaviour can be overridden via `inAppBrowserWrap`/`inAppBrowserWrapFullscreen` CSS classes
### Browser Quirks
@@ -182,7 +201,7 @@ Similar to Firefox OS IAB window visual behaviour can be overridden via `inAppBr
## InAppBrowser
-The object returned from a call to `cordova.InAppBrowser.open`.
+The object returned from a call to `cordova.InAppBrowser.open` when the target is set to `'_blank'`.
### Methods
@@ -193,7 +212,7 @@ The object returned from a call to `cordova.InAppBrowser.open`.
- executeScript
- insertCSS
-## addEventListener
+## InAppBrowser.addEventListener
> Adds a listener for an event from the `InAppBrowser`.
@@ -210,6 +229,76 @@ The object returned from a call to `cordova.InAppBrowser.open`.
- __callback__: the function that executes when the event fires. The function is passed an `InAppBrowserEvent` object as a parameter.
+## Example
+
+```javascript
+
+var inAppBrowserRef;
+
+function showHelp(url) {
+
+ var target = "_blank";
+
+ var options = "location=yes,hidden=yes";
+
+ inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);
+
+ inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
+
+ inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);
+
+ inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);
+
+}
+
+function loadStartCallBack() {
+
+ $('#status-message').text("loading please wait ...");
+
+}
+
+function loadStopCallBack() {
+
+ if (inAppBrowserRef != undefined) {
+
+ inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
+
+ $('#status-message').text("");
+
+ inAppBrowserRef.show();
+ }
+
+}
+
+function loadErrorCallBack(params) {
+
+ $('#status-message').text("");
+
+ var scriptErrorMesssage =
+ "alert('Sorry we cannot open that page. Message from the server is : "
+ + params.message + "');"
+
+ inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);
+
+ inAppBrowserRef.close();
+
+ inAppBrowserRef = undefined;
+
+}
+
+function executeScriptCallBack(params) {
+
+ if (params[0] == null) {
+
+ $('#status-message').text(
+ "Sorry we couldn't open that page. Message from the server is : '"
+ + params.message + "'");
+ }
+
+}
+
+```
+
### InAppBrowserEvent Properties
- __type__: the eventname, either `loadstart`, `loadstop`, `loaderror`, or `exit`. _(String)_
@@ -239,7 +328,7 @@ The object returned from a call to `cordova.InAppBrowser.open`.
var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.addEventListener('loadstart', function(event) { alert(event.url); });
-## removeEventListener
+## InAppBrowser.removeEventListener
> Removes a listener for an event from the `InAppBrowser`.
@@ -273,7 +362,7 @@ The function is passed an `InAppBrowserEvent` object.
ref.addEventListener('loadstart', myCallback);
ref.removeEventListener('loadstart', myCallback);
-## close
+## InAppBrowser.close
> Closes the `InAppBrowser` window.
@@ -296,7 +385,7 @@ The function is passed an `InAppBrowserEvent` object.
var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.close();
-## show
+## InAppBrowser.show
> Displays an InAppBrowser window that was opened hidden. Calling this has no effect if the InAppBrowser was already visible.
@@ -318,7 +407,7 @@ The function is passed an `InAppBrowserEvent` object.
// some time later...
ref.show();
-## executeScript
+## InAppBrowser.executeScript
> Injects JavaScript code into the `InAppBrowser` window
@@ -360,7 +449,7 @@ The function is passed an `InAppBrowserEvent` object.
Due to [MSDN docs](https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.webview.invokescriptasync.aspx) the invoked script can return only string values, otherwise the parameter, passed to __callback__ will be `[null]`.
-## insertCSS
+## InAppBrowser.insertCSS
> Injects CSS into the `InAppBrowser` window.
@@ -387,3 +476,204 @@ Due to [MSDN docs](https://msdn.microsoft.com/en-us/library/windows.ui.xaml.cont
ref.addEventListener('loadstop', function() {
ref.insertCSS({file: "mystyles.css"});
});
+__
+
+## <a id="sample"></a>Sample: Show help pages with an InAppBrowser
+
+You can use this plugin to show helpful documentation pages within your app. Users can view online help documents and then close them without leaving the app.
+
+Here's a few snippets that show how you do this.
+
+* [Give users a way to ask for help](#give).
+* [Load a help page](#load).
+* [Let users know that you're getting their page ready](#let).
+* [Show the help page](#show).
+* [Handle page errors](#handle).
+
+### <a id="give"></a>Give users a way to ask for help
+
+There's lots of ways to do this in your app. A drop down list is a simple way to do that.
+
+```html
+
+<select id="help-select">
+ <option value="default">Need help?</option>
+ <option value="article">Show me a helpful article</option>
+ <option value="video">Show me a helpful video</option>
+ <option value="search">Search for other topics</option>
+</select>
+
+```
+
+Gather the users choice in the ``onDeviceReady`` function of the page and then send an appropriate URL to a helper function in some shared library file. Our helper function is named ``showHelp()`` and we'll write that function next.
+
+```javascript
+
+$('#help-select').on('change', function (e) {
+
+ var url;
+
+ switch (this.value) {
+
+ case "article":
+ url = "https://cordova.apache.org/docs/en/latest/"
+ + "reference/cordova-plugin-inappbrowser/index.html";
+ break;
+
+ case "video":
+ url = "https://youtu.be/F-GlVrTaeH0";
+ break;
+
+ case "search":
+ url = "https://www.google.com/#q=inAppBrowser+plugin";
+ break;
+ }
+
+ showHelp(url);
+
+});
+
+```
+
+### <a id="load"></a>Load a help page
+
+We'll use the ``open`` function to load the help page. We're setting the ``hidden`` property to ``yes`` so that we can show the browser only after the page content has loaded. That way, users don't see a blank browser while they wait for content to appear. When the ``loadstop`` event is raised, we'll know when the content has loaded. We'll handle that event shortly.
+
+```javascript
+
+function showHelp(url) {
+
+ var target = "_blank";
+
+ var options = "location=yes,hidden=yes";
+
+ inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);
+
+ inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
+
+ inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);
+
+ inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);
+
+}
+
+```
+
+### <a id="let"></a>Let users know that you're getting their page ready
+
+Because the browser doesn't immediately appear, we can use the ``loadstart`` event to show a status message, progress bar, or other indicator. This assures users that content is on the way.
+
+```javascript
+
+function loadStartCallBack() {
+
+ $('#status-message').text("loading please wait ...");
+
+}
+
+```
+
+### <a id="show"></a>Show the help page
+
+When the ``loadstopcallback`` event is raised, we know that the content has loaded and we can make the browser visible. This sort of trick can create the impression of better performance. The truth is that whether you show the browser before content loads or not, the load times are exactly the same.
+
+```javascript
+
+function loadStopCallBack() {
+
+ if (inAppBrowserRef != undefined) {
+
+ inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
+
+ $('#status-message').text("");
+
+ inAppBrowserRef.show();
+ }
+
+}
+
+```
+You might have noticed the call to the ``insertCSS`` function. This serves no particular purpose in our scenario. But it gives you an idea of why you might use it. In this case, we're just making sure that the font size of your pages have a certain size. You can use this function to insert any CSS style elements. You can even point to a CSS file in your project.
+
+### <a id="handle"></a>Handle page errors
+
+Sometimes a page no longer exists, a script error occurs, or a user lacks permission to view the resource. How or if you handle that situation is completely up to you and your design. You can let the browser show that message or you can present it in another way.
+
+We'll try to show that error in a message box. We can do that by injecting a script that calls the ``alert`` function. That said, this won't work in browsers on Windows devices so we'll have to look at the parameter of the ``executeScript`` callback function to see if our attempt worked. If it didn't work out for us, we'll just show the error message in a ``<div>`` on the page.
+
+```javascript
+
+function loadErrorCallBack(params) {
+
+ $('#status-message').text("");
+
+ var scriptErrorMesssage =
+ "alert('Sorry we cannot open that page. Message from the server is : "
+ + params.message + "');"
+
+ inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);
+
+ inAppBrowserRef.close();
+
+ inAppBrowserRef = undefined;
+
+}
+
+function executeScriptCallBack(params) {
+
+ if (params[0] == null) {
+
+ $('#status-message').text(
+ "Sorry we couldn't open that page. Message from the server is : '"
+ + params.message + "'");
+ }
+
+}
+
+```
+
+## More Usage Info
+
+### Local Urls ( source is in the app package )
+```
+var iab = cordova.InAppBrowser;
+
+iab.open('local-url.html'); // loads in the Cordova WebView
+iab.open('local-url.html', '_self'); // loads in the Cordova WebView
+iab.open('local-url.html', '_system'); // Security error: system browser, but url will not load (iOS)
+iab.open('local-url.html', '_blank'); // loads in the InAppBrowser
+iab.open('local-url.html', 'random_string'); // loads in the InAppBrowser
+iab.open('local-url.html', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar
+
+```
+
+
+
+### Whitelisted Content
+
+```
+var iab = cordova.InAppBrowser;
+
+iab.open('http://whitelisted-url.com'); // loads in the Cordova WebView
+iab.open('http://whitelisted-url.com', '_self'); // loads in the Cordova WebView
+iab.open('http://whitelisted-url.com', '_system'); // loads in the system browser
+iab.open('http://whitelisted-url.com', '_blank'); // loads in the InAppBrowser
+iab.open('http://whitelisted-url.com', 'random_string'); // loads in the InAppBrowser
+
+iab.open('http://whitelisted-url.com', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar
+
+```
+
+### Urls that are not white-listed
+
+```
+var iab = cordova.InAppBrowser;
+
+iab.open('http://url-that-fails-whitelist.com'); // loads in the InAppBrowser
+iab.open('http://url-that-fails-whitelist.com', '_self'); // loads in the InAppBrowser
+iab.open('http://url-that-fails-whitelist.com', '_system'); // loads in the system browser
+iab.open('http://url-that-fails-whitelist.com', '_blank'); // loads in the InAppBrowser
+iab.open('http://url-that-fails-whitelist.com', 'random_string'); // loads in the InAppBrowser
+iab.open('http://url-that-fails-whitelist.com', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar
+
+``` \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/RELEASENOTES.md
index 1e2005d8..5d8f3e71 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/RELEASENOTES.md
@@ -20,6 +20,72 @@
-->
# Release Notes
+### 1.5.0 (Sep 08, 2016)
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies
+* Add intent scheme to be handled by OS
+* Plugin uses `Android Log class` and not `Cordova LOG class`
+* Adding links to guide content and reference content at the top of the readme file Github: close #163
+* [CB-10973](https://issues.apache.org/jira/browse/CB-10973) **Browser**: wrong height of webview with `location=yes`
+* Size and position in browser platform
+* [CB-10973](https://issues.apache.org/jira/browse/CB-10973) **Windows**: wrong height of webview with `location=yes`
+* [CB-11013](https://issues.apache.org/jira/browse/CB-11013) IAB enabling background play of YouTube videos?
+* [CB-10467](https://issues.apache.org/jira/browse/CB-10467) Hardware back button, while `InAppBrowser` is opened, closes the app too in addition to closing `InAppBrowser`
+* [CB-11178](https://issues.apache.org/jira/browse/CB-11178) allow to open other apps on **iOS 9**
+* fix some calls which used api level 16
+* [CB-5402](https://issues.apache.org/jira/browse/CB-5402) added extra content from wiki page
+* [CB-2063](https://issues.apache.org/jira/browse/CB-2063) (**ios**) Fixed presentation style
+* [CB-11012](https://issues.apache.org/jira/browse/CB-11012) added some clarifications about `InAppBrowser` object
+* [CB-3360](https://issues.apache.org/jira/browse/CB-3360) Set custom `inappbrowser` user agent for **ios**
+* Add badges for paramedic builds on Jenkins
+* [CB-11381](https://issues.apache.org/jira/browse/CB-11381) android: Does not pass sonarqube scan
+* Add pull request template.
+* [CB-10866](https://issues.apache.org/jira/browse/CB-10866) Adding engine requirements to `package.json`
+* [CB-110003](https://issues.apache.org/jira/browse/CB-110003) Adding samples to Readme.
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md
+
+### 1.4.0 (Apr 15, 2016)
+* [CB-7679](https://issues.apache.org/jira/browse/CB-7679) add fix for **iOS** upload.
+* [CB-10944](https://issues.apache.org/jira/browse/CB-10944) `NoSuchMethodError` in `InAppBrowser` plugin
+* [CB-10937](https://issues.apache.org/jira/browse/CB-10937) fix stretched icons
+* [CB-10760](https://issues.apache.org/jira/browse/CB-10760) Fixing README for display on Cordova website
+* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins
+
+### 1.3.0 (Feb 09, 2016)
+* [CB-3360](https://issues.apache.org/jira/browse/CB-3360) Set custom inappbrowser user agent for android
+* [CB-10538](https://issues.apache.org/jira/browse/CB-10538) cordova-plugin-inappbrowser timeout issue
+* [CB-10395](https://issues.apache.org/jira/browse/CB-10395) InAppBrowser's WebView not storing cookies reliable on Android
+* Edit package.json license to match SPDX id
+* [CB-10305](https://issues.apache.org/jira/browse/CB-10305) Gray bar appears in the wrong place on iOS
+* [CB-7786](https://issues.apache.org/jira/browse/CB-7786) Support mediaPlaybackRequiresUserAction on Android
+* [CB-7500](https://issues.apache.org/jira/browse/CB-7500) executeScript with callback kills/blurs inAppBrowser window on Android
+
+### 1.2.1 (Feb 02, 2016)
+* [CB-10407](https://issues.apache.org/jira/browse/CB-10407) InAppBrowser not firing loadstart event on android
+* [CB-10428](https://issues.apache.org/jira/browse/CB-10428) Fix syntax error when browserifying inAppBrowser plugin
+* handle app store urls in system browser
+* [CB-6702](https://issues.apache.org/jira/browse/CB-6702) InAppBrowser hangs when opening more than one instance
+* [CB-10456](https://issues.apache.org/jira/browse/CB-10456) InAppBrowser is not closed if I close it programmatically on Android
+* [CB-10451](https://issues.apache.org/jira/browse/CB-10451) InAppBrowser: loadstart event is not triggered on Windows
+* [CB-10452](https://issues.apache.org/jira/browse/CB-10452) InAppBrowser: 'exit' event is not triggered on Windows
+* [CB-10454](https://issues.apache.org/jira/browse/CB-10454) InAppBrowser: 'loaderror' event does not have code and message on Windows
+* [CB-10450](https://issues.apache.org/jira/browse/CB-10450) InAppBrowser: Unable to get property 'canGoBack' of undefined on Windows
+* [CB-10441](https://issues.apache.org/jira/browse/CB-10441) Add auto tests for InAppBrowser plugin
+
+### 1.2.0 (Jan 15, 2016)
+* [CB-8180](https://issues.apache.org/jira/browse/CB-8180) Changing methods of interception in `WebViewClient` class
+* [CB-10009](https://issues.apache.org/jira/browse/CB-10009) Improve `InAppBrowser` toolbar look and feel on **Windows**
+* Open a new window on the **Browser** platform
+
+### 1.1.1 (Dec 10, 2015)
+
+* [CB-9445](https://issues.apache.org/jira/browse/CB-9445) Improves executeScript callbacks on iOS
+* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Incremented plugin version.
+* [CB-10040](https://issues.apache.org/jira/browse/CB-10040) - re-fix: backwards compatible with cordova-ios < 4.0
+* [CB-8534](https://issues.apache.org/jira/browse/CB-8534) Allow plugins to respond to onReceivedHttpAuthRequest. This closes #82
+* [CB-3750](https://issues.apache.org/jira/browse/CB-3750) Fixes spinner on iOS. This closes #89
+* [CB-7696](https://issues.apache.org/jira/browse/CB-7696) Document target=_self behavior for Windows
+* [CB-10040](https://issues.apache.org/jira/browse/CB-10040) - Compile Error in InAppBrowser Plugin for iOS - No known instance method for selector 'URLIsWhitelisted:'
+
### 1.1.0 (Nov 18, 2015)
* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
* Invoke webview if using local file
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/README.md
index 2ee92f85..2ee92f85 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/index.md
index d2b29d57..d2b29d57 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/de/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/README.md
index 811439a7..811439a7 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/index.md
index fc5b7b13..fc5b7b13 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/es/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/README.md
index 73812fee..73812fee 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/index.md
index 4f22d13b..4f22d13b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/fr/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/README.md
index 4e06888a..4e06888a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/index.md
index 73654628..73654628 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/it/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/README.md
index 40f631b7..40f631b7 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/index.md
index a1b68544..a1b68544 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ja/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/README.md
index 13511ad8..13511ad8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/index.md
index d1b3ddbd..d1b3ddbd 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ko/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/README.md
index 5ff58ada..5ff58ada 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/index.md
index dff9bf0f..dff9bf0f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/pl/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ru/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ru/index.md
index 3b4e967d..3b4e967d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ru/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/ru/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/README.md
index 7d33d89c..7d33d89c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/index.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/index.md
index c12c0461..c12c0461 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/index.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/doc/zh/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/package.json b/StoneIsland/plugins/cordova-plugin-inappbrowser/package.json
index cba3e5f2..8da20900 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/package.json
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-inappbrowser",
- "version": "1.1.0",
+ "version": "1.5.0",
"description": "Cordova InAppBrowser Plugin",
"cordova": {
"id": "cordova-plugin-inappbrowser",
@@ -37,12 +37,23 @@
"cordova-windows",
"cordova-firefoxos"
],
- "engines": [
- {
- "name": "cordova",
- "version": ">=3.1.0"
+ "scripts": {
+ "test": "npm run jshint",
+ "jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
+ },
+ "engines": {
+ "cordovaDependencies": {
+ "0.2.3": {
+ "cordova": ">=3.1.0"
+ },
+ "2.0.0": {
+ "cordova": ">100"
+ }
}
- ],
+ },
"author": "Apache Software Foundation",
- "license": "Apache 2.0"
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "jshint": "^2.6.0"
+ }
}
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/plugin.xml b/StoneIsland/plugins/cordova-plugin-inappbrowser/plugin.xml
index a05fddc7..a27be5cf 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/plugin.xml
@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-inappbrowser"
- version="1.1.0">
+ version="1.5.0">
<name>InAppBrowser</name>
<description>Cordova InAppBrowser Plugin</description>
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppBrowser.java b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppBrowser.java
index 0263ea2c..0263ea2c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppBrowser.java
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppBrowser.java
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppChromeClient.java b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppChromeClient.java
index 37cf101f..37cf101f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppChromeClient.java
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/amazon/InAppChromeClient.java
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowser.java b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowser.java
index 60437451..8f4f3d97 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowser.java
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowser.java
@@ -19,7 +19,6 @@
package org.apache.cordova.inappbrowser;
import android.annotation.SuppressLint;
-import org.apache.cordova.inappbrowser.InAppBrowserDialog;
import android.content.Context;
import android.content.Intent;
import android.provider.Browser;
@@ -30,7 +29,6 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.InputType;
-import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.KeyEvent;
@@ -41,17 +39,21 @@ import android.view.WindowManager.LayoutParams;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.webkit.CookieManager;
+import android.webkit.CookieSyncManager;
+import android.webkit.HttpAuthHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
-import android.widget.Button;
import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.Config;
import org.apache.cordova.CordovaArgs;
+import org.apache.cordova.CordovaHttpAuthHandler;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.LOG;
@@ -61,6 +63,7 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.StringTokenizer;
@@ -82,6 +85,8 @@ public class InAppBrowser extends CordovaPlugin {
private static final String CLEAR_ALL_CACHE = "clearcache";
private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
private static final String HARDWARE_BACK_BUTTON = "hardwareback";
+ private static final String MEDIA_PLAYBACK_REQUIRES_USER_ACTION = "mediaPlaybackRequiresUserAction";
+ private static final String SHOULD_PAUSE = "shouldPauseOnSuspend";
private InAppBrowserDialog dialog;
private WebView inAppWebView;
@@ -93,6 +98,8 @@ public class InAppBrowser extends CordovaPlugin {
private boolean clearAllCache = false;
private boolean clearSessionCache = false;
private boolean hadwareBackButton = true;
+ private boolean mediaPlaybackRequiresUserGesture = false;
+ private boolean shouldPauseInAppBrowser = false;
/**
* Executes the request and returns PluginResult.
@@ -113,7 +120,7 @@ public class InAppBrowser extends CordovaPlugin {
final String target = t;
final HashMap<String, Boolean> features = parseFeature(args.optString(2));
- Log.d(LOG_TAG, "target = " + target);
+ LOG.d(LOG_TAG, "target = " + target);
this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
@@ -121,7 +128,7 @@ public class InAppBrowser extends CordovaPlugin {
String result = "";
// SELF
if (SELF.equals(target)) {
- Log.d(LOG_TAG, "in self");
+ LOG.d(LOG_TAG, "in self");
/* This code exists for compatibility between 3.x and 4.x versions of Cordova.
* Previously the Config class had a static method, isUrlWhitelisted(). That
* responsibility has been moved to the plugins, with an aggregating method in
@@ -136,8 +143,11 @@ public class InAppBrowser extends CordovaPlugin {
Method iuw = Config.class.getMethod("isUrlWhiteListed", String.class);
shouldAllowNavigation = (Boolean)iuw.invoke(null, url);
} catch (NoSuchMethodException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (InvocationTargetException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
}
}
if (shouldAllowNavigation == null) {
@@ -147,20 +157,23 @@ public class InAppBrowser extends CordovaPlugin {
Method san = pm.getClass().getMethod("shouldAllowNavigation", String.class);
shouldAllowNavigation = (Boolean)san.invoke(pm, url);
} catch (NoSuchMethodException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
} catch (InvocationTargetException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
}
}
// load in webview
if (Boolean.TRUE.equals(shouldAllowNavigation)) {
- Log.d(LOG_TAG, "loading in webview");
+ LOG.d(LOG_TAG, "loading in webview");
webView.loadUrl(url);
}
//Load the dialer
else if (url.startsWith(WebView.SCHEME_TEL))
{
try {
- Log.d(LOG_TAG, "loading in dialer");
+ LOG.d(LOG_TAG, "loading in dialer");
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(url));
cordova.getActivity().startActivity(intent);
@@ -170,18 +183,18 @@ public class InAppBrowser extends CordovaPlugin {
}
// load in InAppBrowser
else {
- Log.d(LOG_TAG, "loading in InAppBrowser");
+ LOG.d(LOG_TAG, "loading in InAppBrowser");
result = showWebPage(url, features);
}
}
// SYSTEM
else if (SYSTEM.equals(target)) {
- Log.d(LOG_TAG, "in system");
+ LOG.d(LOG_TAG, "in system");
result = openExternal(url);
}
// BLANK - or anything else
else {
- Log.d(LOG_TAG, "in blank");
+ LOG.d(LOG_TAG, "in blank");
result = showWebPage(url, features);
}
@@ -197,7 +210,7 @@ public class InAppBrowser extends CordovaPlugin {
else if (action.equals("injectScriptCode")) {
String jsWrapper = null;
if (args.getBoolean(1)) {
- jsWrapper = String.format("prompt(JSON.stringify([eval(%%s)]), 'gap-iab://%s')", callbackContext.getCallbackId());
+ jsWrapper = String.format("(function(){prompt(JSON.stringify([eval(%%s)]), 'gap-iab://%s')})()", callbackContext.getCallbackId());
}
injectDeferredObject(args.getString(0), jsWrapper);
}
@@ -254,6 +267,26 @@ public class InAppBrowser extends CordovaPlugin {
}
/**
+ * Called when the system is about to start resuming a previous activity.
+ */
+ @Override
+ public void onPause(boolean multitasking) {
+ if (shouldPauseInAppBrowser) {
+ inAppWebView.onPause();
+ }
+ }
+
+ /**
+ * Called when the activity will start interacting with the user.
+ */
+ @Override
+ public void onResume(boolean multitasking) {
+ if (shouldPauseInAppBrowser) {
+ inAppWebView.onResume();
+ }
+ }
+
+ /**
* Called by AccelBroker when listener is to be shut down.
* Stop listener.
*/
@@ -350,7 +383,7 @@ public class InAppBrowser extends CordovaPlugin {
this.cordova.getActivity().startActivity(intent);
return "";
} catch (android.content.ActivityNotFoundException e) {
- Log.d(LOG_TAG, "InAppBrowser: Error loading url "+url+":"+ e.toString());
+ LOG.d(LOG_TAG, "InAppBrowser: Error loading url "+url+":"+ e.toString());
return e.toString();
}
}
@@ -359,20 +392,22 @@ public class InAppBrowser extends CordovaPlugin {
* Closes the dialog
*/
public void closeDialog() {
- final WebView childView = this.inAppWebView;
- // The JS protects against multiple calls, so this should happen only when
- // closeDialog() is called by other native code.
- if (childView == null) {
- return;
- }
this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
+ final WebView childView = inAppWebView;
+ // The JS protects against multiple calls, so this should happen only when
+ // closeDialog() is called by other native code.
+ if (childView == null) {
+ return;
+ }
+
childView.setWebViewClient(new WebViewClient() {
// NB: wait for about:blank before dismissing
public void onPageFinished(WebView view, String url) {
if (dialog != null) {
dialog.dismiss();
+ dialog = null;
}
}
});
@@ -380,16 +415,16 @@ public class InAppBrowser extends CordovaPlugin {
// other than your app's UI thread, it can cause unexpected results."
// http://developer.android.com/guide/webapps/migrating.html#Threads
childView.loadUrl("about:blank");
+
+ try {
+ JSONObject obj = new JSONObject();
+ obj.put("type", EXIT_EVENT);
+ sendUpdate(obj, false);
+ } catch (JSONException ex) {
+ LOG.d(LOG_TAG, "Should never happen");
+ }
}
});
-
- try {
- JSONObject obj = new JSONObject();
- obj.put("type", EXIT_EVENT);
- sendUpdate(obj, false);
- } catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
- }
}
/**
@@ -468,6 +503,8 @@ public class InAppBrowser extends CordovaPlugin {
showLocationBar = true;
showZoomControls = true;
openWindowHidden = false;
+ mediaPlaybackRequiresUserGesture = false;
+
if (features != null) {
Boolean show = features.get(LOCATION);
if (show != null) {
@@ -485,6 +522,10 @@ public class InAppBrowser extends CordovaPlugin {
if (hardwareBack != null) {
hadwareBackButton = hardwareBack.booleanValue();
}
+ Boolean mediaPlayback = features.get(MEDIA_PLAYBACK_REQUIRES_USER_ACTION);
+ if (mediaPlayback != null) {
+ mediaPlaybackRequiresUserGesture = mediaPlayback.booleanValue();
+ }
Boolean cache = features.get(CLEAR_ALL_CACHE);
if (cache != null) {
clearAllCache = cache.booleanValue();
@@ -494,6 +535,10 @@ public class InAppBrowser extends CordovaPlugin {
clearSessionCache = cache.booleanValue();
}
}
+ Boolean shouldPause = features.get(SHOULD_PAUSE);
+ if (shouldPause != null) {
+ shouldPauseInAppBrowser = shouldPause.booleanValue();
+ }
}
final CordovaWebView thatWebView = this.webView;
@@ -516,6 +561,12 @@ public class InAppBrowser extends CordovaPlugin {
@SuppressLint("NewApi")
public void run() {
+
+ // CB-6702 InAppBrowser hangs when opening more than one instance
+ if (dialog != null) {
+ dialog.dismiss();
+ };
+
// Let's create the main dialog
dialog = new InAppBrowserDialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
@@ -541,26 +592,28 @@ public class InAppBrowser extends CordovaPlugin {
actionButtonContainer.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
actionButtonContainer.setHorizontalGravity(Gravity.LEFT);
actionButtonContainer.setVerticalGravity(Gravity.CENTER_VERTICAL);
- actionButtonContainer.setId(1);
+ actionButtonContainer.setId(Integer.valueOf(1));
// Back button
- Button back = new Button(cordova.getActivity());
+ ImageButton back = new ImageButton(cordova.getActivity());
RelativeLayout.LayoutParams backLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
backLayoutParams.addRule(RelativeLayout.ALIGN_LEFT);
back.setLayoutParams(backLayoutParams);
back.setContentDescription("Back Button");
- back.setId(2);
+ back.setId(Integer.valueOf(2));
Resources activityRes = cordova.getActivity().getResources();
int backResId = activityRes.getIdentifier("ic_action_previous_item", "drawable", cordova.getActivity().getPackageName());
Drawable backIcon = activityRes.getDrawable(backResId);
- if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
- {
- back.setBackgroundDrawable(backIcon);
- }
+ if (Build.VERSION.SDK_INT >= 16)
+ back.setBackground(null);
else
- {
- back.setBackground(backIcon);
- }
+ back.setBackgroundDrawable(null);
+ back.setImageDrawable(backIcon);
+ back.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10));
+ if (Build.VERSION.SDK_INT >= 16)
+ back.getAdjustViewBounds();
+
back.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
goBack();
@@ -568,22 +621,24 @@ public class InAppBrowser extends CordovaPlugin {
});
// Forward button
- Button forward = new Button(cordova.getActivity());
+ ImageButton forward = new ImageButton(cordova.getActivity());
RelativeLayout.LayoutParams forwardLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
forwardLayoutParams.addRule(RelativeLayout.RIGHT_OF, 2);
forward.setLayoutParams(forwardLayoutParams);
forward.setContentDescription("Forward Button");
- forward.setId(3);
+ forward.setId(Integer.valueOf(3));
int fwdResId = activityRes.getIdentifier("ic_action_next_item", "drawable", cordova.getActivity().getPackageName());
Drawable fwdIcon = activityRes.getDrawable(fwdResId);
- if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
- {
- forward.setBackgroundDrawable(fwdIcon);
- }
+ if (Build.VERSION.SDK_INT >= 16)
+ forward.setBackground(null);
else
- {
- forward.setBackground(fwdIcon);
- }
+ forward.setBackgroundDrawable(null);
+ forward.setImageDrawable(fwdIcon);
+ forward.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ forward.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10));
+ if (Build.VERSION.SDK_INT >= 16)
+ forward.getAdjustViewBounds();
+
forward.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
goForward();
@@ -596,7 +651,7 @@ public class InAppBrowser extends CordovaPlugin {
textLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1);
textLayoutParams.addRule(RelativeLayout.LEFT_OF, 5);
edittext.setLayoutParams(textLayoutParams);
- edittext.setId(4);
+ edittext.setId(Integer.valueOf(4));
edittext.setSingleLine(true);
edittext.setText(url);
edittext.setInputType(InputType.TYPE_TEXT_VARIATION_URI);
@@ -614,22 +669,24 @@ public class InAppBrowser extends CordovaPlugin {
});
// Close/Done button
- Button close = new Button(cordova.getActivity());
+ ImageButton close = new ImageButton(cordova.getActivity());
RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
close.setLayoutParams(closeLayoutParams);
forward.setContentDescription("Close Button");
- close.setId(5);
+ close.setId(Integer.valueOf(5));
int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName());
Drawable closeIcon = activityRes.getDrawable(closeResId);
- if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
- {
- close.setBackgroundDrawable(closeIcon);
- }
+ if (Build.VERSION.SDK_INT >= 16)
+ close.setBackground(null);
else
- {
- close.setBackground(closeIcon);
- }
+ close.setBackgroundDrawable(null);
+ close.setImageDrawable(closeIcon);
+ close.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10));
+ if (Build.VERSION.SDK_INT >= 16)
+ close.getAdjustViewBounds();
+
close.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
closeDialog();
@@ -639,6 +696,7 @@ public class InAppBrowser extends CordovaPlugin {
// WebView
inAppWebView = new WebView(cordova.getActivity());
inAppWebView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
+ inAppWebView.setId(Integer.valueOf(6));
inAppWebView.setWebChromeClient(new InAppChromeClient(thatWebView));
WebViewClient client = new InAppBrowserClient(thatWebView, edittext);
inAppWebView.setWebViewClient(client);
@@ -648,6 +706,20 @@ public class InAppBrowser extends CordovaPlugin {
settings.setBuiltInZoomControls(showZoomControls);
settings.setPluginState(android.webkit.WebSettings.PluginState.ON);
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ settings.setMediaPlaybackRequiresUserGesture(mediaPlaybackRequiresUserGesture);
+ }
+
+ String overrideUserAgent = preferences.getString("OverrideUserAgent", null);
+ String appendUserAgent = preferences.getString("AppendUserAgent", null);
+
+ if (overrideUserAgent != null) {
+ settings.setUserAgentString(overrideUserAgent);
+ }
+ if (appendUserAgent != null) {
+ settings.setUserAgentString(settings.getUserAgentString() + appendUserAgent);
+ }
+
//Toggle whether this is enabled or not!
Bundle appSettings = cordova.getActivity().getIntent().getExtras();
boolean enableDatabase = appSettings == null ? true : appSettings.getBoolean("InAppBrowserStorageEnabled", true);
@@ -665,7 +737,7 @@ public class InAppBrowser extends CordovaPlugin {
}
inAppWebView.loadUrl(url);
- inAppWebView.setId(6);
+ inAppWebView.setId(Integer.valueOf(6));
inAppWebView.getSettings().setLoadWithOverviewMode(true);
inAppWebView.getSettings().setUseWideViewPort(true);
inAppWebView.requestFocus();
@@ -753,34 +825,30 @@ public class InAppBrowser extends CordovaPlugin {
}
/**
- * Notify the host application that a page has started loading.
+ * Override the URL that should be loaded
+ *
+ * This handles a small subset of all the URIs that would be encountered.
*
- * @param view The webview initiating the callback.
- * @param url The url of the page.
+ * @param webView
+ * @param url
*/
@Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- super.onPageStarted(view, url, favicon);
- String newloc = "";
- if (url.startsWith("http:") || url.startsWith("https:") || url.startsWith("file:")) {
- newloc = url;
- }
- // If dialing phone (tel:5551212)
- else if (url.startsWith(WebView.SCHEME_TEL)) {
+ public boolean shouldOverrideUrlLoading(WebView webView, String url) {
+ if (url.startsWith(WebView.SCHEME_TEL)) {
try {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(url));
cordova.getActivity().startActivity(intent);
+ return true;
} catch (android.content.ActivityNotFoundException e) {
LOG.e(LOG_TAG, "Error dialing " + url + ": " + e.toString());
}
- }
-
- else if (url.startsWith("geo:") || url.startsWith(WebView.SCHEME_MAILTO) || url.startsWith("market:")) {
+ } else if (url.startsWith("geo:") || url.startsWith(WebView.SCHEME_MAILTO) || url.startsWith("market:") || url.startsWith("intent:")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
cordova.getActivity().startActivity(intent);
+ return true;
} catch (android.content.ActivityNotFoundException e) {
LOG.e(LOG_TAG, "Error with " + url + ": " + e.toString());
}
@@ -795,8 +863,7 @@ public class InAppBrowser extends CordovaPlugin {
int parmIndex = url.indexOf('?');
if (parmIndex == -1) {
address = url.substring(4);
- }
- else {
+ } else {
address = url.substring(4, parmIndex);
// If body, then set sms body
@@ -812,32 +879,64 @@ public class InAppBrowser extends CordovaPlugin {
intent.putExtra("address", address);
intent.setType("vnd.android-dir/mms-sms");
cordova.getActivity().startActivity(intent);
+ return true;
} catch (android.content.ActivityNotFoundException e) {
LOG.e(LOG_TAG, "Error sending sms " + url + ":" + e.toString());
}
}
- else {
+ return false;
+ }
+
+
+ /*
+ * onPageStarted fires the LOAD_START_EVENT
+ *
+ * @param view
+ * @param url
+ * @param favicon
+ */
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ super.onPageStarted(view, url, favicon);
+ String newloc = "";
+ if (url.startsWith("http:") || url.startsWith("https:") || url.startsWith("file:")) {
+ newloc = url;
+ }
+ else
+ {
+ // Assume that everything is HTTP at this point, because if we don't specify,
+ // it really should be. Complain loudly about this!!!
+ LOG.e(LOG_TAG, "Possible Uncaught/Unknown URI");
newloc = "http://" + url;
}
+ // Update the UI if we haven't already
if (!newloc.equals(edittext.getText().toString())) {
edittext.setText(newloc);
- }
+ }
try {
JSONObject obj = new JSONObject();
obj.put("type", LOAD_START_EVENT);
obj.put("url", newloc);
-
sendUpdate(obj, true);
} catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
+ LOG.e(LOG_TAG, "URI passed in has caused a JSON error.");
}
}
+
+
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
+ // CB-10395 InAppBrowser's WebView not storing cookies reliable to local device storage
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+ CookieManager.getInstance().flush();
+ } else {
+ CookieSyncManager.getInstance().sync();
+ }
+
try {
JSONObject obj = new JSONObject();
obj.put("type", LOAD_STOP_EVENT);
@@ -845,7 +944,7 @@ public class InAppBrowser extends CordovaPlugin {
sendUpdate(obj, true);
} catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
+ LOG.d(LOG_TAG, "Should never happen");
}
}
@@ -861,9 +960,46 @@ public class InAppBrowser extends CordovaPlugin {
sendUpdate(obj, true, PluginResult.Status.ERROR);
} catch (JSONException ex) {
- Log.d(LOG_TAG, "Should never happen");
+ LOG.d(LOG_TAG, "Should never happen");
}
}
+
+ /**
+ * On received http auth request.
+ */
+ @Override
+ public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
+
+ // Check if there is some plugin which can resolve this auth challenge
+ PluginManager pluginManager = null;
+ try {
+ Method gpm = webView.getClass().getMethod("getPluginManager");
+ pluginManager = (PluginManager)gpm.invoke(webView);
+ } catch (NoSuchMethodException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ } catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ } catch (InvocationTargetException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
+
+ if (pluginManager == null) {
+ try {
+ Field pmf = webView.getClass().getField("pluginManager");
+ pluginManager = (PluginManager)pmf.get(webView);
+ } catch (NoSuchFieldException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ } catch (IllegalAccessException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
+ }
+
+ if (pluginManager != null && pluginManager.onReceivedHttpAuthRequest(webView, new CordovaHttpAuthHandler(handler), host, realm)) {
+ return;
+ }
+
+ // By default handle 401 like we'd normally do!
+ super.onReceivedHttpAuthRequest(view, handler, host, realm);
+ }
}
}
-
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowserDialog.java b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowserDialog.java
index d7017202..e7b212f2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowserDialog.java
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppBrowserDialog.java
@@ -21,7 +21,6 @@ package org.apache.cordova.inappbrowser;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
-import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppChromeClient.java b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppChromeClient.java
index a2145e6a..a2145e6a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppChromeClient.java
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/InAppChromeClient.java
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_next_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_next_item.png
index fa469d88..fa469d88 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_next_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_previous_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_previous_item.png
index e861ecce..e861ecce 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_previous_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_remove.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_remove.png
index f889617e..f889617e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_remove.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-hdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_next_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_next_item.png
index 47365a30..47365a30 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_next_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_previous_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_previous_item.png
index 4ad2df42..4ad2df42 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_previous_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_remove.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_remove.png
index e84853e4..e84853e4 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_remove.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-mdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_next_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_next_item.png
index 5f304742..5f304742 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_next_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_previous_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_previous_item.png
index ed8ac91d..ed8ac91d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_previous_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_remove.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_remove.png
index 4cd0458b..4cd0458b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_remove.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xhdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_next_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_next_item.png
index 51479d8d..51479d8d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_next_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_next_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_previous_item.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_previous_item.png
index bc8ff124..bc8ff124 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_previous_item.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_previous_item.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_remove.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_remove.png
index 331c545b..331c545b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_remove.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/android/res/drawable-xxhdpi/ic_action_remove.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/README.md
index f0fa8607..f0fa8607 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/de/README.md
index e3944876..e3944876 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/de/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/de/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/es/README.md
index 75303369..75303369 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/es/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/es/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/fr/README.md
index 179bd483..179bd483 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/fr/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/fr/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/it/README.md
index 8f0623df..8f0623df 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/it/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/it/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ja/README.md
index b9e4b7b7..b9e4b7b7 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ja/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ja/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ko/README.md
index 67fb8de3..67fb8de3 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ko/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/ko/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/pl/README.md
index ef199ee9..ef199ee9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/pl/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/pl/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/zh/README.md
index 241fb550..241fb550 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/zh/README.md
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/blackberry10/doc/zh/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/browser/InAppBrowserProxy.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/browser/InAppBrowserProxy.js
index 33fbe476..da7dacd3 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/browser/InAppBrowserProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/browser/InAppBrowserProxy.js
@@ -19,9 +19,7 @@
*
*/
-var cordova = require('cordova'),
- channel = require('cordova/channel'),
- urlutil = require('cordova/urlutil');
+var modulemapper = require('cordova/modulemapper');
var browserWrap,
popup,
@@ -68,19 +66,23 @@ var IAB = {
open: function (win, lose, args) {
var strUrl = args[0],
target = args[1],
- features = args[2],
- url;
+ features = args[2];
- if (target === "_system" || target === "_self" || !target) {
+ if (target === "_self" || !target) {
window.location = strUrl;
+ } else if (target === "_system") {
+ modulemapper.getOriginalSymbol(window, 'window.open').call(window, strUrl, "_blank");
} else {
// "_blank" or anything else
if (!browserWrap) {
browserWrap = document.createElement("div");
browserWrap.style.position = "absolute";
+ browserWrap.style.top = "0";
+ browserWrap.style.left = "0";
+ browserWrap.style.boxSizing = "border-box";
browserWrap.style.borderWidth = "40px";
- browserWrap.style.width = "calc(100% - 80px)";
- browserWrap.style.height = "calc(100% - 80px)";
+ browserWrap.style.width = "100vw";
+ browserWrap.style.height = "100vh";
browserWrap.style.borderStyle = "solid";
browserWrap.style.borderColor = "rgba(0,0,0,0.25)";
@@ -105,6 +107,7 @@ var IAB = {
if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) {
popup.style.height = "calc(100% - 60px)";
+ popup.style.marginBottom = "-4px";
navigationButtonsDiv = document.createElement("div");
navigationButtonsDiv.style.height = "60px";
@@ -190,7 +193,9 @@ var IAB = {
if (browserWrap && popup) {
try {
popup.contentWindow.eval(code);
- hasCallback && win([]);
+ if (hasCallback) {
+ win([]);
+ }
} catch(e) {
console.error('Error occured while trying to injectScriptCode: ' + JSON.stringify(e));
}
@@ -200,19 +205,25 @@ var IAB = {
injectScriptFile: function (win, fail, args) {
var msg = 'Browser cordova-plugin-inappbrowser injectScriptFile is not yet implemented';
console.warn(msg);
- fail && fail(msg);
+ if (fail) {
+ fail(msg);
+ }
},
injectStyleCode: function (win, fail, args) {
var msg = 'Browser cordova-plugin-inappbrowser injectStyleCode is not yet implemented';
console.warn(msg);
- fail && fail(msg);
+ if (fail) {
+ fail(msg);
+ }
},
injectStyleFile: function (win, fail, args) {
var msg = 'Browser cordova-plugin-inappbrowser injectStyleFile is not yet implemented';
console.warn(msg);
- fail && fail(msg);
+ if (fail) {
+ fail(msg);
+ }
}
};
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/firefoxos/InAppBrowserProxy.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/firefoxos/InAppBrowserProxy.js
index f0d44c12..c09e3583 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/firefoxos/InAppBrowserProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/firefoxos/InAppBrowserProxy.js
@@ -21,9 +21,7 @@
// https://developer.mozilla.org/en-US/docs/WebAPI/Browser
-var cordova = require('cordova'),
- channel = require('cordova/channel'),
- modulemapper = require('cordova/modulemapper');
+var modulemapper = require('cordova/modulemapper');
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'window.open');
var browserWrap;
@@ -49,9 +47,7 @@ var IABExecs = {
var strUrl = args[0],
target = args[1],
features_string = args[2] || "location=yes", //location=yes is default
- features = {},
- url,
- elem;
+ features = {};
var features_list = features_string.split(',');
features_list.forEach(function(feature) {
@@ -61,7 +57,7 @@ var IABExecs = {
} else if (tup[1] == 'no') {
tup[1] = false;
} else {
- var number = parseInt(tup[1]);
+ var number = parseInt(tup[1]);
if (!isNaN(number)) {
tup[1] = number;
}
@@ -115,7 +111,7 @@ var IABExecs = {
back.classList.add('inAppBrowserBack');
forward.classList.add('inAppBrowserForward');
- function checkForwardBackward() {
+ var checkForwardBackward = function () {
var backReq = browserElem.getCanGoBack();
backReq.onsuccess = function() {
if (this.result) {
@@ -123,7 +119,7 @@ var IABExecs = {
} else {
back.classList.add('disabled');
}
- }
+ };
var forwardReq = browserElem.getCanGoForward();
forwardReq.onsuccess = function() {
if (this.result) {
@@ -131,7 +127,7 @@ var IABExecs = {
} else {
forward.classList.add('disabled');
}
- }
+ };
};
browserElem.addEventListener('mozbrowserloadend', checkForwardBackward);
@@ -163,16 +159,16 @@ var IABExecs = {
win({
type:'loadstart',
url : e.detail
- })
+ });
}, false);
browserElem.addEventListener('mozbrowserloadend', function(e){
- win({type:'loadstop'})
+ win({type:'loadstop'});
}, false);
browserElem.addEventListener('mozbrowsererror', function(e){
- win({type:'loaderror'})
+ win({type:'loaderror'});
}, false);
browserElem.addEventListener('mozbrowserclose', function(e){
- win({type:'exit'})
+ win({type:'exit'});
}, false);
} else {
window.location = strUrl;
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h
index 1ccc7b14..6bb0ec16 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.h
@@ -30,7 +30,6 @@
@class CDVInAppBrowserViewController;
@interface CDVInAppBrowser : CDVPlugin {
- BOOL _injectedIframeBridge;
}
@property (nonatomic, retain) CDVInAppBrowserViewController* inAppBrowserViewController;
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m
index 47a8ab3a..b342ca73 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ios/CDVInAppBrowser.m
@@ -47,6 +47,11 @@
_callbackIdPattern = nil;
}
+- (id)settingForKey:(NSString*)key
+{
+ return [self.commandDelegate.settings objectForKey:[key lowercaseString]];
+}
+
- (void)onReset
{
[self close:nil];
@@ -137,8 +142,16 @@
}
if (self.inAppBrowserViewController == nil) {
- NSString* originalUA = [CDVUserAgentUtil originalUserAgent];
- self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:originalUA prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
+ NSString* userAgent = [CDVUserAgentUtil originalUserAgent];
+ NSString* overrideUserAgent = [self settingForKey:@"OverrideUserAgent"];
+ NSString* appendUserAgent = [self settingForKey:@"AppendUserAgent"];
+ if(overrideUserAgent){
+ userAgent = overrideUserAgent;
+ }
+ if(appendUserAgent){
+ userAgent = [userAgent stringByAppendingString: appendUserAgent];
+ }
+ self.inAppBrowserViewController = [[CDVInAppBrowserViewController alloc] initWithUserAgent:userAgent prevUserAgent:[self.commandDelegate userAgent] browserOptions: browserOptions];
self.inAppBrowserViewController.navigationDelegate = self;
if ([self.viewController conformsToProtocol:@protocol(CDVScreenOrientationDelegate)]) {
@@ -218,6 +231,7 @@
initWithRootViewController:self.inAppBrowserViewController];
nav.orientationDelegate = self.inAppBrowserViewController;
nav.navigationBarHidden = YES;
+ nav.modalPresentationStyle = self.inAppBrowserViewController.modalPresentationStyle;
__weak CDVInAppBrowser* weakSelf = self;
@@ -231,25 +245,25 @@
- (void)openInCordovaWebView:(NSURL*)url withOptions:(NSString*)options
{
- if ([self.commandDelegate URLIsWhitelisted:url]) {
- NSURLRequest* request = [NSURLRequest requestWithURL:url];
+ NSURLRequest* request = [NSURLRequest requestWithURL:url];
+
#ifdef __CORDOVA_4_0_0
- [self.webViewEngine loadRequest:request];
+ // the webview engine itself will filter for this according to <allow-navigation> policy
+ // in config.xml for cordova-ios-4.0
+ [self.webViewEngine loadRequest:request];
#else
+ if ([self.commandDelegate URLIsWhitelisted:url]) {
[self.webView loadRequest:request];
-#endif
} else { // this assumes the InAppBrowser can be excepted from the white-list
[self openInInAppBrowser:url withOptions:options];
}
+#endif
}
- (void)openInSystem:(NSURL*)url
{
- if ([[UIApplication sharedApplication] canOpenURL:url]) {
- [[UIApplication sharedApplication] openURL:url];
- } else { // handle any custom schemes to plugins
- [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];
- }
+ [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];
+ [[UIApplication sharedApplication] openURL:url];
}
// This is a helper method for the inject{Script|Style}{Code|File} API calls, which
@@ -263,11 +277,8 @@
- (void)injectDeferredObject:(NSString*)source withWrapper:(NSString*)jsWrapper
{
- if (!_injectedIframeBridge) {
- _injectedIframeBridge = YES;
- // Create an iframe bridge in the new document to communicate with the CDVInAppBrowserViewController
- [self.inAppBrowserViewController.webView stringByEvaluatingJavaScriptFromString:@"(function(d){var e = _cdvIframeBridge = d.createElement('iframe');e.style.display='none';d.body.appendChild(e);})(document)"];
- }
+ // Ensure an iframe bridge is created to communicate with the CDVInAppBrowserViewController
+ [self.inAppBrowserViewController.webView stringByEvaluatingJavaScriptFromString:@"(function(d){_cdvIframeBridge=d.getElementById('_cdvIframeBridge');if(!_cdvIframeBridge) {var e = _cdvIframeBridge = d.createElement('iframe');e.id='_cdvIframeBridge'; e.style.display='none';d.body.appendChild(e);}})(document)"];
if (jsWrapper != nil) {
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@[source] options:0 error:nil];
@@ -390,7 +401,14 @@
[self.commandDelegate sendPluginResult:pluginResult callbackId:scriptCallbackId];
return NO;
}
- } else if ((self.callbackId != nil) && isTopLevelNavigation) {
+ }
+ //if is an app store link, let the system handle it, otherwise it fails to load it
+ else if ([[ url scheme] isEqualToString:@"itms-appss"] || [[ url scheme] isEqualToString:@"itms-apps"]) {
+ [theWebView stopLoading];
+ [self openInSystem:url];
+ return NO;
+ }
+ else if ((self.callbackId != nil) && isTopLevelNavigation) {
// Send a loadstart event for each top-level navigation (includes redirects).
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsDictionary:@{@"type":@"loadstart", @"url":[url absoluteString]}];
@@ -404,7 +422,6 @@
- (void)webViewDidStartLoad:(UIWebView*)theWebView
{
- _injectedIframeBridge = NO;
}
- (void)webViewDidFinishLoad:(UIWebView*)theWebView
@@ -512,15 +529,15 @@
self.webView.scalesPageToFit = NO;
self.webView.userInteractionEnabled = YES;
- self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
+ self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.spinner.alpha = 1.000;
self.spinner.autoresizesSubviews = YES;
- self.spinner.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
+ self.spinner.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin);
self.spinner.clearsContextBeforeDrawing = NO;
self.spinner.clipsToBounds = NO;
self.spinner.contentMode = UIViewContentModeScaleToFill;
- self.spinner.frame = CGRectMake(454.0, 231.0, 20.0, 20.0);
- self.spinner.hidden = YES;
+ self.spinner.frame = CGRectMake(CGRectGetMidX(self.webView.frame), CGRectGetMidY(self.webView.frame), 20.0, 20.0);
+ self.spinner.hidden = NO;
self.spinner.hidesWhenStopped = YES;
self.spinner.multipleTouchEnabled = NO;
self.spinner.opaque = NO;
@@ -749,6 +766,10 @@
return UIStatusBarStyleDefault;
}
+- (BOOL)prefersStatusBarHidden {
+ return NO;
+}
+
- (void)close
{
[CDVUserAgentUtil releaseLock:&_userAgentLockToken];
@@ -988,19 +1009,38 @@
@implementation CDVInAppBrowserNavigationController : UINavigationController
+- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
+ if ( self.presentedViewController) {
+ [super dismissViewControllerAnimated:flag completion:completion];
+ }
+}
+
- (void) viewDidLoad {
CGRect frame = [UIApplication sharedApplication].statusBarFrame;
// simplified from: http://stackoverflow.com/a/25669695/219684
- UIToolbar* bgToolbar = [[UIToolbar alloc] initWithFrame:frame];
+ UIToolbar* bgToolbar = [[UIToolbar alloc] initWithFrame:[self invertFrameIfNeeded:frame]];
bgToolbar.barStyle = UIBarStyleDefault;
+ [bgToolbar setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[self.view addSubview:bgToolbar];
[super viewDidLoad];
}
+- (CGRect) invertFrameIfNeeded:(CGRect)rect {
+ // We need to invert since on iOS 7 frames are always in Portrait context
+ if (!IsAtLeastiOSVersion(@"8.0")) {
+ if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
+ CGFloat temp = rect.size.width;
+ rect.size.width = rect.size.height;
+ rect.size.height = temp;
+ }
+ rect.origin = CGPointZero;
+ }
+ return rect;
+}
#pragma mark CDVScreenOrientationDelegate
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser.qml b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser.qml
index 781e8a6e..781e8a6e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser.qml
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser.qml
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser_escapeScript.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser_escapeScript.js
index 07661bb6..b01daeb5 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser_escapeScript.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/InAppBrowser_escapeScript.js
@@ -19,6 +19,9 @@
*
*/
+/* jshint -W061 */
+/* global oxide */
+
oxide.addMessageHandler("EXECUTE", function(msg) {
var code = msg.args.code;
try {
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/close.png b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/close.png
index 56373d1f..56373d1f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/close.png
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/close.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.cpp b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.cpp
index c5a9e64a..c5a9e64a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.cpp
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.cpp
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.h b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.h
index 1da4e033..1da4e033 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.h
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/ubuntu/inappbrowser.h
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/windows/InAppBrowserProxy.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/windows/InAppBrowserProxy.js
index fc037bdb..23f6e547 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/windows/InAppBrowserProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/windows/InAppBrowserProxy.js
@@ -19,13 +19,10 @@
*
*/
-/*jslint sloppy:true */
-/*global Windows:true, require, document, setTimeout, window, module */
-
-
+/* jslint sloppy:true */
+/* global Windows:true, setImmediate */
var cordova = require('cordova'),
- channel = require('cordova/channel'),
urlutil = require('cordova/urlutil');
var browserWrap,
@@ -35,11 +32,13 @@ var browserWrap,
backButton,
forwardButton,
closeButton,
- bodyOverflowStyle;
+ bodyOverflowStyle,
+ navigationEventsCallback,
+ hardwareBackCallback;
// x-ms-webview is available starting from Windows 8.1 (platformId is 'windows')
// http://msdn.microsoft.com/en-us/library/windows/apps/dn301831.aspx
-var isWebViewAvailable = cordova.platformId == 'windows';
+var isWebViewAvailable = cordova.platformId === 'windows';
function attachNavigationEvents(element, callback) {
if (isWebViewAvailable) {
@@ -48,19 +47,32 @@ function attachNavigationEvents(element, callback) {
});
element.addEventListener("MSWebViewNavigationCompleted", function (e) {
- callback({ type: e.isSuccess ? "loadstop" : "loaderror", url: e.uri}, {keepCallback: true});
+ if (e.isSuccess) {
+ callback({ type: "loadstop", url: e.uri }, { keepCallback: true });
+ } else {
+ callback({ type: "loaderror", url: e.uri, code: e.webErrorStatus, message: "Navigation failed with error code " + e.webErrorStatus}, { keepCallback: true });
+ }
});
element.addEventListener("MSWebViewUnviewableContentIdentified", function (e) {
// WebView found the content to be not HTML.
// http://msdn.microsoft.com/en-us/library/windows/apps/dn609716.aspx
- callback({ type: "loaderror", url: e.uri}, {keepCallback: true});
+ callback({ type: "loaderror", url: e.uri, code: e.webErrorStatus, message: "Navigation failed with error code " + e.webErrorStatus}, { keepCallback: true });
});
element.addEventListener("MSWebViewContentLoading", function (e) {
- if (navigationButtonsDiv) {
- backButton.disabled = !popup.canGoBack;
- forwardButton.disabled = !popup.canGoForward;
+ if (navigationButtonsDiv && popup) {
+ if (popup.canGoBack) {
+ backButton.removeAttribute("disabled");
+ } else {
+ backButton.setAttribute("disabled", "true");
+ }
+
+ if (popup.canGoForward) {
+ forwardButton.removeAttribute("disabled");
+ } else {
+ forwardButton.setAttribute("disabled", "true");
+ }
}
});
} else {
@@ -83,228 +95,266 @@ function attachNavigationEvents(element, callback) {
var IAB = {
close: function (win, lose) {
- if (browserWrap) {
- if (win) win({ type: "exit" });
+ setImmediate(function () {
+ if (browserWrap) {
+ if (navigationEventsCallback) {
+ navigationEventsCallback({ type: "exit" });
+ }
- browserWrap.parentNode.removeChild(browserWrap);
- // Reset body overflow style to initial value
- document.body.style.msOverflowStyle = bodyOverflowStyle;
- browserWrap = null;
- popup = null;
- }
+ browserWrap.parentNode.removeChild(browserWrap);
+ // Reset body overflow style to initial value
+ document.body.style.msOverflowStyle = bodyOverflowStyle;
+ browserWrap = null;
+ popup = null;
+
+ document.removeEventListener("backbutton", hardwareBackCallback, false);
+ }
+ });
},
show: function (win, lose) {
- if (browserWrap) {
- browserWrap.style.display = "block";
- }
+ setImmediate(function () {
+ if (browserWrap) {
+ browserWrap.style.display = "block";
+ }
+ });
},
open: function (win, lose, args) {
- var strUrl = args[0],
- target = args[1],
- features = args[2],
- url;
+ // make function async so that we can add navigation events handlers before view is loaded and navigation occured
+ setImmediate(function () {
+ var strUrl = args[0],
+ target = args[1],
+ features = args[2],
+ url;
- if (target === "_system") {
- url = new Windows.Foundation.Uri(strUrl);
- Windows.System.Launcher.launchUriAsync(url);
- } else if (target === "_self" || !target) {
- window.location = strUrl;
- } else {
- // "_blank" or anything else
- if (!browserWrap) {
- var browserWrapStyle = document.createElement('link');
- browserWrapStyle.rel = "stylesheet";
- browserWrapStyle.type = "text/css";
- browserWrapStyle.href = urlutil.makeAbsolute("/www/css/inappbrowser.css");
+ navigationEventsCallback = win;
- document.head.appendChild(browserWrapStyle);
+ if (target === "_system") {
+ url = new Windows.Foundation.Uri(strUrl);
+ Windows.System.Launcher.launchUriAsync(url);
+ } else if (target === "_self" || !target) {
+ window.location = strUrl;
+ } else {
+ // "_blank" or anything else
+ if (!browserWrap) {
+ var browserWrapStyle = document.createElement('link');
+ browserWrapStyle.rel = "stylesheet";
+ browserWrapStyle.type = "text/css";
+ browserWrapStyle.href = urlutil.makeAbsolute("/www/css/inappbrowser.css");
- browserWrap = document.createElement("div");
- browserWrap.className = "inAppBrowserWrap";
+ document.head.appendChild(browserWrapStyle);
- if (features.indexOf("fullscreen=yes") > -1) {
- browserWrap.classList.add("inAppBrowserWrapFullscreen");
- }
+ browserWrap = document.createElement("div");
+ browserWrap.className = "inAppBrowserWrap";
- // Save body overflow style to be able to reset it back later
- bodyOverflowStyle = document.body.style.msOverflowStyle;
+ if (features.indexOf("fullscreen=yes") > -1) {
+ browserWrap.classList.add("inAppBrowserWrapFullscreen");
+ }
- browserWrap.onclick = function () {
- setTimeout(function () {
- IAB.close(win);
- }, 0);
- };
+ // Save body overflow style to be able to reset it back later
+ bodyOverflowStyle = document.body.style.msOverflowStyle;
- document.body.appendChild(browserWrap);
- // Hide scrollbars for the whole body while inappbrowser's window is open
- document.body.style.msOverflowStyle = "none";
- }
+ browserWrap.onclick = function () {
+ setTimeout(function () {
+ IAB.close(navigationEventsCallback);
+ }, 0);
+ };
- if (features.indexOf("hidden=yes") !== -1) {
- browserWrap.style.display = "none";
- }
+ document.body.appendChild(browserWrap);
+ // Hide scrollbars for the whole body while inappbrowser's window is open
+ document.body.style.msOverflowStyle = "none";
+ }
- popup = document.createElement(isWebViewAvailable ? "x-ms-webview" : "iframe");
- if (popup instanceof HTMLIFrameElement) {
- // For iframe we need to override bacground color of parent element here
- // otherwise pages without background color set will have transparent background
- popup.style.backgroundColor = "white";
- }
- popup.style.borderWidth = "0px";
- popup.style.width = "100%";
+ if (features.indexOf("hidden=yes") !== -1) {
+ browserWrap.style.display = "none";
+ }
- browserWrap.appendChild(popup);
+ popup = document.createElement(isWebViewAvailable ? "x-ms-webview" : "iframe");
+ if (popup instanceof HTMLIFrameElement) {
+ // For iframe we need to override bacground color of parent element here
+ // otherwise pages without background color set will have transparent background
+ popup.style.backgroundColor = "white";
+ }
+ popup.style.borderWidth = "0px";
+ popup.style.width = "100%";
+ popup.style.marginBottom = "-3px";
- if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) {
- popup.style.height = "calc(100% - 60px)";
+ browserWrap.appendChild(popup);
- navigationButtonsDiv = document.createElement("div");
- navigationButtonsDiv.style.height = "60px";
- navigationButtonsDiv.style.backgroundColor = "#404040";
- navigationButtonsDiv.style.zIndex = "999";
- navigationButtonsDiv.onclick = function (e) {
- e.cancelBubble = true;
+ var closeHandler = function (e) {
+ setTimeout(function () {
+ IAB.close(navigationEventsCallback);
+ }, 0);
};
- navigationButtonsDivInner = document.createElement("div");
- navigationButtonsDivInner.style.paddingTop = "10px";
- navigationButtonsDivInner.style.height = "50px";
- navigationButtonsDivInner.style.width = "160px";
- navigationButtonsDivInner.style.margin = "0 auto";
- navigationButtonsDivInner.style.backgroundColor = "#404040";
- navigationButtonsDivInner.style.zIndex = "999";
- navigationButtonsDivInner.onclick = function (e) {
- e.cancelBubble = true;
- };
+ if (features.indexOf("hardwareback=yes") > -1 || features.indexOf("hardwareback") === -1) {
+ hardwareBackCallback = function () {
+ if (browserWrap.style.display === 'none') {
+ // NOTE: backbutton handlers have to throw an exception in order to prevent
+ // returning 'true' inside cordova-js, which would mean that the event is handled by user.
+ // Throwing an exception means that the default/system navigation behavior will take place,
+ // which is to exit the app if the navigation stack is empty.
+ throw 'Exit the app';
+ }
+ if (popup.canGoBack) {
+ popup.goBack();
+ } else {
+ closeHandler();
+ }
+ };
+ } else if (features.indexOf("hardwareback=no") > -1) {
+ hardwareBackCallback = function () {
+ if (browserWrap.style.display === 'none') {
+ // See comment above
+ throw 'Exit the app';
+ }
- backButton = document.createElement("button");
- backButton.style.width = "40px";
- backButton.style.height = "40px";
- backButton.style.borderRadius = "40px";
+ closeHandler();
+ };
+ }
- backButton.innerText = "<-";
- backButton.addEventListener("click", function (e) {
- if (popup.canGoBack)
- popup.goBack();
- });
+ document.addEventListener("backbutton", hardwareBackCallback, false);
- forwardButton = document.createElement("button");
- forwardButton.style.marginLeft = "20px";
- forwardButton.style.width = "40px";
- forwardButton.style.height = "40px";
- forwardButton.style.borderRadius = "40px";
+ if (features.indexOf("location=yes") !== -1 || features.indexOf("location") === -1) {
+ popup.style.height = "calc(100% - 70px)";
- forwardButton.innerText = "->";
- forwardButton.addEventListener("click", function (e) {
- if (popup.canGoForward)
- popup.goForward();
- });
+ navigationButtonsDiv = document.createElement("div");
+ navigationButtonsDiv.className = "inappbrowser-app-bar";
+ navigationButtonsDiv.onclick = function (e) {
+ e.cancelBubble = true;
+ };
- closeButton = document.createElement("button");
- closeButton.style.marginLeft = "20px";
- closeButton.style.width = "40px";
- closeButton.style.height = "40px";
- closeButton.style.borderRadius = "40px";
+ navigationButtonsDivInner = document.createElement("div");
+ navigationButtonsDivInner.className = "inappbrowser-app-bar-inner";
+ navigationButtonsDivInner.onclick = function (e) {
+ e.cancelBubble = true;
+ };
- closeButton.innerText = "x";
- closeButton.addEventListener("click", function (e) {
- setTimeout(function () {
- IAB.close(win);
- }, 0);
- });
+ backButton = document.createElement("div");
+ backButton.innerText = "back";
+ backButton.className = "app-bar-action action-back";
+ backButton.addEventListener("click", function (e) {
+ if (popup.canGoBack)
+ popup.goBack();
+ });
- if (!isWebViewAvailable) {
- // iframe navigation is not yet supported
- backButton.disabled = true;
- forwardButton.disabled = true;
- }
+ forwardButton = document.createElement("div");
+ forwardButton.innerText = "forward";
+ forwardButton.className = "app-bar-action action-forward";
+ forwardButton.addEventListener("click", function (e) {
+ if (popup.canGoForward)
+ popup.goForward();
+ });
- navigationButtonsDivInner.appendChild(backButton);
- navigationButtonsDivInner.appendChild(forwardButton);
- navigationButtonsDivInner.appendChild(closeButton);
- navigationButtonsDiv.appendChild(navigationButtonsDivInner);
+ closeButton = document.createElement("div");
+ closeButton.innerText = "close";
+ closeButton.className = "app-bar-action action-close";
+ closeButton.addEventListener("click", closeHandler);
- browserWrap.appendChild(navigationButtonsDiv);
- } else {
- popup.style.height = "100%";
- }
+ if (!isWebViewAvailable) {
+ // iframe navigation is not yet supported
+ backButton.setAttribute("disabled", "true");
+ forwardButton.setAttribute("disabled", "true");
+ }
- // start listening for navigation events
- attachNavigationEvents(popup, win);
+ navigationButtonsDivInner.appendChild(backButton);
+ navigationButtonsDivInner.appendChild(forwardButton);
+ navigationButtonsDivInner.appendChild(closeButton);
+ navigationButtonsDiv.appendChild(navigationButtonsDivInner);
- if (isWebViewAvailable) {
- strUrl = strUrl.replace("ms-appx://", "ms-appx-web://");
+ browserWrap.appendChild(navigationButtonsDiv);
+ } else {
+ popup.style.height = "100%";
+ }
+
+ // start listening for navigation events
+ attachNavigationEvents(popup, navigationEventsCallback);
+
+ if (isWebViewAvailable) {
+ strUrl = strUrl.replace("ms-appx://", "ms-appx-web://");
+ }
+ popup.src = strUrl;
}
- popup.src = strUrl;
- }
+ });
},
injectScriptCode: function (win, fail, args) {
- var code = args[0],
- hasCallback = args[1];
+ setImmediate(function () {
+ var code = args[0],
+ hasCallback = args[1];
- if (isWebViewAvailable && browserWrap && popup) {
- var op = popup.invokeScriptAsync("eval", code);
- op.oncomplete = function (e) {
- // return null if event target is unavailable by some reason
- var result = (e && e.target) ? [e.target.result] : [null];
- hasCallback && win(result);
- };
- op.onerror = function () { };
- op.start();
- }
+ if (isWebViewAvailable && browserWrap && popup) {
+ var op = popup.invokeScriptAsync("eval", code);
+ op.oncomplete = function (e) {
+ if (hasCallback) {
+ // return null if event target is unavailable by some reason
+ var result = (e && e.target) ? [e.target.result] : [null];
+ win(result);
+ }
+ };
+ op.onerror = function () { };
+ op.start();
+ }
+ });
},
injectScriptFile: function (win, fail, args) {
- var filePath = args[0],
- hasCallback = args[1];
+ setImmediate(function () {
+ var filePath = args[0],
+ hasCallback = args[1];
- if (!!filePath) {
- filePath = urlutil.makeAbsolute(filePath);
- }
+ if (!!filePath) {
+ filePath = urlutil.makeAbsolute(filePath);
+ }
- if (isWebViewAvailable && browserWrap && popup) {
- var uri = new Windows.Foundation.Uri(filePath);
- Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
- Windows.Storage.FileIO.readTextAsync(file).done(function (code) {
- var op = popup.invokeScriptAsync("eval", code);
- op.oncomplete = function(e) {
- var result = [e.target.result];
- hasCallback && win(result);
- };
- op.onerror = function () { };
- op.start();
+ if (isWebViewAvailable && browserWrap && popup) {
+ var uri = new Windows.Foundation.Uri(filePath);
+ Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
+ Windows.Storage.FileIO.readTextAsync(file).done(function (code) {
+ var op = popup.invokeScriptAsync("eval", code);
+ op.oncomplete = function(e) {
+ if (hasCallback) {
+ var result = [e.target.result];
+ win(result);
+ }
+ };
+ op.onerror = function () { };
+ op.start();
+ });
});
- });
- }
+ }
+ });
},
injectStyleCode: function (win, fail, args) {
- var code = args[0],
- hasCallback = args[1];
+ setImmediate(function () {
+ var code = args[0],
+ hasCallback = args[1];
- if (isWebViewAvailable && browserWrap && popup) {
- injectCSS(popup, code, hasCallback && win);
- }
+ if (isWebViewAvailable && browserWrap && popup) {
+ injectCSS(popup, code, hasCallback && win);
+ }
+ });
},
injectStyleFile: function (win, fail, args) {
- var filePath = args[0],
- hasCallback = args[1];
+ setImmediate(function () {
+ var filePath = args[0],
+ hasCallback = args[1];
- filePath = filePath && urlutil.makeAbsolute(filePath);
+ filePath = filePath && urlutil.makeAbsolute(filePath);
- if (isWebViewAvailable && browserWrap && popup) {
- var uri = new Windows.Foundation.Uri(filePath);
- Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(function (file) {
- return Windows.Storage.FileIO.readTextAsync(file);
- }).done(function (code) {
- injectCSS(popup, code, hasCallback && win);
- }, function () {
- // no-op, just catch an error
- });
- }
+ if (isWebViewAvailable && browserWrap && popup) {
+ var uri = new Windows.Foundation.Uri(filePath);
+ Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(function (file) {
+ return Windows.Storage.FileIO.readTextAsync(file);
+ }).done(function (code) {
+ injectCSS(popup, code, hasCallback && win);
+ }, function () {
+ // no-op, just catch an error
+ });
+ }
+ });
}
};
@@ -316,7 +366,9 @@ function injectCSS (webView, cssCode, callback) {
var op = webView.invokeScriptAsync("eval", evalWrapper);
op.oncomplete = function() {
- callback && callback([]);
+ if (callback) {
+ callback([]);
+ }
};
op.onerror = function () { };
op.start();
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/wp/InAppBrowser.cs b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/wp/InAppBrowser.cs
index ddb51227..ddb51227 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/src/wp/InAppBrowser.cs
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/src/wp/InAppBrowser.cs
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/plugin.xml
index f4f3be36..2cccd40a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/plugin.xml
@@ -20,10 +20,12 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-inappbrowser-tests"
- version="1.1.0">
+ version="1.5.0">
<name>Cordova InAppBrowser Plugin Tests</name>
<license>Apache 2.0</license>
+ <dependency id="cordova-plugin-dialogs" />
+
<js-module src="tests.js" name="tests">
</js-module>
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.css b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.css
index 3f6e41c8..3f6e41c8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.css
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.css
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.html b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.html
index 3004b358..3004b358 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.html
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.html
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.js
index 6f254939..a89a4215 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/inject.js
@@ -16,5 +16,5 @@
* specific language governing permissions and limitations
* under the License.
*/
-var d = document.getElementById("header")
+var d = document.getElementById("header");
d.innerHTML = "Script file successfully injected";
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.html b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.html
index d23a7144..d23a7144 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.html
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.html
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.pdf b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.pdf
index b54f1b75..b54f1b75 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.pdf
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/local.pdf
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/video.html b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/video.html
index 64ea3d11..4f167f8c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/video.html
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/resources/video.html
@@ -38,5 +38,8 @@
<button onclick="document.getElementById('player').play()"> play </button>
<button onclick="document.getElementById('player').pause()"> pause </button>
</div>
+ <script>
+ document.getElementById('player').play();
+ </script>
</body>
</html>
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/tests.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/tests.js
index a8279868..1a96029d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/tests.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/tests/tests.js
@@ -19,11 +19,118 @@
*
*/
+/* jshint jasmine: true */
+/* global MSApp */
+
var cordova = require('cordova');
var isWindows = cordova.platformId == 'windows';
window.alert = window.alert || navigator.notification.alert;
+exports.defineAutoTests = function () {
+
+ describe('cordova.InAppBrowser', function () {
+
+ it("inappbrowser.spec.1 should exist", function () {
+ expect(cordova.InAppBrowser).toBeDefined();
+ });
+
+ it("inappbrowser.spec.2 should contain open function", function () {
+ expect(cordova.InAppBrowser.open).toBeDefined();
+ expect(cordova.InAppBrowser.open).toEqual(jasmine.any(Function));
+ });
+ });
+
+ describe('open method', function () {
+
+ var iabInstance;
+ var originalTimeout;
+ var url = 'https://dist.apache.org/repos/dist/dev/cordova/';
+ var badUrl = 'http://bad-uri/';
+
+ beforeEach(function () {
+ // increase timeout to ensure test url could be loaded within test time
+ originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
+
+ iabInstance = null;
+ });
+
+ afterEach(function (done) {
+ // restore original timeout
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
+
+ if (iabInstance !== null && iabInstance.close) {
+ iabInstance.close();
+ }
+ iabInstance = null;
+ // add some extra time so that iab dialog is closed
+ setTimeout(done, 2000);
+ });
+
+ function verifyEvent(evt, type) {
+ expect(evt).toBeDefined();
+ expect(evt.type).toEqual(type);
+ if (type !== 'exit') { // `exit` event does not have url field
+ expect(evt.url).toEqual(url);
+ }
+ }
+
+ function verifyLoadErrorEvent(evt) {
+ expect(evt).toBeDefined();
+ expect(evt.type).toEqual('loaderror');
+ expect(evt.url).toEqual(badUrl);
+ expect(evt.code).toEqual(jasmine.any(Number));
+ expect(evt.message).toEqual(jasmine.any(String));
+ }
+
+ it("inappbrowser.spec.3 should retun InAppBrowser instance with required methods", function () {
+ iabInstance = cordova.InAppBrowser.open(url, '_blank');
+
+ expect(iabInstance).toBeDefined();
+
+ expect(iabInstance.addEventListener).toEqual(jasmine.any(Function));
+ expect(iabInstance.removeEventListener).toEqual(jasmine.any(Function));
+ expect(iabInstance.close).toEqual(jasmine.any(Function));
+ expect(iabInstance.show).toEqual(jasmine.any(Function));
+ expect(iabInstance.executeScript).toEqual(jasmine.any(Function));
+ expect(iabInstance.insertCSS).toEqual(jasmine.any(Function));
+ });
+
+ it("inappbrowser.spec.4 should support loadstart and loadstop events", function (done) {
+ var onLoadStart = jasmine.createSpy('loadstart event callback').and.callFake(function (evt) {
+ verifyEvent(evt, 'loadstart');
+ });
+
+ iabInstance = cordova.InAppBrowser.open(url, '_blank');
+ iabInstance.addEventListener('loadstart', onLoadStart);
+ iabInstance.addEventListener('loadstop', function (evt) {
+ verifyEvent(evt, 'loadstop');
+ expect(onLoadStart).toHaveBeenCalled();
+ done();
+ });
+ });
+
+ it("inappbrowser.spec.5 should support exit event", function (done) {
+ iabInstance = cordova.InAppBrowser.open(url, '_blank');
+ iabInstance.addEventListener('exit', function (evt) {
+ verifyEvent(evt, 'exit');
+ done();
+ });
+ iabInstance.close();
+ iabInstance = null;
+ });
+
+ it("inappbrowser.spec.6 should support loaderror event", function (done) {
+ iabInstance = cordova.InAppBrowser.open(badUrl, '_blank');
+ iabInstance.addEventListener('loaderror', function (evt) {
+ verifyLoadErrorEvent(evt);
+ done();
+ });
+ });
+ });
+};
+
exports.defineManualTests = function (contentEl, createActionButton) {
function doOpen(url, target, params, numExpectedRedirects, useWindowOpen) {
@@ -79,13 +186,13 @@ exports.defineManualTests = function (contentEl, createActionButton) {
if (e.url != lastLoadStartURL) {
alert('Unexpected: ' + e.type + ' event.url != loadstart\'s event.url');
}
- if (numExpectedRedirects === 0 && counts['loadstart'] !== 1) {
+ if (numExpectedRedirects === 0 && counts.loadstart !== 1) {
// Do allow a loaderror without a loadstart (e.g. in the case of an invalid URL).
- if (!(e.type == 'loaderror' && counts['loadstart'] === 0)) {
- alert('Unexpected: got multiple loadstart events. (' + counts['loadstart'] + ')');
+ if (!(e.type == 'loaderror' && counts.loadstart === 0)) {
+ alert('Unexpected: got multiple loadstart events. (' + counts.loadstart + ')');
}
- } else if (numExpectedRedirects > 0 && counts['loadstart'] < (numExpectedRedirects + 1)) {
- alert('Unexpected: should have got at least ' + (numExpectedRedirects + 1) + ' loadstart events, but got ' + counts['loadstart']);
+ } else if (numExpectedRedirects > 0 && counts.loadstart < (numExpectedRedirects + 1)) {
+ alert('Unexpected: should have got at least ' + (numExpectedRedirects + 1) + ' loadstart events, but got ' + counts.loadstart);
}
wasReset = true;
numExpectedRedirects = 0;
@@ -93,7 +200,7 @@ exports.defineManualTests = function (contentEl, createActionButton) {
}
// Verify that loadend / loaderror was called.
if (e.type == 'exit') {
- var numStopEvents = counts['loadstop'] + counts['loaderror'];
+ var numStopEvents = counts.loadstop + counts.loaderror;
if (numStopEvents === 0 && !wasReset) {
alert('Unexpected: browser closed without a loadstop or loaderror.');
} else if (numStopEvents > 1) {
@@ -319,7 +426,11 @@ exports.defineManualTests = function (contentEl, createActionButton) {
var video_tag_tests = '<h1>Video tag</h1>' +
'<div id="openRemoteVideo"></div>' +
- 'Expected result: open successfully in InAppBrowser with an embedded video that works after clicking the "play" button.';
+ 'Expected result: open successfully in InAppBrowser with an embedded video plays automatically on iOS and Android.' +
+ '<div id="openRemoteNeedUserNoVideo"></div>' +
+ 'Expected result: open successfully in InAppBrowser with an embedded video plays automatically on iOS and Android.' +
+ '<div id="openRemoteNeedUserYesVideo"></div>' +
+ 'Expected result: open successfully in InAppBrowser with an embedded video does not play automatically on iOS and Android but rather works after clicking the "play" button.';
var local_with_anchor_tag_tests = '<h1>Local with anchor tag</h1>' +
'<div id="openAnchor1"></div>' +
@@ -327,16 +438,24 @@ exports.defineManualTests = function (contentEl, createActionButton) {
'<p/> <div id="openAnchor2"></div>' +
'Expected result: open successfully in InAppBrowser to the local page, scrolled to the beginning of the tall div with border.';
+ var hardwareback_tests = '<h1>HardwareBack</h1>' +
+ '<p/> <div id="openHardwareBackDefault"></div>' +
+ 'Expected result: By default hardwareback is yes so pressing back button should navigate backwards in history then close InAppBrowser' +
+ '<p/> <div id="openHardwareBackYes"></div>' +
+ 'Expected result: hardwareback=yes pressing back button should navigate backwards in history then close InAppBrowser' +
+ '<p/> <div id="openHardwareBackNo"></div>' +
+ 'Expected result: hardwareback=no pressing back button should close InAppBrowser regardless history';
+
// CB-7490 We need to wrap this code due to Windows security restrictions
// see http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx#differences for details
if (window.MSApp && window.MSApp.execUnsafeLocalFunction) {
MSApp.execUnsafeLocalFunction(function() {
contentEl.innerHTML = info_div + local_tests + white_listed_tests + non_white_listed_tests + page_with_redirects_tests + pdf_url_tests + invalid_url_tests +
- css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests;
+ css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
});
} else {
contentEl.innerHTML = info_div + local_tests + white_listed_tests + non_white_listed_tests + page_with_redirects_tests + pdf_url_tests + invalid_url_tests +
- css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests;
+ css_js_injection_tests + open_hidden_tests + clearing_cache_tests + video_tag_tests + local_with_anchor_tag_tests + hardwareback_tests;
}
document.getElementById("user-agent").textContent = navigator.userAgent;
@@ -507,6 +626,12 @@ exports.defineManualTests = function (contentEl, createActionButton) {
createActionButton('Remote Video', function () {
doOpen(videohtml, '_blank');
}, 'openRemoteVideo');
+ createActionButton('Remote Need User No Video', function () {
+ doOpen(videohtml, '_blank', 'mediaPlaybackRequiresUserAction=no');
+ }, 'openRemoteNeedUserNoVideo');
+ createActionButton('Remote Need User Yes Video', function () {
+ doOpen(videohtml, '_blank', 'mediaPlaybackRequiresUserAction=yes');
+ }, 'openRemoteNeedUserYesVideo');
//Local With Anchor Tag
createActionButton('Anchor1', function () {
@@ -515,5 +640,15 @@ exports.defineManualTests = function (contentEl, createActionButton) {
createActionButton('Anchor2', function () {
doOpen(localhtml + '#anchor2', '_blank');
}, 'openAnchor2');
-};
+ // Hardwareback
+ createActionButton('no hardwareback (defaults to yes)', function () {
+ doOpen('http://cordova.apache.org', '_blank');
+ }, 'openHardwareBackDefault');
+ createActionButton('hardwareback=yes', function () {
+ doOpen('http://cordova.apache.org', '_blank', 'hardwareback=yes');
+ }, 'openHardwareBackYes');
+ createActionButton('hardwareback=no', function () {
+ doOpen('http://cordova.apache.org', '_blank', 'hardwareback=no');
+ }, 'openHardwareBackNo');
+};
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.css b/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.css
index bd1526d3..5762c746 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.css
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.css
@@ -38,3 +38,77 @@
.inAppBrowserWrapFullscreen {
border: 0;
}
+
+.inappbrowser-app-bar {
+ height: 70px;
+ background-color: #404040;
+ z-index: 9999999;
+}
+
+.inappbrowser-app-bar-inner {
+ padding-top: 10px;
+ height: 60px;
+ width: 155px;
+ margin: 0 auto;
+ background-color: #404040;
+ z-index: 9999999;
+}
+
+.app-bar-action {
+ width: auto;
+ height: 40px;
+ margin-left: 20px;
+ font-family: "Segoe UI Symbol";
+ float: left;
+ color: white;
+ font-size: 12px;
+ text-transform: lowercase;
+ text-align: center;
+ cursor: default;
+}
+
+.app-bar-action[disabled] {
+ color: gray;
+ /*disable click*/
+ pointer-events: none;
+}
+
+.app-bar-action::before {
+ font-size: 28px;
+ display: block;
+ height: 36px;
+}
+
+/* Back */
+.action-back {
+ margin-left: 0px;
+}
+
+.action-back::before {
+ content: "\E0BA";
+}
+
+.action-back:not([disabled]):hover::before {
+ content: "\E0B3";
+}
+
+/* Forward */
+.action-forward::before {
+ content: "\E0AC";
+}
+
+.action-forward:not([disabled]):hover::before {
+ content: "\E0AF";
+}
+
+/* Close */
+.action-close::before {
+ content: "\E0C7";
+ /* close icon is larger so we re-size it to fit other icons */
+ font-size: 20px;
+ line-height: 40px;
+}
+
+.action-close:not([disabled]):hover::before {
+ content: "\E0CA";
+}
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
index 93eb4207..25f62711 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js
@@ -19,92 +19,93 @@
*
*/
-// special patch to correctly work on Ripple emulator (CB-9760)
-if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
- module.exports = window.open.bind(window); // fallback to default window.open behaviour
- return;
-}
+(function() {
+ // special patch to correctly work on Ripple emulator (CB-9760)
+ if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
+ module.exports = window.open.bind(window); // fallback to default window.open behaviour
+ return;
+ }
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-var urlutil = require('cordova/urlutil');
+ var exec = require('cordova/exec');
+ var channel = require('cordova/channel');
+ var modulemapper = require('cordova/modulemapper');
+ var urlutil = require('cordova/urlutil');
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
+ function InAppBrowser() {
+ this.channels = {
+ 'loadstart': channel.create('loadstart'),
+ 'loadstop' : channel.create('loadstop'),
+ 'loaderror' : channel.create('loaderror'),
+ 'exit' : channel.create('exit')
+ };
+ }
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event && (event.type in this.channels)) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- show: function (eventname) {
- exec(null, null, "InAppBrowser", "show", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
+ InAppBrowser.prototype = {
+ _eventHandler: function (event) {
+ if (event && (event.type in this.channels)) {
+ this.channels[event.type].fire(event);
+ }
+ },
+ close: function (eventname) {
+ exec(null, null, "InAppBrowser", "close", []);
+ },
+ show: function (eventname) {
+ exec(null, null, "InAppBrowser", "show", []);
+ },
+ addEventListener: function (eventname,f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].subscribe(f);
+ }
+ },
+ removeEventListener: function(eventname, f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].unsubscribe(f);
+ }
+ },
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
+ executeScript: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('executeScript requires exactly one of code or file to be specified');
+ }
+ },
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
+ insertCSS: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('insertCSS requires exactly one of code or file to be specified');
+ }
}
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
+ };
- strUrl = urlutil.makeAbsolute(strUrl);
- var iab = new InAppBrowser();
+ module.exports = function(strUrl, strWindowName, strWindowFeatures, callbacks) {
+ // Don't catch calls that write to existing frames (e.g. named iframes).
+ if (window.frames && window.frames[strWindowName]) {
+ var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
+ return origOpenFunc.apply(window, arguments);
+ }
- callbacks = callbacks || {};
- for (var callbackName in callbacks) {
- iab.addEventListener(callbackName, callbacks[callbackName]);
- }
+ strUrl = urlutil.makeAbsolute(strUrl);
+ var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
+ callbacks = callbacks || {};
+ for (var callbackName in callbacks) {
+ iab.addEventListener(callbackName, callbacks[callbackName]);
+ }
- strWindowFeatures = strWindowFeatures || "";
+ var cb = function(eventname) {
+ iab._eventHandler(eventname);
+ };
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
+ strWindowFeatures = strWindowFeatures || "";
+ exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
+ return iab;
+ };
+})();
diff --git a/StoneIsland/plugins/cordova-plugin-inappbrowser/www/windows8/InAppBrowserProxy.js b/StoneIsland/plugins/cordova-plugin-inappbrowser/www/windows8/InAppBrowserProxy.js
index 42d15d2c..ed954770 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-inappbrowser/www/windows8/InAppBrowserProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-inappbrowser/www/windows8/InAppBrowserProxy.js
@@ -22,10 +22,6 @@
/*jslint sloppy:true */
/*global Windows:true, require, document, setTimeout, window, module */
-
-var cordova = require('cordova'),
- channel = require('cordova/channel');
-
var browserWrap;
var IAB = {
@@ -45,7 +41,6 @@ var IAB = {
open: function (win, lose, args) {
var strUrl = args[0],
target = args[1],
- features = args[2],
url,
elem;
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-network-information/CONTRIBUTING.md
index f7dbcaba..4c8e6a5e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/CONTRIBUTING.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/CONTRIBUTING.md
@@ -27,7 +27,7 @@ There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
For instructions on this, start with the
-[contribution overview](http://cordova.apache.org/#contribute).
+[contribution overview](http://cordova.apache.org/contribute/).
The details are explained there, but the important items are:
- Sign and submit an Apache ICLA (Contributor License Agreement).
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/LICENSE b/StoneIsland/plugins/cordova-plugin-network-information/LICENSE
index 7a4a3ea2..7a4a3ea2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/LICENSE
+++ b/StoneIsland/plugins/cordova-plugin-network-information/LICENSE
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/NOTICE b/StoneIsland/plugins/cordova-plugin-network-information/NOTICE
index fb19cbdb..fb19cbdb 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/NOTICE
+++ b/StoneIsland/plugins/cordova-plugin-network-information/NOTICE
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/README.md b/StoneIsland/plugins/cordova-plugin-network-information/README.md
index c78f3b02..394058c4 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/README.md
@@ -1,3 +1,7 @@
+---
+title: Network Information
+description: Get information about wireless connectivity.
+---
<!--
# license: Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,15 +21,24 @@
# under the License.
-->
+|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI |
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-network-information)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-network-information/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-network-information)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-network-information/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-network-information)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-network-information/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-network-information)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-network-information/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-network-information)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-network-information/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-network-information.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-network-information)|
+
# cordova-plugin-network-information
-[![Build Status](https://travis-ci.org/apache/cordova-plugin-network-information.svg)](https://travis-ci.org/apache/cordova-plugin-network-information)
This plugin provides an implementation of an old version of the
[Network Information API](http://www.w3.org/TR/2011/WD-netinfo-api-20110607/).
It provides information about the device's cellular and
wifi connection, and whether the device has an internet connection.
+> To get a few ideas how to use the plugin, check out the [sample](#sample) at the bottom of this page or go straight to the [reference](#reference) content.
+
+Report issues with this plugin on the [Apache Cordova issue tracker][Apache Cordova issue tracker].
+
+##<a name="reference"></a>Reference
+
## Installation
cordova plugin add cordova-plugin-network-information
@@ -68,24 +81,25 @@ connection state, and type of connection.
### Quick Example
- function checkConnection() {
- var networkState = navigator.connection.type;
-
- var states = {};
- states[Connection.UNKNOWN] = 'Unknown connection';
- states[Connection.ETHERNET] = 'Ethernet connection';
- states[Connection.WIFI] = 'WiFi connection';
- states[Connection.CELL_2G] = 'Cell 2G connection';
- states[Connection.CELL_3G] = 'Cell 3G connection';
- states[Connection.CELL_4G] = 'Cell 4G connection';
- states[Connection.CELL] = 'Cell generic connection';
- states[Connection.NONE] = 'No network connection';
+```js
+function checkConnection() {
+ var networkState = navigator.connection.type;
- alert('Connection type: ' + states[networkState]);
- }
+ var states = {};
+ states[Connection.UNKNOWN] = 'Unknown connection';
+ states[Connection.ETHERNET] = 'Ethernet connection';
+ states[Connection.WIFI] = 'WiFi connection';
+ states[Connection.CELL_2G] = 'Cell 2G connection';
+ states[Connection.CELL_3G] = 'Cell 3G connection';
+ states[Connection.CELL_4G] = 'Cell 4G connection';
+ states[Connection.CELL] = 'Cell generic connection';
+ states[Connection.NONE] = 'No network connection';
- checkConnection();
+ alert('Connection type: ' + states[networkState]);
+}
+checkConnection();
+```
### API Change
@@ -97,7 +111,7 @@ eventually be removed.
### iOS Quirks
-- iOS can't detect the type of cellular network connection.
+- <iOS7 can't detect the type of cellular network connection.
- `navigator.connection.type` is set to `Connection.CELL` for all cellular data.
### Windows Phone Quirks
@@ -147,12 +161,13 @@ attach an event listener once the `deviceready` event fires.
### Quick Example
- document.addEventListener("offline", onOffline, false);
-
- function onOffline() {
- // Handle the offline event
- }
+```js
+document.addEventListener("offline", onOffline, false);
+function onOffline() {
+ // Handle the offline event
+}
+```
### iOS Quirks
@@ -186,12 +201,13 @@ attach an event listener once the `deviceready` event fires.
### Quick Example
- document.addEventListener("online", onOnline, false);
-
- function onOnline() {
- // Handle the online event
- }
+```js
+document.addEventListener("online", onOnline, false);
+function onOnline() {
+ // Handle the online event
+}
+```
### iOS Quirks
@@ -206,3 +222,120 @@ When running in the Emulator, the `connection.status` is always unknown, so this
### Windows Phone 8 Quirks
The Emulator reports the connection type as `Cellular`, which does not change, so events does _not_ fire.
+
+## Sample: Upload a File Depending on your Network State <a name="sample"></a>
+
+The code examples in this section show examples of changing app behavior using the online and offline events and your network connection status.
+
+To start with, create a new FileEntry object (data.txt) to use for sample data. Call this function from the `deviceready` handler.
+
+>*Note* This code example requires the File plugin.
+
+```js
+var dataFileEntry;
+
+function createSomeData() {
+
+ window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function (fs) {
+
+ console.log('file system open: ' + fs.name);
+ // Creates a new file or returns an existing file.
+ fs.root.getFile("data.txt", { create: true, exclusive: false }, function (fileEntry) {
+
+ dataFileEntry = fileEntry;
+
+ }, onErrorCreateFile);
+
+ }, onErrorLoadFs);
+}
+```
+
+Next, add listeners for the online and offline events in the `deviceready` handler.
+
+```js
+document.addEventListener("offline", onOffline, false);
+document.addEventListener("online", onOnline, false);
+```
+
+The app's `onOnline` function handles the online event. In the event handler, check the current network state. In this app, treat any connection type as good except Connection.NONE. If you have a connection, you try to upload a file.
+
+```js
+function onOnline() {
+ // Handle the online event
+ var networkState = navigator.connection.type;
+
+ if (networkState !== Connection.NONE) {
+ if (dataFileEntry) {
+ tryToUploadFile();
+ }
+ }
+ display('Connection type: ' + networkState);
+}
+```
+
+When the online event fires in the preceding code, call the app's `tryToUploadFile` function.
+
+If the FileTransfer object's upload function fails, call the app's `offlineWrite` function to save the current data somewhere.
+
+>*Note* This example requires the FileTransfer plugin.
+
+```js
+function tryToUploadFile() {
+ // !! Assumes variable fileURL contains a valid URL to a text file on the device,
+ var fileURL = getDataFileEntry().toURL();
+
+ var success = function (r) {
+ console.log("Response = " + r.response);
+ display("Uploaded. Response: " + r.response);
+ }
+
+ var fail = function (error) {
+ console.log("An error has occurred: Code = " + error.code);
+ offlineWrite("Failed to upload: some offline data");
+ }
+
+ var options = new FileUploadOptions();
+ options.fileKey = "file";
+ options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);
+ options.mimeType = "text/plain";
+
+ var ft = new FileTransfer();
+ // Make sure you add the domain of your server URL to the
+ // Content-Security-Policy <meta> element in index.html.
+ ft.upload(fileURL, encodeURI(SERVER), success, fail, options);
+};
+```
+
+Here is the code for the `offlineWrite` function.
+
+>*Note* This code examples requires the File plugin.
+
+```js
+function offlineWrite(offlineData) {
+ // Create a FileWriter object for our FileEntry.
+ dataFileEntry.createWriter(function (fileWriter) {
+
+ fileWriter.onwriteend = function () {
+ console.log("Successful file write...");
+ display(offlineData);
+ };
+
+ fileWriter.onerror = function (e) {
+ console.log("Failed file write: " + e.toString());
+ };
+
+ fileWriter.write(offlineData);
+ });
+}
+```
+
+If the offline event occurs, just do something like notify the user (for this example, just log it).
+
+```js
+function onOffline() {
+ // Handle the offline event
+ console.log("lost connection");
+}
+```
+
+[Apache Cordova issue tracker]: https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Network%20Information%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-network-information/RELEASENOTES.md
index 06bc5090..7ff57bd6 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/RELEASENOTES.md
@@ -20,97 +20,128 @@
-->
# Release Notes
-### 0.2.1 (Sept 5, 2013)
-* CB-4432 copyright notice change
+### 1.3.0 (Sep 08, 2016)
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies
+* [CB-11734](https://issues.apache.org/jira/browse/CB-11734) Network Plugin uses `Android Log class` and not `Cordova LOG class`
+* [CB-11300](https://issues.apache.org/jira/browse/CB-11300) (**android**) Recognize `2G`, `3G` and `4G` network connection subtype names
+* Update `NetworkManager.java`
+* Detection of Ethernet Network Type on **Android**
+* fixed two potential memory leaks when doing Analyze on **iOS 9**
+* [CB-11384](https://issues.apache.org/jira/browse/CB-11384) **android**: Does not pass sonarqube scan
+* Add badges for paramedic builds on Jenkins
+* Add pull request template.
+* Readme: Add fenced code blocks with langauage hints
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md
-### 0.2.3 (Sept 25, 2013)
-* CB-4889 bumping&resetting version
-* [windows8] commandProxy was moved
-* CB-4889 renaming org.apache.cordova.core.network-information to org.apache.cordova.network-information
-* removed duplicate comment line from plugin.xml
-* added Network APIs for FirefoxOS
-* Rename CHANGELOG.md -> RELEASENOTES.md
-* [CB-4752] Incremented plugin version on dev branch.
-
-### 0.2.4 (Oct 28, 2013)
-* CB-5128: add repo + issue tag to plugin.xml for network information plugin
-* [CB-4915] Incremented plugin version on dev branch.
+### 1.2.1 (Apr 15, 2016)
+* [CB-10763](https://issues.apache.org/jira/browse/CB-10763) Remove emoji in `cordova-plugin-network-information`
+* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins
-### 0.2.5 (Dec 4, 2013)
-* [ubuntu] specify policy_group
-* add ubuntu platform
-* Added amazon-fireos platform. Change to use amazon-fireos as the platform if user agent string contains 'cordova-amazon-fireos'
+### 1.2.0 (Jan 15, 2016)
+* Adding `CoreTelephony` to `plugin.xml`
+* Adding notification for `CT radio` information
+* Adding `CT radio` information
+* [CB-10160](https://issues.apache.org/jira/browse/CB-10160) Fixed the case mismatch issue
-### 0.2.6 (Jan 02, 2014)
-* CB-5658 Add doc/index.md for netinfo plugin
+### 1.1.0 (Nov 18, 2015)
+* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
+* Fixing contribute link.
+* These notifications are objects so their address always evaluates to true.
+* Update `NetworkManager.java`
+* [CB-9542](https://issues.apache.org/jira/browse/CB-9542) `Browser Proxy` not defined correctly
+* Solved `toLowerCase` issue with `Locale.US`
-### 0.2.7 (Feb 05, 2014)
-* Initial implementation of Tizen plugin.
+### 1.0.1 (Jun 17, 2015)
+* Adding .ratignore file.
+* [CB-9128](https://issues.apache.org/jira/browse/CB-9128) cordova-plugin-network-information documentation translation: cordova-plugin-network-information
+* fix npm md issue
-### 0.2.8 (Apr 17, 2014)
-* CB-6342: [iOS] iOS reports a cellular connection even when in Airplane mode
-* CB-6422: [windows8] use cordova/exec/proxy
-* CB-6460: Update license headers
-* CB-6465: Add license headers to Tizen code
-* Add NOTICE file
+### 1.0.0 (Apr 15, 2015)
+* [CB-8746](https://issues.apache.org/jira/browse/CB-8746) gave plugin major version bump
+* [CB-8683](https://issues.apache.org/jira/browse/CB-8683) changed plugin-id to pacakge-name
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) properly updated translated docs to use new id
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) updated translated docs to use new id
+* [CB-8185](https://issues.apache.org/jira/browse/CB-8185) Fixes typo in `cordova.platformId`
+* Use TRAVIS_BUILD_DIR, install paramedic by npm
+* [CB-8185](https://issues.apache.org/jira/browse/CB-8185) Use `navigator.onLine` as connection information source on browser platform
+* [CB-8653](https://issues.apache.org/jira/browse/CB-8653) Updated Readme
+* [CB-8659](https://issues.apache.org/jira/browse/CB-8659): ios: 4.0.x Compatibility: Remove use of initWebView method
+* [CB-8573](https://issues.apache.org/jira/browse/CB-8573) Integrate TravisCI
+* [CB-8438](https://issues.apache.org/jira/browse/CB-8438) cordova-plugin-network-information documentation translation: cordova-plugin-network-information
+* [CB-8538](https://issues.apache.org/jira/browse/CB-8538) Added package.json file
-### 0.2.9 (Jun 05, 2014)
-* updated notice file to include missing license
-* Cached extra info to better detect changes.
-* CB-6809 Add license to CONTRIBUTING.md
-* CB-6491 add CONTRIBUTING.md
-* CB-6350 - Fix networkStatusForFlags return value type to work with 64-bit iOS (closes #8)
-* Initial version of firefox os network information plugin
-* there was an error in the object definition
+### 0.2.15 (Feb 04, 2015)
+* [CB-8384](https://issues.apache.org/jira/browse/CB-8384) Network status change support on Windows
+* [CB-8384](https://issues.apache.org/jira/browse/CB-8384) Fixes the way we detect online status on Windows
+* [CB-8384](https://issues.apache.org/jira/browse/CB-8384) Add Windows platform quirks
+* [CB-8384](https://issues.apache.org/jira/browse/CB-8384) Add Windows section to Network Information plugin
-### 0.2.10 (Jun 24, 2014)
-* CB-6907: [android] Don't crash on startup if no networks available
+### 0.2.14 (Dec 02, 2014)
+* [CB-7976](https://issues.apache.org/jira/browse/CB-7976) **Android**: Use webView's context rather than Activity's context for intent receiver
+* [CB-7700](https://issues.apache.org/jira/browse/CB-7700) cordova-plugin-network-information documentation translation: cordova-plugin-network-information
-### 0.2.11 (Aug 06, 2014)
-* **FFOS** update NetworkProxy.js
-* CB-6127 Updated translations for docs
-* CB-7019 Updated version and RELEASENOTES.md for release 0.2.10
-* Fixed docs for online/offline event being backwards
+### 0.2.13 (Oct 03, 2014)
+* [CB-7595](https://issues.apache.org/jira/browse/CB-7595): Android L changes the type from Mobile to Cellular, I'm pretty sure this isn't documented
### 0.2.12 (Sep 17, 2014)
-* CB-7471 cordova-plugin-network-information documentation translation
+* [CB-7471](https://issues.apache.org/jira/browse/CB-7471) cordova-plugin-network-information documentation translation
* Fix network information type exception on fxos 2
* Added support for the browser
-* CB-6724 added documentation for manual tests
+* [CB-6724](https://issues.apache.org/jira/browse/CB-6724) added documentation for manual tests
* remove reference to test assets, they are optional
* Renamed test dir and added nested plugin.xml
-* CB-6964 ported manual tests
+* [CB-6964](https://issues.apache.org/jira/browse/CB-6964) ported manual tests
* Port network tests to plugin-test-framework
* Fix naviagtor typo
-### 0.2.13 (Oct 03, 2014)
-* CB-7595: Android L changes the type from Mobile to Cellular, I'm pretty sure this isn't documented
+### 0.2.11 (Aug 06, 2014)
+* **FFOS** update NetworkProxy.js
+* [CB-6127](https://issues.apache.org/jira/browse/CB-6127) Updated translations for docs
+* [CB-7019](https://issues.apache.org/jira/browse/CB-7019) Updated version and RELEASENOTES.md for release 0.2.10
+* Fixed docs for online/offline event being backwards
-### 0.2.14 (Dec 02, 2014)
-* CB-7976 **Android**: Use webView's context rather than Activity's context for intent receiver
-* CB-7700 cordova-plugin-network-information documentation translation: cordova-plugin-network-information
+### 0.2.10 (Jun 24, 2014)
+* [CB-6907](https://issues.apache.org/jira/browse/CB-6907): [android] Don't crash on startup if no networks available
-### 0.2.15 (Feb 04, 2015)
-* CB-8384 Network status change support on Windows
-* CB-8384 Fixes the way we detect online status on Windows
-* CB-8384 Add Windows platform quirks
-* CB-8384 Add Windows section to Network Information plugin
+### 0.2.9 (Jun 05, 2014)
+* updated notice file to include missing license
+* Cached extra info to better detect changes.
+* [CB-6809](https://issues.apache.org/jira/browse/CB-6809) Add license to CONTRIBUTING.md
+* [CB-6491](https://issues.apache.org/jira/browse/CB-6491) add CONTRIBUTING.md
+* [CB-6350](https://issues.apache.org/jira/browse/CB-6350) - Fix networkStatusForFlags return value type to work with 64-bit iOS (closes #8)
+* Initial version of firefox os network information plugin
+* there was an error in the object definition
-### 1.0.0 (Apr 15, 2015)
-* CB-8746 gave plugin major version bump
-* CB-8683 changed plugin-id to pacakge-name
-* CB-8653 properly updated translated docs to use new id
-* CB-8653 updated translated docs to use new id
-* CB-8185 Fixes typo in `cordova.platformId`
-* Use TRAVIS_BUILD_DIR, install paramedic by npm
-* CB-8185 Use `navigator.onLine` as connection information source on browser platform
-* CB-8653 Updated Readme
-* CB-8659: ios: 4.0.x Compatibility: Remove use of initWebView method
-* CB-8573 Integrate TravisCI
-* CB-8438 cordova-plugin-network-information documentation translation: cordova-plugin-network-information
-* CB-8538 Added package.json file
+### 0.2.8 (Apr 17, 2014)
+* [CB-6342](https://issues.apache.org/jira/browse/CB-6342): [iOS] iOS reports a cellular connection even when in Airplane mode
+* [CB-6422](https://issues.apache.org/jira/browse/CB-6422): [windows8] use cordova/exec/proxy
+* [CB-6460](https://issues.apache.org/jira/browse/CB-6460): Update license headers
+* [CB-6465](https://issues.apache.org/jira/browse/CB-6465): Add license headers to Tizen code
+* Add NOTICE file
-### 1.0.1 (Jun 17, 2015)
-* Adding .ratignore file.
-* CB-9128 cordova-plugin-network-information documentation translation: cordova-plugin-network-information
-* fix npm md issue
+### 0.2.7 (Feb 05, 2014)
+* Initial implementation of Tizen plugin.
+
+### 0.2.6 (Jan 02, 2014)
+* [CB-5658](https://issues.apache.org/jira/browse/CB-5658) Add doc/index.md for netinfo plugin
+
+### 0.2.5 (Dec 4, 2013)
+* [ubuntu] specify policy_group
+* add ubuntu platform
+* Added amazon-fireos platform. Change to use amazon-fireos as the platform if user agent string contains 'cordova-amazon-fireos'
+
+### 0.2.4 (Oct 28, 2013)
+* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): add repo + issue tag to plugin.xml for network information plugin
+* [CB-4915](https://issues.apache.org/jira/browse/CB-4915) Incremented plugin version on dev branch.
+
+### 0.2.3 (Sept 25, 2013)
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) bumping&resetting version
+* [windows8] commandProxy was moved
+* [CB-4889](https://issues.apache.org/jira/browse/CB-4889) renaming org.apache.cordova.core.network-information to org.apache.cordova.network-information
+* removed duplicate comment line from plugin.xml
+* added Network APIs for FirefoxOS
+* Rename CHANGELOG.md -> RELEASENOTES.md
+* [CB-4752](https://issues.apache.org/jira/browse/CB-4752) Incremented plugin version on dev branch.
+
+### 0.2.1 (Sept 5, 2013)
+* [CB-4432](https://issues.apache.org/jira/browse/CB-4432) copyright notice change
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/de/README.md
index f6292b27..f6292b27 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/de/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/de/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/de/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/de/index.md
index 537328a6..537328a6 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/de/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/de/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/es/README.md
index 4e30593d..4e30593d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/es/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/es/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/es/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/es/index.md
index 65158ef5..65158ef5 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/es/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/es/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/README.md
index 8f2b82cc..8f2b82cc 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/index.md
index e49c5d52..e49c5d52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/fr/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/it/README.md
index f4343594..f4343594 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/it/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/it/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/it/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/it/index.md
index e1917195..e1917195 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/it/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/it/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/README.md
index 797b7413..797b7413 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/index.md
index 71b6f82e..71b6f82e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/ja/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/README.md
index a6675391..a6675391 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/index.md
index cb4c727a..cb4c727a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/ko/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/README.md
index 4b66cbb4..4b66cbb4 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/index.md
index a42b973c..a42b973c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/pl/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/ru/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/ru/index.md
index 481c1b18..481c1b18 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/ru/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/ru/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/README.md
index 09e11e7e..09e11e7e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/README.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/README.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/index.md b/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/index.md
index 2041467e..2041467e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/index.md
+++ b/StoneIsland/plugins/cordova-plugin-network-information/doc/zh/index.md
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/package.json b/StoneIsland/plugins/cordova-plugin-network-information/package.json
index 452db88b..fd804b86 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/package.json
+++ b/StoneIsland/plugins/cordova-plugin-network-information/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-network-information",
- "version": "1.0.1",
+ "version": "1.3.0",
"description": "Cordova Network Information Plugin",
"cordova": {
"id": "cordova-plugin-network-information",
@@ -41,6 +41,20 @@
"cordova-tizen",
"cordova-browser"
],
+ "scripts": {
+ "test": "npm run jshint",
+ "jshint": "jshint www && jshint src && jshint tests"
+ },
"author": "Apache Software Foundation",
- "license": "Apache 2.0"
+ "license": "Apache-2.0",
+ "engines": {
+ "cordovaDependencies": {
+ "2.0.0": {
+ "cordova": ">100"
+ }
+ }
+ },
+ "devDependencies": {
+ "jshint": "^2.6.0"
+ }
}
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/plugin.xml b/StoneIsland/plugins/cordova-plugin-network-information/plugin.xml
index e0ed97fc..29922293 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-network-information/plugin.xml
@@ -21,7 +21,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-network-information"
- version="1.0.1">
+ version="1.3.0">
<name>Network Information</name>
<description>Cordova Network Information Plugin</description>
@@ -103,6 +103,7 @@ xmlns:android="http://schemas.android.com/apk/res/android"
<header-file src="src/ios/CDVReachability.h" />
<source-file src="src/ios/CDVReachability.m" />
<framework src="SystemConfiguration.framework" weak="true" />
+ <framework src="CoreTelephony.framework" />
</platform>
<!-- blackberry10 -->
@@ -146,14 +147,14 @@ xmlns:android="http://schemas.android.com/apk/res/android"
<!-- windows8 -->
<platform name="windows8">
<js-module src="src/windows/NetworkInfoProxy.js" name="NetworkInfoProxy">
- <merges target="" />
+ <runs/>
</js-module>
</platform>
<!-- windows -->
<platform name="windows">
<js-module src="src/windows/NetworkInfoProxy.js" name="NetworkInfoProxy">
- <merges target="" />
+ <runs/>
</js-module>
</platform>
@@ -166,9 +167,8 @@ xmlns:android="http://schemas.android.com/apk/res/android"
<!-- browser -->
<platform name="browser">
- <js-module src="www/browser/network.js" name="browserNetwork">
- <clobbers target="navigator.connection" />
- <clobbers target="navigator.network.connection" />
+ <js-module src="src/browser/network.js" name="NetworkInfoProxy">
+ <runs/>
</js-module>
</platform>
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/android/NetworkManager.java b/StoneIsland/plugins/cordova-plugin-network-information/src/android/NetworkManager.java
index 4c85ddab..614b6e7b 100755
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/android/NetworkManager.java
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/android/NetworkManager.java
@@ -21,6 +21,7 @@ package org.apache.cordova.networkinformation;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.LOG;
import org.apache.cordova.PluginResult;
import org.apache.cordova.CordovaWebView;
import org.json.JSONArray;
@@ -33,7 +34,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.util.Log;
+
+import java.util.Locale;
public class NetworkManager extends CordovaPlugin {
@@ -45,14 +47,16 @@ public class NetworkManager extends CordovaPlugin {
public static final String WIMAX = "wimax";
// mobile
public static final String MOBILE = "mobile";
-
- // Android L calls this Cellular, because I have no idea!
+
+ // Android L calls this Cellular, because I have no idea!
public static final String CELLULAR = "cellular";
// 2G network types
+ public static final String TWO_G = "2g";
public static final String GSM = "gsm";
public static final String GPRS = "gprs";
public static final String EDGE = "edge";
// 3G network types
+ public static final String THREE_G = "3g";
public static final String CDMA = "cdma";
public static final String UMTS = "umts";
public static final String HSPA = "hspa";
@@ -61,12 +65,14 @@ public class NetworkManager extends CordovaPlugin {
public static final String ONEXRTT = "1xrtt";
public static final String EHRPD = "ehrpd";
// 4G network types
+ public static final String FOUR_G = "4g";
public static final String LTE = "lte";
public static final String UMB = "umb";
public static final String HSPA_PLUS = "hspa+";
// return type
public static final String TYPE_UNKNOWN = "unknown";
public static final String TYPE_ETHERNET = "ethernet";
+ public static final String TYPE_ETHERNET_SHORT = "eth";
public static final String TYPE_WIFI = "wifi";
public static final String TYPE_2G = "2g";
public static final String TYPE_3G = "3g";
@@ -125,7 +131,9 @@ public class NetworkManager extends CordovaPlugin {
String connectionType = "";
try {
connectionType = this.getConnectionInfo(info).get("type").toString();
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, connectionType);
pluginResult.setKeepCallback(true);
@@ -143,7 +151,7 @@ public class NetworkManager extends CordovaPlugin {
try {
webView.getContext().unregisterReceiver(this.receiver);
} catch (Exception e) {
- Log.e(LOG_TAG, "Error unregistering network receiver: " + e.getMessage(), e);
+ LOG.e(LOG_TAG, "Error unregistering network receiver: " + e.getMessage(), e);
} finally {
receiver = null;
}
@@ -169,7 +177,9 @@ public class NetworkManager extends CordovaPlugin {
String connectionType = "";
try {
connectionType = thisInfo.get("type").toString();
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
sendUpdate(connectionType);
lastInfo = thisInfo;
@@ -196,15 +206,17 @@ public class NetworkManager extends CordovaPlugin {
extraInfo = info.getExtraInfo();
}
- Log.d("CordovaNetworkManager", "Connection Type: " + type);
- Log.d("CordovaNetworkManager", "Connection Extra Info: " + extraInfo);
+ LOG.d(LOG_TAG, "Connection Type: " + type);
+ LOG.d(LOG_TAG, "Connection Extra Info: " + extraInfo);
JSONObject connectionInfo = new JSONObject();
try {
connectionInfo.put("type", type);
connectionInfo.put("extraInfo", extraInfo);
- } catch (JSONException e) { }
+ } catch (JSONException e) {
+ LOG.d(LOG_TAG, e.getLocalizedMessage());
+ }
return connectionInfo;
}
@@ -231,30 +243,38 @@ public class NetworkManager extends CordovaPlugin {
*/
private String getType(NetworkInfo info) {
if (info != null) {
- String type = info.getTypeName();
+ String type = info.getTypeName().toLowerCase(Locale.US);
- if (type.toLowerCase().equals(WIFI)) {
+ LOG.d(LOG_TAG, "toLower : " + type.toLowerCase());
+ LOG.d(LOG_TAG, "wifi : " + WIFI);
+ if (type.equals(WIFI)) {
return TYPE_WIFI;
}
- else if (type.toLowerCase().equals(MOBILE) || type.toLowerCase().equals(CELLULAR)) {
- type = info.getSubtypeName();
- if (type.toLowerCase().equals(GSM) ||
- type.toLowerCase().equals(GPRS) ||
- type.toLowerCase().equals(EDGE)) {
+ else if (type.toLowerCase().equals(TYPE_ETHERNET) || type.toLowerCase().startsWith(TYPE_ETHERNET_SHORT)) {
+ return TYPE_ETHERNET;
+ }
+ else if (type.equals(MOBILE) || type.equals(CELLULAR)) {
+ type = info.getSubtypeName().toLowerCase(Locale.US);
+ if (type.equals(GSM) ||
+ type.equals(GPRS) ||
+ type.equals(EDGE) ||
+ type.equals(TWO_G)) {
return TYPE_2G;
}
- else if (type.toLowerCase().startsWith(CDMA) ||
- type.toLowerCase().equals(UMTS) ||
- type.toLowerCase().equals(ONEXRTT) ||
- type.toLowerCase().equals(EHRPD) ||
- type.toLowerCase().equals(HSUPA) ||
- type.toLowerCase().equals(HSDPA) ||
- type.toLowerCase().equals(HSPA)) {
+ else if (type.startsWith(CDMA) ||
+ type.equals(UMTS) ||
+ type.equals(ONEXRTT) ||
+ type.equals(EHRPD) ||
+ type.equals(HSUPA) ||
+ type.equals(HSDPA) ||
+ type.equals(HSPA) ||
+ type.equals(THREE_G)) {
return TYPE_3G;
}
- else if (type.toLowerCase().equals(LTE) ||
- type.toLowerCase().equals(UMB) ||
- type.toLowerCase().equals(HSPA_PLUS)) {
+ else if (type.equals(LTE) ||
+ type.equals(UMB) ||
+ type.equals(HSPA_PLUS) ||
+ type.equals(FOUR_G)) {
return TYPE_4G;
}
}
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/blackberry10/index.js b/StoneIsland/plugins/cordova-plugin-network-information/src/blackberry10/index.js
index d47d840e..c6cd00a9 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/blackberry10/index.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/blackberry10/index.js
@@ -19,6 +19,8 @@
*
*/
+/* global PluginResult */
+
//map from BB10 to cordova connection types:
//https://github.com/apache/cordova-js/blob/master/lib/common/plugin/Connection.js
function mapConnectionType(con) {
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/whitelist.js b/StoneIsland/plugins/cordova-plugin-network-information/src/browser/network.js
index 74d7a99d..8a6ddb0e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/whitelist.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/browser/network.js
@@ -18,10 +18,31 @@
*
*/
-if (!document.querySelector('meta[http-equiv=Content-Security-Policy]')) {
- var msg = 'No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.';
- console.error(msg);
- setInterval(function() {
- console.warn(msg);
- }, 10000);
+var cordova = require('cordova'),
+ proxy = require("cordova/exec/proxy"),
+ Connection = require('./Connection');
+
+var type = navigator.onLine ? Connection.UNKNOWN : Connection.NONE;
+
+// Subscribe to 'native' online/offline events
+function onStatusChange(evt) {
+ type = navigator.onLine ? Connection.UNKNOWN : Connection.NONE;
+ // force async
+ setTimeout(function(){
+ cordova.fireDocumentEvent(evt.type);
+ },0);
}
+
+window.addEventListener('online', onStatusChange);
+window.addEventListener('offline', onStatusChange);
+
+proxy.add("NetworkStatus", {
+ getConnectionInfo:function(cbSuccess) {
+ // force async
+ setTimeout(function(){
+ cbSuccess(type);
+ },0);
+ }
+});
+
+
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/firefoxos/NetworkProxy.js b/StoneIsland/plugins/cordova-plugin-network-information/src/firefoxos/NetworkProxy.js
index 40d61637..8c82557d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/firefoxos/NetworkProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/firefoxos/NetworkProxy.js
@@ -24,8 +24,7 @@
and http://w3c.github.io/netinfo/
*/
-var cordova = require('cordova'),
- Connection = require('./Connection'),
+var Connection = require('./Connection'),
modulemapper = require('cordova/modulemapper');
var origConnection = modulemapper.getOriginalSymbol(window, 'navigator.connection');
@@ -47,7 +46,7 @@ module.exports = {
metered = connection.metered,
type = connection.type;
- if (type != undefined) {
+ if (type !== undefined) {
// For more information see:
// https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API
@@ -65,7 +64,7 @@ module.exports = {
connectionType = Connection.NONE;
break;
}
- } else if (bandwidth != undefined && metered != undefined) {
+ } else if (bandwidth !== undefined && metered !== undefined) {
/*
bandwidth of type double, readonly
The user agent must set the value of the bandwidth attribute to:
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.h b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.h
index 8add0279..8add0279 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.h
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.h
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.m b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.m
index 37497675..6715322a 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.m
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVConnection.m
@@ -16,6 +16,7 @@
specific language governing permissions and limitations
under the License.
*/
+#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import "CDVConnection.h"
#import "CDVReachability.h"
@@ -57,6 +58,32 @@
if (isConnectionRequired) {
return @"none";
} else {
+ if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) {
+ CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
+ if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) {
+ return @"2g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) {
+ return @"2g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {
+ return @"3g";
+ } else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
+ return @"4g";
+ }
+ }
return @"cellular";
}
}
@@ -118,7 +145,9 @@
[self.internetReach startNotifier];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateConnectionType:)
name:kReachabilityChangedNotification object:nil];
- if (&UIApplicationDidEnterBackgroundNotification && &UIApplicationWillEnterForegroundNotification) {
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateConnectionType:)
+ name:CTRadioAccessTechnologyDidChangeNotification object:nil];
+ if (UIApplicationDidEnterBackgroundNotification && UIApplicationWillEnterForegroundNotification) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPause) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onResume) name:UIApplicationWillEnterForegroundNotification object:nil];
}
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.h b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.h
index 01a95c35..01a95c35 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.h
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.h
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.m b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.m
index c60261ae..1399867e 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.m
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/ios/CDVReachability.m
@@ -142,6 +142,9 @@ static void CDVReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkRe
retVal->reachabilityRef = reachability;
retVal->localWiFiRef = NO;
}
+ else {
+ CFRelease(reachability);
+ }
}
return retVal;
}
@@ -156,6 +159,9 @@ static void CDVReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkRe
retVal->reachabilityRef = reachability;
retVal->localWiFiRef = NO;
}
+ else {
+ CFRelease(reachability);
+ }
}
return retVal;
}
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/tizen/NetworkProxy.js b/StoneIsland/plugins/cordova-plugin-network-information/src/tizen/NetworkProxy.js
index cd9506e1..d2de2ccc 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/tizen/NetworkProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/tizen/NetworkProxy.js
@@ -19,7 +19,8 @@
*
*/
-var cordova = require('cordova');
+/* global tizen */
+
var Connection = require('./Connection');
module.exports = {
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.cpp b/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.cpp
index 8fdb4949..8fdb4949 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.cpp
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.cpp
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.h b/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.h
index aca20e7b..aca20e7b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.h
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/ubuntu/network_information.h
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/windows/NetworkInfoProxy.js b/StoneIsland/plugins/cordova-plugin-network-information/src/windows/NetworkInfoProxy.js
index 27ad2f06..92153c7b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/windows/NetworkInfoProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/windows/NetworkInfoProxy.js
@@ -21,15 +21,10 @@
/*global Windows:true */
-var cordova = require('cordova');
var Connection = require('./Connection');
var winNetConn = Windows.Networking.Connectivity;
var networkInfo = winNetConn.NetworkInformation;
-var networkCostInfo = winNetConn.NetworkCostType;
-var networkConnectivityInfo = winNetConn.NetworkConnectivityLevel;
-var networkAuthenticationInfo = winNetConn.NetworkAuthenticationType;
-var networkEncryptionInfo = winNetConn.NetworkEncryptionType;
function getCurrrentConnectionType() {
@@ -76,7 +71,7 @@ module.exports = {
{
var reportConnectionInfoOnce = function () {
win(getCurrrentConnectionType(), { keepCallback: true });
- }
+ };
// report current connection type
setTimeout(reportConnectionInfoOnce, 0);
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/src/wp/NetworkStatus.cs b/StoneIsland/plugins/cordova-plugin-network-information/src/wp/NetworkStatus.cs
index 12eb061d..12eb061d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/src/wp/NetworkStatus.cs
+++ b/StoneIsland/plugins/cordova-plugin-network-information/src/wp/NetworkStatus.cs
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-network-information/tests/plugin.xml
index 8df4769c..c4b03c26 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-network-information/tests/plugin.xml
@@ -21,7 +21,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-network-information-tests"
- version="1.0.1">
+ version="1.3.0">
<name>Cordova Network Information Plugin Tests</name>
<license>Apache 2.0</license>
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/tests/tests.js b/StoneIsland/plugins/cordova-plugin-network-information/tests/tests.js
index 23be97ac..07f4b27f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/tests/tests.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/tests/tests.js
@@ -19,6 +19,9 @@
*
*/
+/* jshint jasmine: true */
+/* global Connection */
+
exports.defineAutoTests = function () {
describe('Network (navigator.connection)', function () {
it("network.spec.1 should exist", function () {
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js b/StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js
index f20a485c..f20a485c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/www/Connection.js
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js b/StoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js
deleted file mode 100755
index 72ec5139..00000000
--- a/StoneIsland/plugins/cordova-plugin-network-information/www/browser/network.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-/*global module, require*/
-
-var cordova = require('cordova'),
- Connection = require('./Connection');
-
-var DOCUMENT_EVENTS_CHECK_INTERVAL = 500; // ms
-// Flag that indicates that ew need to re-fire online/offline events at document level
-// (Workaround for Chrome, since it fires such events only for window object)
-var NEED_FIRE_DOCUMENT_EVENT_MANUALLY = false;
-
-function NetworkConnection() {
- this.type = Connection.UNKNOWN;
-}
-
-/**
- * Get connection info
- *
- * @param {Function} successCallback The function to call when the Connection data is available
- */
-NetworkConnection.prototype.getInfo = function(successCallback) {
- successCallback(this.type);
-};
-
-Object.defineProperty(NetworkConnection.prototype, 'type', {
- get: function () {
- // It is not possible to determine real connection type in browser
- // so we always report Connection.UNKNOWN when online
- return (window.navigator.onLine === false ? Connection.NONE : Connection.UNKNOWN);
- },
- configurable: true,
- enumerable: true
-});
-
-// This function tries to detect if document online/offline events is being fired
-// after corresponding window events, and if not, then fires them manually
-// This is workaround for Chrome, which fires only window online/offline events
-// and regarding to plugin spec we need these events at document object
-var eventRedirectHandler = function (e) {
- // NEED_FIRE_DOCUMENT_EVENT_MANUALLY flag is already set,
- // just fire corresponding document event and return
- if (NEED_FIRE_DOCUMENT_EVENT_MANUALLY) {
- cordova.fireDocumentEvent(e.type);
- return;
- }
-
- // Flag that indicates whether corresponding document even is fired
- var documentStateEventFired = false;
- var setDocumentStateEventFired = function() {
- documentStateEventFired = true;
- };
- document.addEventListener(e.type, setDocumentStateEventFired);
- setTimeout(function () {
- // Remove unnecessary listener
- document.removeEventListener(e.type, setDocumentStateEventFired);
- // if document event hasn't been fired in specified interval (500 ms by default),
- // then we're in chrome and need to fire it manually
- if (!documentStateEventFired) {
- NEED_FIRE_DOCUMENT_EVENT_MANUALLY = true;
- cordova.fireDocumentEvent(e.type);
- }
- }, DOCUMENT_EVENTS_CHECK_INTERVAL);
-};
-
-// Subscribe to native online/offline events
-window.addEventListener('online', eventRedirectHandler);
-window.addEventListener('offline', eventRedirectHandler);
-
-var me = new NetworkConnection();
-
-require("cordova/exec/proxy").add("NetworkStatus", { getConnectionInfo: me.getConnectionInfo });
-
-module.exports = me;
diff --git a/StoneIsland/plugins/cordova-plugin-network-information/www/network.js b/StoneIsland/plugins/cordova-plugin-network-information/www/network.js
index ac792d8c..ac792d8c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-network-information/www/network.js
+++ b/StoneIsland/plugins/cordova-plugin-network-information/www/network.js
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/README.md b/StoneIsland/plugins/cordova-plugin-splashscreen/README.md
index ff790b16..6a6faaf9 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/README.md
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/README.md
@@ -1,3 +1,7 @@
+---
+title: Splashscreen
+description: Control the splash screen for your app.
+---
<!--
# license: Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -17,11 +21,15 @@
# under the License.
-->
+|Android|iOS| Windows 8.1 Store | Windows 8.1 Phone | Windows 10 Store | Travis CI |
+|:-:|:-:|:-:|:-:|:-:|:-:|
+|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-splashscreen)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=android,PLUGIN=cordova-plugin-splashscreen/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-splashscreen)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=ios,PLUGIN=cordova-plugin-splashscreen/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-splashscreen)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-store,PLUGIN=cordova-plugin-splashscreen/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-splashscreen)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-8.1-phone,PLUGIN=cordova-plugin-splashscreen/)|[![Build Status](http://cordova-ci.cloudapp.net:8080/buildStatus/icon?job=cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-splashscreen)](http://cordova-ci.cloudapp.net:8080/job/cordova-periodic-build/PLATFORM=windows-10-store,PLUGIN=cordova-plugin-splashscreen/)|[![Build Status](https://travis-ci.org/apache/cordova-plugin-splashscreen.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-splashscreen)|
+
# cordova-plugin-splashscreen
-This plugin displays and hides a splash screen during application launch.
+This plugin is required to work with splash screens. This plugin displays and hides a splash screen during application launch.
-:warning: Report issues on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Splashscreen%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
+Report issues with this plugin on the [Apache Cordova issue tracker][Apache Cordova issue tracker].
## Installation
@@ -38,76 +46,192 @@ This plugin displays and hides a splash screen during application launch.
- BlackBerry 10
- iOS
- Windows Phone 7 and 8
-- Windows 8
-- Windows
+- Windows (`cordova-windows` version >= 4.4.0 is required)
- Browser
-## Preferences
+__Note__: Extended splashscreen does not require the plugin on Windows (as opposed to Android and iOS) in case you don't use the plugin API, i.e. programmatic hide/show.
-#### config.xml
+## Example Configuration
+In the top-level `config.xml` file (not the one in `platforms`), add configuration elements like those specified here.
-- __SplashScreen__ (string). The resource name which is used for the displaying splash screen. Different platforms use values for this.
+Please notice that the value of the "src" attribute is relative to the project root directory and not to the www directory (see `Directory structure` below). You can name the source image whatever you like. The internal name in the app is determined by Cordova.
- <preference name="SplashScreen" value="resourcename" />
+Directory structure:
-- __AutoHideSplashScreen__ (boolean, default to `true`). Indicates wherether hide splash screen automatically or not. Splash screen hidden after amount of time specified in the `SplashScreenDelay` preference.
+```
+projectRoot
+ hooks
+ platforms
+ plugins
+ www
+ css
+ img
+ js
+ res
+ screen
+ android
+ ios
+ windows
+```
- <preference name="AutoHideSplashScreen" value="true" />
+```xml
+<platform name="android">
+ <!-- you can use any density that exists in the Android project -->
+ <splash src="res/screen/android/splash-land-hdpi.png" density="land-hdpi"/>
+ <splash src="res/screen/android/splash-land-ldpi.png" density="land-ldpi"/>
+ <splash src="res/screen/android/splash-land-mdpi.png" density="land-mdpi"/>
+ <splash src="res/screen/android/splash-land-xhdpi.png" density="land-xhdpi"/>
-- __SplashScreenDelay__ (number, default to 3000). Amount of time in milliseconds to wait before automatically hide splash screen.
+ <splash src="res/screen/android/splash-port-hdpi.png" density="port-hdpi"/>
+ <splash src="res/screen/android/splash-port-ldpi.png" density="port-ldpi"/>
+ <splash src="res/screen/android/splash-port-mdpi.png" density="port-mdpi"/>
+ <splash src="res/screen/android/splash-port-xhdpi.png" density="port-xhdpi"/>
+</platform>
- <preference name="SplashScreenDelay" value="3000" />
+<platform name="ios">
+ <!-- images are determined by width and height. The following are supported -->
+ <splash src="res/screen/ios/Default~iphone.png" width="320" height="480"/>
+ <splash src="res/screen/ios/Default@2x~iphone.png" width="640" height="960"/>
+ <splash src="res/screen/ios/Default-Portrait~ipad.png" width="768" height="1024"/>
+ <splash src="res/screen/ios/Default-Portrait@2x~ipad.png" width="1536" height="2048"/>
+ <splash src="res/screen/ios/Default-Landscape~ipad.png" width="1024" height="768"/>
+ <splash src="res/screen/ios/Default-Landscape@2x~ipad.png" width="2048" height="1536"/>
+ <splash src="res/screen/ios/Default-568h@2x~iphone.png" width="640" height="1136"/>
+ <splash src="res/screen/ios/Default-667h.png" width="750" height="1334"/>
+ <splash src="res/screen/ios/Default-736h.png" width="1242" height="2208"/>
+ <splash src="res/screen/ios/Default-Landscape-736h.png" width="2208" height="1242"/>
+</platform>
+<platform name="windows">
+ <!-- images are determined by width and height. The following are supported -->
+ <splash src="res/screen/windows/splashscreen.png" width="620" height="300"/>
+ <splash src="res/screen/windows/splashscreenphone.png" width="1152" height="1920"/>
+</platform>
-### Android Quirks
+<platform name="blackberry10">
+ <!-- Add a rim:splash element for each resolution and locale you wish -->
+ <!-- http://developer.blackberry.com/html5/documentation/rim_splash_element.html -->
+ <rim:splash src="res/screen/blackberry/splashscreen.png"/>
+</platform>
-In your `config.xml`, you need to add the following preferences:
+<preference name="SplashScreenDelay" value="10000" />
+```
- <preference name="SplashScreen" value="foo" />
- <preference name="SplashScreenDelay" value="3000" />
- <preference name="SplashMaintainAspectRatio" value="true|false" />
+## Preferences
-Where foo is the name of the splashscreen file, preferably a 9 patch file. Make sure to add your splashcreen files to your res/xml directory under the appropriate folders. The second parameter represents how long the splashscreen will appear in milliseconds. It defaults to 3000 ms. See [Icons and Splash Screens](http://cordova.apache.org/docs/en/edge/config_ref_images.md.html)
-for more information.
+#### config.xml
-"SplashMaintainAspectRatio" preference is optional. If set to true, splash screen drawable is not stretched to fit screen, but instead simply "covers" the screen, like CSS "background-size:cover". This is very useful when splash screen images cannot be distorted in any way, for example when they contain scenery or text. This setting works best with images that have large margins (safe areas) that can be safely cropped on screens with different aspect ratios.
+- `AutoHideSplashScreen` (boolean, default to `true`). Indicates whether to hide splash screen automatically or not. Splash screen hidden after amount of time specified in the `SplashScreenDelay` preference.
-The plugin reloads splash drawable whenever orientation changes, so you can specify different drawables for portrait and landscape orientations.
+```xml
+ <preference name="AutoHideSplashScreen" value="true" />
+```
-### Browser Quirks
+- `SplashScreenDelay` (number, default to 3000). Amount of time in milliseconds to wait before automatically hide splash screen.
-You can use the following preferences in your `config.xml`:
+```xml
+ <preference name="SplashScreenDelay" value="3000" />
+```
- <platform name="browser">
- <preference name="SplashScreen" value="images/browser/splashscreen.jpg" /> <!-- defaults to "img/logo.png" -->
- <preference name="SplashScreenDelay" value="3000" /> <!-- defaults to "3000" -->
- <preference name="SplashScreenBackgroundColor" value="green" /> <!-- defaults to "#464646" -->
- <preference name="ShowSplashScreen" value="false" /> <!-- defaults to "true" -->
- <preference name="SplashScreenWidth" value="600" /> <!-- defaults to "170" -->
- <preference name="SplashScreenHeight" value="300" /> <!-- defaults to "200" -->
- </platform>
+Note also that this value used to be seconds, and not milliseconds, so values less than 30 will still be treated as seconds. ( Consider this a deprecated patch that will disapear in some future version. )
+To disable the splashscreen add the following preference to `config.xml`:
+```xml
+<preference name="SplashScreenDelay" value="0"/>
+```
-### iOS Quirks
+**iOS Quirk**: to disable the splashscreen on `ios` platform you should also add `<preference name="FadeSplashScreenDuration" value="0"/>` to `config.xml`.
- `FadeSplashScreen` (boolean, defaults to `true`): Set to `false` to
prevent the splash screen from fading in and out when its display
state changes.
- <preference name="FadeSplashScreen" value="false"/>
+```xml
+ <preference name="FadeSplashScreen" value="false"/>
+```
-- `FadeSplashScreenDuration` (float, defaults to `3000`): Specifies the
+- `FadeSplashScreenDuration` (float, defaults to `500`): Specifies the
number of milliseconds for the splash screen fade effect to execute.
- <preference name="FadeSplashScreenDuration" value="3000"/>
+```xml
+ <preference name="FadeSplashScreenDuration" value="750"/>
+```
-Note also that this value used to be seconds, and not milliseconds, so values less than 30 will still be treated as seconds. ( Consider this a deprecated patch that will disapear in some future version. )
+_Note_: `FadeSplashScreenDuration` is included into `SplashScreenDelay`, for example if you have `<preference name="SplashScreenDelay" value="3000" />` and `<preference name="FadeSplashScreenDuration" value="1000"/>` defined in `config.xml`:
+- 00:00 - splashscreen is shown
+- 00:02 - fading has started
+- 00:03 - splashscreen is hidden
+
+Turning the fading off via `<preference name="FadeSplashScreen" value="false"/>` technically means fading duration to be `0` so that in this example the overall splash delay will still be 3 seconds.
+
+_Note_: This only applies to the app startup - you need to take the fading timeout into account when manually showing/hiding the splashscreen in the code:
+
+```javascript
+navigator.splashscreen.show();
+window.setTimeout(function () {
+ navigator.splashscreen.hide();
+}, splashDuration - fadeDuration);
+```
- `ShowSplashScreenSpinner` (boolean, defaults to `true`): Set to `false`
to hide the splash-screen spinner.
- <preference name="ShowSplashScreenSpinner" value="false"/>
+```xml
+ <preference name="ShowSplashScreenSpinner" value="false"/>
+```
+
+### Android Quirks
+
+In your `config.xml`, you can add the following preferences:
+
+```xml
+<preference name="SplashMaintainAspectRatio" value="true|false" />
+<preference name="SplashShowOnlyFirstTime" value="true|false" />
+```
+
+"SplashMaintainAspectRatio" preference is optional. If set to true, splash screen drawable is not stretched to fit screen, but instead simply "covers" the screen, like CSS "background-size:cover". This is very useful when splash screen images cannot be distorted in any way, for example when they contain scenery or text. This setting works best with images that have large margins (safe areas) that can be safely cropped on screens with different aspect ratios.
+
+The plugin reloads splash drawable whenever orientation changes, so you can specify different drawables for portrait and landscape orientations.
+
+"SplashShowOnlyFirstTime" preference is also optional and defaults to `true`. When set to `true` splash screen will only appear on application launch. However, if you plan to use `navigator.app.exitApp()` to close application and force splash screen appear on next launch, you should set this property to `false` (this also applies to closing the App with Back button).
+
+### Browser Quirks
+
+You can use the following preferences in your `config.xml`:
+
+```xml
+<platform name="browser">
+ <preference name="SplashScreen" value="/images/browser/splashscreen.jpg" /> <!-- defaults to "/img/logo.png" -->
+ <preference name="SplashScreenDelay" value="3000" /> <!-- defaults to "3000" -->
+ <preference name="SplashScreenBackgroundColor" value="green" /> <!-- defaults to "#464646" -->
+ <preference name="ShowSplashScreen" value="false" /> <!-- defaults to "true" -->
+ <preference name="SplashScreenWidth" value="600" /> <!-- defaults to "170" -->
+ <preference name="SplashScreenHeight" value="300" /> <!-- defaults to "200" -->
+</platform>
+```
+
+__Note__: `SplashScreen` value should be absolute in order to work in a sub-page. The `SplashScreen` value is used only for the browser platform. The value will be ignored for other platforms.
+
+### iOS Quirks
+
+- In iOS, the splashscreen images are called launch images. These images are mandatory on iOS.
+
+### Windows Quirks
+
+- `SplashScreenSpinnerColor` (string, defaults to system accent color): hash, rgb notation or CSS color name.
+
+```xml
+<preference name="SplashScreenSpinnerColor" value="#242424"/>
+<preference name="SplashScreenSpinnerColor" value="DarkRed"/>
+<preference name="SplashScreenSpinnerColor" value="rgb(50,128,128)"/>
+```
+
+- `SplashScreenBackgroundColor` (string, defaults to #464646): hex notation.
+
+```xml
+<preference name="SplashScreenBackgroundColor" value="0xFFFFFFFF"/>
+```
## Methods
@@ -118,7 +242,9 @@ Note also that this value used to be seconds, and not milliseconds, so values le
Dismiss the splash screen.
- navigator.splashscreen.hide();
+```js
+navigator.splashscreen.hide();
+```
### BlackBerry 10, WP8, iOS Quirk
@@ -127,16 +253,19 @@ The `config.xml` file's `AutoHideSplashScreen` setting must be
`false`. To delay hiding the splash screen for two seconds, add a
timer such as the following in the `deviceready` event handler:
- setTimeout(function() {
- navigator.splashscreen.hide();
- }, 2000);
+```js
+setTimeout(function() {
+ navigator.splashscreen.hide();
+}, 2000);
+```
## splashscreen.show
Displays the splash screen.
- navigator.splashscreen.show();
-
+```js
+navigator.splashscreen.show();
+```
Your application cannot call `navigator.splashscreen.show()` until the app has
started and the `deviceready` event has fired. But since typically the splash
@@ -144,7 +273,7 @@ screen is meant to be visible before your app has started, that would seem to
defeat the purpose of the splash screen. Providing some configuration in
`config.xml` will automatically `show` the splash screen immediately after your
app launch and before it has fully started and received the `deviceready`
-event. See [Icons and Splash Screens](http://cordova.apache.org/docs/en/edge/config_ref_images.md.html)
-for more information on doing this configuration. For this reason, it is
-unlikely you need to call `navigator.splashscreen.show()` to make the splash
+event. For this reason, it is unlikely you need to call `navigator.splashscreen.show()` to make the splash
screen visible for app startup.
+
+[Apache Cordova issue tracker]: https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Splashscreen%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md
index 4f6ad612..f264fe6d 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/RELEASENOTES.md
@@ -20,6 +20,51 @@
-->
# Release Notes
+### 4.0.0 (Sep 08, 2016)
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies
+* [CB-11326](https://issues.apache.org/jira/browse/CB-11326) Prevent crash when initializing plugin after navigating to another URL
+* Fix crash on **iOS** when reloading page from remote **Safari**
+* Add badges for paramedic builds on Jenkins
+* Add pull request template.
+* [CB-11179](https://issues.apache.org/jira/browse/CB-11179) Extend the windows-splashscreen docs
+* [CB-11159](https://issues.apache.org/jira/browse/CB-11159) Fix flaky splashscreen native tests
+* [CB-11156](https://issues.apache.org/jira/browse/CB-11156) Change default `FadeSplashScreenDuration` value
+* [CB-8056](https://issues.apache.org/jira/browse/CB-8056) Updated the dependency version, added it to the docs
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md
+* [CB-8056](https://issues.apache.org/jira/browse/CB-8056) Implement splashscreen for **Windows** platform
+* [CB-6498](https://issues.apache.org/jira/browse/CB-6498) Misleading documentation in **Android** Quirks
+
+### 3.2.2 (Apr 15, 2016)
+* [CB-10979](https://issues.apache.org/jira/browse/CB-10979) Fix splashscreen **iOS** native tests. Added `jshintignore` for tests/ios
+* [CB-10895](https://issues.apache.org/jira/browse/CB-10895) Transparent Splashscreen view sometimes remains
+* [CB-10562](https://issues.apache.org/jira/browse/CB-10562) `hide()` not working in latest splashscreen plug in 3.1.0 in **iOS**
+* [CB-10688](https://issues.apache.org/jira/browse/CB-10688) Plugin Splashscreen Readme must have examples.
+* [CB-10864](https://issues.apache.org/jira/browse/CB-10864) Run **iOS** native tests on Travis
+
+### 3.2.1 (Mar 09, 2016)
+* [CB-10764](https://issues.apache.org/jira/browse/CB-10764) Remove emoji in cordova-plugin-splashscreen
+* [CB-10650](https://issues.apache.org/jira/browse/CB-10650) Non-index content.src causes Splashscreen to be not displayed on **Browser**
+* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add JSHint for plugins
+* [CB-10606](https://issues.apache.org/jira/browse/CB-10606) fix deprecation warning for interfaceOrientation on **iOS**
+* chore: edit package.json license to match SPDX id
+
+### 3.2.0 (Feb 09, 2016)
+* [CB-10422](https://issues.apache.org/jira/browse/CB-10422) Splashscreen displays black screen with no image on Android
+* [CB-10412](https://issues.apache.org/jira/browse/CB-10412) AutoHideSplashScreen "false" isn't taken in account on iOS
+* [CB-9516](https://issues.apache.org/jira/browse/CB-9516) Android SplashScreen - Spinner Does Not Display
+* [CB-9094](https://issues.apache.org/jira/browse/CB-9094) Smarter autohide logic on Android
+* [CB-8396](https://issues.apache.org/jira/browse/CB-8396) Add AutoHideSplashScreen logic to Android's Splashscreen
+
+### 3.1.0 (Jan 15, 2016)
+* [CB-9538](https://issues.apache.org/jira/browse/CB-9538) Implementing `FadeSplashScreen` feature for **Android**
+* [CB-9240](https://issues.apache.org/jira/browse/CB-9240) Cordova splash screen plugin **iPad** landscape mode issue
+* [CB-10263](https://issues.apache.org/jira/browse/CB-10263) Fix splashscreen plugin filenames for Asset Catalog
+* [CB-9374](https://issues.apache.org/jira/browse/CB-9374) **Android** add `SplashShowOnlyFirstTime` as preference
+* [CB-10244](https://issues.apache.org/jira/browse/CB-10244) Don't rotate the **iPhone 6 Plus** splash
+* [CB-9043](https://issues.apache.org/jira/browse/CB-9043) Fix the **ios** splashscreen being deformed on orientation change
+* [CB-10079](https://issues.apache.org/jira/browse/CB-10079) Splashscreen plugin does not honor `SplashScreenDelay` on **iOS**
+* [CB-10231](https://issues.apache.org/jira/browse/CB-10231) Fix `FadeSplashScreen` to default to true on **iOS**
+
### 3.0.0 (Nov 18, 2015)
* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
* Fixing contribute link.
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/package.json b/StoneIsland/plugins/cordova-plugin-splashscreen/package.json
index 1c0a8403..08836dc9 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/package.json
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-splashscreen",
- "version": "3.0.0",
+ "version": "4.0.0",
"description": "Cordova Splashscreen Plugin",
"cordova": {
"id": "cordova-plugin-splashscreen",
@@ -34,12 +34,27 @@
"cordova-windows",
"cordova-tizen"
],
- "engines": [
- {
- "name": "cordova-android",
- "version": ">=3.6.0"
+ "scripts": {
+ "test": "npm run jshint",
+ "jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
+ },
+ "engines": {
+ "cordovaDependencies": {
+ "2.0.0": {
+ "cordova-android": ">=3.6.0"
+ },
+ "4.0.0": {
+ "cordova-android": ">=3.6.0",
+ "cordova-windows": ">=4.4.0"
+ },
+ "5.0.0": {
+ "cordova": ">100"
+ }
}
- ],
+ },
"author": "Apache Software Foundation",
- "license": "Apache 2.0"
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "jshint": "^2.6.0"
+ }
}
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/plugin.xml b/StoneIsland/plugins/cordova-plugin-splashscreen/plugin.xml
index 6477ad65..5c1e5707 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/plugin.xml
@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-splashscreen"
- version="3.0.0">
+ version="4.0.0">
<name>Splashscreen</name>
<description>Cordova Splashscreen Plugin</description>
<license>Apache 2.0</license>
@@ -30,6 +30,7 @@
<engines>
<engine name="cordova-android" version=">=3.6.0" /><!-- Requires CordovaPlugin.preferences -->
+ <engine name="cordova-windows" version=">=4.4.0" />
</engines>
<js-module src="www/splashscreen.js" name="SplashScreen">
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/android/SplashScreen.java b/StoneIsland/plugins/cordova-plugin-splashscreen/src/android/SplashScreen.java
index 75ad724c..14b63790 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/android/SplashScreen.java
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/android/SplashScreen.java
@@ -25,13 +25,20 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
import android.os.Handler;
import android.view.Display;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
+import android.view.animation.Animation;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
@@ -44,9 +51,12 @@ public class SplashScreen extends CordovaPlugin {
// Cordova 3.x.x has a copy of this plugin bundled with it (SplashScreenInternal.java).
// Enable functionality only if running on 4.x.x.
private static final boolean HAS_BUILT_IN_SPLASH_SCREEN = Integer.valueOf(CordovaWebView.CORDOVA_VERSION.split("\\.")[0]) < 4;
+ private static final int DEFAULT_SPLASHSCREEN_DURATION = 3000;
+ private static final int DEFAULT_FADE_DURATION = 500;
private static Dialog splashDialog;
private static ProgressDialog spinnerDialog;
private static boolean firstShow = true;
+ private static boolean lastHideAfterDelay; // https://issues.apache.org/jira/browse/CB-9094
/**
* Displays the splash drawable.
@@ -69,11 +79,17 @@ public class SplashScreen extends CordovaPlugin {
@Override
protected void pluginInitialize() {
- if (HAS_BUILT_IN_SPLASH_SCREEN || !firstShow) {
+ if (HAS_BUILT_IN_SPLASH_SCREEN) {
return;
}
// Make WebView invisible while loading URL
- getView().setVisibility(View.INVISIBLE);
+ // CB-11326 Ensure we're calling this on UI thread
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getView().setVisibility(View.INVISIBLE);
+ }
+ });
int drawableId = preferences.getInteger("SplashDrawableId", 0);
if (drawableId == 0) {
String splashResource = preferences.getString("SplashScreen", "screen");
@@ -89,9 +105,14 @@ public class SplashScreen extends CordovaPlugin {
// Save initial orientation.
orientation = cordova.getActivity().getResources().getConfiguration().orientation;
- firstShow = false;
- loadSpinner();
- showSplashScreen(true);
+ if (firstShow) {
+ boolean autoHide = preferences.getBoolean("AutoHideSplashScreen", true);
+ showSplashScreen(autoHide);
+ }
+
+ if (preferences.getBoolean("SplashShowOnlyFirstTime", true)) {
+ firstShow = false;
+ }
}
/**
@@ -101,13 +122,26 @@ public class SplashScreen extends CordovaPlugin {
return preferences.getBoolean("SplashMaintainAspectRatio", false);
}
+ private int getFadeDuration () {
+ int fadeSplashScreenDuration = preferences.getBoolean("FadeSplashScreen", true) ?
+ preferences.getInteger("FadeSplashScreenDuration", DEFAULT_FADE_DURATION) : 0;
+
+ if (fadeSplashScreenDuration < 30) {
+ // [CB-9750] This value used to be in decimal seconds, so we will assume that if someone specifies 10
+ // they mean 10 seconds, and not the meaningless 10ms
+ fadeSplashScreenDuration *= 1000;
+ }
+
+ return fadeSplashScreenDuration;
+ }
+
@Override
public void onPause(boolean multitasking) {
if (HAS_BUILT_IN_SPLASH_SCREEN) {
return;
}
// hide the splash screen to avoid leaking a window
- this.removeSplashScreen();
+ this.removeSplashScreen(true);
}
@Override
@@ -116,7 +150,7 @@ public class SplashScreen extends CordovaPlugin {
return;
}
// hide the splash screen to avoid leaking a window
- this.removeSplashScreen();
+ this.removeSplashScreen(true);
// If we set this to true onDestroy, we lose track when we go from page to page!
//firstShow = true;
}
@@ -135,16 +169,6 @@ public class SplashScreen extends CordovaPlugin {
webView.postMessage("splashscreen", "show");
}
});
- } else if (action.equals("spinnerStart")) {
- if (!HAS_BUILT_IN_SPLASH_SCREEN) {
- final String title = args.getString(0);
- final String message = args.getString(1);
- cordova.getActivity().runOnUiThread(new Runnable() {
- public void run() {
- spinnerStart(title, message);
- }
- });
- }
} else {
return false;
}
@@ -160,17 +184,16 @@ public class SplashScreen extends CordovaPlugin {
}
if ("splashscreen".equals(id)) {
if ("hide".equals(data.toString())) {
- this.removeSplashScreen();
+ this.removeSplashScreen(false);
} else {
this.showSplashScreen(false);
}
} else if ("spinner".equals(id)) {
if ("stop".equals(data.toString())) {
- this.spinnerStop();
getView().setVisibility(View.VISIBLE);
}
} else if ("onReceivedError".equals(id)) {
- spinnerStop();
+ this.spinnerStop();
}
return null;
}
@@ -190,13 +213,45 @@ public class SplashScreen extends CordovaPlugin {
}
}
- private void removeSplashScreen() {
+ private void removeSplashScreen(final boolean forceHideImmediately) {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
if (splashDialog != null && splashDialog.isShowing()) {
- splashDialog.dismiss();
- splashDialog = null;
- splashImageView = null;
+ final int fadeSplashScreenDuration = getFadeDuration();
+ // CB-10692 If the plugin is being paused/destroyed, skip the fading and hide it immediately
+ if (fadeSplashScreenDuration > 0 && forceHideImmediately == false) {
+ AlphaAnimation fadeOut = new AlphaAnimation(1, 0);
+ fadeOut.setInterpolator(new DecelerateInterpolator());
+ fadeOut.setDuration(fadeSplashScreenDuration);
+
+ splashImageView.setAnimation(fadeOut);
+ splashImageView.startAnimation(fadeOut);
+
+ fadeOut.setAnimationListener(new Animation.AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ spinnerStop();
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ if (splashDialog != null && splashDialog.isShowing()) {
+ splashDialog.dismiss();
+ splashDialog = null;
+ splashImageView = null;
+ }
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+ });
+ } else {
+ spinnerStop();
+ splashDialog.dismiss();
+ splashDialog = null;
+ splashImageView = null;
+ }
}
}
});
@@ -207,9 +262,14 @@ public class SplashScreen extends CordovaPlugin {
*/
@SuppressWarnings("deprecation")
private void showSplashScreen(final boolean hideAfterDelay) {
- final int splashscreenTime = preferences.getInteger("SplashScreenDelay", 3000);
+ final int splashscreenTime = preferences.getInteger("SplashScreenDelay", DEFAULT_SPLASHSCREEN_DURATION);
final int drawableId = preferences.getInteger("SplashDrawableId", 0);
+ final int fadeSplashScreenDuration = getFadeDuration();
+ final int effectiveSplashDuration = Math.max(0, splashscreenTime - fadeSplashScreenDuration);
+
+ lastHideAfterDelay = hideAfterDelay;
+
// If the splash dialog is showing don't try to show it again
if (splashDialog != null && splashDialog.isShowing()) {
return;
@@ -257,60 +317,57 @@ public class SplashScreen extends CordovaPlugin {
splashDialog.setCancelable(false);
splashDialog.show();
+ if (preferences.getBoolean("ShowSplashScreenSpinner", true)) {
+ spinnerStart();
+ }
+
// Set Runnable to remove splash screen just in case
if (hideAfterDelay) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
- removeSplashScreen();
+ if (lastHideAfterDelay) {
+ removeSplashScreen(false);
+ }
}
- }, splashscreenTime);
+ }, effectiveSplashDuration);
}
}
});
}
- /*
- * Load the spinner
- */
- private void loadSpinner() {
- // If loadingDialog property, then show the App loading dialog for first page of app
- String loading = null;
- if (webView.canGoBack()) {
- loading = preferences.getString("LoadingDialog", null);
- }
- else {
- loading = preferences.getString("LoadingPageDialog", null);
- }
- if (loading != null) {
- String title = "";
- String message = "Loading Application...";
-
- if (loading.length() > 0) {
- int comma = loading.indexOf(',');
- if (comma > 0) {
- title = loading.substring(0, comma);
- message = loading.substring(comma + 1);
- }
- else {
- title = "";
- message = loading;
- }
- }
- spinnerStart(title, message);
- }
- }
-
- private void spinnerStart(final String title, final String message) {
+ // Show only spinner in the center of the screen
+ private void spinnerStart() {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
spinnerStop();
- spinnerDialog = ProgressDialog.show(webView.getContext(), title, message, true, true,
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- spinnerDialog = null;
- }
- });
+
+ spinnerDialog = new ProgressDialog(webView.getContext());
+ spinnerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ spinnerDialog = null;
+ }
+ });
+
+ spinnerDialog.setCancelable(false);
+ spinnerDialog.setIndeterminate(true);
+
+ RelativeLayout centeredLayout = new RelativeLayout(cordova.getActivity());
+ centeredLayout.setGravity(Gravity.CENTER);
+ centeredLayout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+
+ ProgressBar progressBar = new ProgressBar(webView.getContext());
+ RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+ layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
+ progressBar.setLayoutParams(layoutParams);
+
+ centeredLayout.addView(progressBar);
+
+ spinnerDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+ spinnerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+
+ spinnerDialog.show();
+ spinnerDialog.setContentView(centeredLayout);
}
});
}
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/blackberry10/index.js b/StoneIsland/plugins/cordova-plugin-splashscreen/src/blackberry10/index.js
index bd7e48c8..c6825064 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/blackberry10/index.js
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/blackberry10/index.js
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+/* global PluginResult */
+
module.exports = {
show: function (success, fail, args, env) {
var result = new PluginResult(args, env);
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js b/StoneIsland/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js
index d19f8c87..6cf9309f 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js
@@ -18,17 +18,18 @@
* under the License.
*
*/
+
// Default parameter values including image size can be changed in `config.xml`
var splashImageWidth = 170;
var splashImageHeight = 200;
var position = { x: 0, y: 0, width: splashImageWidth, height: splashImageHeight };
-var splash = null; //
var localSplash; // the image to display
var localSplashImage;
var bgColor = "#464646";
-var imageSrc = 'img/logo.png';
+var imageSrc = '/img/logo.png';
var splashScreenDelay = 3000; // in milliseconds
var showSplashScreen = true; // show splashcreen by default
+var cordova = require('cordova');
var configHelper = cordova.require('cordova/confighelper');
function updateImageLocation() {
@@ -103,7 +104,6 @@ function readPreferencesFromCfg(cfg) {
} catch(e) {
var msg = '[Browser][SplashScreen] Error occured on loading preferences from config.xml: ' + JSON.stringify(e);
console.error(msg);
- error(msg);
}
}
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.h b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.h
index 0d6ae397..ec5d6022 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.h
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.h
@@ -23,6 +23,7 @@
typedef struct {
BOOL iPhone;
BOOL iPad;
+ BOOL iPhone4;
BOOL iPhone5;
BOOL iPhone6;
BOOL iPhone6Plus;
@@ -35,6 +36,7 @@ typedef struct {
UIImageView* _imageView;
NSString* _curImageName;
BOOL _visible;
+ BOOL _destroyed;
}
- (void)show:(CDVInvokedUrlCommand*)command;
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m
index a1add304..8ad8116b 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.m
@@ -23,6 +23,7 @@
#import "CDVViewController+SplashScreen.h"
#define kSplashScreenDurationDefault 3000.0f
+#define kFadeDurationDefault 500.0f
@implementation CDVSplashScreen
@@ -41,7 +42,7 @@
- (void)hide:(CDVInvokedUrlCommand*)command
{
- [self setVisible:NO];
+ [self setVisible:NO andForce:YES];
}
- (void)pageDidLoad
@@ -76,7 +77,7 @@
BOOL autorotateValue = (device.iPad || device.iPhone6Plus) ?
[(CDVViewController *)self.viewController shouldAutorotateDefaultValue] :
NO;
-
+
[(CDVViewController *)self.viewController setEnabledAutorotation:autorotateValue];
NSString* topActivityIndicator = [self.commandDelegate.settings objectForKey:[@"TopActivityIndicator" lowercaseString]];
@@ -120,6 +121,7 @@
[parentView addObserver:self forKeyPath:@"bounds" options:0 context:nil];
[self updateImage];
+ _destroyed = NO;
}
- (void)hideViews
@@ -130,6 +132,7 @@
- (void)destroyViews
{
+ _destroyed = YES;
[(CDVViewController *)self.viewController setEnabledAutorotation:[(CDVViewController *)self.viewController shouldAutorotateDefaultValue]];
[_imageView removeFromSuperview];
@@ -139,30 +142,39 @@
_curImageName = nil;
self.viewController.view.userInteractionEnabled = YES; // re-enable user interaction upon completion
- [self.viewController.view removeObserver:self forKeyPath:@"frame"];
- [self.viewController.view removeObserver:self forKeyPath:@"bounds"];
+ @try {
+ [self.viewController.view removeObserver:self forKeyPath:@"frame"];
+ [self.viewController.view removeObserver:self forKeyPath:@"bounds"];
+ }
+ @catch (NSException *exception) {
+ // When reloading the page from a remotely connected Safari, there
+ // are no observers, so the removeObserver method throws an exception,
+ // that we can safely ignore.
+ // Alternatively we can check whether there are observers before calling removeObserver
+ }
}
- (CDV_iOSDevice) getCurrentDevice
{
CDV_iOSDevice device;
-
+
UIScreen* mainScreen = [UIScreen mainScreen];
CGFloat mainScreenHeight = mainScreen.bounds.size.height;
CGFloat mainScreenWidth = mainScreen.bounds.size.width;
-
+
int limit = MAX(mainScreenHeight,mainScreenWidth);
-
+
device.iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
device.iPhone = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone);
device.retina = ([mainScreen scale] == 2.0);
+ device.iPhone4 = (device.iPhone && limit == 480.0);
device.iPhone5 = (device.iPhone && limit == 568.0);
// note these below is not a true device detect, for example if you are on an
// iPhone 6/6+ but the app is scaled it will prob set iPhone5 as true, but
// this is appropriate for detecting the runtime screen environment
device.iPhone6 = (device.iPhone && limit == 667.0);
device.iPhone6Plus = (device.iPhone && limit == 736.0);
-
+
return device;
}
@@ -170,15 +182,15 @@
{
// Use UILaunchImageFile if specified in plist. Otherwise, use Default.
NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"];
-
+
NSUInteger supportedOrientations = [orientationDelegate supportedInterfaceOrientations];
-
+
// Checks to see if the developer has locked the orientation to use only one of Portrait or Landscape
BOOL supportsLandscape = (supportedOrientations & UIInterfaceOrientationMaskLandscape);
BOOL supportsPortrait = (supportedOrientations & UIInterfaceOrientationMaskPortrait || supportedOrientations & UIInterfaceOrientationMaskPortraitUpsideDown);
// this means there are no mixed orientations in there
BOOL isOrientationLocked = !(supportsPortrait && supportsLandscape);
-
+
if (imageName)
{
imageName = [imageName stringByDeletingPathExtension];
@@ -187,7 +199,23 @@
{
imageName = @"Default";
}
-
+
+ // Add Asset Catalog specific prefixes
+ if ([imageName isEqualToString:@"LaunchImage"])
+ {
+ if (device.iPhone4 || device.iPhone5 || device.iPad) {
+ imageName = [imageName stringByAppendingString:@"-700"];
+ } else if(device.iPhone6) {
+ imageName = [imageName stringByAppendingString:@"-800"];
+ } else if(device.iPhone6Plus) {
+ imageName = [imageName stringByAppendingString:@"-800"];
+ if (currentOrientation == UIInterfaceOrientationPortrait || currentOrientation == UIInterfaceOrientationPortraitUpsideDown)
+ {
+ imageName = [imageName stringByAppendingString:@"-Portrait"];
+ }
+ }
+ }
+
if (device.iPhone5)
{ // does not support landscape
imageName = [imageName stringByAppendingString:@"-568h"];
@@ -231,7 +259,7 @@
case UIInterfaceOrientationLandscapeRight:
imageName = [imageName stringByAppendingString:@"-Landscape"];
break;
-
+
case UIInterfaceOrientationPortrait:
case UIInterfaceOrientationPortraitUpsideDown:
default:
@@ -240,14 +268,51 @@
}
}
}
-
+
return imageName;
}
+- (UIInterfaceOrientation)getCurrentOrientation
+{
+ UIInterfaceOrientation iOrientation = [UIApplication sharedApplication].statusBarOrientation;
+ UIDeviceOrientation dOrientation = [UIDevice currentDevice].orientation;
+
+ bool landscape;
+
+ if (dOrientation == UIDeviceOrientationUnknown || dOrientation == UIDeviceOrientationFaceUp || dOrientation == UIDeviceOrientationFaceDown) {
+ // If the device is laying down, use the UIInterfaceOrientation based on the status bar.
+ landscape = UIInterfaceOrientationIsLandscape(iOrientation);
+ } else {
+ // If the device is not laying down, use UIDeviceOrientation.
+ landscape = UIDeviceOrientationIsLandscape(dOrientation);
+
+ // There's a bug in iOS!!!! http://openradar.appspot.com/7216046
+ // So values needs to be reversed for landscape!
+ if (dOrientation == UIDeviceOrientationLandscapeLeft)
+ {
+ iOrientation = UIInterfaceOrientationLandscapeRight;
+ }
+ else if (dOrientation == UIDeviceOrientationLandscapeRight)
+ {
+ iOrientation = UIInterfaceOrientationLandscapeLeft;
+ }
+ else if (dOrientation == UIDeviceOrientationPortrait)
+ {
+ iOrientation = UIInterfaceOrientationPortrait;
+ }
+ else if (dOrientation == UIDeviceOrientationPortraitUpsideDown)
+ {
+ iOrientation = UIInterfaceOrientationPortraitUpsideDown;
+ }
+ }
+
+ return iOrientation;
+}
+
// Sets the view's frame and image.
- (void)updateImage
{
- NSString* imageName = [self getImageName:[[UIApplication sharedApplication] statusBarOrientation] delegate:(id<CDVScreenOrientationDelegate>)self.viewController device:[self getCurrentDevice]];
+ NSString* imageName = [self getImageName:[self getCurrentOrientation] delegate:(id<CDVScreenOrientationDelegate>)self.viewController device:[self getCurrentDevice]];
if (![imageName isEqualToString:_curImageName])
{
@@ -273,7 +338,7 @@
CGRect imgBounds = (img) ? CGRectMake(0, 0, img.size.width, img.size.height) : CGRectZero;
CGSize screenSize = [self.viewController.view convertRect:[UIScreen mainScreen].bounds fromView:nil].size;
- UIInterfaceOrientation orientation = self.viewController.interfaceOrientation;
+ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
CGAffineTransform imgTransform = CGAffineTransformIdentity;
/* If and only if an iPhone application is landscape-only as per
@@ -281,8 +346,8 @@
* landscape. In this case the image must be rotated in order to appear
* correctly.
*/
- BOOL isIPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad;
- if (UIInterfaceOrientationIsLandscape(orientation) && !isIPad)
+ CDV_iOSDevice device = [self getCurrentDevice];
+ if (UIInterfaceOrientationIsLandscape(orientation) && !device.iPhone6Plus && !device.iPad)
{
imgTransform = CGAffineTransformMakeRotation(M_PI / 2);
imgBounds.size = CGSizeMake(imgBounds.size.height, imgBounds.size.width);
@@ -322,26 +387,52 @@
- (void)setVisible:(BOOL)visible
{
- if (visible != _visible)
+ [self setVisible:visible andForce:NO];
+}
+
+- (void)setVisible:(BOOL)visible andForce:(BOOL)force
+{
+ if (visible != _visible || force)
{
_visible = visible;
id fadeSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreen" lowercaseString]];
id fadeSplashScreenDuration = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreenDuration" lowercaseString]];
- float fadeDuration = fadeSplashScreenDuration == nil ? kSplashScreenDurationDefault : [fadeSplashScreenDuration floatValue];
+ float fadeDuration = fadeSplashScreenDuration == nil ? kFadeDurationDefault : [fadeSplashScreenDuration floatValue];
+
+ id splashDurationString = [self.commandDelegate.settings objectForKey: [@"SplashScreenDelay" lowercaseString]];
+ float splashDuration = splashDurationString == nil ? kSplashScreenDurationDefault : [splashDurationString floatValue];
- if ((fadeSplashScreenValue == nil) || ![fadeSplashScreenValue boolValue])
+ id autoHideSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"AutoHideSplashScreen" lowercaseString]];
+ BOOL autoHideSplashScreen = true;
+
+ if (autoHideSplashScreenValue != nil) {
+ autoHideSplashScreen = [autoHideSplashScreenValue boolValue];
+ }
+
+ if (!autoHideSplashScreen) {
+ // CB-10412 SplashScreenDelay does not make sense if the splashscreen is hidden manually
+ splashDuration = 0;
+ }
+
+
+ if (fadeSplashScreenValue == nil)
+ {
+ fadeSplashScreenValue = @"true";
+ }
+
+ if (![fadeSplashScreenValue boolValue])
{
fadeDuration = 0;
}
- else if(fadeDuration < 30)
+ else if (fadeDuration < 30)
{
// [CB-9750] This value used to be in decimal seconds, so we will assume that if someone specifies 10
// they mean 10 seconds, and not the meaningless 10ms
fadeDuration *= 1000;
}
-
+
if (_visible)
{
if (_imageView == nil)
@@ -349,26 +440,42 @@
[self createViews];
}
}
- else if (fadeDuration == 0)
+ else if (fadeDuration == 0 && splashDuration == 0)
{
[self destroyViews];
}
else
{
__weak __typeof(self) weakSelf = self;
- [UIView transitionWithView:self.viewController.view
- duration:(fadeDuration / 1000)
- options:UIViewAnimationOptionTransitionNone
- animations:^(void) {
- [weakSelf hideViews];
- }
- completion:^(BOOL finished) {
- if (finished) {
- [weakSelf destroyViews];
- // TODO: It might also be nice to have a js event happen here -jm
- }
- }
- ];
+ float effectiveSplashDuration;
+
+ // [CB-10562] AutoHideSplashScreen may be "true" but we should still be able to hide the splashscreen manually.
+ if (!autoHideSplashScreen || force) {
+ effectiveSplashDuration = (fadeDuration) / 1000;
+ } else {
+ effectiveSplashDuration = (splashDuration - fadeDuration) / 1000;
+ }
+
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (uint64_t) effectiveSplashDuration * NSEC_PER_SEC), dispatch_get_main_queue(), CFBridgingRelease(CFBridgingRetain(^(void) {
+ if (!_destroyed) {
+ [UIView transitionWithView:self.viewController.view
+ duration:(fadeDuration / 1000)
+ options:UIViewAnimationOptionTransitionNone
+ animations:^(void) {
+ [weakSelf hideViews];
+ }
+ completion:^(BOOL finished) {
+ // Always destroy views, otherwise you could have an
+ // invisible splashscreen that is overlayed over your active views
+ // which causes that no touch events are passed
+ if (!_destroyed) {
+ [weakSelf destroyViews];
+ // TODO: It might also be nice to have a js event happen here -jm
+ }
+ }
+ ];
+ }
+ })));
}
}
}
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVViewController+SplashScreen.m b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVViewController+SplashScreen.m
index 5736b6f2..e483def6 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVViewController+SplashScreen.m
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/ios/CDVViewController+SplashScreen.m
@@ -35,6 +35,13 @@
- (BOOL)enabledAutorotation
{
NSNumber *number = (NSNumber *)objc_getAssociatedObject(self, @selector(enabledAutorotation));
+
+ // Defaulting to YES to correspond parent CDVViewController behavior
+ if (number == nil)
+ {
+ return YES;
+ }
+
return [number boolValue];
}
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/src/tizen/SplashScreenProxy.js b/StoneIsland/plugins/cordova-plugin-splashscreen/src/tizen/SplashScreenProxy.js
index fbd9f35f..06c06972 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/src/tizen/SplashScreenProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/src/tizen/SplashScreenProxy.js
@@ -21,7 +21,7 @@
( function() {
-win = null;
+var win = null;
module.exports = {
show: function() {
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/tests/ios/package.json b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/ios/package.json
index d8b23857..67f0edce 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/tests/ios/package.json
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/ios/package.json
@@ -5,9 +5,9 @@
"author": "Apache Software Foundation",
"license": "Apache Version 2.0",
"dependencies": {
- "cordova-ios": "^3.6.0"
+ "cordova-ios": "*"
},
"scripts": {
- "test": "xcodebuild test -workspace CDVSplashScreenTest.xcworkspace -scheme CDVSplashScreenLibTests -destination 'platform=iOS Simulator,name=iPhone 5' CONFIGURATION_BUILD_DIR='/tmp'"
- }
-} \ No newline at end of file
+ "test": "xcodebuild test -workspace CDVSplashScreenTest.xcworkspace -scheme CDVSplashScreenLibTests -destination 'platform=iOS Simulator,name=iPhone 5' CONFIGURATION_BUILD_DIR='/tmp' HEADER_SEARCH_PATHS='$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include'"
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/plugin.xml
index 36652d98..8accd865 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/plugin.xml
@@ -20,7 +20,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-splashscreen-tests"
- version="3.0.0">
+ version="4.0.0">
<name>Cordova Splashscreen Plugin Tests</name>
<license>Apache 2.0</license>
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/tests/tests.js b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/tests.js
index 8c4d22b4..7b55a81c 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/tests/tests.js
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/tests/tests.js
@@ -19,18 +19,20 @@
*
*/
-exports.defineAutoTest = function () {
+/* jshint jasmine: true */
+
+exports.defineAutoTests = function () {
describe('Splashscreen (cordova)', function () {
it("splashscreen.spec.1 should exist", function () {
expect(navigator.splashscreen).toBeDefined();
});
- it("splashscreen.spec.2 exec method should exist", function () {
+ it("splashscreen.spec.2 show method should exist", function () {
expect(navigator.splashscreen.show).toBeDefined();
expect(typeof navigator.splashscreen.show).toBe('function');
});
- it("splashscreen.spec.3 exec method should exist", function () {
+ it("splashscreen.spec.3 hide method should exist", function () {
expect(navigator.splashscreen.hide).toBeDefined();
expect(typeof navigator.splashscreen.hide).toBe('function');
});
diff --git a/StoneIsland/plugins/cordova-plugin-splashscreen/www/windows/SplashScreenProxy.js b/StoneIsland/plugins/cordova-plugin-splashscreen/www/windows/SplashScreenProxy.js
index 271a14ca..1003f061 100644
--- a/StoneIsland/plugins/cordova-plugin-splashscreen/www/windows/SplashScreenProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-splashscreen/www/windows/SplashScreenProxy.js
@@ -20,57 +20,15 @@
*/
/*jslint sloppy:true */
-/*global Windows:true, require, module, window, document, WinJS */
-var cordova = require('cordova'),
- channel = require('cordova/channel');
-
-var isPhone = (cordova.platformId == "windows") && WinJS.Utilities.isPhone;
-var isHosted = window.location.protocol.indexOf('http') === 0;
-var localSplash = null;
-var bgColor = "#464646"; // default backgrond color; TDOO - read it from .appxmanifest
-var splashImageSrc = (isHosted ? "ms-appx-web" : "ms-appx") + ":///images/"
- + (isPhone ? "splashscreenphone.png" : "splashscreen.png");
+var splash = require('cordova/splashscreen');
var SplashScreen = {
- setBGColor: function (cssBGColor) {
- bgColor = cssBGColor;
- if (localSplash) {
- localSplash.style.backgroundColor = bgColor;
- }
- },
show: function () {
- if (localSplash) {
- return; // already showed
- }
-
- localSplash = document.createElement("div");
- localSplash.style.backgroundColor = bgColor;
- localSplash.style.position = "fixed";
- localSplash.style.top = "0";
- localSplash.style.width = "100%";
- localSplash.style.height = "100%";
-
- localSplashImage = document.createElement("img");
- localSplashImage.src = splashImageSrc;
- localSplashImage.style.maxWidth = "100%";
- localSplashImage.style.maxHeight = "100%";
- // center horizontally
- localSplashImage.style.margin = "0 auto";
- localSplashImage.style.display = "block";
- // center vertically
- localSplashImage.style.position = "relative";
- localSplashImage.style.top = "50%";
- localSplashImage.style.transform = "translateY(-50%)";
-
- localSplash.appendChild(localSplashImage);
- document.body.appendChild(localSplash);
+ splash.show();
},
hide: function () {
- if (localSplash) {
- document.body.removeChild(localSplash);
- localSplash = null;
- }
+ splash.hide();
}
};
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/CONTRIBUTING.md b/StoneIsland/plugins/cordova-plugin-whitelist/CONTRIBUTING.md
index e4a178f5..7de4c641 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/CONTRIBUTING.md
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/CONTRIBUTING.md
@@ -27,7 +27,7 @@ There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
For instructions on this, start with the
-[contribution overview](http://cordova.apache.org/#contribute).
+[contribution overview](http://cordova.apache.org/contribute/).
The details are explained there, but the important items are:
- Sign and submit an Apache ICLA (Contributor License Agreement).
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/LICENSE b/StoneIsland/plugins/cordova-plugin-whitelist/LICENSE
index 7a4a3ea2..7a4a3ea2 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/LICENSE
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/LICENSE
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/NOTICE b/StoneIsland/plugins/cordova-plugin-whitelist/NOTICE
index 8ec56a52..8ec56a52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/NOTICE
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/NOTICE
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/README.md
index def10044..e19d2304 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/README.md
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/README.md
@@ -1,30 +1,44 @@
-<!---
- license: Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
+---
+title: Whitelist
+description: Whitelist external content accessible by your app.
+---
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
-->
# cordova-plugin-whitelist
This plugin implements a whitelist policy for navigating the application webview on Cordova 4.0
+:warning: Report issues on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Whitelist%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
+
+## Installation
+
+You can install whitelist plugin with Cordova CLI, from npm:
+
+```
+$ cordova plugin add cordova-plugin-whitelist
+$ cordova prepare
+```
+
## Supported Cordova Platforms
* Android 4.0.0 or above
-* iOS 4.0.0 or above
## Navigation Whitelist
Controls which URLs the WebView itself can be navigated to. Applies to
@@ -32,15 +46,14 @@ top-level navigations only.
Quirks: on Android it also applies to iframes for non-http(s) schemes.
-By default, navigations only to `file://` URLs, are allowed. To allow other
-other URLs, you must add `<allow-navigation>` tags to your `config.xml`:
+By default, navigations only to `file://` URLs, are allowed. To allow others URLs, you must add `<allow-navigation>` tags to your `config.xml`:
<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />
<!-- Wildcards are allowed for the protocol, as a prefix
to the host, or as a suffix to the path -->
- <allow-havigation href="*://*.example.com/*" />
+ <allow-navigation href="*://*.example.com/*" />
<!-- A wildcard can be used to whitelist the entire network,
over HTTP and HTTPS.
@@ -111,6 +124,9 @@ In `config.xml`, add `<access>` tags, like this:
Without any `<access>` tags, only requests to `file://` URLs are allowed. However, the default Cordova application includes `<access origin="*">` by default.
+
+Note: Whitelist cannot block network redirects from a whitelisted remote website (i.e. http or https) to a non-whitelisted website. Use CSP rules to mitigate redirects to non-whitelisted websites for webviews that support CSP.
+
Quirk: Android also allows requests to https://ssl.gstatic.com/accessibility/javascript/android/ by default, since this is required for TalkBack to function properly.
### Content Security Policy
@@ -131,13 +147,16 @@ Here are some example CSP declarations for your `.html` pages:
-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
- <!-- Allow requests to foo.com -->
+ <!-- Allow everything but only from the same origin and foo.com -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
- <!-- Enable all requests, inline styles, and eval() -->
- <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'">
+ <!-- This policy allows everything (eg CSS, AJAX, object, frame, media, etc) except that
+ * CSS only from the same origin and inline styles,
+ * scripts only from the same origin and inline styles, and eval()
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
- <!-- Allow XHRs via https only -->
+ <!-- Allows XHRs only over HTTPS on the same domain. -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
<!-- Allow iframe to https://cordova.apache.org/ -->
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/RELEASENOTES.md b/StoneIsland/plugins/cordova-plugin-whitelist/RELEASENOTES.md
index 703552ca..9e271c09 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/RELEASENOTES.md
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/RELEASENOTES.md
@@ -20,9 +20,44 @@
-->
# Release Notes
+### 1.3.0 (Sep 08, 2016)
+* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies
+* Updated installation section
+* Plugin uses `Android Log class` and not `Cordova LOG class`
+* Add pull request template.
+* [CB-10866](https://issues.apache.org/jira/browse/CB-10866) Adding engine info to `package.json`
+* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md
+
+### 1.2.2 (Apr 15, 2016)
+* add note about redirects
+* [CB-10624](https://issues.apache.org/jira/browse/CB-10624) remove error message from `whitelist.js`, which leaves it empty
+
+### 1.2.1 (Jan 15, 2016)
+* [CB-10194](https://issues.apache.org/jira/browse/CB-10194) info tag prints for ios when not applicable
+
+### 1.2.0 (Nov 18, 2015)
+* removed **iOS** engine check from `plugin.xml`
+* [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest
+* [CB-9972](https://issues.apache.org/jira/browse/CB-9972) - Remove **iOS** whitelist
+* Updated the text, it should read 4.0.x and greater, since this plugin will be required for `cordova-android 5.0`
+* Fixing contribute link.
+* Updated `plugin.xml <info>` tag to remove warning about not needing this plugin if you are using the **iOS 9 SDK**
+* [CB-9738](https://issues.apache.org/jira/browse/CB-9738) - Disable whitelist use when runtime environment is **iOS 9**
+* [CB-9740](https://issues.apache.org/jira/browse/CB-9740) - Add `<info>` tag describing whitelist plugin not needed on `cordova-ios` and cordova-android 3.x`
+* [CB-9568](https://issues.apache.org/jira/browse/CB-9568) - Update whitelist plugin to allow all network access by default
+* [CB-9337](https://issues.apache.org/jira/browse/CB-9337) - enable use of `<access>` tags for native code network requests
+
+### 1.1.0 (Jun 17, 2015)
+* [CB-9128](https://issues.apache.org/jira/browse/CB-9128) cordova-plugin-whitelist documentation translation: cordova-plugin-whitelist
+* fix npm md issue
+* Usage of CDVURLRequestFilter protocol.
+* [CB-9089](https://issues.apache.org/jira/browse/CB-9089) - iOS whitelist plugin does not compile
+* [CB-9090](https://issues.apache.org/jira/browse/CB-9090) - Enable whitelist plugin for cordova-ios 4.0.0
+* Fixed error in Content-Security-Policy example
+
### 1.0.0 (Mar 25, 2015)
-* CB-8739 added missing license headers
+* [CB-8739](https://issues.apache.org/jira/browse/CB-8739) added missing license headers
* Add @Override to CustomConfigXmlParser methods
* Change ID to cordova-plugin-whitelist rather than reverse-DNS-style
* Tweak CSP examples in README
-* CB-8660 remove extra commas from package.json
+* [CB-8660](https://issues.apache.org/jira/browse/CB-8660) remove extra commas from package.json
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/de/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/de/README.md
new file mode 100644
index 00000000..e97eaa63
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/de/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+Dieses Plugin implementiert eine Whitelist-Politik für die Navigation in der Anwendung Webview Cordova 4.0
+
+## Cordova unterstützte Plattformen
+
+ * Android 4.0.0 oder höher
+ * iOS 4.0.0 oder höher
+
+## Navigation-Whitelist
+
+Steuert, welche URLs die WebView selbst zu navigiert werden kann. Bezieht sich auf der obersten Ebene Navigationen nur.
+
+Macken: auf Android es gilt auch für Iframes für nicht-http(s) Systeme.
+
+In der Standardeinstellung Navigationen nur auf `file://` URLs, sind zulässig. Wenn andere andere URLs zulassen möchten, müssen Sie Ihre `"config.xml"` `<allow-navigation>` Markierungen hinzufügen:
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## Vorsatz-Whitelist
+
+Steuert, welche URLs die app zulässig ist, um das System zu öffnen Fragen. Standardmäßig dürfen keine externe URLs.
+
+Das entspricht auf Android eine Absicht des Typs BROWSEABLE senden.
+
+Diese Whitelist gilt nicht für Plugins, nur Hyperlinks und Aufrufe von `window.open()`.
+
+Fügen Sie in `"config.xml"` `<allow-intent>` Tags hinzu, wie folgt:
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## Netzwerk-Anforderung-Whitelist
+
+Steuert, welche-Anforderungen Netzwerk (Bilder, XHRs, etc.) dürfen (über Cordova native Haken) erfolgen.
+
+Hinweis: Wir empfehlen Ihnen eine Content Security Policy (siehe unten), das ist sicherer. Diese Whitelist ist vor allem historisch für Webansichten für die CSP nicht unterstützen.
+
+Fügen Sie in `"config.xml"` `<access>` Tags hinzu, wie folgt:
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+Ohne `<access>` -Tags dürfen nur Anforderungen an `file://` URLs. Enthält jedoch die Standardanwendung Cordova `<access origin="*">` standardmäßig.
+
+Eigenart: Android kann auch Anforderungen an https://ssl.gstatic.com/accessibility/javascript/android/ standardmäßig, da dies für TalkBack ordnungsgemäß erforderlich ist.
+
+### Content-Security-Policy
+
+Steuert, welche-Anforderungen Netzwerk (Bilder, XHRs, etc.) dürfen (über Webview direkt) erfolgen.
+
+Auf Android und iOS ist die Netzwerk Anfrage Whitelist (s.o.) nicht in der Lage, alle Arten von Anfragen (z.B. `< video >` & WebSockets nicht blockiert) filtern. Also, sollten Sie neben der Whitelist, [Content Security Policy](http://content-security-policy.com/) `< Meta >` -Tags auf allen Ihren Seiten verwenden.
+
+Auf Android Unterstützung für CSP innerhalb der System-Webview beginnt mit KitKat (aber ist in allen Versionen mit Crosswalk WebView verfügbar).
+
+Hier sind einige Beispiel-CSP-Deklarationen für Ihre `HTML` -Seiten:
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/es/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/es/README.md
new file mode 100644
index 00000000..b3e46849
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/es/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+Este plugin implementa una política de lista blanca para navegar la aplicación webview en Cordova 4.0
+
+## Plataformas soportadas Cordova
+
+ * Android 4.0 o superior
+ * iOS 4.0.0 o superior
+
+## Lista blanca de navegación
+
+Controla que las URLs del WebView se puede navegar a. Se aplica a nivel superior navegaciones solo.
+
+Peculiaridades: en Android también se aplica a iframes para esquemas que son de http (s).
+
+Por defecto, navegaciones solo a direcciones URL `file://` , son permitidas. Para permitir que otros otras URL, debe agregar `< allow-navegación >` etiquetas en el `archivo config.xml`:
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## Intención de lista blanca
+
+Controla qué URLs de la aplicación se permite hacer el sistema para abrir. De forma predeterminada, se permiten ninguÌ n external URLs.
+
+En Android, esto equivale a enviar una intención de tipo BROWSEABLE.
+
+Esta lista blanca no se aplica a plugins, sólo los hipervínculos y las llamadas a `window.Open)`.
+
+En `config.xml`, agregar etiquetas `< allow-intent >` , como este:
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## Solicitud de red blanca
+
+Controles que las peticiones de la red (imágenes, XHRs, etc.) se les permite hacer (a través de ganchos nativa de Córdoba).
+
+Nota: Le sugerimos que utilice una política de seguridad de contenido (véase abajo), que es más seguro. Esta lista blanca es sobre todo histórico para webviews que no admiten la CSP.
+
+En `config.xml`, agregue etiquetas de `< access >` , como este:
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+Sin las etiquetas `< access >` , se admiten sólo las solicitudes a direcciones URL `file://` . Sin embargo, la aplicación por defecto de Cordova incluye `< access origin = "*" >` por defecto.
+
+Quirk: Android también permite las solicitudes de https://ssl.gstatic.com/accessibility/javascript/android/ por defecto, puesto que es necesario para TalkBack funcionar correctamente.
+
+### Política de seguridad de contenido
+
+Controles que las peticiones de la red (imágenes, XHRs, etc.) se les permite hacer (vía webview directamente).
+
+En iOS y Android, la red solicitud lista blanca (véase arriba) no es capaz de filtrar todos los tipos de solicitudes (por ejemplo, `< video >` y WebSockets no estén bloqueadas). Así, además de la lista blanca, usted debe utilizar una etiqueta `< meta >` de [Contenido la política de seguridad](http://content-security-policy.com/) en todas las páginas.
+
+En Android, soporte para CSP en el sistema webview comienza con KitKat (pero está disponible en todas las versiones con WebView de paso de peatones).
+
+Aquí están algunas declaraciones de CSP de ejemplo para las páginas `.html` :
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/fr/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/fr/README.md
new file mode 100644
index 00000000..2a8c4b73
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/fr/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+Ce plugin met en œuvre une politique de liste blanche pour naviguer le webview application sur Cordova 4.0
+
+## Plates-formes prises en charge Cordova
+
+ * 4.0.0 Android ou supérieur
+ * iOS 4.0.0 ou supérieur
+
+## Navigation liste blanche
+
+Contrôle quels URL le WebView lui-même peut être parcourus à. S'applique à des navigations niveau supérieur seulement.
+
+Particularités : sur Android il s'applique également aux iframes pour non-schémas http (s).
+
+Par défaut, navigations qu'aux URL `file://` , sont autorisés. Pour permettre aux autres d'autres URL, vous devez ajouter des balises `<allow-navigation>` à votre `fichier config.xml`:
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## Intent Whitelist
+
+Contrôle quels URL l'app n'est autorisé à poser le système d'ouverture. Par défaut, aucun external URL est autorisés.
+
+Sur Android, cela équivaut à envoyer une intention de type BROWSEABLE.
+
+Cette autorisation ne s'applique pas aux plugins, uniquement les liens hypertexte et les appels à `window.open()`.
+
+Dans le `fichier config.xml`, ajouter des balises `<allow-intent>` , comme ceci :
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## Réseau demande liste blanche
+
+Les contrôles dont les demandes de réseau (images, XHRs, etc.) sont autorisés à effectuer (via cordova natif crochets).
+
+Remarque : Nous vous suggérons de qu'utiliser un contenu politique de sécurité (voir ci-dessous), qui est plus sûr. Cette liste blanche est surtout historique pour webviews qui ne prennent pas en charge les CSP.
+
+Dans le `fichier config.xml`, ajouter des balises `<access>` , comme ceci :
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+Sans les balises `<access>` , seules les demandes d'URL `file://` sont autorisés. Toutefois, l'application de Cordoue par défaut inclut `<access origin="*" >` par défaut.
+
+Bizarrerie : Android permet également aux requêtes à https://ssl.gstatic.com/accessibility/javascript/android/ par défaut, puisque c'est nécessaire pour TalkBack fonctionner correctement.
+
+### Politique de sécurité du contenu
+
+Les contrôles dont les demandes de réseau (images, XHRs, etc.) sont autorisés à effectuer (via webview directement).
+
+Sur Android et iOS, la réseau demande liste blanche (voir ci-dessus) n'est pas en mesure de filtrer tous les types de demandes (p. ex. `< video >` & WebSockets ne sont pas bloquées). Ainsi, en plus de la liste blanche, vous devez utiliser une balise `< meta >` de [Contenu politique de sécurité](http://content-security-policy.com/) sur toutes vos pages.
+
+Sur Android, support pour le CSP dans le système webview commence par KitKat (mais n'est disponible sur toutes les versions à l'aide du tableau de concordance WebView).
+
+Voici quelques exemples de déclarations de CSP pour vos pages `.html` :
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/it/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/it/README.md
new file mode 100644
index 00000000..157dc036
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/it/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+Questo plugin attua una politica di whitelist per spostarsi all'interno dell'applicazione webview in Cordova 4.0
+
+## Piattaforme supportate Cordova
+
+ * Android 4.0.0 o superiore
+ * iOS 4.0.0 o superiore
+
+## Navigazione Whitelist
+
+Controlla quali URL WebView stessa può essere esplorato. Si applica al solo primo livello navigazioni.
+
+Stranezze: su Android vale anche per gli iframe per non-schemi di http (s).
+
+Per impostazione predefinita, navigazioni solo agli URL `file://` , sono ammessi. Per consentire altri altri URL, è necessario aggiungere `<allow-navigation>` tag per il tuo `config. XML`:
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## Whitelist intento
+
+Controlla quali URL app è consentito richiedere il sistema di apertura. Per impostazione predefinita, nessun esterno URL sono ammessi.
+
+Su Android, ciò equivale all'invio di un intento di tipo BROWSEABLE.
+
+Questa whitelist non si applica ai plugin, solo i collegamenti ipertestuali e chiamate a `Window`.
+
+In `config. XML`, aggiungere tag `<allow-intent>` , simile al seguente:
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## Rete richiesta Whitelist
+
+Controlli che le richieste di rete (immagini, XHRs, ecc.) sono consentiti (tramite ganci nativo di cordova).
+
+Nota: Si consiglia di che utilizzare un criterio di protezione contenuti (Vedi sotto), che è più sicuro. La whitelist è principalmente storico per visualizzazioni Web che non supportano la CSP.
+
+In `config. XML`, aggiungere tag `< access >` , simile al seguente:
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+Senza qualsiasi tag `< access >` , sono consentite solo le richieste di URL `file://` . Tuttavia, l'applicazione di Cordova predefinito include `< access origin = "*" >` per impostazione predefinita.
+
+Stranezza: Android consente anche alle richieste di https://ssl.gstatic.com/accessibility/javascript/android/ per impostazione predefinita, poiché questa operazione è necessaria per TalkBack funzionare correttamente.
+
+### Politica di sicurezza del contenuto
+
+Controlli che le richieste di rete (immagini, XHRs, ecc.) possono essere effettuate (via webview direttamente).
+
+Su Android e iOS, la rete richiesta whitelist (Vedi sopra) non è in grado di filtrare tutti i tipi di richieste (ad esempio non sono bloccate `< video >` & WebSockets). Così, oltre alla whitelist, è necessario utilizzare un tag `< meta >` [Content Security Policy](http://content-security-policy.com/) su tutte le pagine.
+
+Su Android, supporto per CSP all'interno webview sistema inizia con KitKat (ma è disponibile su tutte le versioni usando Crosswalk WebView).
+
+Ecco alcuni esempi di dichiarazioni di CSP per le pagine `HTML` :
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/ja/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/ja/README.md
new file mode 100644
index 00000000..6db17f1e
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/ja/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+ã“ã®ãƒ—ラグイン実装コルドム4.0 アプリケーション webview をナビゲートã™ã‚‹ãŸã‚ã®ãƒ›ãƒ¯ã‚¤ãƒˆ リスト ãƒãƒªã‚·ãƒ¼
+
+## サãƒãƒ¼ãƒˆã•れã¦ã„るコルドãƒã®ãƒ—ラットフォーム
+
+ * アンドロイド 4.0.0 以上
+ * iOS 4.0.0 以上
+
+## ナビゲーションã®ãƒ›ãƒ¯ã‚¤ãƒˆ リスト
+
+WebView 自体ã«ç§»å‹•ã« Url を制御ã—ã¾ã™ã€‚最上ä½ãƒŠãƒ“ゲーションã®ã¿ã«é©ç”¨ã•れã¾ã™ã€‚
+
+ç™–: Android ã«ã‚‚ã«é©ç”¨ã•れã¾ã™ã® iframe éž-[http スキーム。
+
+既定ã§ã¯ã€ãƒŠãƒ“ゲーション〠`file://`ã® Url ã«ã®ã¿è¨±å¯ã•れã¾ã™ã€‚ãã®ä»–ã®ä»–ã® Url を許å¯ã™ã‚‹ã‚ˆã†ã«ã€ `config.xml`ã«`<allow-navigation>`タグを追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## インテントã®ãƒ›ãƒ¯ã‚¤ãƒˆ リスト
+
+ã©ã® Url ã‚’é–‹ãよã†ã«ã‚·ã‚¹ãƒ†ãƒ ã‚’èžã„ã¦ã€ã‚¢ãƒ—リã«è¨±å¯ã‚’制御ã—ã¾ã™ã€‚ 既定ã§ã¯ã€å¤–部 Url 許å¯ã•れã¾ã›ã‚“。
+
+人造人間ã€ã“れã¯åž‹ BROWSEABLE ã®æ„図をé€ä¿¡ã™ã‚‹ã“ã¨ã«ç›¸å½“ã—ã¾ã™ã€‚
+
+ã“ã®ãƒ›ãƒ¯ã‚¤ãƒˆ リストã¯ãƒ—ラグインã®ã¿ãƒã‚¤ãƒ‘ーリンクãŠã‚ˆã³`window.open()`ã¸ã®å‘¼ã³å‡ºã—ã«ã¯é©ç”¨ã•れã¾ã›ã‚“。.
+
+`Config.xml`内ã®`<allow-intent>`ã‚¿ã‚°ã¯ã€ã“ã®ã‚ˆã†ãªã‚’追加ã—ã¾ã™ã€‚
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¦æ±‚ã®ãƒ›ãƒ¯ã‚¤ãƒˆ リスト
+
+ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¦æ±‚コントロール (ç”»åƒã€XHRs ç­‰) (コルドムãƒã‚¤ãƒ†ã‚£ãƒ– フック) を介ã—ã¦è¡Œã‚れるã“ã¨ãŒã€‚
+
+注: より安全ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ セキュリティ ãƒãƒªã‚·ãƒ¼ (下記å‚ç…§) を使用ã—ã¦ãŠå‹§ã‚ã—ã¾ã™ã€‚ ã“ã®ãƒ›ãƒ¯ã‚¤ãƒˆ リストã»ã¨ã‚“ã©ã® CSP をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ web 表示ã®ãŸã‚ã«æ­´å²çš„ã§ã™ã€‚
+
+`Config.xml`内ã®ã“ã®ã‚ˆã†ãª`<access>`タグを追加ã—ã¾ã™ã€‚
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+`<access>`ã‚¿ã‚°ã€ãªã—`file://` Url ã«è¦æ±‚ã®ã¿ã‚’許å¯ã—ã¾ã™ã€‚ ãŸã ã—ã€æ—¢å®šã®ã‚³ãƒ«ãƒ‰ãƒ アプリケーションãŒå«ã¾ã‚Œã¦ã„ã¾ã™`<access origin="*">`デフォルトã§ã€‚
+
+æ°—ã¾ãれ: ã‚¢ãƒ³ãƒ‰ãƒ­ã‚¤ãƒ‰ã‚‚è¦æ±‚ã§ãã¾ã™ https://ssl.gstatic.com/accessibility/javascript/android/デフォルトã§ã¯ã€ãƒˆãƒ¼ã‚¯ãŒæ­£å¸¸ã«æ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã®ã§ã€‚
+
+### コンテンツã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ ãƒãƒªã‚·ãƒ¼
+
+ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¦æ±‚コントロール (ç”»åƒã€XHRs ç­‰) (直接 webview) を介ã—ã¦è¡Œã‚れるã“ã¨ãŒã€‚
+
+Android 㨠iOS ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¦æ±‚ホワイト リスト (上記å‚ç…§) ã¯ã™ã¹ã¦ã®ç¨®é¡žã®è¦æ±‚ (例: `< ビデオ >` & Websocket ãŒãµã•ãŒã‚Œã¦ã„ãªã„) をフィルター処ç†ã§ãã¾ã›ã‚“。 ã ã‹ã‚‰ã€ãƒ›ãƒ¯ã‚¤ãƒˆ リストã«åŠ ãˆã¦ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã«[コンテンツ セキュリティ ãƒãƒªã‚·ãƒ¼](http://content-security-policy.com/) `< meta >`タグを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+Android 上システム webview 内 CSP サãƒãƒ¼ãƒˆ キットカットã‹ã‚‰å§‹ã¾ã‚Šã¾ã™ (ã—ã‹ã—æ¨ªæ–­æ­©é“ WebView を使用ã—ã¦ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§åˆ©ç”¨å¯èƒ½ã§ã™)。
+
+`.Html`ページã®ã„ãã¤ã‹ã®ä¾‹ CSP ã®å®£è¨€ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/ko/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/ko/README.md
new file mode 100644
index 00000000..4cbae914
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/ko/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+ì´ í”ŒëŸ¬ê·¸ì¸ êµ¬í˜„ 코르ë„ë°” 4.0 ì‘ìš© 프로그램 webview를 íƒìƒ‰ì— 대 한 허용 ì •ì±…
+
+## ì§€ì›ëœ 코르ë„ë°” 플랫í¼
+
+ * 안 드 로ì´ë“œ 4.0.0 ì´ìƒ
+ * iOS 4.0.0 ì´ìƒ
+
+## íƒìƒ‰ 허용
+
+WebView ìžì²´ê°€ íƒìƒ‰í•  수 있는 Urlì„ ì œì–´ 합니다. 최ìƒìœ„ íƒìƒ‰ì—ë§Œ ì ìš© ë©ë‹ˆë‹¤.
+
+단ì : 안 드 로ì´ë“œì—ë„ ì ìš© ë©ë‹ˆë‹¤ iframeì— ëŒ€ 한 비-í”„ë¡œí† ì½œì¸ ê³„íš.
+
+기본ì ìœ¼ë¡œ íƒìƒ‰ `file://` Urlì—ë§Œ 사용할 수 있습니다. 다른 다른 Urlì„ í—ˆìš© 하려면 `config.xml`ì— `< allow-navigation >` 태그를 추가 해야 합니다.
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## ì˜ë„ 허용
+
+App 시스템 ì—´ì„ ê²Œ 허용 ë˜ëŠ” Urlì„ ì œì–´ 합니다. 기본ì ìœ¼ë¡œ 외부 Urlì€ ì‚¬ìš©í•  수 있습니다.
+
+안 드 로ì´ë“œì—ì´ í˜•ì‹ì˜ BROWSEABLE ì˜ë„ 보내는 것 같습니다.
+
+ì´ í—ˆìš© ëœ í”ŒëŸ¬ê·¸ì¸, 하ì´í¼ë§í¬ ë° `window.open ()` í˜¸ì¶œì— ì ìš© ë˜ì§€ 않습니다..
+
+`Config.xml`ì—ì´ ê°™ì€ `< allow-intent >` 태그를 추가 합니다.
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## ë„¤íŠ¸ì›Œí¬ ìš”ì²­ 허용
+
+ìš”ì²­ì„ ë„¤íŠ¸ì›Œí¬ ì»¨íŠ¸ë¡¤ (ì´ë¯¸ì§€, XHRs, 등) (코르ë„ë°” 네ì´í‹°ë¸Œ 후í¬)를 통해 í•  수 있습니다.
+
+참고: ë‹¹ì‹ ì´ ì‚¬ìš© 콘í…츠 보안 ì •ì±… (아래 참조), ë” ì•ˆì „í•œ ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤. ì´ í—ˆìš©ì€ CSP를 ì§€ì› í•˜ì§€ 않는 webviewsì— ëŒ€ 한 역사ì .
+
+`Config.xml`ì—ì´ ê°™ì€ `< access >` 태그를 추가 합니다.
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+ì–´ë–¤ `< access >` 태그 ì—†ì´ ìš”ì²­ `file://` Url 사용할 수 있습니다. 그러나 기본 코르ë„ë°” ì‘ìš© í”„ë¡œê·¸ëž¨ì„ í¬í•¨ 하는, `< access origin="*" >` 기본ì ìœ¼ë¡œ.
+
+특질: 안 드 로ì´ë“œ ë˜í•œ 수 있습니다 ìš”ì²­ì„ https://ssl.gstatic.com/accessibility/javascript/android/ 기본ì ìœ¼ë¡œ í•„ìš” 제대로 ìž‘ë™ í•˜ë ¤ë©´ ì˜ê²¬ ì´ë¯€ë¡œ.
+
+### 콘í…츠 보안 ì •ì±…
+
+ìš”ì²­ì„ ë„¤íŠ¸ì›Œí¬ ì»¨íŠ¸ë¡¤ (ì´ë¯¸ì§€, XHRs, 등) (webview ì§ì ‘)를 통해 í•  수 있습니다.
+
+안 드 로ì´ë“œì™€ iOSì— ë„¤íŠ¸ì›Œí¬ ìš”ì²­ 허용 (위 참조)는 모든 ì¢…ë¥˜ì˜ ìš”ì²­ (예: `< 비디오 >` & WebSockets 차단 ë˜ì§€ 않습니다)를 í•„í„°ë§ í•  수 없습니다. 그래서, 허용, ë¿ë§Œ ì•„ë‹ˆë¼ ê·€í•˜ì˜ ëª¨ë“  페ì´ì§€ì— [콘í…츠 보안 ì •ì±…](http://content-security-policy.com/) `< meta >` 태그를 사용 해야 합니다.
+
+안 드 로ì´ë“œ, 시스템 webview ë‚´ì—서 CSPì— ëŒ€ 한 ì§€ì›ì„ KitKat 시작 (하지만 횡단 ë³´ë„ WebView를 사용 하 ì—¬ 모든 버전ì—서 사용할 수).
+
+다ìŒì€ `.html` 페ì´ì§€ì— 대 한 몇 가지 예제 CSP 선언입니다.
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/pl/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/pl/README.md
new file mode 100644
index 00000000..ecdc3d5c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/pl/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+Ten plugin wdraża polityki białej nawigacja widoku sieci Web aplikacji na Cordova 4.0
+
+## Cordova obsługiwanych platform
+
+ * Android 4.0.0 lub powyżej
+ * iOS 4.0.0 lub powyżej
+
+## Biała lista nawigacji
+
+Kontroluje, których adresy URL widoku sieci Web, samej można nawigować do. Dotyczy tylko najwyższego poziomu nawigacje.
+
+Dziwactwa: na Android to dotyczy także IFRAME do nie-http (s) systemów.
+
+Domyślnie, nawigacje tylko do URLi `file://` , są dozwolone. Aby zezwolić na inne adresy URL, należy dodać Tagi `< allow-navigation >` do pliku `config.xml`:
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## Zamiarem biała
+
+Kontroluje, których adresy URL aplikacji jest możliwość zapytać systemem otwierania. Domyślnie nie ma zewnętrznych adresów URL są dozwolone.
+
+Na Android to przyrównuje do wysyłania zamiarem typu BROWSEABLE.
+
+Ta biała nie ma zastosowania do pluginów, tylko hiperłącza i wywołania `window.open()`.
+
+W `pliku config.xml`dodawanie tagów `< allow-intent >` , jak to:
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## Sieci wniosek biała
+
+Formanty, które sieci żądań (obrazy, XHRs, itp.) mogą być wykonane (za pośrednictwem cordova rodzimych haki).
+
+Uwaga: Zalecamy, że używasz treści polityki bezpieczeństwa (patrz poniżej), który jest bardziej bezpieczne. Ta Biała jest głównie historyczne dla webviews, które nie obsługują CSP.
+
+W `pliku config.xml`dodawanie tagów `< access >` , jak to:
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+Bez żadnych tagów `< access >` dozwolone są tylko żądania do URLi `file://` . Jednak domyślnie Cordova aplikacja zawiera `< access origin = "*" >` domyślnie.
+
+Cokół: Android pozwala również żądania do https://ssl.gstatic.com/accessibility/javascript/android/ domyślnie, ponieważ jest to wymagane dla TalkBack wobec funkcja poprawnie.
+
+### Zasady zabezpieczeń zawartości
+
+Formanty, które sieci żądań (obrazy, XHRs, itp.) mogą być wykonane (za pomocą widoku sieci Web bezpośrednio).
+
+Na Androida i iOS biała żądanie sieci (patrz wyżej) nie jest w stanie filtrować wszystkie rodzaje wniosków (np. `< video >` & WebSockets nie są zablokowane). Tak oprócz białej listy, należy użyć tagu `< meta >` [Treści polityki bezpieczeństwa](http://content-security-policy.com/) na wszystkich stronach.
+
+Na Android wsparcie dla CSP w ramach systemu widoku sieci Web zaczyna KitKat (ale jest dostępne we wszystkich wersjach przy użyciu widoku sieci Web przejście dla pieszych).
+
+Oto niektóre przykład CSP deklaracje dla strony `HTML` :
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/doc/zh/README.md b/StoneIsland/plugins/cordova-plugin-whitelist/doc/zh/README.md
new file mode 100644
index 00000000..c2c7e112
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/doc/zh/README.md
@@ -0,0 +1,148 @@
+<!--
+# license: Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+-->
+
+# cordova-plugin-whitelist
+
+這個外掛程å¼å¯¦ç¾ä¸€å€‹ç”¨æ–¼å°Žèˆªåœ¨ç§‘爾多瓦 4.0 æ‡‰ç”¨ç¨‹å¼ web 視圖的白å單策略
+
+## 支æ´çš„科爾多瓦平臺
+
+ * Android 4.0.0 或以上
+ * iOS 4.0.0 或以上
+
+## 導航白åå–®
+
+控制 web 視圖本身å¯ä»¥å°Žèˆªåˆ°çš„ Url。é©ç”¨äºŽé ‚級導航åªã€‚
+
+怪癖: 在 Android 上它也é©ç”¨äºŽ iframe çš„éž-çµè¨ˆç•«ã€‚
+
+é è¨­æƒ…æ³ä¸‹ï¼Œåªæœ‰åˆ°`file://` Url 導航å…許。若è¦å…許其他其他 Url,必須將`<allow-navigation>`標籤添加到您的`config.xml`:
+
+ <!-- Allow links to example.com -->
+ <allow-navigation href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-navigation href="*://*.example.com/*" />
+
+ <!-- A wildcard can be used to whitelist the entire network,
+ over HTTP and HTTPS.
+ *NOT RECOMMENDED* -->
+ <allow-navigation href="*" />
+
+ <!-- The above is equivalent to these three declarations -->
+ <allow-navigation href="http://*/*" />
+ <allow-navigation href="https://*/*" />
+ <allow-navigation href="data:*" />
+
+
+## 科爾多瓦-外掛程å¼-白åå–®
+
+控制應用程å¼å…許讓系統打開的 Url。 é è¨­æƒ…æ³ä¸‹ï¼Œæ²’有外部 Url å…許。
+
+在 android 系統,這相當於發é€é¡žåž‹ BROWSEABLE çš„æ„圖。
+
+此白å單並ä¸é©ç”¨äºŽåªè¶…連çµå’Œå°`window.open ()`調用的外掛程å¼.
+
+在`config.xml`中添加`<allow-intent>`標籤,åƒé€™æ¨£:
+
+ <!-- Allow links to web pages to open in a browser -->
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+
+ <!-- Allow links to example.com to open in a browser -->
+ <allow-intent href="http://example.com/*" />
+
+ <!-- Wildcards are allowed for the protocol, as a prefix
+ to the host, or as a suffix to the path -->
+ <allow-intent href="*://*.example.com/*" />
+
+ <!-- Allow SMS links to open messaging app -->
+ <allow-intent href="sms:*" />
+
+ <!-- Allow tel: links to open the dialer -->
+ <allow-intent href="tel:*" />
+
+ <!-- Allow geo: links to open maps -->
+ <allow-intent href="geo:*" />
+
+ <!-- Allow all unrecognized URLs to open installed apps
+ *NOT RECOMMENDED* -->
+ <allow-intent href="*" />
+
+
+## 網路請求白åå–®
+
+網路請求的控制項 (圖åƒï¼ŒXHRs ç­‰) å…許 (通éŽç§‘爾多瓦本機掛鉤)。
+
+注æ„: 我們建議你使用內容的安全性原則 (見下文),這是更安全。 此白å單大多是為 webviews 䏿”¯æ´ CSP 的歷å²ã€‚
+
+在`config.xml`中添加`<access>`標記,åƒé€™æ¨£:
+
+ <!-- Allow images, xhrs, etc. to google.com -->
+ <access origin="http://google.com" />
+ <access origin="https://google.com" />
+
+ <!-- Access to the subdomain maps.google.com -->
+ <access origin="http://maps.google.com" />
+
+ <!-- Access to all the subdomains on google.com -->
+ <access origin="http://*.google.com" />
+
+ <!-- Enable requests to content: URLs -->
+ <access origin="content:///*" />
+
+ <!-- Don't block any requests -->
+ <access origin="*" />
+
+
+沒有任何`<access>`標籤,åªåˆ°`file://` Url å…許請求。 但是,é è¨­çš„科爾多瓦應用程å¼åŒ…括`<access origin="*">` ,é è¨­æƒ…æ³ã€‚
+
+怪癖: Android é‚„å…è¨±å° HTTPs://ssl.gstatic.com/accessibility/javascript/android/ 請求é è¨­æƒ…æ³ä¸‹ï¼Œå› ç‚ºé€™æ˜¯å°è¬›æ­£å¸¸æ‰€éœ€ã€‚
+
+### 內容安全政策
+
+網路請求的控制項 (圖åƒï¼ŒXHRs ç­‰) å…許 (é€šéŽ web 視圖直接)。
+
+å° Android å’Œ iOS,網路請求白åå–® (見上文) 是ä¸èƒ½å¤ éŽæ¿¾æ‰€æœ‰é¡žåž‹çš„請求 (例如`<video>` & Websocket 未被阻止)。 那麼,除了白å單中,你應使用[內容安全性原則](http://content-security-policy.com/) `< å…ƒ >`標記您的所有é é¢ã€‚
+
+在 android ç³»çµ±ï¼Œå° CSP 系統 web 視圖的支æ´é–‹å§‹å¥‡å·§ (但是是上使用 web 視圖人行橫é“上的所有版本å¯ç”¨)。
+
+䏋颿˜¯ä¸€äº›ç¤ºä¾‹ CSP è²æ˜Žç‚º`.html`é é¢:
+
+ <!-- Good default declaration:
+ * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
+ * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
+ * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
+ * Enable inline JS: add 'unsafe-inline' to default-src
+ * Enable eval(): add 'unsafe-eval' to default-src
+ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">
+
+ <!-- Allow requests to foo.com -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">
+
+ <!-- Enable all requests, inline styles, and eval() -->
+ <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
+
+ <!-- Allow XHRs via https only -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">
+
+ <!-- Allow iframe to https://cordova.apache.org/ -->
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org"> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/package.json b/StoneIsland/plugins/cordova-plugin-whitelist/package.json
index 2c72e256..ae0d386c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/package.json
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/package.json
@@ -1,34 +1,32 @@
{
"name": "cordova-plugin-whitelist",
- "version": "1.0.0",
+ "version": "1.3.0",
"description": "Cordova Whitelist Plugin",
"cordova": {
"platforms": [
- "android",
- "ios"
+ "android"
]
},
"repository": {
"type": "git",
- "url": "https://git-wip-us.apache.org/repos/asf/cordova-plugin-whitelist.git"
+ "url": "https://github.com/apache/cordova-plugin-whitelist"
},
"keywords": [
"cordova",
"whitelist",
"ecosystem:cordova",
- "cordova-android",
- "cordova-ios"
+ "cordova-android"
],
- "engines": [
- {
- "name": "cordova-android",
- "version": ">=4.0.0-dev"
- },
- {
- "name": "cordova-ios",
- "version": ">=4.0.0-dev"
+ "engines": {
+ "cordovaDependencies": {
+ "0.0.0": {
+ "cordova-android": ">=4.0.0"
+ },
+ "2.0.0": {
+ "cordova": ">100"
+ }
}
- ],
+ },
"author": "Apache Software Foundation",
"license": "Apache 2.0"
}
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/plugin.xml b/StoneIsland/plugins/cordova-plugin-whitelist/plugin.xml
index 2ec60b3c..21f7b54b 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/plugin.xml
@@ -20,14 +20,14 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-plugin-whitelist"
- version="1.0.0">
+ version="1.3.0">
<name>Whitelist</name>
<description>Cordova Network Whitelist Plugin</description>
<license>Apache 2.0</license>
<keywords>cordova,whitelist,policy</keywords>
<engines>
- <engine name="cordova-android" version=">=4.0.0-dev" />
+ <engine name="cordova-android" version=">=4.0.0" />
</engines>
<platform name="android">
@@ -40,8 +40,11 @@
<source-file src="src/android/WhitelistPlugin.java" target-dir="src/org/apache/cordova/whitelist" />
- <js-module src="whitelist.js" name="whitelist">
- <runs />
- </js-module>
+ <info>
+ This plugin is only applicable for versions of cordova-android greater than 4.0. If you have a previous platform version, you do *not* need this plugin since the whitelist will be built in.
+ </info>
</platform>
+
+
+
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java b/StoneIsland/plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java
index 4e4f57e1..36567886 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java
+++ b/StoneIsland/plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java
@@ -21,11 +21,11 @@ package org.apache.cordova.whitelist;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.ConfigXmlParser;
+import org.apache.cordova.LOG;
import org.apache.cordova.Whitelist;
import org.xmlpull.v1.XmlPullParser;
import android.content.Context;
-import android.util.Log;
public class WhitelistPlugin extends CordovaPlugin {
private static final String LOG_TAG = "WhitelistPlugin";
@@ -90,7 +90,7 @@ public class WhitelistPlugin extends CordovaPlugin {
boolean external = (xml.getAttributeValue(null, "launch-external") != null);
if (origin != null) {
if (external) {
- Log.w(LOG_TAG, "Found <access launch-external> within config.xml. Please use <allow-intent> instead.");
+ LOG.w(LOG_TAG, "Found <access launch-external> within config.xml. Please use <allow-intent> instead.");
allowedIntents.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));
} else {
if ("*".equals(origin)) {
diff --git a/StoneIsland/plugins/cordova-plugin-whitelist/src/ios/CDVNavigationWhitelistPlugin.m b/StoneIsland/plugins/cordova-plugin-whitelist/src/ios/CDVNavigationWhitelistPlugin.m
deleted file mode 100755
index 5895e89b..00000000
--- a/StoneIsland/plugins/cordova-plugin-whitelist/src/ios/CDVNavigationWhitelistPlugin.m
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- */
-
-#import "CDVNavigationWhitelistPlugin.h"
-#import <Cordova/CDVViewController.h>
-
-#pragma mark CDVNavigationWhitelistConfigParser
-
-@interface CDVNavigationWhitelistConfigParser : NSObject <NSXMLParserDelegate> {}
-
-@property (nonatomic, strong) NSMutableArray* whitelistHosts;
-
-@end
-
-@implementation CDVNavigationWhitelistConfigParser
-
-@synthesize whitelistHosts;
-
-- (id)init
-{
- self = [super init];
- if (self != nil) {
- self.whitelistHosts = [[NSMutableArray alloc] initWithCapacity:30];
- [self.whitelistHosts addObject:@"file:///*"];
- [self.whitelistHosts addObject:@"content:///*"];
- [self.whitelistHosts addObject:@"data:///*"];
- }
- return self;
-}
-
-- (void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary*)attributeDict
-{
- if ([elementName isEqualToString:@"allow-navigation"]) {
- [whitelistHosts addObject:attributeDict[@"href"]];
- }
-}
-
-- (void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName
-{
-}
-
-- (void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError
-{
- NSAssert(NO, @"config.xml parse error line %ld col %ld", (long)[parser lineNumber], (long)[parser columnNumber]);
-}
-
-
-@end
-
-#pragma mark CDVNavigationWhitelistPlugin
-
-@interface CDVNavigationWhitelistPlugin () {}
-@property (nonatomic, strong) CDVWhitelist* whitelist;
-@end
-
-@implementation CDVNavigationWhitelistPlugin
-
-@synthesize whitelist;
-
-- (void)setViewController:(UIViewController *)viewController
-{
- if ([viewController isKindOfClass:[CDVViewController class]]) {
- CDVWhitelistConfigParser *whitelistConfigParser = [[CDVWhitelistConfigParser alloc] init];
- [(CDVViewController *)viewController parseSettingsWithParser:whitelistConfigParser];
- self.whitelist = [[CDVWhitelist alloc] initWithArray:whitelistConfigParser.whitelistHosts];
- }
-}
-
-- (BOOL)shouldAllowNavigationToURL:(NSURL *)url
-{
- return [self.whitelist URLIsAllowed:url];
-}
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/MIT b/StoneIsland/plugins/cordova-plugin-x-socialsharing/MIT
new file mode 100644
index 00000000..f932f6d9
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/MIT
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016 Eddy Verbruggen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE. \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/README.md b/StoneIsland/plugins/cordova-plugin-x-socialsharing/README.md
index 21709982..52e5515c 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/README.md
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/README.md
@@ -24,6 +24,7 @@ Every now and then kind folks ask me how they can give me all their money. So if
4. [iOS and Android](#4a-usage-on-ios-and-android)
4. [Windows Phone](#4b-usage-on-windows-phone)
4. [Share-popover on iPad](#4c-share-popover-on-ipad)
+ 4. [Whitelisting on iOS 9](#4d-whitelisting-on-ios-9)
5. [Credits](#5-credits)
6. [License](#6-license)
@@ -154,6 +155,33 @@ However, what exactly gets shared, depends on the application the user chooses t
- Facebook iOS: message, image (other filetypes are not supported), link. Beware that since a Fb update in April 2015 sharing a prefilled message is no longer possible when the Fb app is installed (like Android), see #344. Alternative: use `shareViaFacebookWithPasteMessageHint`.
### Using the share sheet
+Since version 5.1.0 (for iOS and Android) it's recommended to use `shareWithOptions` as it's the most feature rich way to share stuff cross-platform.
+
+It will also tell you if sharing to an app completed and which app that was (if that app plays nice, that is).
+
+```js
+// this is the complete list of currently supported params you can pass to the plugin (all optional)
+var options = {
+ message: 'share this', // not supported on some apps (Facebook, Instagram)
+ subject: 'the subject', // fi. for email
+ files: ['', ''], // an array of filenames either locally or remotely
+ url: 'https://www.website.com/foo/#bar?a=b',
+ chooserTitle: 'Pick an app' // Android only, you can override the default share sheet title
+}
+
+var onSuccess = function(result) {
+ console.log("Share completed? " + result.completed); // On Android apps mostly return false even while it's true
+ console.log("Shared to app: " + result.app); // On Android result.app is currently empty. On iOS it's empty when sharing is cancelled (result.completed=false)
+}
+
+var onError = function(msg) {
+ console.log("Sharing failed with message: " + msg);
+}
+
+window.plugins.socialsharing.shareWithOptions(options, onSuccess, onError);
+```
+
+#### You can still use the older `share` method as well
Here are some examples you can copy-paste to test the various combinations:
```html
<button onclick="window.plugins.socialsharing.share('Message only')">message only</button>
@@ -226,6 +254,18 @@ iOS Quirks:
<button onclick="window.plugins.socialsharing.shareViaWhatsApp('Message via WhatsApp', null /* img */, null /* url */, function() {console.log('share ok')}, function(errormsg){alert(errormsg)})">msg via WhatsApp (with errcallback)</button>
```
+##### Experimental feature: sharing directly to someone
+Available in 5.0.8 and up - please let me know if this works for your device! Open an issue if not..
+
+```html
+<button onclick="window.plugins.socialsharing.shareViaWhatsAppToReceiver(receiver, 'Message via WhatsApp', null /* img */, null /* url */, function() {console.log('share ok')})">msg via WhatsApp for Addressbook ID 101</button>
+```
+For `receiver` on iOS pass in the Addressbook ID (or 'abid'). You can find those abid's by using the [Cordova Contacts Plugin](https://github.com/apache/cordova-plugin-contacts).
+The result in the success callback of the `find` function is a JSON array of contact objects, use the 'id' you find in those objects.
+Don't pass in an image on iOS because that can't be sent to someone directly unfortunately. Message and URL are fine though.
+
+On Android pass in the phone number of the person you want to send a message to (untested at the moment).
+
####SMS
Note that on Android, SMS via Hangouts may not behave correctly
```html
@@ -247,7 +287,7 @@ window.plugins.socialsharing.shareViaEmail(
['cc@person1.com'], // CC: must be null or an array
null, // BCC: must be null or an array
['https://www.google.nl/images/srpr/logo4w.png','www/localimage.png'], // FILES: can be null, a string, or an array
- onSuccess, // called when sharing worked, but also when the user cancelled sharing via email (I've found no way to detect the difference)
+ onSuccess, // called when sharing worked, but also when the user cancelled sharing via email. On iOS, the callbacks' boolean result parameter is true when sharing worked, false if cancelled. On Android, this parameter is always true so it can't be used). See section "Notes about the successCallback" below.
onError // called when sh*t hits the fan
);
```
@@ -441,31 +481,51 @@ window.plugins.socialsharing.setIPadPopupCoordinates(targetBounds);
window.plugins.socialsharing.share('Hello from iOS :)')
```
-## 5. Credits ##
+## 4d. Whitelisting on iOS 9
-This plugin was enhanced for Plugman / PhoneGap Build by [Eddy Verbruggen](http://www.x-services.nl).
-The Android and Windows Phone code was entirely created by the author.
-The first iteration of the iOS code was inspired by [Cameron Lerch](https://github.com/bfcam/phonegap-ios-social-plugin).
+On iOS 9 you have to make sure to whitelist the applications you want to use for sharing. Without whitelisting "query schemes", you may get the error callback invoked when calling the `canShareVia` function (and possibly the `shareVia`). You can verify this is a permissions issue by observing the output in XCode for something like:
+
+> -canOpenURL: failed for URL: "whatsapp://app" - error: "This app is not allowed to query for scheme whatsapp"
+You have a few options to prevent this by whitelisting the application you want to share via:
-## 6. License
+### Directly editing the .plist file
+This is a stright forward approach - you just manually edit the .plist file - either from within XCode or using a text editor. You can see example entries above (e.g. xyz). While this is simple to do, the changes may be lost when rebuilding the project or tweaking the platform (e.g. upgrading) and is less recomended.
-[The MIT License (MIT)](http://www.opensource.org/licenses/mit-license.html)
+### Use query schema plugin
+There is a plugin designed specifically to address query schema whitelisting. You can find the plugin and how to use it [here](https://www.npmjs.com/package/cordova-plugin-queries-schemes). In general, after installation, you can change plugin.xml file under the plugin subfolder within the plugins directory of your project to add the required schemas. Here again though, you have to edit an additional file and should take care not to overwrite it when making changes to your project.
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+### Use Custom Config plugin
+The Custom Config plugin ([here](https://github.com/dpa99c/cordova-custom-config)) allows you to add configuration to your platforms "native" configuration files (e.g. .plist or AndroidManifest.xml) through the project's main config.xml file.
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+To address query schema issue, after installaing the plugin you can edit the iOS platform section of your config.xml (in the project main folder) to include the required entries:
+
+```xml
+<?xml version='1.0' encoding='utf-8'?>
+<widget id="your.app.id"
+ version="0.9.1"
+ xmlns="http://www.w3.org/ns/widgets"
+ xmlns:cdv="http://cordova.apache.org/ns/1.0">
+
+ <!-- a bunch of elements like name, description etc -->
+
+ <platform name="ios">
+
+ <!-- add this entry -->
+ <config-file platform="ios" target="*-Info.plist" parent="LSApplicationQueriesSchemes">
+ <array>
+ <string>whatsapp</string>
+ <!-- add more query scheme strings -->
+ </array>
+ </config-file>
+ </platform>
+</widget>
+```
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+The advantage with this method is that editing is done in the config.xml file which will most often be in your source control anyway and hence, changes to it will be reserved.
+
+## 5. Credits ##
+
+This plugin was enhanced for Plugman / PhoneGap Build by [Eddy Verbruggen](http://www.x-services.nl).
+The Android and Windows Phone code was entirely created by the author.
+The first iteration of the iOS code was inspired by [Cameron Lerch](https://github.com/bfcam/phonegap-ios-social-plugin).
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/package.json b/StoneIsland/plugins/cordova-plugin-x-socialsharing/package.json
index 66bc9646..62e6a1c0 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/package.json
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-x-socialsharing",
- "version": "5.0.7",
+ "version": "5.1.3",
"description": "Share text, images (and other files), or a link via the native sharing widget of your device. Android is fully supported, as well as iOS 6 and up. WP8 has somewhat limited support.",
"cordova": {
"id": "cordova-plugin-x-socialsharing",
@@ -29,7 +29,7 @@
"ecosystem:cordova",
"cordova-ios",
"cordova-android",
- "cordova-wp8"
+ "cordova-windows"
],
"engines": [
{
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/plugin.xml b/StoneIsland/plugins/cordova-plugin-x-socialsharing/plugin.xml
index ba7183cb..0a367427 100755
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/plugin.xml
@@ -2,7 +2,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-x-socialsharing"
- version="5.0.7">
+ version="5.1.3">
<name>SocialSharing</name>
@@ -39,6 +39,8 @@
</feature>
</config-file>
+ <header-file src="src/ios/NSString+URLEncoding.h"/>
+ <source-file src="src/ios/NSString+URLEncoding.m"/>
<header-file src="src/ios/SocialSharing.h"/>
<source-file src="src/ios/SocialSharing.m"/>
@@ -71,7 +73,7 @@
</config-file>
<source-file src="src/wp8/SocialSharing.cs" />
- <framework src="src/wp8/SocialSharingSDK/Newtonsoft.Json.dll" custom="true" />
+ <framework src="src/wp8/Newtonsoft.Json.dll" custom="true"/>
</platform>
<!-- windows -->
@@ -79,7 +81,6 @@
<js-module src="src/windows/SocialSharingProxy.js" name="SocialSharingProxy">
<merges target="" />
</js-module>
- <source-file src="" />
</platform>
</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-android-share.png b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-android-share.png
index f3ab135f..f3ab135f 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-android-share.png
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-android-share.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios6-share.png b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios6-share.png
index 63b0b4c5..63b0b4c5 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios6-share.png
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios6-share.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-ipad-share.png b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-ipad-share.png
index 640c94f8..640c94f8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-ipad-share.png
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-ipad-share.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-share.png b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-share.png
index 7545d10d..7545d10d 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-share.png
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-ios7-share.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-wp8-share.jpg b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-wp8-share.jpg
index 0ced2eb5..0ced2eb5 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-wp8-share.jpg
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshot-wp8-share.jpg
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshots-ios7-shareconfig.png b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshots-ios7-shareconfig.png
index 3afe5fef..3afe5fef 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshots-ios7-shareconfig.png
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/screenshots/screenshots-ios7-shareconfig.png
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/android/nl/xservices/plugins/SocialSharing.java b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/android/nl/xservices/plugins/SocialSharing.java
index f1168f89..8de31da8 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/android/nl/xservices/plugins/SocialSharing.java
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/android/nl/xservices/plugins/SocialSharing.java
@@ -26,7 +26,9 @@ import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
@@ -36,6 +38,7 @@ public class SocialSharing extends CordovaPlugin {
private static final String ACTION_AVAILABLE_EVENT = "available";
private static final String ACTION_SHARE_EVENT = "share";
+ private static final String ACTION_SHARE_WITH_OPTIONS_EVENT = "shareWithOptions";
private static final String ACTION_CAN_SHARE_VIA = "canShareVia";
private static final String ACTION_CAN_SHARE_VIA_EMAIL = "canShareViaEmail";
private static final String ACTION_SHARE_VIA = "shareVia";
@@ -47,7 +50,10 @@ public class SocialSharing extends CordovaPlugin {
private static final String ACTION_SHARE_VIA_SMS_EVENT = "shareViaSMS";
private static final String ACTION_SHARE_VIA_EMAIL_EVENT = "shareViaEmail";
- private static final int ACTIVITY_CODE_SENDVIAEMAIL = 2;
+ private static final int ACTIVITY_CODE_SEND__BOOLRESULT = 1;
+ private static final int ACTIVITY_CODE_SEND__OBJECT = 2;
+ private static final int ACTIVITY_CODE_SENDVIAEMAIL = 3;
+ private static final int ACTIVITY_CODE_SENDVIAWHATSAPP = 4;
private CallbackContext _callbackContext;
@@ -55,6 +61,7 @@ public class SocialSharing extends CordovaPlugin {
private abstract class SocialSharingRunnable implements Runnable {
public CallbackContext callbackContext;
+
SocialSharingRunnable(CallbackContext cb) {
this.callbackContext = cb;
}
@@ -68,23 +75,29 @@ public class SocialSharing extends CordovaPlugin {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
return true;
} else if (ACTION_SHARE_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), null, false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), null, null, false, true);
+ } else if (ACTION_SHARE_WITH_OPTIONS_EVENT.equals(action)) {
+ return shareWithOptions(callbackContext, args.getJSONObject(0));
} else if (ACTION_SHARE_VIA_TWITTER_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "twitter", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "twitter", null, false, true);
} else if (ACTION_SHARE_VIA_FACEBOOK_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", null, false, true);
} else if (ACTION_SHARE_VIA_FACEBOOK_WITH_PASTEMESSAGEHINT.equals(action)) {
this.pasteMessage = args.getString(4);
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "com.facebook.katana", null, false, true);
} else if (ACTION_SHARE_VIA_WHATSAPP_EVENT.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "whatsapp", false);
+ if (notEmpty(args.getString(4))) {
+ return shareViaWhatsAppDirectly(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4));
+ } else {
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "whatsapp", null, false, true);
+ }
} else if (ACTION_SHARE_VIA_INSTAGRAM_EVENT.equals(action)) {
if (notEmpty(args.getString(0))) {
copyHintToClipboard(args.getString(0), "Instagram paste message");
}
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "instagram", false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), "instagram", null, false, true);
} else if (ACTION_CAN_SHARE_VIA.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), true);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), null, true, true);
} else if (ACTION_CAN_SHARE_VIA_EMAIL.equals(action)) {
if (isEmailAvailable()) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
@@ -94,7 +107,7 @@ public class SocialSharing extends CordovaPlugin {
return false;
}
} else if (ACTION_SHARE_VIA.equals(action)) {
- return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), false);
+ return doSendIntent(callbackContext, args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), args.getString(4), null, false, true);
} else if (ACTION_SHARE_VIA_SMS_EVENT.equals(action)) {
return invokeSMSIntent(callbackContext, args.getJSONObject(0), args.getString(1));
} else if (ACTION_SHARE_VIA_EMAIL_EVENT.equals(action)) {
@@ -158,8 +171,17 @@ public class SocialSharing extends CordovaPlugin {
callbackContext.error(e.getMessage());
}
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ draft.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
draft.setType("application/octet-stream");
- cordova.startActivityForResult(plugin, Intent.createChooser(draft, "Choose Email App"), ACTIVITY_CODE_SENDVIAEMAIL);
+
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ cordova.startActivityForResult(plugin, Intent.createChooser(draft, "Choose Email App"), ACTIVITY_CODE_SENDVIAEMAIL);
+ }
+ });
}
});
@@ -178,7 +200,30 @@ public class SocialSharing extends CordovaPlugin {
}
}
- private boolean doSendIntent(final CallbackContext callbackContext, final String msg, final String subject, final JSONArray files, final String url, final String appPackageName, final boolean peek) {
+ private boolean shareWithOptions(CallbackContext callbackContext, JSONObject jsonObject) {
+ return doSendIntent(
+ callbackContext,
+ jsonObject.optString("message", null),
+ jsonObject.optString("subject", null),
+ jsonObject.optJSONArray("files") == null ? new JSONArray() : jsonObject.optJSONArray("files"),
+ jsonObject.optString("url", null),
+ null,
+ jsonObject.optString("chooserTitle", null),
+ false,
+ false
+ );
+ }
+
+ private boolean doSendIntent(
+ final CallbackContext callbackContext,
+ final String msg,
+ final String subject,
+ final JSONArray files,
+ final String url,
+ final String appPackageName,
+ final String chooserTitle,
+ final boolean peek,
+ final boolean boolResult) {
final CordovaInterface mycordova = cordova;
final CordovaPlugin plugin = this;
@@ -222,6 +267,7 @@ public class SocialSharing extends CordovaPlugin {
if (notEmpty(subject)) {
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
}
+
// add the URL to the message, as there seems to be no separate field
if (notEmpty(url)) {
if (notEmpty(message)) {
@@ -238,6 +284,9 @@ public class SocialSharing extends CordovaPlugin {
}
}
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
if (appPackageName != null) {
String packageName = appPackageName;
String passedActivityName = null;
@@ -254,7 +303,13 @@ public class SocialSharing extends CordovaPlugin {
sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
sendIntent.setComponent(new ComponentName(activity.applicationInfo.packageName,
passedActivityName != null ? passedActivityName : activity.name));
- mycordova.startActivityForResult(plugin, sendIntent, 0);
+
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ mycordova.startActivityForResult(plugin, sendIntent, 0);
+ }
+ });
if (pasteMessage != null) {
// add a little delay because target app (facebook only atm) needs to be started first
@@ -275,7 +330,13 @@ public class SocialSharing extends CordovaPlugin {
if (peek) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
} else {
- mycordova.startActivityForResult(plugin, Intent.createChooser(sendIntent, null), 1);
+ // experimenting a bit
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ mycordova.startActivityForResult(plugin, Intent.createChooser(sendIntent, chooserTitle), boolResult ? ACTIVITY_CODE_SEND__BOOLRESULT : ACTIVITY_CODE_SEND__OBJECT);
+ }
+ });
}
}
}
@@ -306,7 +367,12 @@ public class SocialSharing extends CordovaPlugin {
private Uri getFileUriAndSetType(Intent sendIntent, String dir, String image, String subject, int nthFile) throws IOException {
// we're assuming an image, but this can be any filetype you like
String localImage = image;
- sendIntent.setType("image/*");
+ if (image.endsWith("mp4") || image.endsWith("mov") || image.endsWith("3gp")){
+ sendIntent.setType("video/*");
+ } else {
+ sendIntent.setType("image/*");
+ }
+
if (image.startsWith("http") || image.startsWith("www/")) {
String filename = getFileName(image);
localImage = "file://" + dir + "/" + filename;
@@ -319,6 +385,10 @@ public class SocialSharing extends CordovaPlugin {
Matcher matcher = dispositionPattern.matcher(disposition);
if (matcher.find()) {
filename = matcher.group(1).replaceAll("[^a-zA-Z0-9._-]", "");
+ if (filename.length() == 0) {
+ // in this case we can't determine a filetype so some targets (gmail) may not render it correctly
+ filename = "file";
+ }
localImage = "file://" + dir + "/" + filename;
}
}
@@ -365,10 +435,160 @@ public class SocialSharing extends CordovaPlugin {
localImage = "file://" + dir + "/" + fileName;
} else if (!image.startsWith("file://")) {
throw new IllegalArgumentException("URL_NOT_SUPPORTED");
+ } else {
+ //get file MIME type
+ String type = getMIMEType(image);
+ //set intent data and Type
+ sendIntent.setType(type);
}
return Uri.parse(localImage);
}
+ private String getMIMEType(String fileName) {
+ String type = "*/*";
+ int dotIndex = fileName.lastIndexOf(".");
+ if (dotIndex == -1) {
+ return type;
+ }
+ final String end = fileName.substring(dotIndex+1, fileName.length()).toLowerCase();
+ String fromMap = MIME_Map.get(end);
+ return fromMap == null ? type : fromMap;
+ }
+
+ private static final Map<String, String> MIME_Map = new HashMap<String, String>();
+ static {
+ MIME_Map.put("3gp", "video/3gpp");
+ MIME_Map.put("apk", "application/vnd.android.package-archive");
+ MIME_Map.put("asf", "video/x-ms-asf");
+ MIME_Map.put("avi", "video/x-msvideo");
+ MIME_Map.put("bin", "application/octet-stream");
+ MIME_Map.put("bmp", "image/bmp");
+ MIME_Map.put("c", "text/plain");
+ MIME_Map.put("class", "application/octet-stream");
+ MIME_Map.put("conf", "text/plain");
+ MIME_Map.put("cpp", "text/plain");
+ MIME_Map.put("doc", "application/msword");
+ MIME_Map.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
+ MIME_Map.put("xls", "application/vnd.ms-excel");
+ MIME_Map.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ MIME_Map.put("exe", "application/octet-stream");
+ MIME_Map.put("gif", "image/gif");
+ MIME_Map.put("gtar", "application/x-gtar");
+ MIME_Map.put("gz", "application/x-gzip");
+ MIME_Map.put("h", "text/plain");
+ MIME_Map.put("htm", "text/html");
+ MIME_Map.put("html", "text/html");
+ MIME_Map.put("jar", "application/java-archive");
+ MIME_Map.put("java", "text/plain");
+ MIME_Map.put("jpeg", "image/jpeg");
+ MIME_Map.put("jpg", "image/*");
+ MIME_Map.put("js", "application/x-javascript");
+ MIME_Map.put("log", "text/plain");
+ MIME_Map.put("m3u", "audio/x-mpegurl");
+ MIME_Map.put("m4a", "audio/mp4a-latm");
+ MIME_Map.put("m4b", "audio/mp4a-latm");
+ MIME_Map.put("m4p", "audio/mp4a-latm");
+ MIME_Map.put("m4u", "video/vnd.mpegurl");
+ MIME_Map.put("m4v", "video/x-m4v");
+ MIME_Map.put("mov", "video/quicktime");
+ MIME_Map.put("mp2", "audio/x-mpeg");
+ MIME_Map.put("mp3", "audio/x-mpeg");
+ MIME_Map.put("mp4", "video/mp4");
+ MIME_Map.put("mpc", "application/vnd.mpohun.certificate");
+ MIME_Map.put("mpe", "video/mpeg");
+ MIME_Map.put("mpeg", "video/mpeg");
+ MIME_Map.put("mpg", "video/mpeg");
+ MIME_Map.put("mpg4", "video/mp4");
+ MIME_Map.put("mpga", "audio/mpeg");
+ MIME_Map.put("msg", "application/vnd.ms-outlook");
+ MIME_Map.put("ogg", "audio/ogg");
+ MIME_Map.put("pdf", "application/pdf");
+ MIME_Map.put("png", "image/png");
+ MIME_Map.put("pps", "application/vnd.ms-powerpoint");
+ MIME_Map.put("ppt", "application/vnd.ms-powerpoint");
+ MIME_Map.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
+ MIME_Map.put("prop", "text/plain");
+ MIME_Map.put("rc", "text/plain");
+ MIME_Map.put("rmvb", "audio/x-pn-realaudio");
+ MIME_Map.put("rtf", "application/rtf");
+ MIME_Map.put("sh", "text/plain");
+ MIME_Map.put("tar", "application/x-tar");
+ MIME_Map.put("tgz", "application/x-compressed");
+ MIME_Map.put("txt", "text/plain");
+ MIME_Map.put("wav", "audio/x-wav");
+ MIME_Map.put("wma", "audio/x-ms-wma");
+ MIME_Map.put("wmv", "audio/x-ms-wmv");
+ MIME_Map.put("wps", "application/vnd.ms-works");
+ MIME_Map.put("xml", "text/plain");
+ MIME_Map.put("z", "application/x-compress");
+ MIME_Map.put("zip", "application/x-zip-compressed");
+ MIME_Map.put("", "*/*");
+ }
+
+ private boolean shareViaWhatsAppDirectly(final CallbackContext callbackContext, String message, final String subject, final JSONArray files, final String url, final String number) {
+ // add the URL to the message, as there seems to be no separate field
+ if (notEmpty(url)) {
+ if (notEmpty(message)) {
+ message += " " + url;
+ } else {
+ message = url;
+ }
+ }
+ final String shareMessage = message;
+ final SocialSharing plugin = this;
+ cordova.getThreadPool().execute(new SocialSharingRunnable(callbackContext) {
+ public void run() {
+ final Intent intent = new Intent(Intent.ACTION_SENDTO);
+ intent.setData(Uri.parse("smsto:" + number));
+
+ intent.putExtra("sms_body", shareMessage);
+ intent.putExtra("sms_subject", subject);
+ intent.setPackage("com.whatsapp");
+
+ try {
+ if (files.length() > 0 && !"".equals(files.getString(0))) {
+ final boolean hasMultipleAttachments = files.length() > 1;
+ final String dir = getDownloadDir();
+ if (dir != null) {
+ ArrayList<Uri> fileUris = new ArrayList<Uri>();
+ Uri fileUri = null;
+ for (int i = 0; i < files.length(); i++) {
+ fileUri = getFileUriAndSetType(intent, dir, files.getString(i), subject, i);
+ if (fileUri != null) {
+ fileUris.add(fileUri);
+ }
+ }
+ if (!fileUris.isEmpty()) {
+ if (hasMultipleAttachments) {
+ intent.putExtra(Intent.EXTRA_STREAM, fileUris);
+ } else {
+ intent.putExtra(Intent.EXTRA_STREAM, fileUri);
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ try {
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ // update: didn't help (doesn't seem to hurt either though)
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ // as an experiment for #300 we're explicitly running it on the ui thread here
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ cordova.startActivityForResult(plugin, intent, ACTIVITY_CODE_SENDVIAWHATSAPP);
+ }
+ });
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ return true;
+ }
+
private boolean invokeSMSIntent(final CallbackContext callbackContext, JSONObject options, String p_phonenumbers) {
final String message = options.optString("message");
// TODO test this on a real SMS enabled device before releasing it
@@ -404,6 +624,9 @@ public class SocialSharing extends CordovaPlugin {
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
}
}
+ // this was added to start the intent in a new window as suggested in #300 to prevent crashes upon return
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
cordova.startActivityForResult(plugin, intent, 0);
} catch (Exception e) {
callbackContext.error(e.getMessage());
@@ -451,10 +674,26 @@ public class SocialSharing extends CordovaPlugin {
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (_callbackContext != null) {
- if (ACTIVITY_CODE_SENDVIAEMAIL == requestCode) {
- _callbackContext.success();
- } else {
- _callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, resultCode == Activity.RESULT_OK));
+ switch (requestCode) {
+ case ACTIVITY_CODE_SEND__BOOLRESULT:
+ _callbackContext.sendPluginResult(new PluginResult(
+ PluginResult.Status.OK,
+ resultCode == Activity.RESULT_OK));
+ break;
+ case ACTIVITY_CODE_SEND__OBJECT:
+ JSONObject json = new JSONObject();
+ try {
+ json.put("completed", resultCode == Activity.RESULT_OK);
+ json.put("app", ""); // we need a completely different approach if we want to support this on Android. Idea: https://clickclickclack.wordpress.com/2012/01/03/intercepting-androids-action_send-intents/
+ _callbackContext.sendPluginResult(new PluginResult(
+ PluginResult.Status.OK,
+ json));
+ } catch (JSONException e) {
+ _callbackContext.error(e.getMessage());
+ }
+ break;
+ default:
+ _callbackContext.success();
}
}
}
@@ -471,13 +710,16 @@ public class SocialSharing extends CordovaPlugin {
}
private static String getFileName(String url) {
+ if (url.endsWith("/")) {
+ url = url.substring(0, url.length()-1);
+ }
final String pattern = ".*/([^?#]+)?";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(url);
if (m.find()) {
return m.group(1);
} else {
- return null;
+ return "file";
}
}
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.h b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.h
new file mode 100644
index 00000000..d7da331d
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.h
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+
+@interface NSString (URLEncoding)
+@property (readonly) NSString *URLEncodedString;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.m b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.m
new file mode 100644
index 00000000..b737626c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.m
@@ -0,0 +1,30 @@
+#import "NSString+URLEncoding.h"
+
+@implementation NSString (URLEncoding)
+- (NSString*)URLEncodedString
+{
+ NSString* result = (NSString *)CFBridgingRelease(
+ CFURLCreateStringByAddingPercentEscapes(
+ kCFAllocatorDefault,
+ (CFStringRef)self,
+ CFSTR("#%"), // don't escape these
+ NULL, // allow escaping these
+ kCFStringEncodingUTF8
+ )
+ );
+
+ // we may have a URL with more than one '#' now - which iOS doesn't allow, so escape all but the first one
+ NSArray *parts = [result componentsSeparatedByString:@"#"];
+ NSString *finalResult = parts[0];
+ for (int i=1; i<parts.count; i++) {
+ NSString *part = [parts objectAtIndex:i];
+ if (i==1) {
+ finalResult = [finalResult stringByAppendingString:@"#"];
+ } else {
+ finalResult = [finalResult stringByAppendingString:@"%23"];
+ }
+ finalResult = [finalResult stringByAppendingString:part];
+ }
+ return finalResult;
+}
+@end \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.h b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.h
index b51474d3..0c731450 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.h
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.h
@@ -4,13 +4,14 @@
@interface SocialSharing : CDVPlugin <UIPopoverControllerDelegate, MFMailComposeViewControllerDelegate, UIDocumentInteractionControllerDelegate>
@property (nonatomic, strong) MFMailComposeViewController *globalMailComposer;
-@property (retain) UIDocumentInteractionController * documentInteractionController;
+@property (nonatomic, strong) UIDocumentInteractionController * documentInteractionController;
@property (retain) NSString * tempStoredFile;
@property (retain) CDVInvokedUrlCommand * command;
- (void)available:(CDVInvokedUrlCommand*)command;
- (void)setIPadPopupCoordinates:(CDVInvokedUrlCommand*)command;
- (void)share:(CDVInvokedUrlCommand*)command;
+- (void)shareWithOptions:(CDVInvokedUrlCommand*)command;
- (void)canShareVia:(CDVInvokedUrlCommand*)command;
- (void)canShareViaEmail:(CDVInvokedUrlCommand*)command;
- (void)shareVia:(CDVInvokedUrlCommand*)command;
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m
index cd0913a4..014925bd 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m
@@ -1,4 +1,5 @@
#import "SocialSharing.h"
+#import "NSString+URLEncoding.h"
#import <Cordova/CDV.h>
#import <Social/Social.h>
#import <Foundation/NSException.h>
@@ -6,6 +7,11 @@
#import <MessageUI/MFMailComposeViewController.h>
#import <MobileCoreServices/MobileCoreServices.h>
+static NSString *const kShareOptionMessage = @"message";
+static NSString *const kShareOptionSubject = @"subject";
+static NSString *const kShareOptionFiles = @"files";
+static NSString *const kShareOptionUrl = @"url";
+
@implementation SocialSharing {
UIPopoverController *_popover;
NSString *_popupCoordinates;
@@ -51,23 +57,46 @@
}
- (void)share:(CDVInvokedUrlCommand*)command {
+ [self shareInternal:command
+ withOptions:@{
+ kShareOptionMessage: [command.arguments objectAtIndex:0],
+ kShareOptionSubject: [command.arguments objectAtIndex:1],
+ kShareOptionFiles: [command.arguments objectAtIndex:2],
+ kShareOptionUrl: [command.arguments objectAtIndex:3]
+ }
+ isBooleanResponse:YES
+];
+}
+
+- (void)shareWithOptions:(CDVInvokedUrlCommand*)command {
+ NSDictionary* options = [command.arguments objectAtIndex:0];
+ [self shareInternal:command
+ withOptions:options
+ isBooleanResponse:NO
+ ];
+}
+
+- (void)shareInternal:(CDVInvokedUrlCommand*)command withOptions:(NSDictionary*)options isBooleanResponse:(BOOL)boolResponse {
[self.commandDelegate runInBackground:^{ //avoid main thread block especially if sharing big files from url
if (!NSClassFromString(@"UIActivityViewController")) {
CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"not available"];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
return;
}
-
- NSString *message = [command.arguments objectAtIndex:0];
- NSString *subject = [command.arguments objectAtIndex:1];
- NSArray *filenames = [command.arguments objectAtIndex:2];
- NSString *urlString = [command.arguments objectAtIndex:3];
-
+
+ NSString *message = options[kShareOptionMessage];
+ NSString *subject = options[kShareOptionSubject];
+ NSArray *filenames = options[kShareOptionFiles];
+ NSString *urlString = options[kShareOptionUrl];
+
NSMutableArray *activityItems = [[NSMutableArray alloc] init];
+
+ if (message != (id)[NSNull null] && message != nil) {
[activityItems addObject:message];
-
- NSMutableArray *files = [[NSMutableArray alloc] init];
- if (filenames != (id)[NSNull null] && filenames.count > 0) {
+ }
+
+ if (filenames != (id)[NSNull null] && filenames != nil && filenames.count > 0) {
+ NSMutableArray *files = [[NSMutableArray alloc] init];
for (NSString* filename in filenames) {
NSObject *file = [self getImage:filename];
if (file == nil) {
@@ -79,31 +108,47 @@
}
[activityItems addObjectsFromArray:files];
}
-
- if (urlString != (id)[NSNull null]) {
- [activityItems addObject:[NSURL URLWithString:urlString]];
+
+ if (urlString != (id)[NSNull null] && urlString != nil) {
+ [activityItems addObject:[NSURL URLWithString:[urlString URLEncodedString]]];
}
-
+
UIActivity *activity = [[UIActivity alloc] init];
NSArray *applicationActivities = [[NSArray alloc] initWithObjects:activity, nil];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];
- if (subject != (id)[NSNull null]) {
+ if (subject != (id)[NSNull null] && subject != nil) {
[activityVC setValue:subject forKey:@"subject"];
}
-
- // TODO deprecated in iOS 8.0, change this some day
- [activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
- [self cleanupStoredFiles];
- NSLog(@"SocialSharing app selected: %@", activityType);
- CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:completed];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-
+
+ if ([activityVC respondsToSelector:(@selector(setCompletionWithItemsHandler:))]) {
+ [activityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray * returnedItems, NSError * activityError) {
+ [self cleanupStoredFiles];
+ if (boolResponse) {
+ [self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:completed]
+ callbackId:command.callbackId];
+ } else {
+ NSDictionary * result = @{@"completed":@(completed), @"app":activityType == nil ? @"" : activityType};
+ [self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:result]
+ callbackId:command.callbackId];
+ }
+ }];
+ } else {
+ // let's suppress this warning otherwise folks will start opening issues while it's not relevant
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ [activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
+ [self cleanupStoredFiles];
+ NSDictionary * result = @{@"completed":@(completed), @"app":activityType};
+ CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:result];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+#pragma GCC diagnostic warning "-Wdeprecated-declarations"
+ }
+
NSArray * socialSharingExcludeActivities = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"SocialSharingExcludeActivities"];
if (socialSharingExcludeActivities!=nil && [socialSharingExcludeActivities count] > 0) {
activityVC.excludedActivityTypes = socialSharingExcludeActivities;
}
-
+
dispatch_async(dispatch_get_main_queue(), ^(void){
// iPad on iOS >= 8 needs a different approach
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
@@ -230,27 +275,27 @@
- (void)shareViaInternal:(CDVInvokedUrlCommand*)command
type:(NSString *) type {
-
+
NSString *message = [command.arguments objectAtIndex:0];
// subject is not supported by the SLComposeViewController
NSArray *filenames = [command.arguments objectAtIndex:2];
NSString *urlString = [command.arguments objectAtIndex:3];
-
+
// boldly invoke the target app, because the phone will display a nice message asking to configure the app
SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:type];
if (message != (id)[NSNull null]) {
[composeViewController setInitialText:message];
}
-
+
for (NSString* filename in filenames) {
UIImage* image = [self getImage:filename];
if (image != nil) {
[composeViewController addImage:image];
}
}
-
+
if (urlString != (id)[NSNull null]) {
- [composeViewController addURL:[NSURL URLWithString:urlString]];
+ [composeViewController addURL:[NSURL URLWithString:[urlString URLEncodedString]]];
}
[composeViewController setCompletionHandler:^(SLComposeViewControllerResult result) {
@@ -272,7 +317,7 @@
- (void)shareViaEmail:(CDVInvokedUrlCommand*)command {
if ([self isEmailAvailable]) {
-
+
if (TARGET_IPHONE_SIMULATOR && IsAtLeastiOSVersion(@"8.0")) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SocialSharing plugin"
message:@"Sharing via email is not supported on the iOS 8 simulator."
@@ -282,38 +327,40 @@
[alert show];
return;
}
-
+
+ [self cycleTheGlobalMailComposer];
+
self.globalMailComposer.mailComposeDelegate = self;
-
+
if ([command.arguments objectAtIndex:0] != (id)[NSNull null]) {
NSString *message = [command.arguments objectAtIndex:0];
BOOL isHTML = [message rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch].location != NSNotFound;
[self.globalMailComposer setMessageBody:message isHTML:isHTML];
}
-
+
if ([command.arguments objectAtIndex:1] != (id)[NSNull null]) {
[self.globalMailComposer setSubject: [command.arguments objectAtIndex:1]];
}
-
+
if ([command.arguments objectAtIndex:2] != (id)[NSNull null]) {
[self.globalMailComposer setToRecipients:[command.arguments objectAtIndex:2]];
}
-
+
if ([command.arguments objectAtIndex:3] != (id)[NSNull null]) {
[self.globalMailComposer setCcRecipients:[command.arguments objectAtIndex:3]];
}
-
+
if ([command.arguments objectAtIndex:4] != (id)[NSNull null]) {
[self.globalMailComposer setBccRecipients:[command.arguments objectAtIndex:4]];
}
-
+
if ([command.arguments objectAtIndex:5] != (id)[NSNull null]) {
NSArray* attachments = [command.arguments objectAtIndex:5];
NSFileManager* fileManager = [NSFileManager defaultManager];
for (NSString* path in attachments) {
NSURL *file = [self getFile:path];
NSData* data = [fileManager contentsAtPath:file.path];
-
+
NSString* fileName;
NSString* mimeType;
NSString* basename = [self getBasenameFromAttachmentPath:path];
@@ -331,14 +378,14 @@
[self.globalMailComposer addAttachmentData:data mimeType:mimeType fileName:fileName];
}
}
-
+
// remember the command, because we need it in the didFinishWithResult method
_command = command;
[self.commandDelegate runInBackground:^{
[[self getTopMostViewController] presentViewController:self.globalMailComposer animated:YES completion:nil];
}];
-
+
} else {
CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"not available"];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
@@ -358,7 +405,7 @@
NSString* pathWithoutPrefix = [path stringByReplacingOccurrencesOfString:@"base64:" withString:@""];
return [pathWithoutPrefix substringToIndex:[pathWithoutPrefix rangeOfString:@"//"].location];
}
- return path;
+ return [path componentsSeparatedByString: @"?"][0];
}
- (NSString*) getMimeTypeFromFileExtension:(NSString*)extension {
@@ -406,7 +453,7 @@
NSString *message = [options objectForKey:@"message"];
NSString *subject = [options objectForKey:@"subject"];
NSString *image = [options objectForKey:@"image"];
-
+
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = (id) self;
if (message != (id)[NSNull null]) {
@@ -424,7 +471,7 @@
}
}
}
-
+
if (phonenumbers != (id)[NSNull null]) {
[picker setRecipients:[phonenumbers componentsSeparatedByString:@","]];
}
@@ -469,7 +516,7 @@
}
- (void)shareViaInstagram:(CDVInvokedUrlCommand*)command {
-
+
// on iOS9 canShareVia('instagram'..) will only work if instagram:// is whitelisted.
// If it's not, this method will ask permission to the user on iOS9 for opening the app,
// which is of course better than Instagram sharing not working at all because you forgot to whitelist it.
@@ -492,7 +539,7 @@
image = [self getImage:filename];
break;
}
-
+
// NSData *imageObj = [NSData dataFromBase64String:objectAtIndex0];
NSString *tmpDir = NSTemporaryDirectory();
NSString *path = [tmpDir stringByAppendingPathComponent:@"instagram.igo"];
@@ -513,11 +560,15 @@
// remember the command for the delegate method
_command = command;
- [_documentInteractionController presentOpenInMenuFromRect:CGRectZero inView:self.webView animated:YES];
+
+ // test for #513
+ dispatch_async(dispatch_get_main_queue(), ^(void){
+ [_documentInteractionController presentOpenInMenuFromRect:CGRectZero inView:self.webView animated:YES];
+ });
}
- (void)shareViaWhatsApp:(CDVInvokedUrlCommand*)command {
-
+
// on iOS9 canShareVia('whatsapp'..) will only work if whatsapp:// is whitelisted.
// If it's not, this method will ask permission to the user on iOS9 for opening the app,
// which is of course better than WhatsApp sharing not working at all because you forgot to whitelist it.
@@ -534,6 +585,7 @@
// subject is not supported by the SLComposeViewController
NSArray *filenames = [command.arguments objectAtIndex:2];
NSString *urlString = [command.arguments objectAtIndex:3];
+ NSString *abid = [command.arguments objectAtIndex:4];
// only use the first image (for now.. maybe we can share in a loop?)
UIImage* image = nil;
@@ -561,14 +613,18 @@
if ([shareString isEqual: @""]) {
shareString = urlString;
} else {
- shareString = [NSString stringWithFormat:@"%@ %@", shareString, urlString];
+ shareString = [NSString stringWithFormat:@"%@ %@", shareString, [urlString URLEncodedString]];
}
}
NSString * encodedShareString = [shareString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// also encode the '=' character
encodedShareString = [encodedShareString stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"];
encodedShareString = [encodedShareString stringByReplacingOccurrencesOfString:@"&" withString:@"%26"];
- NSString * encodedShareStringForWhatsApp = [NSString stringWithFormat:@"whatsapp://send?text=%@", encodedShareString];
+ NSString * abidString = @"";
+ if (abid != (id)[NSNull null]) {
+ abidString = [NSString stringWithFormat:@"abid=%@&", abid];
+ }
+ NSString * encodedShareStringForWhatsApp = [NSString stringWithFormat:@"whatsapp://send?%@text=%@", abidString, encodedShareString];
NSURL *whatsappURL = [NSURL URLWithString:encodedShareStringForWhatsApp];
[[UIApplication sharedApplication] openURL: whatsappURL];
@@ -641,7 +697,8 @@
if ([fileName hasPrefix:@"http"]) {
NSURL *url = [NSURL URLWithString:fileName];
NSData *fileData = [NSData dataWithContentsOfURL:url];
- file = [NSURL fileURLWithPath:[self storeInFile:(NSString*)[[fileName componentsSeparatedByString: @"/"] lastObject] fileData:fileData]];
+ NSString *name = (NSString*)[[fileName componentsSeparatedByString: @"/"] lastObject];
+ file = [NSURL fileURLWithPath:[self storeInFile:[name componentsSeparatedByString: @"?"][0] fileData:fileData]];
} else if ([fileName hasPrefix:@"www/"]) {
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", bundlePath, fileName];
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/windows/SocialSharingProxy.js b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/windows/SocialSharingProxy.js
index 99e0af15..ff257d52 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/windows/SocialSharingProxy.js
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/windows/SocialSharingProxy.js
@@ -10,6 +10,36 @@ module.exports = {
var fileOrFileArray = args[2];
//Web link
var url = args[3];
+
+ var folder = Windows.Storage.ApplicationData.current.temporaryFolder;
+
+ var getExtension = function (strBase64) {
+ return strBase64.substring(strBase64.indexOf("/") + 1, strBase64.indexOf(";base64"));
+ };
+
+ var replaceAll = function (str, find, replace) {
+ return str.replace(new RegExp(find, 'g'), replace);
+ };
+
+ var sanitizeFilename = function (name) {
+ return replaceAll(name, "[:\\\\/*?|<> ]", "_");
+ };
+
+ var getFileName = function (position, fileExtension) {
+ var fileName = (subject ? sanitizeFilename(subject) : "file") + (position == 0 ? "" : "_" + position) + "." + fileExtension;
+ return fileName;
+ };
+
+ var createTemporalFile = function (fileName, buffer) {
+
+ var filePath = "";
+ return folder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
+ filePath = file.path;
+ return Windows.Storage.FileIO.writeBufferAsync(file, buffer);
+ }).then(function(){
+ return Windows.Storage.StorageFile.getFileFromPathAsync(filePath);
+ });
+ };
var doShare = function (e) {
e.request.data.properties.title = subject?subject: "Sharing";
@@ -19,25 +49,49 @@ module.exports = {
var deferral = e.request.getDeferral();
var storageItems = [];
var filesCount = fileOrFileArray.length;
+
+ var completeFile = function () {
+ if (!--filesCount) {
+ storageItems.length && e.request.data.setStorageItems(storageItems);
+ deferral.complete();
+ }
+ };
+
for (var i = 0; i < fileOrFileArray.length; i++) {
- Windows.Storage.StorageFile.getFileFromPathAsync(fileOrFileArray[i]).done(
- function (file) {
- storageItems.push(file);
- if (!--filesCount) {
- e.request.data.setStorageItems(storageItems);
- deferral.complete();
- }
- },
- function() {
- if (!--filesCount) {
- e.request.data.setStorageItems(storageItems);
- deferral.complete();
+
+ var file = fileOrFileArray[i];
+ if (file.indexOf("data:") >= 0) {
+ var fileName = getFileName(i, getExtension(file));
+ var buffer = Windows.Security.Cryptography.CryptographicBuffer.decodeFromBase64String(file.split(',')[1]);
+ if (buffer) {
+ createTemporalFile(fileName, buffer).done(
+ function (file) {
+ storageItems.push(file);
+ completeFile();
+ },
+ function () {
+ completeFile();
+ }
+ );
+ }
+ else {
+ completeFile();
+ }
+ }
+ else {
+ Windows.Storage.StorageFile.getFileFromPathAsync(file).done(
+ function (file) {
+ storageItems.push(file);
+ completeFile();
+ },
+ function () {
+ completeFile();
}
- }
- );
+ );
+ }
}
}
- }
+ };
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
@@ -96,7 +150,7 @@ module.exports = {
);
}
}
- }
+ };
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/wp8/SocialSharing.cs b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/wp8/SocialSharing.cs
index 1a165127..9d63b2f4 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/wp8/SocialSharing.cs
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/wp8/SocialSharing.cs
@@ -26,7 +26,7 @@ namespace Cordova.Extension.Commands
var files = JsonHelper.Deserialize<string[]>(options[2]);
var link = options[3];
- if (!"null".Equals(link))
+ if (link != null && !"null".Equals(link))
{
ShareLinkTask shareLinkTask = new ShareLinkTask();
shareLinkTask.Title = title;
@@ -100,4 +100,4 @@ namespace Cordova.Extension.Commands
public string message { get; set; }
}
-} \ No newline at end of file
+}
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/plugin.xml b/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/plugin.xml
index 1ccb2217..1ccb2217 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/plugin.xml
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/plugin.xml
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/test.js b/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/test.js
index 630899db..ad1a8229 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/test.js
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/tests/test.js
@@ -1,4 +1,4 @@
-/**
+/**
* Jasmine Based test suites
*
* Several of SocialSharing APIs cannot be automatically tested, because
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js b/StoneIsland/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
index 6ccd567b..3fc9bb92 100755..100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js
@@ -1,6 +1,4 @@
-var cordova = require('cordova');
-
-function SocialSharing() {
+function SocialSharing() {
}
// Override this method (after deviceready) to set the location where you want the iPad popup arrow to appear.
@@ -25,6 +23,11 @@ SocialSharing.prototype.available = function (callback) {
}, null, "SocialSharing", "available", []);
};
+// this is the recommended way to share as it is the most feature-rich with respect to what you pass in and get back
+SocialSharing.prototype.shareWithOptions = function (options, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareWithOptions"), "SocialSharing", "shareWithOptions", [options]);
+};
+
SocialSharing.prototype.share = function (message, subject, fileOrFileArray, url, successCallback, errorCallback) {
cordova.exec(successCallback, this._getErrorCallback(errorCallback, "share"), "SocialSharing", "share", [message, subject, this._asArray(fileOrFileArray), url]);
};
@@ -49,7 +52,11 @@ SocialSharing.prototype.shareViaFacebookWithPasteMessageHint = function (message
};
SocialSharing.prototype.shareViaWhatsApp = function (message, fileOrFileArray, url, successCallback, errorCallback) {
- cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url]);
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsApp"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, null]);
+};
+
+SocialSharing.prototype.shareViaWhatsAppToReceiver = function (receiver, message, fileOrFileArray, url, successCallback, errorCallback) {
+ cordova.exec(successCallback, this._getErrorCallback(errorCallback, "shareViaWhatsAppToReceiver"), "SocialSharing", "shareViaWhatsApp", [message, null, this._asArray(fileOrFileArray), url, receiver]);
};
SocialSharing.prototype.shareViaSMS = function (options, phonenumbers, successCallback, errorCallback) {
@@ -112,4 +119,4 @@ SocialSharing.install = function () {
return window.plugins.socialsharing;
};
-cordova.addConstructor(SocialSharing.install);
+cordova.addConstructor(SocialSharing.install); \ No newline at end of file
diff --git a/StoneIsland/plugins/fetch.json b/StoneIsland/plugins/fetch.json
index cb0dbc6f..38f9ef54 100755
--- a/StoneIsland/plugins/fetch.json
+++ b/StoneIsland/plugins/fetch.json
@@ -1,40 +1,54 @@
{
- "cordova-plugin-geolocation": {
+ "com.parse.cordova.core.pushplugin": {
+ "source": {
+ "type": "git",
+ "url": "https://github.com/grrrian/phonegap-parse-plugin",
+ "subdir": "."
+ },
+ "is_top_level": true,
+ "variables": {
+ "APP_ID": "GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB",
+ "CLIENT_KEY": "hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv"
+ }
+ },
+ "cordova-plugin-inappbrowser": {
"source": {
"type": "registry",
- "id": "cordova-plugin-geolocation"
+ "id": "cordova-plugin-inappbrowser@1.5.0"
},
"is_top_level": true,
"variables": {}
},
- "cordova-plugin-splashscreen": {
+ "cordova-plugin-x-socialsharing": {
"source": {
"type": "registry",
- "id": "cordova-plugin-splashscreen"
+ "id": "cordova-plugin-x-socialsharing"
},
"is_top_level": true,
"variables": {}
},
- "cordova-plugin-dialogs": {
+ "cordova-plugin-customurlscheme": {
"source": {
"type": "registry",
- "id": "cordova-plugin-dialogs"
+ "id": "cordova-plugin-customurlscheme"
},
"is_top_level": true,
- "variables": {}
+ "variables": {
+ "URL_SCHEME": "stoneisland"
+ }
},
- "cordova-plugin-network-information": {
+ "phonegap-plugin-push": {
"source": {
"type": "registry",
- "id": "cordova-plugin-network-information"
+ "id": "phonegap-plugin-push@1.8.4"
},
"is_top_level": true,
"variables": {}
},
- "cordova-plugin-device": {
+ "cordova-plugin-whitelist": {
"source": {
"type": "registry",
- "id": "cordova-plugin-device"
+ "id": "cordova-plugin-whitelist@1"
},
"is_top_level": true,
"variables": {}
@@ -47,66 +61,60 @@
"is_top_level": true,
"variables": {}
},
- "com.ionic.keyboard": {
+ "cordova-plugin-device": {
"source": {
"type": "registry",
- "id": "com.ionic.keyboard"
+ "id": "cordova-plugin-device"
},
"is_top_level": true,
"variables": {}
},
- "cordova-plugin-whitelist": {
+ "cordova-plugin-network-information": {
"source": {
"type": "registry",
- "id": "cordova-plugin-whitelist@1"
+ "id": "cordova-plugin-network-information"
},
"is_top_level": true,
"variables": {}
},
- "phonegap-plugin-push": {
+ "cordova-plugin-dialogs": {
"source": {
"type": "registry",
- "id": "phonegap-plugin-push"
+ "id": "cordova-plugin-dialogs"
},
"is_top_level": true,
"variables": {}
},
- "cordova-plugin-customurlscheme": {
+ "cordova-plugin-splashscreen": {
"source": {
"type": "registry",
- "id": "cordova-plugin-customurlscheme"
+ "id": "cordova-plugin-splashscreen@4.0.0"
},
"is_top_level": true,
- "variables": {
- "URL_SCHEME": "stoneisland"
- }
+ "variables": {}
},
- "cordova-plugin-x-socialsharing": {
+ "cordova-plugin-geolocation": {
"source": {
"type": "registry",
- "id": "cordova-plugin-x-socialsharing"
+ "id": "cordova-plugin-geolocation"
},
"is_top_level": true,
"variables": {}
},
- "cordova-plugin-inappbrowser": {
+ "cordova-plugin-compat": {
"source": {
"type": "registry",
- "id": "cordova-plugin-inappbrowser"
+ "id": "cordova-plugin-compat"
},
- "is_top_level": true,
+ "is_top_level": false,
"variables": {}
},
- "com.parse.cordova.core.pushplugin": {
+ "ionic-plugin-keyboard": {
"source": {
- "type": "git",
- "url": "https://github.com/grrrian/phonegap-parse-plugin",
- "subdir": "."
+ "type": "registry",
+ "id": "ionic-plugin-keyboard"
},
"is_top_level": true,
- "variables": {
- "APP_ID": "GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB",
- "CLIENT_KEY": "hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv"
- }
+ "variables": {}
}
} \ No newline at end of file
diff --git a/StoneIsland/plugins/com.ionic.keyboard/LICENSE b/StoneIsland/plugins/ionic-plugin-keyboard/LICENSE
index d6f545b8..d6f545b8 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/LICENSE
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/LICENSE
diff --git a/StoneIsland/plugins/com.ionic.keyboard/README.md b/StoneIsland/plugins/ionic-plugin-keyboard/README.md
index 63f70012..44dbda02 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/README.md
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/README.md
@@ -3,7 +3,7 @@ Keyboard
The `cordova.plugins.Keyboard` object provides functions to make interacting with the keyboard easier, and fires events to indicate that the keyboard will hide/show.
- cordova plugin add com.ionic.keyboard
+ cordova plugin add ionic-plugin-keyboard
Methods
-------
@@ -27,6 +27,9 @@ These events are fired on the window.
* A number `keyboardHeight` is given on the event object, which is the pixel height of the keyboard.
- native.keyboardhide
+
+# API reference
+
Keyboard.hideKeyboardAccessoryBar
=================
@@ -51,13 +54,15 @@ Close the keyboard if it is open.
Supported Platforms
-------------------
-- iOS, Android, Blackberry 10
+- iOS, Android, Blackberry 10, Windows
Keyboard.disableScroll
=================
-Disable native scrolling, useful if you are using JavaScript to scroll
+Prevent the native UIScrollView from moving when an input is focused. The telltale sign that this is happening is the top of your app scrolls out of view (if using Ionic, your header bar will disappear).
+
+This does *not* prevent any DOM elements from being able to scroll. That needs to happen from CSS and JavaScript, not this plugin.
cordova.plugins.Keyboard.disableScroll(true);
cordova.plugins.Keyboard.disableScroll(false);
@@ -65,23 +70,23 @@ Disable native scrolling, useful if you are using JavaScript to scroll
Supported Platforms
-------------------
-- iOS
+- iOS, Windows
Keyboard.show
=================
-Force keyboard to be shown on Android. This typically helps if autofocus on a text element does not pop up the keyboard automatically
+Force keyboard to be shown. This typically helps if autofocus on a text element does not pop up the keyboard automatically
cordova.plugins.Keyboard.show();
Supported Platforms
-- Android, Blackberry 10
+- Android, Blackberry 10, Windows
native.keyboardshow
=================
-This event fires when the keyboard will be shown
+This event fires when the keyboard will be shown or when the keyboard frame resizes (when switching between keyboards for example)
window.addEventListener('native.keyboardshow', keyboardShowHandler);
@@ -98,7 +103,7 @@ keyboardHeight: the height of the keyboard in pixels
Supported Platforms
-------------------
-- iOS, Android, Blackberry 10
+- iOS, Android, Blackberry 10, Windows
native.keyboardhide
@@ -120,4 +125,4 @@ None
Supported Platforms
-------------------
-- iOS, Android, Blackberry 10
+- iOS, Android, Blackberry 10, Windows
diff --git a/StoneIsland/plugins/ionic-plugin-keyboard/package.json b/StoneIsland/plugins/ionic-plugin-keyboard/package.json
new file mode 100644
index 00000000..7bfa4542
--- /dev/null
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "ionic-plugin-keyboard",
+ "version": "2.2.1",
+ "cordova": {
+ "id": "ionic-plugin-keyboard",
+ "platforms": [
+ "android",
+ "ios",
+ "blackberry10",
+ "wp8",
+ "windows"
+ ]
+ },
+ "description": "Ionic Keyboard Plugin",
+ "repository": "https://github.com/driftyco/ionic-plugin-keyboard.git",
+ "issue": "https://github.com/driftyco/ionic-plugin-keyboard/issues",
+ "keywords": [
+ "ionic",
+ "cordova",
+ "keyboard",
+ "ecosystem:cordova",
+ "cordova-android",
+ "cordova-ios",
+ "cordova-blackberry10",
+ "cordova-wp8",
+ "cordova-windows"
+ ],
+ "author": "Ionic",
+ "license": "Apache 2.0"
+}
diff --git a/StoneIsland/plugins/ionic-plugin-keyboard/plugin.xml b/StoneIsland/plugins/ionic-plugin-keyboard/plugin.xml
new file mode 100644
index 00000000..ae85ddfd
--- /dev/null
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/plugin.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
+ id="ionic-plugin-keyboard"
+ version="2.2.1">
+ <name>Keyboard</name>
+ <description>Ionic Keyboard Plugin</description>
+ <license>Apache 2.0</license>
+ <keywords>Ionic,keyboard</keywords>
+ <repo>https://github.com/driftyco/ionic-plugin-keyboard.git</repo>
+ <issue>https://github.com/driftyco/ionic-plugin-keyboard/issues</issue>
+
+
+ <!-- android -->
+ <platform name="android">
+ <js-module src="www/android/keyboard.js" name="keyboard">
+ <runs/>
+ <clobbers target="cordova.plugins.Keyboard" />
+ </js-module>
+ <config-file target="res/xml/config.xml" parent="/*">
+ <feature name="Keyboard">
+ <param name="android-package" value="io.ionic.keyboard.IonicKeyboard" />
+ <param name="onload" value="true" />
+ </feature>
+ </config-file>
+
+ <source-file src="src/android/IonicKeyboard.java" target-dir="src/io/ionic/keyboard" />
+ </platform>
+
+ <!-- ios -->
+ <platform name="ios">
+ <js-module src="www/ios/keyboard.js" name="keyboard">
+ <runs/>
+ <clobbers target="cordova.plugins.Keyboard" />
+ </js-module>
+ <config-file target="config.xml" parent="/*">
+ <feature name="Keyboard">
+ <param name="ios-package" value="IonicKeyboard" onload="true" />
+ </feature>
+ </config-file>
+ <header-file src="src/ios/IonicKeyboard.h" />
+ <source-file src="src/ios/IonicKeyboard.m" />
+ </platform>
+
+ <!-- browser -->
+ <platform name="browser">
+ <js-module src="www/browser/keyboard.js" name="keyboard">
+ <runs/>
+ <clobbers target="cordova.plugins.Keyboard" />
+ </js-module>
+ </platform>
+
+ <!-- blackberry10 -->
+ <platform name="blackberry10">
+ <source-file src="src/blackberry10/index.js" target-dir='Keyboard' />
+ <lib-file src="src/blackberry10/native/device/libKeyboard.so" arch="device"/>
+ <lib-file src="src/blackberry10/native/simulator/libKeyboard.so" arch="simulator"/>
+ <config-file target="www/config.xml" parent="/widget">
+ <feature name="Keyboard" value="io.ionic.keyboard"/>
+ </config-file>
+ </platform>
+
+ <!-- windows -->
+ <platform name="windows">
+ <js-module src="src/windows/KeyboardProxy.js" name="KeyboardProxy">
+ <runs />
+ <clobbers target="cordova.plugins.Keyboard" />
+ </js-module>
+ </platform>
+
+</plugin>
diff --git a/StoneIsland/plugins/ionic-plugin-keyboard/src/android/IonicKeyboard.java b/StoneIsland/plugins/ionic-plugin-keyboard/src/android/IonicKeyboard.java
new file mode 100644
index 00000000..128063b9
--- /dev/null
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/android/IonicKeyboard.java
@@ -0,0 +1,130 @@
+package io.ionic.keyboard;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.PluginResult;
+import org.apache.cordova.PluginResult.Status;
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+import android.view.inputmethod.InputMethodManager;
+
+// import additionally required classes for calculating screen height
+import android.view.Display;
+import android.graphics.Point;
+import android.os.Build;
+
+public class IonicKeyboard extends CordovaPlugin {
+
+ public void initialize(CordovaInterface cordova, CordovaWebView webView) {
+ super.initialize(cordova, webView);
+ }
+
+ public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
+ if ("close".equals(action)) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ //http://stackoverflow.com/a/7696791/1091751
+ InputMethodManager inputManager = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+ View v = cordova.getActivity().getCurrentFocus();
+
+ if (v == null) {
+ callbackContext.error("No current focus");
+ } else {
+ inputManager.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ callbackContext.success(); // Thread-safe.
+ }
+ }
+ });
+ return true;
+ }
+ if ("show".equals(action)) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ ((InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
+ callbackContext.success(); // Thread-safe.
+ }
+ });
+ return true;
+ }
+ if ("init".equals(action)) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ //calculate density-independent pixels (dp)
+ //http://developer.android.com/guide/practices/screens_support.html
+ DisplayMetrics dm = new DisplayMetrics();
+ cordova.getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
+ final float density = dm.density;
+
+ //http://stackoverflow.com/a/4737265/1091751 detect if keyboard is showing
+ final View rootView = cordova.getActivity().getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
+ OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
+ int previousHeightDiff = 0;
+ @Override
+ public void onGlobalLayout() {
+ Rect r = new Rect();
+ //r will be populated with the coordinates of your view that area still visible.
+ rootView.getWindowVisibleDisplayFrame(r);
+
+ PluginResult result;
+
+ // cache properties for later use
+ int rootViewHeight = rootView.getRootView().getHeight();
+ int resultBottom = r.bottom;
+
+ // calculate screen height differently for android versions >= 21: Lollipop 5.x, Marshmallow 6.x
+ //http://stackoverflow.com/a/29257533/3642890 beware of nexus 5
+ int screenHeight;
+
+ if (Build.VERSION.SDK_INT >= 21) {
+ Display display = cordova.getActivity().getWindowManager().getDefaultDisplay();
+ Point size = new Point();
+ display.getSize(size);
+ screenHeight = size.y;
+ } else {
+ screenHeight = rootViewHeight;
+ }
+
+ int heightDiff = screenHeight - resultBottom;
+
+ int pixelHeightDiff = (int)(heightDiff / density);
+ if (pixelHeightDiff > 100 && pixelHeightDiff != previousHeightDiff) { // if more than 100 pixels, its probably a keyboard...
+ String msg = "S" + Integer.toString(pixelHeightDiff);
+ result = new PluginResult(PluginResult.Status.OK, msg);
+ result.setKeepCallback(true);
+ callbackContext.sendPluginResult(result);
+ }
+ else if ( pixelHeightDiff != previousHeightDiff && ( previousHeightDiff - pixelHeightDiff ) > 100 ){
+ String msg = "H";
+ result = new PluginResult(PluginResult.Status.OK, msg);
+ result.setKeepCallback(true);
+ callbackContext.sendPluginResult(result);
+ }
+ previousHeightDiff = pixelHeightDiff;
+ }
+ };
+
+ rootView.getViewTreeObserver().addOnGlobalLayoutListener(list);
+
+
+ PluginResult dataResult = new PluginResult(PluginResult.Status.OK);
+ dataResult.setKeepCallback(true);
+ callbackContext.sendPluginResult(dataResult);
+ }
+ });
+ return true;
+ }
+ return false; // Returning false results in a "MethodNotFound" error.
+ }
+
+
+}
+
+
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/index.js b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/index.js
index 40294158..a91b94a2 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/index.js
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/index.js
@@ -1,14 +1,9 @@
-
-
var keyboard,
resultObjs = {},
threadCallback = null,
- _utils = require("../../lib/utils");
- _event = require("../../lib/event");
- _webview = require("../../lib/webview");
-
-
-
+ _utils = require("../../lib/utils");
+ _event = require("../../lib/event");
+ _webview = require("../../lib/webview");
module.exports = {
@@ -20,17 +15,17 @@ module.exports = {
// communication through the JNEXT plugin to keyboard_js.cpp
startService: function (success, fail, args, env) {
var result = new PluginResult(args, env);
-
+
result.ok(keyboard.getInstance().startService(), false);
},
show: function (success, fail, args, env) {
var result = new PluginResult(args, env);
-
+
result.ok(keyboard.getInstance().showKeyboard(), false);
},
close: function (success, fail, args, env) {
var result = new PluginResult(args, env);
-
+
result.ok(keyboard.getInstance().closeKeyboard(), false);
}
};
@@ -38,16 +33,14 @@ module.exports = {
keyboardShow = function(a){
_webview.executeJavascript("cordova.plugins.Keyboard.isVisible = true");
_webview.executeJavascript("cordova.fireDocumentEvent('native.keyboardshow',"+a+")");
-
-}
+};
keyboardHide = function(){
_webview.executeJavascript("cordova.plugins.Keyboard.isVisible = false");
_webview.executeJavascript("cordova.fireDocumentEvent('native.keyboardhide','')");
-
-}
+};
onStart = function() {
- _webview.executeJavascript("cordova.exec("+null+", "+null+", 'Keyboard', 'startService', '')");
- }
+ _webview.executeJavascript("cordova.exec("+null+", "+null+", 'Keyboard', 'startService', '')");
+};
setTimeout(onStart,2000);
@@ -92,20 +85,18 @@ JNEXT.Keyboard = function () {
return JNEXT.invoke(self.m_id, "closeKeyboard");
};
- self.onEvent = function (strData) { // Fired by the Event framework (used by asynchronous callbacks)
+ self.onEvent = function (strData) { // Fired by the Event framework (used by asynchronous callbacks)
var arData = strData.split(" "),
- strEventDesc = arData[0],
- jsonData;
-
- if (strEventDesc === "native.keyboardshow") {
- jsonData = arData.slice(1, arData.length).join(" ");
- keyboardShow(jsonData);
-
- }
- else if (strEventDesc === "native.keyboardhide") {
- keyboardHide();
- }
+ strEventDesc = arData[0],
+ jsonData;
+ if (strEventDesc === "native.keyboardshow") {
+ jsonData = arData.slice(1, arData.length).join(" ");
+ keyboardShow(jsonData);
+ }
+ else if (strEventDesc === "native.keyboardhide") {
+ keyboardHide();
+ }
};
// Thread methods
@@ -132,4 +123,3 @@ JNEXT.Keyboard = function () {
};
keyboard = new JNEXT.Keyboard();
-
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/.cproject b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/.cproject
index 7b118eec..7b118eec 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/.cproject
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/.cproject
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/.project b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/.project
index 8a39f221..8a39f221 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/.project
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/.project
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/autolink.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/autolink.h
index 37c9258e..37c9258e 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/autolink.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/autolink.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/config.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/config.h
index 5d334cbc..5d334cbc 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/config.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/config.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/features.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/features.h
index 5a9adec1..5a9adec1 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/features.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/features.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/forwards.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/forwards.h
index d0ce8300..d0ce8300 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/forwards.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/forwards.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/json.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/json.h
index c71ed65a..c71ed65a 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/json.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/json.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/reader.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/reader.h
index ee1d6a24..ee1d6a24 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/reader.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/reader.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/value.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/value.h
index 58bfd88e..58bfd88e 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/value.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/value.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/writer.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/writer.h
index 5f4b83be..5f4b83be 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json/writer.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json/writer.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_batchallocator.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_batchallocator.h
index 87ea5ed8..87ea5ed8 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_batchallocator.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_batchallocator.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_internalarray.inl b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_internalarray.inl
index 9b985d25..9b985d25 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_internalarray.inl
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_internalarray.inl
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_internalmap.inl b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_internalmap.inl
index 19771488..19771488 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_internalmap.inl
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_internalmap.inl
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_reader.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_reader.cpp
index 5af16c8d..5af16c8d 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_reader.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_reader.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_value.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_value.cpp
index 6e5dcd3e..6e5dcd3e 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_value.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_value.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_valueiterator.inl b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_valueiterator.inl
index 736e260e..736e260e 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_valueiterator.inl
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_valueiterator.inl
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_writer.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_writer.cpp
index cdf4188f..cdf4188f 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/json_writer.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/json_writer.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/plugin.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/plugin.cpp
index 6906275e..6906275e 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/plugin.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/plugin.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/plugin.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/plugin.h
index 4ef71169..4ef71169 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/plugin.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/plugin.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/tokenizer.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/tokenizer.cpp
index 4a39573b..4a39573b 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/tokenizer.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/tokenizer.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/tokenizer.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/tokenizer.h
index 75f567ce..75f567ce 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/public/tokenizer.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/public/tokenizer.h
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/Logger.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/Logger.cpp
index 57b7075e..57b7075e 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/Logger.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/Logger.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/Logger.hpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/Logger.hpp
index ca379ca7..ca379ca7 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/Logger.hpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/Logger.hpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_js.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_js.cpp
index 64250a14..64250a14 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_js.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_js.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_js.hpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_js.hpp
index 1ed3bb78..1ed3bb78 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_js.hpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_js.hpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_ndk.cpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_ndk.cpp
index 26b2e39a..26b2e39a 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_ndk.cpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_ndk.cpp
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_ndk.hpp b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_ndk.hpp
index 01062274..01062274 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/blackberry10/native/src/keyboard_ndk.hpp
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/blackberry10/native/src/keyboard_ndk.hpp
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/IonicKeyboard.h b/StoneIsland/plugins/ionic-plugin-keyboard/src/ios/IonicKeyboard.h
index b54f430d..63935dc3 100755..100644
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/com.ionic.keyboard/IonicKeyboard.h
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/ios/IonicKeyboard.h
@@ -1,8 +1,11 @@
#import <Cordova/CDVPlugin.h>
+#import <objc/runtime.h>
@interface IonicKeyboard : CDVPlugin <UIScrollViewDelegate> {
@protected
id _keyboardShowObserver, _keyboardHideObserver;
+ IMP wkOriginalImp, uiOriginalImp, nilImp;
+ Method wkMethod, uiMethod;
}
@property (readwrite, assign) BOOL hideKeyboardAccessoryBar;
diff --git a/StoneIsland/plugins/com.ionic.keyboard/src/ios/IonicKeyboard.m b/StoneIsland/plugins/ionic-plugin-keyboard/src/ios/IonicKeyboard.m
index 045cc65f..d072ca7f 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/src/ios/IonicKeyboard.m
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/ios/IonicKeyboard.m
@@ -1,5 +1,5 @@
#import "IonicKeyboard.h"
-#import "UIWebViewExtension.h"
+// #import "UIWebViewExtension.h"
#import <Cordova/CDVAvailability.h>
@implementation IonicKeyboard
@@ -9,29 +9,38 @@
//@synthesize styleDark = _styleDark;
- (void)pluginInitialize {
-
- NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
- __weak IonicKeyboard* weakSelf = self;
+ Class wkClass = NSClassFromString([@[@"UI", @"Web", @"Browser", @"View"] componentsJoinedByString:@""]);
+ wkMethod = class_getInstanceMethod(wkClass, @selector(inputAccessoryView));
+ wkOriginalImp = method_getImplementation(wkMethod);
+ Class uiClass = NSClassFromString([@[@"WK", @"Content", @"View"] componentsJoinedByString:@""]);
+ uiMethod = class_getInstanceMethod(uiClass, @selector(inputAccessoryView));
+ uiOriginalImp = method_getImplementation(uiMethod);
+ nilImp = imp_implementationWithBlock(^(id _s) {
+ return nil;
+ });
+
//set defaults
- self.hideKeyboardAccessoryBar = NO;
+ self.hideKeyboardAccessoryBar = YES;
self.disableScroll = NO;
//self.styleDark = NO;
+ NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
+ __weak IonicKeyboard* weakSelf = self;
_keyboardShowObserver = [nc addObserverForName:UIKeyboardWillShowNotification
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification* notification) {
-
+
CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrame = [self.viewController.view convertRect:keyboardFrame fromView:nil];
-
+
[weakSelf.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.plugins.Keyboard.isVisible = true; cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight': %@ }); ", [@(keyboardFrame.size.height) stringValue]]];
//deprecated
[weakSelf.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight': %@ }); ", [@(keyboardFrame.size.height) stringValue]]];
}];
-
+
_keyboardHideObserver = [nc addObserverForName:UIKeyboardWillHideNotification
object:nil
queue:[NSOperationQueue mainQueue]
@@ -42,6 +51,7 @@
[weakSelf.commandDelegate evalJs:@"cordova.fireWindowEvent('native.hidekeyboard'); "];
}];
}
+
- (BOOL)disableScroll {
return _disableScroll;
}
@@ -62,6 +72,8 @@
_disableScroll = disableScroll;
}
+//keyboard swizzling inspired by:
+//https://github.com/cjpearson/cordova-plugin-keyboard/
- (BOOL)hideKeyboardAccessoryBar {
return _hideKeyboardAccessoryBar;
@@ -71,13 +83,15 @@
if (hideKeyboardAccessoryBar == _hideKeyboardAccessoryBar) {
return;
}
+
if (hideKeyboardAccessoryBar) {
- self.webView.hackishlyHidesInputAccessoryView = YES;
+ method_setImplementation(wkMethod, nilImp);
+ method_setImplementation(uiMethod, nilImp);
+ } else {
+ method_setImplementation(wkMethod, wkOriginalImp);
+ method_setImplementation(uiMethod, uiOriginalImp);
}
- else {
- self.webView.hackishlyHidesInputAccessoryView = NO;
- }
-
+
_hideKeyboardAccessoryBar = hideKeyboardAccessoryBar;
}
@@ -124,17 +138,19 @@
return;
}
id value = [command.arguments objectAtIndex:0];
-
- self.disableScroll = [value boolValue];
+ if (value != [NSNull null]) {
+ self.disableScroll = [value boolValue];
+ }
}
- (void) hideKeyboardAccessoryBar:(CDVInvokedUrlCommand*)command {
if (!command.arguments || ![command.arguments count]){
- return;
+ return;
}
id value = [command.arguments objectAtIndex:0];
-
- self.hideKeyboardAccessoryBar = [value boolValue];
+ if (value != [NSNull null]) {
+ self.hideKeyboardAccessoryBar = [value boolValue];
+ }
}
- (void) close:(CDVInvokedUrlCommand*)command {
@@ -151,7 +167,7 @@
return;
}
id value = [command.arguments objectAtIndex:0];
-
+
self.styleDark = [value boolValue];
}
*/
diff --git a/StoneIsland/plugins/ionic-plugin-keyboard/src/windows/KeyboardProxy.js b/StoneIsland/plugins/ionic-plugin-keyboard/src/windows/KeyboardProxy.js
new file mode 100644
index 00000000..2ce74e9f
--- /dev/null
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/src/windows/KeyboardProxy.js
@@ -0,0 +1,37 @@
+
+/*global Windows, WinJS, cordova, module, require*/
+
+var inputPane = Windows.UI.ViewManagement.InputPane.getForCurrentView();
+var keyboardScrollDisabled = false;
+
+inputPane.addEventListener('hiding', function() {
+ cordova.fireWindowEvent('native.keyboardhide');
+ cordova.plugins.Keyboard.isVisible = false;
+});
+
+inputPane.addEventListener('showing', function(e) {
+ if (keyboardScrollDisabled) {
+ // this disables automatic scrolling of view contents to show focused control
+ e.ensuredFocusedElementInView = true;
+ }
+ cordova.fireWindowEvent('native.keyboardshow', { keyboardHeight: e.occludedRect.height });
+ cordova.plugins.Keyboard.isVisible = true;
+});
+
+module.exports.disableScroll = function (disable) {
+ keyboardScrollDisabled = disable;
+};
+
+module.exports.show = function () {
+ if (typeof inputPane.tryShow === 'function') {
+ inputPane.tryShow();
+ }
+};
+
+module.exports.close = function () {
+ if (typeof inputPane.tryShow === 'function') {
+ inputPane.tryHide();
+ }
+};
+
+require("cordova/exec/proxy").add("Keyboard", module.exports);
diff --git a/StoneIsland/plugins/ionic-plugin-keyboard/www/android/keyboard.js b/StoneIsland/plugins/ionic-plugin-keyboard/www/android/keyboard.js
new file mode 100644
index 00000000..125a5a29
--- /dev/null
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/www/android/keyboard.js
@@ -0,0 +1,60 @@
+
+var argscheck = require('cordova/argscheck'),
+ utils = require('cordova/utils'),
+ exec = require('cordova/exec'),
+ channel = require('cordova/channel');
+
+
+var Keyboard = function() {
+};
+
+Keyboard.hideKeyboardAccessoryBar = function(hide) {
+ exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
+};
+
+Keyboard.close = function() {
+ exec(null, null, "Keyboard", "close", []);
+};
+
+Keyboard.show = function() {
+ exec(null, null, "Keyboard", "show", []);
+};
+
+Keyboard.disableScroll = function(disable) {
+ exec(null, null, "Keyboard", "disableScroll", [disable]);
+};
+
+/*
+Keyboard.styleDark = function(dark) {
+ exec(null, null, "Keyboard", "styleDark", [dark]);
+};
+*/
+
+Keyboard.isVisible = false;
+
+channel.onCordovaReady.subscribe(function() {
+ exec(success, null, 'Keyboard', 'init', []);
+
+ function success(msg) {
+ var action = msg.charAt(0);
+ if ( action === 'S' ) {
+ var keyboardHeight = msg.substr(1);
+ cordova.plugins.Keyboard.isVisible = true;
+ cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight': + keyboardHeight });
+
+ //deprecated
+ cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight': + keyboardHeight });
+ } else if ( action === 'H' ) {
+ cordova.plugins.Keyboard.isVisible = false;
+ cordova.fireWindowEvent('native.keyboardhide');
+
+ //deprecated
+ cordova.fireWindowEvent('native.hidekeyboard');
+ }
+ }
+});
+
+module.exports = Keyboard;
+
+
+
diff --git a/StoneIsland/plugins/com.ionic.keyboard/www/keyboard.js b/StoneIsland/plugins/ionic-plugin-keyboard/www/browser/keyboard.js
index 21b3bf63..8b73e621 100755..100644
--- a/StoneIsland/plugins/com.ionic.keyboard/www/keyboard.js
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/www/browser/keyboard.js
@@ -8,19 +8,19 @@ var Keyboard = function() {
};
Keyboard.hideKeyboardAccessoryBar = function(hide) {
- exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
+ return null;
};
-Keyboard.close = function() {
- exec(null, null, "Keyboard", "close", []);
+Keyboard.close = function() {
+ return null;
};
Keyboard.show = function() {
- exec(null, null, "Keyboard", "show", []);
+ return null;
};
Keyboard.disableScroll = function(disable) {
- exec(null, null, "Keyboard", "disableScroll", [disable]);
+ return null;
};
/*
@@ -32,6 +32,3 @@ Keyboard.styleDark = function(dark) {
Keyboard.isVisible = false;
module.exports = Keyboard;
-
-
-
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/com.ionic.keyboard/www/keyboard.js b/StoneIsland/plugins/ionic-plugin-keyboard/www/ios/keyboard.js
index ad09ae2d..888a18a3 100644
--- a/StoneIsland/platforms/ios/platform_www/plugins/com.ionic.keyboard/www/keyboard.js
+++ b/StoneIsland/plugins/ionic-plugin-keyboard/www/ios/keyboard.js
@@ -1,4 +1,3 @@
-cordova.define("com.ionic.keyboard.keyboard", function(require, exports, module) {
var argscheck = require('cordova/argscheck'),
utils = require('cordova/utils'),
@@ -12,12 +11,15 @@ Keyboard.hideKeyboardAccessoryBar = function(hide) {
exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
};
-Keyboard.close = function() {
+Keyboard.close = function() {
exec(null, null, "Keyboard", "close", []);
};
Keyboard.show = function() {
- exec(null, null, "Keyboard", "show", []);
+ console.warn('Showing keyboard not supported in iOS due to platform limitations.')
+ console.warn('Instead, use input.focus(), and ensure that you have the following setting in your config.xml: \n');
+ console.warn(' <preference name="KeyboardDisplayRequiresUserAction" value="false"/>\n');
+ // exec(null, null, "Keyboard", "show", []);
};
Keyboard.disableScroll = function(disable) {
@@ -36,5 +38,3 @@ module.exports = Keyboard;
-
-});
diff --git a/StoneIsland/plugins/ios.json b/StoneIsland/plugins/ios.json
index fdcc6cfc..f922c31a 100644
--- a/StoneIsland/plugins/ios.json
+++ b/StoneIsland/plugins/ios.json
@@ -7,46 +7,47 @@
"files": {}
},
"installed_plugins": {
- "com.ionic.keyboard": {
+ "com.parse.cordova.core.pushplugin": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "com.parse.cordova.core.pushplugin": {
+ "cordova-plugin-inappbrowser": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-console": {
+ "cordova-plugin-x-socialsharing": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "stoneisland",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-device": {
- "PACKAGE_NAME": "us.okfoc.stoneisland"
- },
- "cordova-plugin-dialogs": {
+ "cordova-plugin-whitelist": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-geolocation": {
+ "cordova-plugin-console": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-inappbrowser": {
+ "cordova-plugin-device": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
"cordova-plugin-network-information": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-splashscreen": {
+ "cordova-plugin-dialogs": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-whitelist": {
+ "cordova-plugin-splashscreen": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-x-socialsharing": {
+ "cordova-plugin-geolocation": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "phonegap-plugin-push": {
+ "ionic-plugin-keyboard": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
- "dependent_plugins": {}
+ "dependent_plugins": {
+ "cordova-plugin-compat": {
+ "PACKAGE_NAME": "us.okfoc.stoneisland"
+ }
+ }
} \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/CHANGELOG.md b/StoneIsland/plugins/phonegap-plugin-push/CHANGELOG.md
deleted file mode 100755
index 38100051..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/CHANGELOG.md
+++ /dev/null
@@ -1,215 +0,0 @@
-# Change Log
-
-
-## [1.4.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.0) (2015-10-27)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.3.0...1.4.0)
-
-**Implemented enhancements:**
-
-- Use Google's InstanceID API [\#188](https://github.com/phonegap/phonegap-plugin-push/issues/188)
-
-**Closed issues:**
-
-- How to handle a re-installed app? [\#203](https://github.com/phonegap/phonegap-plugin-push/issues/203)
-- interactive push notifications? [\#266](https://github.com/phonegap/phonegap-plugin-push/issues/266)
-- Empty registrationId Android [\#265](https://github.com/phonegap/phonegap-plugin-push/issues/265)
-- Run callback when clicking of notification body [\#261](https://github.com/phonegap/phonegap-plugin-push/issues/261)
-- Android BUILD FAILED [\#251](https://github.com/phonegap/phonegap-plugin-push/issues/251)
-- Re-register [\#250](https://github.com/phonegap/phonegap-plugin-push/issues/250)
-- how to work in background ? [\#249](https://github.com/phonegap/phonegap-plugin-push/issues/249)
-- installing plugin [\#244](https://github.com/phonegap/phonegap-plugin-push/issues/244)
-- No Sound and vibration [\#242](https://github.com/phonegap/phonegap-plugin-push/issues/242)
-- Unable to build apk [\#241](https://github.com/phonegap/phonegap-plugin-push/issues/241)
-- still having problems with build. [\#239](https://github.com/phonegap/phonegap-plugin-push/issues/239)
-- Registering on iOS 9 [\#238](https://github.com/phonegap/phonegap-plugin-push/issues/238)
-- Custom sound repeated multiple times on Android [\#237](https://github.com/phonegap/phonegap-plugin-push/issues/237)
-- Android: status bar notification is not shown [\#236](https://github.com/phonegap/phonegap-plugin-push/issues/236)
-- Multiple Push Notifications - phonegap build [\#234](https://github.com/phonegap/phonegap-plugin-push/issues/234)
-- error: cannot find symbol String token = InstanceID.getInstance\(getApplicationContext\(\)\).getToken\(senderID, GCM\); [\#231](https://github.com/phonegap/phonegap-plugin-push/issues/231)
-- Problem using "ledColor" and "VibrationPattern" [\#229](https://github.com/phonegap/phonegap-plugin-push/issues/229)
-- Notificaction event receive, but not notification showing on android [\#228](https://github.com/phonegap/phonegap-plugin-push/issues/228)
-- Events for registration not being fired [\#227](https://github.com/phonegap/phonegap-plugin-push/issues/227)
-- 'registration' event not firing on windows phone [\#224](https://github.com/phonegap/phonegap-plugin-push/issues/224)
-- Can i subscribe to a topic in using plugin? [\#219](https://github.com/phonegap/phonegap-plugin-push/issues/219)
-- GCMIntentService.java:472: error: cannot find symbol iconColor [\#217](https://github.com/phonegap/phonegap-plugin-push/issues/217)
-- Push Plugin registering on iOS 9 Devices but not showing Notification [\#216](https://github.com/phonegap/phonegap-plugin-push/issues/216)
-- Receiving a notification "outside app" while in it? [\#213](https://github.com/phonegap/phonegap-plugin-push/issues/213)
-- iOS push not working for device tokens when spaces removed [\#212](https://github.com/phonegap/phonegap-plugin-push/issues/212)
-- Error: Plugin PushPlugin failed to install. [\#210](https://github.com/phonegap/phonegap-plugin-push/issues/210)
-- Build error [\#205](https://github.com/phonegap/phonegap-plugin-push/issues/205)
-- Android push.on\('registration', cb\) fires correctly on device, but not in emulator. [\#204](https://github.com/phonegap/phonegap-plugin-push/issues/204)
-- 1.3.0 version not compatible with "crosswalk" by PGB [\#199](https://github.com/phonegap/phonegap-plugin-push/issues/199)
-- How to get data on didReceiveNotification Background Process [\#198](https://github.com/phonegap/phonegap-plugin-push/issues/198)
-- PushNotification is not defined in some devices [\#196](https://github.com/phonegap/phonegap-plugin-push/issues/196)
-- not getting notifications on the Android device [\#195](https://github.com/phonegap/phonegap-plugin-push/issues/195)
-- Installation Errors [\#186](https://github.com/phonegap/phonegap-plugin-push/issues/186)
-- IOS: on registration fired twice [\#185](https://github.com/phonegap/phonegap-plugin-push/issues/185)
-- Build failed with exit code 8 [\#184](https://github.com/phonegap/phonegap-plugin-push/issues/184)
-- iOS: Not able to schedule local notification after adding the plugin [\#183](https://github.com/phonegap/phonegap-plugin-push/issues/183)
-- How to show multiple notifications individually in android? [\#181](https://github.com/phonegap/phonegap-plugin-push/issues/181)
-- iOS init option type [\#180](https://github.com/phonegap/phonegap-plugin-push/issues/180)
-- Building for Android is a quest [\#179](https://github.com/phonegap/phonegap-plugin-push/issues/179)
-- How do i tell if the user open the app by tapping the notification? [\#176](https://github.com/phonegap/phonegap-plugin-push/issues/176)
-- IOS custom push sound when app is in background [\#175](https://github.com/phonegap/phonegap-plugin-push/issues/175)
-- Hi guys please post full working procedure, I'm not able to get registration id also. Please help [\#174](https://github.com/phonegap/phonegap-plugin-push/issues/174)
-- Has anyone tested this plugin on windows? [\#173](https://github.com/phonegap/phonegap-plugin-push/issues/173)
-
-## [1.3.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.3.0) (2015-09-21)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.3...1.3.0)
-
-**Implemented enhancements:**
-
-- How to use GCM 3.0 with this plugin? [\#127](https://github.com/phonegap/phonegap-plugin-push/issues/127)
-- Android: possibility to send a notification with a title and without message [\#122](https://github.com/phonegap/phonegap-plugin-push/issues/122)
-- Enhancement - Led, Vibration Pattern, Priority on Android [\#105](https://github.com/phonegap/phonegap-plugin-push/issues/105)
-
-**Fixed bugs:**
-
-- It is using in gcm data.additionalData ? [\#126](https://github.com/phonegap/phonegap-plugin-push/issues/126)
-- iOS notification from cold boot [\#117](https://github.com/phonegap/phonegap-plugin-push/issues/117)
-- Notification LED is not working [\#97](https://github.com/phonegap/phonegap-plugin-push/issues/97)
-
-**Closed issues:**
-
-- Know which version is used in build service [\#151](https://github.com/phonegap/phonegap-plugin-push/issues/151)
-- Registration is not working in IOS9 [\#150](https://github.com/phonegap/phonegap-plugin-push/issues/150)
-- build fail on android [\#149](https://github.com/phonegap/phonegap-plugin-push/issues/149)
-- iconColor does not set icon background on Android [\#146](https://github.com/phonegap/phonegap-plugin-push/issues/146)
-- Prevent windows toast notification when in foreground [\#145](https://github.com/phonegap/phonegap-plugin-push/issues/145)
-- How to implement push notification for ios with this plug-in? [\#143](https://github.com/phonegap/phonegap-plugin-push/issues/143)
-- After installing this plugin I can't build on Android [\#141](https://github.com/phonegap/phonegap-plugin-push/issues/141)
-- version 1.2.3 [\#134](https://github.com/phonegap/phonegap-plugin-push/issues/134)
-- New inbox style on android [\#131](https://github.com/phonegap/phonegap-plugin-push/issues/131)
-- impossible to install the phonegap-plugin-push Error [\#130](https://github.com/phonegap/phonegap-plugin-push/issues/130)
-- Hello, i am developing a cordova app which requires push notifications to be sent to users android phone, so i tried using this new phonegap push plugin as old one is deprecated, and it keeps giving me an error in console: Uncaught ReferenceError: module is not defined --- Line 154 Push.js and i dont have much experience with cordova, so can anyone assist me ? [\#128](https://github.com/phonegap/phonegap-plugin-push/issues/128)
-- INVALID\_REGISTRATION when http post request with to IOS [\#123](https://github.com/phonegap/phonegap-plugin-push/issues/123)
-- Andriod :More than 2 notifications in status bar it is not works. [\#121](https://github.com/phonegap/phonegap-plugin-push/issues/121)
-- Release notes for 1.2.x [\#119](https://github.com/phonegap/phonegap-plugin-push/issues/119)
-- Google cloud messaging GCM - Push Notification not being sent \(Server Side\) [\#110](https://github.com/phonegap/phonegap-plugin-push/issues/110)
-
-## [1.2.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.3) (2015-09-08)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.2...1.2.3)
-
-**Fixed bugs:**
-
-- Notification not showing..... [\#101](https://github.com/phonegap/phonegap-plugin-push/issues/101)
-- Same data payload for messages with action buttons [\#90](https://github.com/phonegap/phonegap-plugin-push/issues/90)
-
-**Closed issues:**
-
-- Notification doesn't show the app icon [\#112](https://github.com/phonegap/phonegap-plugin-push/issues/112)
-- Notification doesn't show the app icon [\#111](https://github.com/phonegap/phonegap-plugin-push/issues/111)
-- Issue with plugin facebook connect [\#107](https://github.com/phonegap/phonegap-plugin-push/issues/107)
-- Cordova Support [\#99](https://github.com/phonegap/phonegap-plugin-push/issues/99)
-- Uncaught ReferenceError: cordova is not defined, http://localhost:8100/lib/push.js, Line: 7 [\#98](https://github.com/phonegap/phonegap-plugin-push/issues/98)
-- Notifications never received on Android [\#96](https://github.com/phonegap/phonegap-plugin-push/issues/96)
-- How know the way the app was launched [\#95](https://github.com/phonegap/phonegap-plugin-push/issues/95)
-- Android, example doesn't work when it goes into background [\#94](https://github.com/phonegap/phonegap-plugin-push/issues/94)
-- Utilizing push plugin [\#91](https://github.com/phonegap/phonegap-plugin-push/issues/91)
-
-## [1.2.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.2) (2015-08-31)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.1...1.2.2)
-
-**Closed issues:**
-
-- PushPlugin notification icon is too big [\#88](https://github.com/phonegap/phonegap-plugin-push/issues/88)
-
-## [1.2.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.1) (2015-08-31)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.0...1.2.1)
-
-**Implemented enhancements:**
-
-- Question about GCM Notifications and data in the message payload [\#87](https://github.com/phonegap/phonegap-plugin-push/issues/87)
-
-**Fixed bugs:**
-
-- Notification callback for pushes without a message [\#80](https://github.com/phonegap/phonegap-plugin-push/issues/80)
-
-**Closed issues:**
-
-- Android: No notification displayed on device. Notification event never called. [\#86](https://github.com/phonegap/phonegap-plugin-push/issues/86)
-- it seem no wp8 version for now [\#56](https://github.com/phonegap/phonegap-plugin-push/issues/56)
-
-## [1.2.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.0) (2015-08-25)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.1.1...1.2.0)
-
-**Implemented enhancements:**
-
-- Implement Inbox style for Android [\#74](https://github.com/phonegap/phonegap-plugin-push/issues/74)
-- multi-line text support [\#63](https://github.com/phonegap/phonegap-plugin-push/issues/63)
-
-**Fixed bugs:**
-
-- Pushes being deleted from notification bar when cold start [\#67](https://github.com/phonegap/phonegap-plugin-push/issues/67)
-
-**Closed issues:**
-
-- oficial push plugin and windows and wp8 compatibility [\#71](https://github.com/phonegap/phonegap-plugin-push/issues/71)
-- On Android, GCMIntentService.onError\(\) doesn't get passed to the JavaScript "error" event [\#65](https://github.com/phonegap/phonegap-plugin-push/issues/65)
-- Android: add property to vibrate phone on received notification [\#61](https://github.com/phonegap/phonegap-plugin-push/issues/61)
-- push.on =\> "registration" will trigger twice times that only in iOS [\#57](https://github.com/phonegap/phonegap-plugin-push/issues/57)
-
-## [1.1.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.1.1) (2015-07-27)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.1.0...1.1.1)
-
-## [1.1.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.1.0) (2015-07-27)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.0.1...1.1.0)
-
-**Implemented enhancements:**
-
-- iOS doesn't add foreground key [\#41](https://github.com/phonegap/phonegap-plugin-push/issues/41)
-- Android: Notification icon problem [\#20](https://github.com/phonegap/phonegap-plugin-push/issues/20)
-- iOS badge number [\#18](https://github.com/phonegap/phonegap-plugin-push/issues/18)
-- How i can set icons for push notifications in status bar and push view in android [\#14](https://github.com/phonegap/phonegap-plugin-push/issues/14)
-- Support Win8.1 + Phone 8.1 Universal Apps \(WNS\), drop support for WP8.0 \(MPNS\) [\#13](https://github.com/phonegap/phonegap-plugin-push/issues/13)
-
-**Fixed bugs:**
-
-- iOS only reads out "aps" payload [\#29](https://github.com/phonegap/phonegap-plugin-push/issues/29)
-- Event not fired when in background [\#24](https://github.com/phonegap/phonegap-plugin-push/issues/24)
-- Custom notification sound in background mode? [\#17](https://github.com/phonegap/phonegap-plugin-push/issues/17)
-
-**Closed issues:**
-
-- iOS only receives first notification in foreground [\#42](https://github.com/phonegap/phonegap-plugin-push/issues/42)
-- Cannot register on iOS [\#30](https://github.com/phonegap/phonegap-plugin-push/issues/30)
-- Fix Android paths in src folder [\#23](https://github.com/phonegap/phonegap-plugin-push/issues/23)
-- PushNotification not defined [\#21](https://github.com/phonegap/phonegap-plugin-push/issues/21)
-- Error trying to remove the plugin [\#19](https://github.com/phonegap/phonegap-plugin-push/issues/19)
-- Handling multiple notifications on Android devices [\#12](https://github.com/phonegap/phonegap-plugin-push/issues/12)
-- PGB \(build.phonegap.com\) problem [\#11](https://github.com/phonegap/phonegap-plugin-push/issues/11)
-- reporting location via gcm [\#6](https://github.com/phonegap/phonegap-plugin-push/issues/6)
-
-**Merged pull requests:**
-
-- Updating Readme to document toast capable setting [\#47](https://github.com/phonegap/phonegap-plugin-push/pull/47) ([rakatyal](https://github.com/rakatyal))
-- fix issue \#41 [\#44](https://github.com/phonegap/phonegap-plugin-push/pull/44) ([Deminetix](https://github.com/Deminetix))
-- fix issue \#42 [\#43](https://github.com/phonegap/phonegap-plugin-push/pull/43) ([Deminetix](https://github.com/Deminetix))
-- Adding hyperlinks to README [\#40](https://github.com/phonegap/phonegap-plugin-push/pull/40) ([rakatyal](https://github.com/rakatyal))
-- Updating Readme [\#37](https://github.com/phonegap/phonegap-plugin-push/pull/37) ([rakatyal](https://github.com/rakatyal))
-- Adding windows support to plugin [\#36](https://github.com/phonegap/phonegap-plugin-push/pull/36) ([rakatyal](https://github.com/rakatyal))
-- Raghav/update [\#35](https://github.com/phonegap/phonegap-plugin-push/pull/35) ([rakatyal](https://github.com/rakatyal))
-- Adding behavior for different notification types [\#28](https://github.com/phonegap/phonegap-plugin-push/pull/28) ([rakatyal](https://github.com/rakatyal))
-- Initial commit to add support for windows universal platform [\#15](https://github.com/phonegap/phonegap-plugin-push/pull/15) ([rakatyal](https://github.com/rakatyal))
-
-## [1.0.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.0.1) (2015-06-08)
-[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.0.0...1.0.1)
-
-**Closed issues:**
-
-- documentation "senderId" correction [\#10](https://github.com/phonegap/phonegap-plugin-push/issues/10)
-- add to our ci page [\#9](https://github.com/phonegap/phonegap-plugin-push/issues/9)
-- Update installation instructions [\#7](https://github.com/phonegap/phonegap-plugin-push/issues/7)
-
-## [1.0.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.0.0) (2015-06-05)
-**Closed issues:**
-
-- Update code using enabledRemoteNotificationTypes because it is “not supported in iOS 8†[\#8](https://github.com/phonegap/phonegap-plugin-push/issues/8)
-- Register method not working [\#4](https://github.com/phonegap/phonegap-plugin-push/issues/4)
-- Publish plugin to npm [\#3](https://github.com/phonegap/phonegap-plugin-push/issues/3)
-- Update example to use new API [\#2](https://github.com/phonegap/phonegap-plugin-push/issues/2)
-- Lowercase Example/ directory [\#1](https://github.com/phonegap/phonegap-plugin-push/issues/1)
-
-
-
-\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE b/StoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE
deleted file mode 100755
index 55ab5e39..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright 2012 Bob Easterday, Adobe Systems
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/README.md b/StoneIsland/plugins/phonegap-plugin-push/README.md
deleted file mode 100755
index fbdc3626..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/README.md
+++ /dev/null
@@ -1,694 +0,0 @@
-#phonegap-plugin-push [![Build Status](https://travis-ci.org/phonegap/phonegap-plugin-push.svg)](https://travis-ci.org/phonegap/phonegap-plugin-push)
-
-> Register and receive push notifications
-
-## Installation
-
-This requires phonegap/cordova CLI 5.0+ ( current stable v1.4.4 )
-
-```
-phonegap plugin add phonegap-plugin-push
-```
-or
-
-```
-cordova plugin add phonegap-plugin-push
-```
-
-It is also possible to install via repo url directly ( unstable )
-
-```
-phonegap plugin add https://github.com/phonegap/phonegap-plugin-push
-```
-
-or
-
-```
-cordova plugin add https://github.com/phonegap/phonegap-plugin-push
-```
-
-## Supported Platforms
-
-- Android
-- iOS
-- Windows Universal
-
-## Quick Example
-
-```javascript
- var push = PushNotification.init({ "android": {"senderID": "12345679"},
- "ios": {"alert": "true", "badge": "true", "sound": "true"}, "windows": {} } );
-
- push.on('registration', function(data) {
- // data.registrationId
- });
-
- push.on('notification', function(data) {
- // data.message,
- // data.title,
- // data.count,
- // data.sound,
- // data.image,
- // data.additionalData
- });
-
- push.on('error', function(e) {
- // e.message
- });
-```
-
-## API
-
-### PushNotification.init(options)
-
-Parameter | Description
---------- | ------------
-`options` | `JSON Object` platform specific initialization options.
-`options.android` | `JSON Object` Android specific initialization options.
-`options.android.senderID` | `String` Maps to the project number in the Google Developer Console.
-`options.android.icon` | `String` Optional. The name of a drawable resource to use as the small-icon. The name should not include the extension.
-`options.android.iconColor` | `String` Optional. Sets the background color of the small icon on Android 5.0 and greater. [Supported Formats](http://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String))
-`options.android.sound` | `Boolean` Optional. If `true` it plays the sound specified in the push data or the default system sound. Default is `true`.
-`options.android.vibrate` | `Boolean` Optional. If `true` the device vibrates on receipt of notification. Default is `true`.
-`options.android.clearNotifications` | `Boolean` Optional. If `true` the app clears all pending notifications when it is closed. Default is `true`.
-`options.android.forceShow` | `Boolean` Optional. If `true` will always show a notification, even when the app is on the foreground. Default is `false`.
-`options.ios` | `JSON Object` iOS specific initialization options.
-`options.ios.alert` | `Boolean`\|`String` Optional. If `true`\|`"true"` the device shows an alert on receipt of notification. Default is `false`\|`"false"`. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour.
-`options.ios.badge` | `Boolean`\|`String` Optional. If `true`\|`"true"` the device sets the badge number on receipt of notification. Default is `false`\|`"false"`. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour.
-`options.ios.sound` | `Boolean`\|`String` Optional. If `true`\|`"true"` the device plays a sound on receipt of notification. Default is `false`\|`"false"`. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour.
-`options.ios.clearBadge` | `Boolean`\|`String` Optional. If `true`\|`"true"` the badge will be cleared on app startup. Default is `false`\|`"false"`.
-`options.windows` | `JSON Object` Windows specific initialization options.
-
-#### Returns
-
-- Instance of `PushNotification`.
-
-#### Example
-
-```javascript
- var push = PushNotification.init({ "android": {"senderID": "12345679"},
- "ios": {"alert": "true", "badge": "true", "sound": "true"}, "windows": {} } );
-```
-
-### push.on(event, callback)
-
-Parameter | Description
---------- | ------------
-`event` | `String` Name of the event to listen to. See below for all the event names.
-`callback` | `Function` is called when the event is triggered.
-
-### push.on('registration', callback)
-
-The event `registration` will be triggered on each successful registration with the 3rd party push service.
-
-Callback Parameter | Description
------------------- | -----------
-`data.registrationId` | `String` The registration ID provided by the 3rd party remote push service.
-
-#### Example
-
-```javascript
-push.on('registration', function(data) {
- // data.registrationId
-});
-```
-
-### push.on('notification', callback)
-
-The event `notification` will be triggered each time a push notification is received by a 3rd party push service on the device.
-
-Callback Parameter | Description
------------------- | -----------
-`data.message` | `String` The text of the push message sent from the 3rd party service.
-`data.title` | `String` The optional title of the push message sent from the 3rd party service.
-`data.count` | `String` The number of messages to be displayed in the badge iOS or message count in the notification shade in Android. For windows, it represents the value in the badge notification which could be a number or a status glyph.
-`data.sound` | `String` The name of the sound file to be played upon receipt of the notification.
-`data.image` | `String` The path of the image file to be displayed in the notification.
-`data.additionalData` | `JSON Object` An optional collection of data sent by the 3rd party push service that does not fit in the above properties.
-`data.additionalData.foreground` | `Boolean` Whether the notification was received while the app was in the foreground
-
-#### Example
-
-```javascript
- push.on('notification', function(data) {
- // data.message,
- // data.title,
- // data.count,
- // data.sound,
- // data.image,
- // data.additionalData
- });
-```
-
-### push.on('error', callback)
-
-The event `error` will trigger when an internal error occurs and the cache is aborted.
-
-Callback Parameter | Description
------------------- | -----------
-`e` | `Error` Standard JavaScript error object that describes the error.
-
-#### Example
-
-```javascript
-push.on('error', function(e) {
- // e.message
-});
-```
-
-### push.off(event, handle)
-
-Parameter | Description
---------- | ------------
-`event` | `String` Name of the event type. The possible event names are the same as for the ```push.on``` function.
-`handle` | `Function` handle to the function to get removed.
-
-#### Example
-```javascript
-var eventHandler = function(data){ /*...*/};
-
-//Adding handler for notification event
-push.on('notification', eventHandler);
-
-//Removing handler for notification event
-push.off('notification', eventHandler);
-```
-
-As stated in the example, you will have to store your event handler if you are planning to remove it.
-
-### push.unregister(successHandler, errorHandler)
-
-The unregister method is used when the application no longer wants to receive push notifications.
-
-#### Example
-
-```javascript
-push.unregister(successHandler, errorHandler);
-```
-
-### push.setApplicationIconBadgeNumber(successHandler, errorHandler, count) - iOS only
-
-Set the badge count visible when the app is not running
-
-The `count` is an integer indicating what number should show up in the badge. Passing 0 will clear the badge. Each `notification` event contains a `data.count` value which can be used to set the badge to correct number.
-
-#### Example
-
-```javascript
-push.setApplicationIconBadgeNumber(successHandler, errorHandler, count);
-```
-
-### push.getApplicationIconBadgeNumber(successHandler, errorHandler) - iOS only
-
-Get the current badge count visible when the app is not running
-
-successHandler gets called with an integer which is the current badge count
-
-#### Example
-
-```javascript
-push.getApplicationIconBadgeNumber(successHandler, errorHandler);
-```
-
-### push.finish(successHandler, errorHandler) - iOS only
-
-Tells the OS that you are done processing a background push notification.
-
-successHandler gets called when background push processing is successfully completed.
-
-#### Example
-
-```javascript
-push.finish(successHandler, errorHandler);
-```
-
-## PhoneGap Build Support
-
-Including this plugin in a project that is built by PhoneGap Build is as easy as adding:
-
-```
-<gap:plugin name="phonegap-plugin-push" source="npm" />
-```
-
-into your apps `config.xml` file. PhoneGap Build will pick up the latest version of phonegap-plugin-push published on npm. If you want to specify a particular version of the plugin you can add the `version` attribute to the `gap` tag.
-
-```
-<gap:plugin name="phonegap-plugin-push" source="npm" version="1.2.3" />
-```
-
-Note: version 1.3.0 of this plugin begins to use Gradle to install the Android Support Framework. Support for Gradle has recently been added to PhoneGap Build. Please read [this blog post](http://phonegap.com/blog/2015/09/28/android-using-gradle/) for more information.
-
-## Android Behaviour
-
-### Compiling
-
-As of version 1.3.0 the plugin has been switched to using Gradle/Maven for building. You will need to ensure that you have installed the Android Support Library version 23 or greater, Android Support Repository version 20 or greater, Google Play Services version 27 or greater and Google Repository version 22 or greater.
-
-![android support library](https://cloud.githubusercontent.com/assets/353180/10230226/0627931e-684a-11e5-9a6b-72d72997f655.png)
-
-For more detailed instructions on how to install the Android Support Library visit [Google's documentation](https://developer.android.com/tools/support-library/setup.html).
-
-### Images
-
-By default the icon displayed in your push notification will be your apps icon. So when you initialize the plugin like this:
-
-```javascript
- var push = PushNotification.init({ "android": {"senderID": "12345679"},
- "ios": {"alert": "true", "badge": "true", "sound": "true"}, "windows": {} } );
-```
-
-The result will look much like this:
-
-![2015-07-24 02 52 00](https://cloud.githubusercontent.com/assets/353180/8866899/2df00c3c-3190-11e5-8552-96201fb4424b.png)
-
-This is because Android now uses Material design and the default icon for push will be completely white.
-
-In order to get a better user experience you can specify an alternate icon and background color to be shown when receiving a push notification. The code would look like this:
-
-```javascript
- var push = PushNotification.init({
- "android": {
- "senderID": "123456789", "icon": "phonegap", "iconColor": "blue"},
- "ios": {"alert": "true", "badge": "true", "sound": "true"}, "windows": {}
- });
-```
-
-Where *icon* is the name of an image in the Android *drawables* folder. Writing a hook to describe how to copy an image to the Android *drawables* folder is out of scope for this README but there is an [excellent tutorial](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/) that you can copy.
-
-*iconColor* is one of the supported formats #RRGGBB or #AARRGGBB or one of the following names: 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta', 'yellow', 'lightgray', 'darkgray', 'grey', 'lightgrey', 'darkgrey', 'aqua', 'fuchsia', 'lime', 'maroon', 'navy', 'olive', 'purple', 'silver', 'teal'. *iconColor* is supported on Android 5.0 and greater.
-
-Please follow the [Android icon design guidelines](https://www.google.com/design/spec/style/icons.html#) when creating your icon.
-
-![2015-07-24 02 46 58](https://cloud.githubusercontent.com/assets/353180/8866902/2df3276e-3190-11e5-842a-c8cd95615ab0.png)
-
-Additionally, each push can include a large icon which is used to personalize each push. The location of the image may one of three types.
-
-The first is the *drawables* folder in your app. This JSON sent from GCM:
-
-```javascript
-{
- title:"Large Icon",
- message: "Loaded from drawables folder",
- image: "twitter"
-}
-```
-
-Would look for the *twitter* image in the drawables folder and produce the following notification.
-
-![2015-07-24 02 34 41](https://cloud.githubusercontent.com/assets/353180/8866903/2df48028-3190-11e5-8176-fe8b3f7c5aab.png)
-
-The second is the *assets* folder in your app. This JSON sent from GCM:
-
-```javascript
-{
- title:"Large Icon",
- message: "Loaded from assets folder",
- image: "www/image/logo.png"
-}
-```
-
-Would look for the *logo.png* file in the assets/www/img folder. Since your apps www folder gets copied into the Android assets folder it is an excellent spot to store the images without needing to write a hook to copy them to the *drawables* folder. It produces the following notification.
-
-![2015-07-24 02 20 02](https://cloud.githubusercontent.com/assets/353180/8866901/2df19052-3190-11e5-8c16-a355c59209f3.png)
-
-
-The third is the remote *URL*. This JSON sent from GCM:
-
-```javascript
-{
- title:"Large Icon",
- message: "Loaded from URL",
- image: "https://dl.dropboxusercontent.com/u/887989/antshot.png"
-}
-```
-
-Produces the following notification.
-
-![2015-07-24 02 17 55](https://cloud.githubusercontent.com/assets/353180/8866900/2df0ab06-3190-11e5-9a81-fdb85bb0f5a4.png)
-
-### Sound
-
-In order for your your notification to play a custom sound you will need to add the files to your Android project's `res/raw` directory. Then send the follow JSON from GCM:
-
-```javascript
-{
- title:"Sound Test",
- message: "Loaded res/raw",
- soundname: "test"
-}
-```
-
-*Note:* when you specify the custom sound file name omit the file's extension.
-
-### Stacking
-
-By default when using this plugin on Android each notification that your app receives will replace the previous notification in the shade.
-
-If you want to see multiple notifications in the shade you will need to provide a notification ID as part of the push data sent to the app. For instance if you send:
-
-```javascript
-{
- title: "Test Push",
- message: "Push number 1"
-}
-```
-
-Followed by:
-
-```javascript
-{
- title: "Test Push",
- message: "Push number 2"
-}
-```
-
-You will only see "Push number 2" in the shade. However, if you send:
-
-```javascript
-{
- title: "Test Push",
- message: "Push number 1",
- notId: 1
-}
-```
-
-and:
-
-```javascript
-{
- title: "Test Push",
- message: "Push number 2",
- notId: 2
-}
-```
-
-You will only see both "Push number 1" and "Push number 2" in the shade.
-
-### Inbox Stacking ###
-
-A better alternative to stacking your notifications is to use the inbox style to have up to 8 lines of notification text in a single notification. If you send the following JSON from GCM you will see:
-
-```javascript
-{
- title:"My Title",
- message: "My first message",
- style: "inbox",
- summaryText: "There are %n% notifications"
-}
-```
-
-It will produce a normal looking notification:
-
-![2015-08-25 14 11 27](https://cloud.githubusercontent.com/assets/353180/9468840/c9c5d43a-4b11-11e5-814f-8dc995f47830.png)
-
-But, if you follow it up with subsequent notifications like:
-
-```javascript
-{
- title:"My Title",
- message: "My second message",
- style: "inbox",
- summaryText: "There are %n% notifications"
-}
-```
-
-You will get an inbox view so you can display multiple notifications in a single panel.
-
-![2015-08-25 14 01 35](https://cloud.githubusercontent.com/assets/353180/9468727/2d658bee-4b11-11e5-90fa-248d54c8f3f6.png)
-
-If you use `%n%` in the `summaryText` of the JSON coming down from GCM it will be replaced by the number of messages that are currently in the queue.
-
-### Action Buttons
-
-Your notification can include action buttons. If you wish to include an icon along with the button name they must be placed in the `res/drawable` directory of your Android project. Then you can send the following JSON from GCM:
-
-```javascript
-{
- title:"AUX Scrum",
- message: "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.",
- actions: [
- { icon: "emailGuests", title: "EMAIL GUESTS", callback: "app.emailGuests"},
- { icon: "snooze", title: "SNOOZE", callback: "app.snooze"},
- ]
-}
-```
-
-This will produce the following notification in your tray:
-
-![action_combo](https://cloud.githubusercontent.com/assets/353180/9313435/02554d2a-44f1-11e5-8cd9-0aadd1e02b18.png)
-
-If your users clicks on the main body of the notification your app will be opened. However if they click on either of the action buttons the app will open (or start) and the specified JavaScript callback will be executed. In this case it is `app.emailGuests` and `app.snooze` respectively.
-
-### Led in Notifications
-
-You can use a Led notifcation and choose the color of it. Just add a `ledColor` field in your notification in the ARGB format array:
-
-```javascript
-{
- title:"Green LED",
- message: "This is my message with a Green LED",
- ledColor: [0, 0, 255, 0]
-}
-```
-
-### Vibration Pattern in Notifications
-
-You can set a Vibration Pattern for your notifications. Just add a `vibrationPattern` field in your notification:
-
-```javascript
-{
- title:"Vibration Pattern",
- message: "Device should wait for 2 seconds, vibrate for 1 second then be silent for 500 ms then vibrate for 500 ms",
- vibrationPattern: [2000, 1000, 500, 500]
-}
-```
-
-### Priority in Notifications
-
-You can set a priority parameter for your notifications. Just add a `priority` field in your notification. -2: minimum, -1: low, 0: default , 1: high, 2: maximum priority:
-
-```javascript
-{
- title:"This is a maximum priority Notification",
- message: "This notification should appear in front of all others",
- priority: 2
-}
-```
-
-### Picture Messages
-
-Perhaps you want to include a large picture in the notification that you are sending to your users. Luckily you can do that too buy sending the following JSON from GCM.
-
-```javascript
-{
- title:"Big Picture",
- message: "This is my big picture message",
- style: "picture",
- picture: "http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg",
- summaryText: "The internet is built on cat pictures"
-}
-```
-
-This will produce the following notification in your tray:
-
-![2015-08-25 16 08 00](https://cloud.githubusercontent.com/assets/353180/9472260/3655fa7a-4b22-11e5-8d87-20528112de16.png)
-
-### Co-existing with FaceBook Plugin
-
-There are a number of Cordova FaceBook Plugins available but the one that we recommend is [Jeduan's fork](https://github.com/jeduan/cordova-plugin-facebook4) of the original Wizcorp plugin. It is setup to use Gradle/Maven properly and the latest FaceBook SDK.
-
-To add to your app:
-
-```
-phonegap plugin add https://github.com/jeduan/cordova-plugin-facebook4 --variable APP_ID="App ID" --variable APP_NAME="App Name"
-```
-or
-
-```
-cordova plugin add https://github.com/jeduan/cordova-plugin-facebook4 --variable APP_ID="App ID" --variable APP_NAME="App Name"
-```
-
-If you have an issue compiling the app and you are getting this error:
-
-```
-* What went wrong:
-Execution failed for task ':processDebugManifest'.
-> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 15 declared in library /Users/smacdona/code/bookface/platforms/android/build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.6.0/AndroidManifest.xml
- Suggestion: use tools:overrideLibrary="com.facebook" to force usage
-```
-
-Then you can add the following entry into your config.xml file in the android platform tag.
-
-```xml
-<platform name="android">
- <preference name="android-minSdkVersion" value="15"/>
- </platform>
-```
-
-
-### Background Notifications
-
-On Android if you want your `on('notification')` event handler to be called when your app is in the background it is relatively simple.
-
-The JSON you send to GCM should not contain a title or message parameter. For instance the following JSON:
-
-```javascript
-{
- title: "Test Push",
- message: "Push number 1",
- info: "super secret info"
-}
-```
-
-will produce a notification in the notification shade and call your `on('notification')` event handler.
-
-However if you want your `on('notification')` event handler called but no notification to be shown in the shader you would omit the `alert` property and send the following JSON to GCM:
-
-```javascript
-{
- info: "super secret info"
-}
-```
-
-Omitting the message and title properties will keep your push from being added to the notification shade but it will still trigger your `on('notification')` event handler.
-
-## iOS Behaviour
-
-### Sound
-
-In order for your your notification to play a custom sound you will need to add the files to root of your iOS project. The files must be in the proper format. See the [Local and Remote Notification Programming Guide](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW6) for more info on proper file formats and how to convert existing sound files.
-
-Then send the follow JSON from APNS:
-
-```javascript
-{
- "aps": {
- "alert": "Test sound",
- "sound": "sub.caf"
- }
-}
-```
-
-### Background Notifications
-
-On iOS if you want your `on('notification')` event handler to be called when your app is in the background you will need to do a few things.
-
-First the JSON you send from APNS will need to include `content-available: 1` to the `aps` object. The `content-available: 1` property in your push message is a signal to iOS to wake up your app and give it up to 30 seconds of background processing. If do not want this type of behaviour just omit `content-available: 1` from your push data.
-
-
-For instance the following JSON:
-
-```javascript
-{
- "aps": {
- "alert": "Test background push",
- "content-available": "1"
- }
-}
-```
-
-will produce a notification in the notification shade and call your `on('notification')` event handler.
-
-However if you want your `on('notification')` event handler called but no notification to be shown in the shader you would omit the `alert` property and send the following JSON to APNS:
-
-```javascript
-{
- "aps": {
- "data": "Test silent background push",
- "moredata": "Do more stuff",
- "content-available": "1"
- }
-}
-```
-
-That covers what you need to do on the server side to accept background pushes on iOS. However, it is critically important that you continue reading as there will be a change in your `on('notification')`. When you receive a background push on iOS you will be given 30 seconds of time in which to complete a task. If you spend longer than 30 seconds on the task the OS may decide that your app is misbehaving and kill it. In order to signal iOS that your `on('notification')` handler is done you will need to call the new `push.finish()` method.
-
-For example:
-
-```javascript
-var push = PushNotification.init({
- "ios": {
- "sound": true,
- "vibration": true,
- "badge": true,
- "clearBadge": true
- }
-});
-
-push.on('registration', function(data) {
- // send data.registrationId to push service
-});
-
-
-push.on('notification', function(data) {
- // do something with the push data
- // then call finish to let the OS know we are done
- push.finish(function() {
- console.log("processing of push data is finished");
- });
-});
-```
-
-It is absolutely critical that you call `push.finish()` when you have successfully processed your background push data.
-
-## Windows Behaviour
-
-###Notifications
-
-The plugin supports all types of windows platform notifications namely [Tile, Toast, Badge and Raw](https://msdn.microsoft.com/en-us/library/windows/apps/Hh779725.aspx). The API supports the basic cases of the notification templates with title corresponding to the first text element and message corresponding to the second if title is present else the first one. The image corresponds to the first image element of the notification xml.
-
-The count is present only for the badge notification in which it represent the value of the notification which could be a number from 0-99 or a status glyph.
-
-For advanced templates and usage, the notification object is included in [`data.additionalData.pushNotificationReceivedEventArgs`](https://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.pushnotifications.pushnotificationreceivedeventargs).
-
-### Setting Toast Capable Option for Windows
-
-This plugin automatically sets the toast capable flag to be true for Cordova 5.1.1+. For lower versions, you must declare that it is Toast Capable in your app's manifest file.
-
-### Disabling the default processing of notifications by Windows
-
-The default handling can be disabled by setting the 'cancel' property in the notification object.
-
-```
-data.additionalData.pushNotificationReceivedEventArgs.cancel = true
-```
-
-## Native Requirements
-
-- There should be no dependency on any other plugins.
-- All platforms should use the same API!
-
-## Running Tests
-
-```
-npm test
-```
-
-## Contributing
-
-### Editor Config
-
-The project uses [.editorconfig](http://editorconfig.org/) to define the coding
-style of each file. We recommend that you install the Editor Config extension
-for your preferred IDE.
-
-### JSHint
-
-The project uses [.jshint](http://jshint.com/docs) to define the JavaScript
-coding conventions. Most editors now have a JSHint add-on to provide on-save
-or on-edit linting.
-
-#### Install JSHint for vim
-
-1. Install [jshint](https://www.npmjs.com/package/jshint).
-1. Install [jshint.vim](https://github.com/wookiehangover/jshint.vim).
-
-#### Install JSHint for Sublime
-
-1. Install [Package Control](https://packagecontrol.io/installation)
-1. Restart Sublime
-1. Type `CMD+SHIFT+P`
-1. Type _Install Package_
-1. Type _JSHint Gutter_
-1. Sublime -> Preferences -> Package Settings -> JSHint Gutter
-1. Set `lint_on_load` and `lint_on_save` to `true`
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/beep.wav b/StoneIsland/plugins/phonegap-plugin-push/example/www/beep.wav
deleted file mode 100755
index bdadf530..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/beep.wav
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/css/index.css b/StoneIsland/plugins/phonegap-plugin-push/example/www/css/index.css
deleted file mode 100755
index 51daa797..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/css/index.css
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-* {
- -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */
-}
-
-body {
- -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */
- -webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */
- -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */
- background-color:#E4E4E4;
- background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
- background-image:-webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
- background-image:-ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
- background-image:-webkit-gradient(
- linear,
- left top,
- left bottom,
- color-stop(0, #A7A7A7),
- color-stop(0.51, #E4E4E4)
- );
- background-attachment:fixed;
- font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif;
- font-size:12px;
- height:100%;
- margin:0px;
- padding:0px;
- text-transform:uppercase;
- width:100%;
-}
-
-/* Portrait layout (default) */
-.app {
- background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */
- position:absolute; /* position in the center of the screen */
- left:50%;
- top:50%;
- height:50px; /* text area height */
- width:225px; /* text area width */
- text-align:center;
- padding:180px 0px 0px 0px; /* image height is 200px (bottom 20px are overlapped with text) */
- margin:-115px 0px 0px -112px; /* offset vertical: half of image height and text area height */
- /* offset horizontal: half of text area width */
-}
-
-/* Landscape layout (with min-width) */
-@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) {
- .app {
- background-position:left center;
- padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */
- margin:-90px 0px 0px -198px; /* offset vertical: half of image height */
- /* offset horizontal: half of image width and text area width */
- }
-}
-
-h1 {
- font-size:24px;
- font-weight:normal;
- margin:0px;
- overflow:visible;
- padding:0px;
- text-align:center;
-}
-
-.event {
- border-radius:4px;
- -webkit-border-radius:4px;
- color:#FFFFFF;
- font-size:12px;
- margin:0px 30px;
- padding:2px 0px;
-}
-
-.event.listening {
- background-color:#333333;
- display:block;
-}
-
-.event.received {
- background-color:#4B946A;
- display:none;
-}
-
-@keyframes fade {
- from { opacity: 1.0; }
- 50% { opacity: 0.4; }
- to { opacity: 1.0; }
-}
-
-@-webkit-keyframes fade {
- from { opacity: 1.0; }
- 50% { opacity: 0.4; }
- to { opacity: 1.0; }
-}
-
-.blink {
- animation:fade 3000ms infinite;
- -webkit-animation:fade 3000ms infinite;
-}
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/css/materialize.min.css b/StoneIsland/plugins/phonegap-plugin-push/example/www/css/materialize.min.css
deleted file mode 100755
index e956485c..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/css/materialize.min.css
+++ /dev/null
@@ -1,16 +0,0 @@
-/*!
- * Materialize v0.96.1 (http://materializecss.com)
- * Copyright 2014-2015 Materialize
- * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
- */
-.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#aa00ff !important}.purple-text.text-accent-4{color:#aa00ff !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ffff00 !important}.yellow-text.text-accent-2{color:#ffff00 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eeeeee !important}.grey-text.text-lighten-3{color:#eeeeee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.shades.black{background-color:#000000 !important}.shades-text.text-black{color:#000000 !important}.shades.white{background-color:#FFFFFF !important}.shades-text.text-white{color:#FFFFFF !important}.shades.transparent{background-color:transparent !important}.shades-text.text-transparent{color:transparent !important}.black{background-color:#000000 !important}.black-text{color:#000000 !important}.white{background-color:#FFFFFF !important}.white-text{color:#FFFFFF !important}.transparent{background-color:transparent !important}.transparent-text{color:transparent !important}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}html input[type="button"],button,input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}ul{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.valign-wrapper .valign{display:block}ul{padding:0}ul li{list-style-type:none}.clearfix{clear:both}.z-depth-1,nav,.card-panel,.card,.toast,.btn,.btn-large,.btn-floating,.dropdown-content,.collapsible,.side-nav{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);-moz-box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.z-depth-1-half,.btn:hover,.btn-large:hover,.btn-floating:hover{-webkit-box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);-moz-box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15)}.z-depth-2{-webkit-box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);-moz-box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.z-depth-3{-webkit-box-shadow:0 12px 15px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);-moz-box-shadow:0 12px 15px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);box-shadow:0 12px 15px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19)}.z-depth-4,.modal{-webkit-box-shadow:0 16px 28px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21);-moz-box-shadow:0 16px 28px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21);box-shadow:0 16px 28px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21)}.z-depth-5{-webkit-box-shadow:0 27px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22);-moz-box-shadow:0 27px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22);box-shadow:0 27px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #EF9A9A}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{font-size:1.2rem;float:left;width:30px;height:30px;margin:0 10px;border-radius:2px;text-align:center}.pagination li a{color:#444}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{color:#999}.pagination li i{font-size:2rem;line-height:1.8rem}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax img{display:none;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;transform-origin:0 50%}@media only screen and (max-width : 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important;}}@media only screen and (max-width : 992px){.hide-on-med-and-down{display:none !important;}}@media only screen and (min-width : 601px){.hide-on-med-and-up{display:none !important;}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important;}}@media only screen and (min-width : 993px){.hide-on-large-only{display:none !important;}}@media only screen and (min-width : 993px){.show-on-large{display:initial !important;}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:initial !important;}}@media only screen and (max-width : 600px){.show-on-small{display:initial !important;}}@media only screen and (min-width : 601px){.show-on-medium-and-up{display:initial !important;}}@media only screen and (max-width : 992px){.show-on-medium-and-down{display:initial !important;}}@media only screen and (max-width : 600px){.center-on-small-only{text-align:center;}}footer.page-footer{margin-top:20px;padding-top:20px;background-color:#ee6e73}footer.page-footer .footer-copyright{overflow:hidden;height:50px;line-height:50px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table}table.bordered tr{border-bottom:1px solid #d0d0d0}table.striped tbody tr:nth-child(odd){background-color:#f2f2f2}table.hoverable tbody tr{-webkit-transition:background-color .25s ease;-moz-transition:background-color .25s ease;-o-transition:background-color .25s ease;-ms-transition:background-color .25s ease;transition:background-color .25s ease}table.hoverable tbody tr:hover{background-color:#f2f2f2}table.centered thead tr th,table.centered tbody tr td{text-align:center}thead{border-bottom:1px solid #d0d0d0}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width : 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid #d0d0d0}table.responsive-table.bordered th{border-bottom:0;border-left:0}table.responsive-table.bordered td{border-left:0;border-right:0;border-bottom:0}table.responsive-table.bordered tr{border:0}table.responsive-table.bordered tbody tr{border-right:1px solid #d0d0d0}}.collection{margin:0.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar .circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection a.collection-item{display:block;-webkit-transition:0.25s;-moz-transition:0.25s;-o-transition:0.25s;-ms-transition:0.25s;transition:0.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.secondary-content{float:right;color:#26a69a}span.badge{min-width:3rem;padding:0 6px;text-align:center;font-size:1rem;line-height:inherit;color:#757575;position:absolute;right:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}span.badge.new{font-weight:300;font-size:0.8rem;color:#fff;background-color:#26a69a;border-radius:2px}span.badge.new:after{content:" new"}.video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.video-container.no-controls{padding-top:0}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:0.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;background-color:inherit;top:0;bottom:0;background-color:#26a69a;-webkit-transition:width .3s linear;-moz-transition:width .3s linear;-o-transition:width .3s linear;-ms-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-moz-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-ms-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-o-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-moz-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-ms-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-o-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;-moz-animation-delay:1.15s;-ms-animation-delay:1.15s;-o-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-moz-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@-moz-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select,input[type=range],input[type=range]+.thumb{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}@font-face{font-family:"Material-Design-Icons";src:url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"),url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"),url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"),url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"),url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg");font-weight:normal;font-style:normal;}[class^="mdi-"],[class*=" mdi-"]{font-family:"Material-Design-Icons";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-action-3d-rotation:before{content:"\e600"}.mdi-action-accessibility:before{content:"\e601"}.mdi-action-account-balance:before{content:"\e602"}.mdi-action-account-balance-wallet:before{content:"\e603"}.mdi-action-account-box:before{content:"\e604"}.mdi-action-account-child:before{content:"\e605"}.mdi-action-account-circle:before{content:"\e606"}.mdi-action-add-shopping-cart:before{content:"\e607"}.mdi-action-alarm:before{content:"\e608"}.mdi-action-alarm-add:before{content:"\e609"}.mdi-action-alarm-off:before{content:"\e60a"}.mdi-action-alarm-on:before{content:"\e60b"}.mdi-action-android:before{content:"\e60c"}.mdi-action-announcement:before{content:"\e60d"}.mdi-action-aspect-ratio:before{content:"\e60e"}.mdi-action-assessment:before{content:"\e60f"}.mdi-action-assignment:before{content:"\e610"}.mdi-action-assignment-ind:before{content:"\e611"}.mdi-action-assignment-late:before{content:"\e612"}.mdi-action-assignment-return:before{content:"\e613"}.mdi-action-assignment-returned:before{content:"\e614"}.mdi-action-assignment-turned-in:before{content:"\e615"}.mdi-action-autorenew:before{content:"\e616"}.mdi-action-backup:before{content:"\e617"}.mdi-action-book:before{content:"\e618"}.mdi-action-bookmark:before{content:"\e619"}.mdi-action-bookmark-outline:before{content:"\e61a"}.mdi-action-bug-report:before{content:"\e61b"}.mdi-action-cached:before{content:"\e61c"}.mdi-action-class:before{content:"\e61d"}.mdi-action-credit-card:before{content:"\e61e"}.mdi-action-dashboard:before{content:"\e61f"}.mdi-action-delete:before{content:"\e620"}.mdi-action-description:before{content:"\e621"}.mdi-action-dns:before{content:"\e622"}.mdi-action-done:before{content:"\e623"}.mdi-action-done-all:before{content:"\e624"}.mdi-action-event:before{content:"\e625"}.mdi-action-exit-to-app:before{content:"\e626"}.mdi-action-explore:before{content:"\e627"}.mdi-action-extension:before{content:"\e628"}.mdi-action-face-unlock:before{content:"\e629"}.mdi-action-favorite:before{content:"\e62a"}.mdi-action-favorite-outline:before{content:"\e62b"}.mdi-action-find-in-page:before{content:"\e62c"}.mdi-action-find-replace:before{content:"\e62d"}.mdi-action-flip-to-back:before{content:"\e62e"}.mdi-action-flip-to-front:before{content:"\e62f"}.mdi-action-get-app:before{content:"\e630"}.mdi-action-grade:before{content:"\e631"}.mdi-action-group-work:before{content:"\e632"}.mdi-action-help:before{content:"\e633"}.mdi-action-highlight-remove:before{content:"\e634"}.mdi-action-history:before{content:"\e635"}.mdi-action-home:before{content:"\e636"}.mdi-action-https:before{content:"\e637"}.mdi-action-info:before{content:"\e638"}.mdi-action-info-outline:before{content:"\e639"}.mdi-action-input:before{content:"\e63a"}.mdi-action-invert-colors:before{content:"\e63b"}.mdi-action-label:before{content:"\e63c"}.mdi-action-label-outline:before{content:"\e63d"}.mdi-action-language:before{content:"\e63e"}.mdi-action-launch:before{content:"\e63f"}.mdi-action-list:before{content:"\e640"}.mdi-action-lock:before{content:"\e641"}.mdi-action-lock-open:before{content:"\e642"}.mdi-action-lock-outline:before{content:"\e643"}.mdi-action-loyalty:before{content:"\e644"}.mdi-action-markunread-mailbox:before{content:"\e645"}.mdi-action-note-add:before{content:"\e646"}.mdi-action-open-in-browser:before{content:"\e647"}.mdi-action-open-in-new:before{content:"\e648"}.mdi-action-open-with:before{content:"\e649"}.mdi-action-pageview:before{content:"\e64a"}.mdi-action-payment:before{content:"\e64b"}.mdi-action-perm-camera-mic:before{content:"\e64c"}.mdi-action-perm-contact-cal:before{content:"\e64d"}.mdi-action-perm-data-setting:before{content:"\e64e"}.mdi-action-perm-device-info:before{content:"\e64f"}.mdi-action-perm-identity:before{content:"\e650"}.mdi-action-perm-media:before{content:"\e651"}.mdi-action-perm-phone-msg:before{content:"\e652"}.mdi-action-perm-scan-wifi:before{content:"\e653"}.mdi-action-picture-in-picture:before{content:"\e654"}.mdi-action-polymer:before{content:"\e655"}.mdi-action-print:before{content:"\e656"}.mdi-action-query-builder:before{content:"\e657"}.mdi-action-question-answer:before{content:"\e658"}.mdi-action-receipt:before{content:"\e659"}.mdi-action-redeem:before{content:"\e65a"}.mdi-action-report-problem:before{content:"\e65b"}.mdi-action-restore:before{content:"\e65c"}.mdi-action-room:before{content:"\e65d"}.mdi-action-schedule:before{content:"\e65e"}.mdi-action-search:before{content:"\e65f"}.mdi-action-settings:before{content:"\e660"}.mdi-action-settings-applications:before{content:"\e661"}.mdi-action-settings-backup-restore:before{content:"\e662"}.mdi-action-settings-bluetooth:before{content:"\e663"}.mdi-action-settings-cell:before{content:"\e664"}.mdi-action-settings-display:before{content:"\e665"}.mdi-action-settings-ethernet:before{content:"\e666"}.mdi-action-settings-input-antenna:before{content:"\e667"}.mdi-action-settings-input-component:before{content:"\e668"}.mdi-action-settings-input-composite:before{content:"\e669"}.mdi-action-settings-input-hdmi:before{content:"\e66a"}.mdi-action-settings-input-svideo:before{content:"\e66b"}.mdi-action-settings-overscan:before{content:"\e66c"}.mdi-action-settings-phone:before{content:"\e66d"}.mdi-action-settings-power:before{content:"\e66e"}.mdi-action-settings-remote:before{content:"\e66f"}.mdi-action-settings-voice:before{content:"\e670"}.mdi-action-shop:before{content:"\e671"}.mdi-action-shopping-basket:before{content:"\e672"}.mdi-action-shopping-cart:before{content:"\e673"}.mdi-action-shop-two:before{content:"\e674"}.mdi-action-speaker-notes:before{content:"\e675"}.mdi-action-spellcheck:before{content:"\e676"}.mdi-action-star-rate:before{content:"\e677"}.mdi-action-stars:before{content:"\e678"}.mdi-action-store:before{content:"\e679"}.mdi-action-subject:before{content:"\e67a"}.mdi-action-swap-horiz:before{content:"\e67b"}.mdi-action-swap-vert:before{content:"\e67c"}.mdi-action-swap-vert-circle:before{content:"\e67d"}.mdi-action-system-update-tv:before{content:"\e67e"}.mdi-action-tab:before{content:"\e67f"}.mdi-action-tab-unselected:before{content:"\e680"}.mdi-action-theaters:before{content:"\e681"}.mdi-action-thumb-down:before{content:"\e682"}.mdi-action-thumbs-up-down:before{content:"\e683"}.mdi-action-thumb-up:before{content:"\e684"}.mdi-action-toc:before{content:"\e685"}.mdi-action-today:before{content:"\e686"}.mdi-action-track-changes:before{content:"\e687"}.mdi-action-translate:before{content:"\e688"}.mdi-action-trending-down:before{content:"\e689"}.mdi-action-trending-neutral:before{content:"\e68a"}.mdi-action-trending-up:before{content:"\e68b"}.mdi-action-turned-in:before{content:"\e68c"}.mdi-action-turned-in-not:before{content:"\e68d"}.mdi-action-verified-user:before{content:"\e68e"}.mdi-action-view-agenda:before{content:"\e68f"}.mdi-action-view-array:before{content:"\e690"}.mdi-action-view-carousel:before{content:"\e691"}.mdi-action-view-column:before{content:"\e692"}.mdi-action-view-day:before{content:"\e693"}.mdi-action-view-headline:before{content:"\e694"}.mdi-action-view-list:before{content:"\e695"}.mdi-action-view-module:before{content:"\e696"}.mdi-action-view-quilt:before{content:"\e697"}.mdi-action-view-stream:before{content:"\e698"}.mdi-action-view-week:before{content:"\e699"}.mdi-action-visibility:before{content:"\e69a"}.mdi-action-visibility-off:before{content:"\e69b"}.mdi-action-wallet-giftcard:before{content:"\e69c"}.mdi-action-wallet-membership:before{content:"\e69d"}.mdi-action-wallet-travel:before{content:"\e69e"}.mdi-action-work:before{content:"\e69f"}.mdi-alert-error:before{content:"\e6a0"}.mdi-alert-warning:before{content:"\e6a1"}.mdi-av-album:before{content:"\e6a2"}.mdi-av-timer:before{content:"\e6a3"}.mdi-av-closed-caption:before{content:"\e6a4"}.mdi-av-equalizer:before{content:"\e6a5"}.mdi-av-explicit:before{content:"\e6a6"}.mdi-av-fast-forward:before{content:"\e6a7"}.mdi-av-fast-rewind:before{content:"\e6a8"}.mdi-av-games:before{content:"\e6a9"}.mdi-av-hearing:before{content:"\e6aa"}.mdi-av-high-quality:before{content:"\e6ab"}.mdi-av-loop:before{content:"\e6ac"}.mdi-av-mic:before{content:"\e6ad"}.mdi-av-mic-none:before{content:"\e6ae"}.mdi-av-mic-off:before{content:"\e6af"}.mdi-av-movie:before{content:"\e6b0"}.mdi-av-my-library-add:before{content:"\e6b1"}.mdi-av-my-library-books:before{content:"\e6b2"}.mdi-av-my-library-music:before{content:"\e6b3"}.mdi-av-new-releases:before{content:"\e6b4"}.mdi-av-not-interested:before{content:"\e6b5"}.mdi-av-pause:before{content:"\e6b6"}.mdi-av-pause-circle-fill:before{content:"\e6b7"}.mdi-av-pause-circle-outline:before{content:"\e6b8"}.mdi-av-play-arrow:before{content:"\e6b9"}.mdi-av-play-circle-fill:before{content:"\e6ba"}.mdi-av-play-circle-outline:before{content:"\e6bb"}.mdi-av-playlist-add:before{content:"\e6bc"}.mdi-av-play-shopping-bag:before{content:"\e6bd"}.mdi-av-queue:before{content:"\e6be"}.mdi-av-queue-music:before{content:"\e6bf"}.mdi-av-radio:before{content:"\e6c0"}.mdi-av-recent-actors:before{content:"\e6c1"}.mdi-av-repeat:before{content:"\e6c2"}.mdi-av-repeat-one:before{content:"\e6c3"}.mdi-av-replay:before{content:"\e6c4"}.mdi-av-shuffle:before{content:"\e6c5"}.mdi-av-skip-next:before{content:"\e6c6"}.mdi-av-skip-previous:before{content:"\e6c7"}.mdi-av-snooze:before{content:"\e6c8"}.mdi-av-stop:before{content:"\e6c9"}.mdi-av-subtitles:before{content:"\e6ca"}.mdi-av-surround-sound:before{content:"\e6cb"}.mdi-av-videocam:before{content:"\e6cc"}.mdi-av-videocam-off:before{content:"\e6cd"}.mdi-av-video-collection:before{content:"\e6ce"}.mdi-av-volume-down:before{content:"\e6cf"}.mdi-av-volume-mute:before{content:"\e6d0"}.mdi-av-volume-off:before{content:"\e6d1"}.mdi-av-volume-up:before{content:"\e6d2"}.mdi-av-web:before{content:"\e6d3"}.mdi-communication-business:before{content:"\e6d4"}.mdi-communication-call:before{content:"\e6d5"}.mdi-communication-call-end:before{content:"\e6d6"}.mdi-communication-call-made:before{content:"\e6d7"}.mdi-communication-call-merge:before{content:"\e6d8"}.mdi-communication-call-missed:before{content:"\e6d9"}.mdi-communication-call-received:before{content:"\e6da"}.mdi-communication-call-split:before{content:"\e6db"}.mdi-communication-chat:before{content:"\e6dc"}.mdi-communication-clear-all:before{content:"\e6dd"}.mdi-communication-comment:before{content:"\e6de"}.mdi-communication-contacts:before{content:"\e6df"}.mdi-communication-dialer-sip:before{content:"\e6e0"}.mdi-communication-dialpad:before{content:"\e6e1"}.mdi-communication-dnd-on:before{content:"\e6e2"}.mdi-communication-email:before{content:"\e6e3"}.mdi-communication-forum:before{content:"\e6e4"}.mdi-communication-import-export:before{content:"\e6e5"}.mdi-communication-invert-colors-off:before{content:"\e6e6"}.mdi-communication-invert-colors-on:before{content:"\e6e7"}.mdi-communication-live-help:before{content:"\e6e8"}.mdi-communication-location-off:before{content:"\e6e9"}.mdi-communication-location-on:before{content:"\e6ea"}.mdi-communication-message:before{content:"\e6eb"}.mdi-communication-messenger:before{content:"\e6ec"}.mdi-communication-no-sim:before{content:"\e6ed"}.mdi-communication-phone:before{content:"\e6ee"}.mdi-communication-portable-wifi-off:before{content:"\e6ef"}.mdi-communication-quick-contacts-dialer:before{content:"\e6f0"}.mdi-communication-quick-contacts-mail:before{content:"\e6f1"}.mdi-communication-ring-volume:before{content:"\e6f2"}.mdi-communication-stay-current-landscape:before{content:"\e6f3"}.mdi-communication-stay-current-portrait:before{content:"\e6f4"}.mdi-communication-stay-primary-landscape:before{content:"\e6f5"}.mdi-communication-stay-primary-portrait:before{content:"\e6f6"}.mdi-communication-swap-calls:before{content:"\e6f7"}.mdi-communication-textsms:before{content:"\e6f8"}.mdi-communication-voicemail:before{content:"\e6f9"}.mdi-communication-vpn-key:before{content:"\e6fa"}.mdi-content-add:before{content:"\e6fb"}.mdi-content-add-box:before{content:"\e6fc"}.mdi-content-add-circle:before{content:"\e6fd"}.mdi-content-add-circle-outline:before{content:"\e6fe"}.mdi-content-archive:before{content:"\e6ff"}.mdi-content-backspace:before{content:"\e700"}.mdi-content-block:before{content:"\e701"}.mdi-content-clear:before{content:"\e702"}.mdi-content-content-copy:before{content:"\e703"}.mdi-content-content-cut:before{content:"\e704"}.mdi-content-content-paste:before{content:"\e705"}.mdi-content-create:before{content:"\e706"}.mdi-content-drafts:before{content:"\e707"}.mdi-content-filter-list:before{content:"\e708"}.mdi-content-flag:before{content:"\e709"}.mdi-content-forward:before{content:"\e70a"}.mdi-content-gesture:before{content:"\e70b"}.mdi-content-inbox:before{content:"\e70c"}.mdi-content-link:before{content:"\e70d"}.mdi-content-mail:before{content:"\e70e"}.mdi-content-markunread:before{content:"\e70f"}.mdi-content-redo:before{content:"\e710"}.mdi-content-remove:before{content:"\e711"}.mdi-content-remove-circle:before{content:"\e712"}.mdi-content-remove-circle-outline:before{content:"\e713"}.mdi-content-reply:before{content:"\e714"}.mdi-content-reply-all:before{content:"\e715"}.mdi-content-report:before{content:"\e716"}.mdi-content-save:before{content:"\e717"}.mdi-content-select-all:before{content:"\e718"}.mdi-content-send:before{content:"\e719"}.mdi-content-sort:before{content:"\e71a"}.mdi-content-text-format:before{content:"\e71b"}.mdi-content-undo:before{content:"\e71c"}.mdi-device-access-alarm:before{content:"\e71d"}.mdi-device-access-alarms:before{content:"\e71e"}.mdi-device-access-time:before{content:"\e71f"}.mdi-device-add-alarm:before{content:"\e720"}.mdi-device-airplanemode-off:before{content:"\e721"}.mdi-device-airplanemode-on:before{content:"\e722"}.mdi-device-battery-20:before{content:"\e723"}.mdi-device-battery-30:before{content:"\e724"}.mdi-device-battery-50:before{content:"\e725"}.mdi-device-battery-60:before{content:"\e726"}.mdi-device-battery-80:before{content:"\e727"}.mdi-device-battery-90:before{content:"\e728"}.mdi-device-battery-alert:before{content:"\e729"}.mdi-device-battery-charging-20:before{content:"\e72a"}.mdi-device-battery-charging-30:before{content:"\e72b"}.mdi-device-battery-charging-50:before{content:"\e72c"}.mdi-device-battery-charging-60:before{content:"\e72d"}.mdi-device-battery-charging-80:before{content:"\e72e"}.mdi-device-battery-charging-90:before{content:"\e72f"}.mdi-device-battery-charging-full:before{content:"\e730"}.mdi-device-battery-full:before{content:"\e731"}.mdi-device-battery-std:before{content:"\e732"}.mdi-device-battery-unknown:before{content:"\e733"}.mdi-device-bluetooth:before{content:"\e734"}.mdi-device-bluetooth-connected:before{content:"\e735"}.mdi-device-bluetooth-disabled:before{content:"\e736"}.mdi-device-bluetooth-searching:before{content:"\e737"}.mdi-device-brightness-auto:before{content:"\e738"}.mdi-device-brightness-high:before{content:"\e739"}.mdi-device-brightness-low:before{content:"\e73a"}.mdi-device-brightness-medium:before{content:"\e73b"}.mdi-device-data-usage:before{content:"\e73c"}.mdi-device-developer-mode:before{content:"\e73d"}.mdi-device-devices:before{content:"\e73e"}.mdi-device-dvr:before{content:"\e73f"}.mdi-device-gps-fixed:before{content:"\e740"}.mdi-device-gps-not-fixed:before{content:"\e741"}.mdi-device-gps-off:before{content:"\e742"}.mdi-device-location-disabled:before{content:"\e743"}.mdi-device-location-searching:before{content:"\e744"}.mdi-device-multitrack-audio:before{content:"\e745"}.mdi-device-network-cell:before{content:"\e746"}.mdi-device-network-wifi:before{content:"\e747"}.mdi-device-nfc:before{content:"\e748"}.mdi-device-now-wallpaper:before{content:"\e749"}.mdi-device-now-widgets:before{content:"\e74a"}.mdi-device-screen-lock-landscape:before{content:"\e74b"}.mdi-device-screen-lock-portrait:before{content:"\e74c"}.mdi-device-screen-lock-rotation:before{content:"\e74d"}.mdi-device-screen-rotation:before{content:"\e74e"}.mdi-device-sd-storage:before{content:"\e74f"}.mdi-device-settings-system-daydream:before{content:"\e750"}.mdi-device-signal-cellular-0-bar:before{content:"\e751"}.mdi-device-signal-cellular-1-bar:before{content:"\e752"}.mdi-device-signal-cellular-2-bar:before{content:"\e753"}.mdi-device-signal-cellular-3-bar:before{content:"\e754"}.mdi-device-signal-cellular-4-bar:before{content:"\e755"}.mdi-device-signal-cellular-connected-no-internet-0-bar:before{content:"\e756"}.mdi-device-signal-cellular-connected-no-internet-1-bar:before{content:"\e757"}.mdi-device-signal-cellular-connected-no-internet-2-bar:before{content:"\e758"}.mdi-device-signal-cellular-connected-no-internet-3-bar:before{content:"\e759"}.mdi-device-signal-cellular-connected-no-internet-4-bar:before{content:"\e75a"}.mdi-device-signal-cellular-no-sim:before{content:"\e75b"}.mdi-device-signal-cellular-null:before{content:"\e75c"}.mdi-device-signal-cellular-off:before{content:"\e75d"}.mdi-device-signal-wifi-0-bar:before{content:"\e75e"}.mdi-device-signal-wifi-1-bar:before{content:"\e75f"}.mdi-device-signal-wifi-2-bar:before{content:"\e760"}.mdi-device-signal-wifi-3-bar:before{content:"\e761"}.mdi-device-signal-wifi-4-bar:before{content:"\e762"}.mdi-device-signal-wifi-off:before{content:"\e763"}.mdi-device-storage:before{content:"\e764"}.mdi-device-usb:before{content:"\e765"}.mdi-device-wifi-lock:before{content:"\e766"}.mdi-device-wifi-tethering:before{content:"\e767"}.mdi-editor-attach-file:before{content:"\e768"}.mdi-editor-attach-money:before{content:"\e769"}.mdi-editor-border-all:before{content:"\e76a"}.mdi-editor-border-bottom:before{content:"\e76b"}.mdi-editor-border-clear:before{content:"\e76c"}.mdi-editor-border-color:before{content:"\e76d"}.mdi-editor-border-horizontal:before{content:"\e76e"}.mdi-editor-border-inner:before{content:"\e76f"}.mdi-editor-border-left:before{content:"\e770"}.mdi-editor-border-outer:before{content:"\e771"}.mdi-editor-border-right:before{content:"\e772"}.mdi-editor-border-style:before{content:"\e773"}.mdi-editor-border-top:before{content:"\e774"}.mdi-editor-border-vertical:before{content:"\e775"}.mdi-editor-format-align-center:before{content:"\e776"}.mdi-editor-format-align-justify:before{content:"\e777"}.mdi-editor-format-align-left:before{content:"\e778"}.mdi-editor-format-align-right:before{content:"\e779"}.mdi-editor-format-bold:before{content:"\e77a"}.mdi-editor-format-clear:before{content:"\e77b"}.mdi-editor-format-color-fill:before{content:"\e77c"}.mdi-editor-format-color-reset:before{content:"\e77d"}.mdi-editor-format-color-text:before{content:"\e77e"}.mdi-editor-format-indent-decrease:before{content:"\e77f"}.mdi-editor-format-indent-increase:before{content:"\e780"}.mdi-editor-format-italic:before{content:"\e781"}.mdi-editor-format-line-spacing:before{content:"\e782"}.mdi-editor-format-list-bulleted:before{content:"\e783"}.mdi-editor-format-list-numbered:before{content:"\e784"}.mdi-editor-format-paint:before{content:"\e785"}.mdi-editor-format-quote:before{content:"\e786"}.mdi-editor-format-size:before{content:"\e787"}.mdi-editor-format-strikethrough:before{content:"\e788"}.mdi-editor-functions:before{content:"\e789"}.mdi-editor-format-textdirection-l-to-r:before{content:"\e78a"}.mdi-editor-format-underline:before{content:"\e78b"}.mdi-editor-format-textdirection-r-to-l:before{content:"\e78c"}.mdi-editor-insert-chart:before{content:"\e78d"}.mdi-editor-insert-comment:before{content:"\e78e"}.mdi-editor-insert-drive-file:before{content:"\e78f"}.mdi-editor-insert-emoticon:before{content:"\e790"}.mdi-editor-insert-invitation:before{content:"\e791"}.mdi-editor-insert-link:before{content:"\e792"}.mdi-editor-insert-photo:before{content:"\e793"}.mdi-editor-merge-type:before{content:"\e794"}.mdi-editor-mode-comment:before{content:"\e795"}.mdi-editor-mode-edit:before{content:"\e796"}.mdi-editor-publish:before{content:"\e797"}.mdi-editor-vertical-align-bottom:before{content:"\e798"}.mdi-editor-vertical-align-center:before{content:"\e799"}.mdi-editor-vertical-align-top:before{content:"\e79a"}.mdi-editor-wrap-text:before{content:"\e79b"}.mdi-file-attachment:before{content:"\e79c"}.mdi-file-cloud:before{content:"\e79d"}.mdi-file-cloud-circle:before{content:"\e79e"}.mdi-file-cloud-done:before{content:"\e79f"}.mdi-file-cloud-download:before{content:"\e7a0"}.mdi-file-cloud-off:before{content:"\e7a1"}.mdi-file-cloud-queue:before{content:"\e7a2"}.mdi-file-cloud-upload:before{content:"\e7a3"}.mdi-file-file-download:before{content:"\e7a4"}.mdi-file-file-upload:before{content:"\e7a5"}.mdi-file-folder:before{content:"\e7a6"}.mdi-file-folder-open:before{content:"\e7a7"}.mdi-file-folder-shared:before{content:"\e7a8"}.mdi-hardware-cast:before{content:"\e7a9"}.mdi-hardware-cast-connected:before{content:"\e7aa"}.mdi-hardware-computer:before{content:"\e7ab"}.mdi-hardware-desktop-mac:before{content:"\e7ac"}.mdi-hardware-desktop-windows:before{content:"\e7ad"}.mdi-hardware-dock:before{content:"\e7ae"}.mdi-hardware-gamepad:before{content:"\e7af"}.mdi-hardware-headset:before{content:"\e7b0"}.mdi-hardware-headset-mic:before{content:"\e7b1"}.mdi-hardware-keyboard:before{content:"\e7b2"}.mdi-hardware-keyboard-alt:before{content:"\e7b3"}.mdi-hardware-keyboard-arrow-down:before{content:"\e7b4"}.mdi-hardware-keyboard-arrow-left:before{content:"\e7b5"}.mdi-hardware-keyboard-arrow-right:before{content:"\e7b6"}.mdi-hardware-keyboard-arrow-up:before{content:"\e7b7"}.mdi-hardware-keyboard-backspace:before{content:"\e7b8"}.mdi-hardware-keyboard-capslock:before{content:"\e7b9"}.mdi-hardware-keyboard-control:before{content:"\e7ba"}.mdi-hardware-keyboard-hide:before{content:"\e7bb"}.mdi-hardware-keyboard-return:before{content:"\e7bc"}.mdi-hardware-keyboard-tab:before{content:"\e7bd"}.mdi-hardware-keyboard-voice:before{content:"\e7be"}.mdi-hardware-laptop:before{content:"\e7bf"}.mdi-hardware-laptop-chromebook:before{content:"\e7c0"}.mdi-hardware-laptop-mac:before{content:"\e7c1"}.mdi-hardware-laptop-windows:before{content:"\e7c2"}.mdi-hardware-memory:before{content:"\e7c3"}.mdi-hardware-mouse:before{content:"\e7c4"}.mdi-hardware-phone-android:before{content:"\e7c5"}.mdi-hardware-phone-iphone:before{content:"\e7c6"}.mdi-hardware-phonelink:before{content:"\e7c7"}.mdi-hardware-phonelink-off:before{content:"\e7c8"}.mdi-hardware-security:before{content:"\e7c9"}.mdi-hardware-sim-card:before{content:"\e7ca"}.mdi-hardware-smartphone:before{content:"\e7cb"}.mdi-hardware-speaker:before{content:"\e7cc"}.mdi-hardware-tablet:before{content:"\e7cd"}.mdi-hardware-tablet-android:before{content:"\e7ce"}.mdi-hardware-tablet-mac:before{content:"\e7cf"}.mdi-hardware-tv:before{content:"\e7d0"}.mdi-hardware-watch:before{content:"\e7d1"}.mdi-image-add-to-photos:before{content:"\e7d2"}.mdi-image-adjust:before{content:"\e7d3"}.mdi-image-assistant-photo:before{content:"\e7d4"}.mdi-image-audiotrack:before{content:"\e7d5"}.mdi-image-blur-circular:before{content:"\e7d6"}.mdi-image-blur-linear:before{content:"\e7d7"}.mdi-image-blur-off:before{content:"\e7d8"}.mdi-image-blur-on:before{content:"\e7d9"}.mdi-image-brightness-1:before{content:"\e7da"}.mdi-image-brightness-2:before{content:"\e7db"}.mdi-image-brightness-3:before{content:"\e7dc"}.mdi-image-brightness-4:before{content:"\e7dd"}.mdi-image-brightness-5:before{content:"\e7de"}.mdi-image-brightness-6:before{content:"\e7df"}.mdi-image-brightness-7:before{content:"\e7e0"}.mdi-image-brush:before{content:"\e7e1"}.mdi-image-camera:before{content:"\e7e2"}.mdi-image-camera-alt:before{content:"\e7e3"}.mdi-image-camera-front:before{content:"\e7e4"}.mdi-image-camera-rear:before{content:"\e7e5"}.mdi-image-camera-roll:before{content:"\e7e6"}.mdi-image-center-focus-strong:before{content:"\e7e7"}.mdi-image-center-focus-weak:before{content:"\e7e8"}.mdi-image-collections:before{content:"\e7e9"}.mdi-image-colorize:before{content:"\e7ea"}.mdi-image-color-lens:before{content:"\e7eb"}.mdi-image-compare:before{content:"\e7ec"}.mdi-image-control-point:before{content:"\e7ed"}.mdi-image-control-point-duplicate:before{content:"\e7ee"}.mdi-image-crop:before{content:"\e7ef"}.mdi-image-crop-3-2:before{content:"\e7f0"}.mdi-image-crop-5-4:before{content:"\e7f1"}.mdi-image-crop-7-5:before{content:"\e7f2"}.mdi-image-crop-16-9:before{content:"\e7f3"}.mdi-image-crop-din:before{content:"\e7f4"}.mdi-image-crop-free:before{content:"\e7f5"}.mdi-image-crop-landscape:before{content:"\e7f6"}.mdi-image-crop-original:before{content:"\e7f7"}.mdi-image-crop-portrait:before{content:"\e7f8"}.mdi-image-crop-square:before{content:"\e7f9"}.mdi-image-dehaze:before{content:"\e7fa"}.mdi-image-details:before{content:"\e7fb"}.mdi-image-edit:before{content:"\e7fc"}.mdi-image-exposure:before{content:"\e7fd"}.mdi-image-exposure-minus-1:before{content:"\e7fe"}.mdi-image-exposure-minus-2:before{content:"\e7ff"}.mdi-image-exposure-plus-1:before{content:"\e800"}.mdi-image-exposure-plus-2:before{content:"\e801"}.mdi-image-exposure-zero:before{content:"\e802"}.mdi-image-filter:before{content:"\e803"}.mdi-image-filter-1:before{content:"\e804"}.mdi-image-filter-2:before{content:"\e805"}.mdi-image-filter-3:before{content:"\e806"}.mdi-image-filter-4:before{content:"\e807"}.mdi-image-filter-5:before{content:"\e808"}.mdi-image-filter-6:before{content:"\e809"}.mdi-image-filter-7:before{content:"\e80a"}.mdi-image-filter-8:before{content:"\e80b"}.mdi-image-filter-9:before{content:"\e80c"}.mdi-image-filter-9-plus:before{content:"\e80d"}.mdi-image-filter-b-and-w:before{content:"\e80e"}.mdi-image-filter-center-focus:before{content:"\e80f"}.mdi-image-filter-drama:before{content:"\e810"}.mdi-image-filter-frames:before{content:"\e811"}.mdi-image-filter-hdr:before{content:"\e812"}.mdi-image-filter-none:before{content:"\e813"}.mdi-image-filter-tilt-shift:before{content:"\e814"}.mdi-image-filter-vintage:before{content:"\e815"}.mdi-image-flare:before{content:"\e816"}.mdi-image-flash-auto:before{content:"\e817"}.mdi-image-flash-off:before{content:"\e818"}.mdi-image-flash-on:before{content:"\e819"}.mdi-image-flip:before{content:"\e81a"}.mdi-image-gradient:before{content:"\e81b"}.mdi-image-grain:before{content:"\e81c"}.mdi-image-grid-off:before{content:"\e81d"}.mdi-image-grid-on:before{content:"\e81e"}.mdi-image-hdr-off:before{content:"\e81f"}.mdi-image-hdr-on:before{content:"\e820"}.mdi-image-hdr-strong:before{content:"\e821"}.mdi-image-hdr-weak:before{content:"\e822"}.mdi-image-healing:before{content:"\e823"}.mdi-image-image:before{content:"\e824"}.mdi-image-image-aspect-ratio:before{content:"\e825"}.mdi-image-iso:before{content:"\e826"}.mdi-image-landscape:before{content:"\e827"}.mdi-image-leak-add:before{content:"\e828"}.mdi-image-leak-remove:before{content:"\e829"}.mdi-image-lens:before{content:"\e82a"}.mdi-image-looks:before{content:"\e82b"}.mdi-image-looks-3:before{content:"\e82c"}.mdi-image-looks-4:before{content:"\e82d"}.mdi-image-looks-5:before{content:"\e82e"}.mdi-image-looks-6:before{content:"\e82f"}.mdi-image-looks-one:before{content:"\e830"}.mdi-image-looks-two:before{content:"\e831"}.mdi-image-loupe:before{content:"\e832"}.mdi-image-movie-creation:before{content:"\e833"}.mdi-image-nature:before{content:"\e834"}.mdi-image-nature-people:before{content:"\e835"}.mdi-image-navigate-before:before{content:"\e836"}.mdi-image-navigate-next:before{content:"\e837"}.mdi-image-palette:before{content:"\e838"}.mdi-image-panorama:before{content:"\e839"}.mdi-image-panorama-fisheye:before{content:"\e83a"}.mdi-image-panorama-horizontal:before{content:"\e83b"}.mdi-image-panorama-vertical:before{content:"\e83c"}.mdi-image-panorama-wide-angle:before{content:"\e83d"}.mdi-image-photo:before{content:"\e83e"}.mdi-image-photo-album:before{content:"\e83f"}.mdi-image-photo-camera:before{content:"\e840"}.mdi-image-photo-library:before{content:"\e841"}.mdi-image-portrait:before{content:"\e842"}.mdi-image-remove-red-eye:before{content:"\e843"}.mdi-image-rotate-left:before{content:"\e844"}.mdi-image-rotate-right:before{content:"\e845"}.mdi-image-slideshow:before{content:"\e846"}.mdi-image-straighten:before{content:"\e847"}.mdi-image-style:before{content:"\e848"}.mdi-image-switch-camera:before{content:"\e849"}.mdi-image-switch-video:before{content:"\e84a"}.mdi-image-tag-faces:before{content:"\e84b"}.mdi-image-texture:before{content:"\e84c"}.mdi-image-timelapse:before{content:"\e84d"}.mdi-image-timer:before{content:"\e84e"}.mdi-image-timer-3:before{content:"\e84f"}.mdi-image-timer-10:before{content:"\e850"}.mdi-image-timer-auto:before{content:"\e851"}.mdi-image-timer-off:before{content:"\e852"}.mdi-image-tonality:before{content:"\e853"}.mdi-image-transform:before{content:"\e854"}.mdi-image-tune:before{content:"\e855"}.mdi-image-wb-auto:before{content:"\e856"}.mdi-image-wb-cloudy:before{content:"\e857"}.mdi-image-wb-incandescent:before{content:"\e858"}.mdi-image-wb-irradescent:before{content:"\e859"}.mdi-image-wb-sunny:before{content:"\e85a"}.mdi-maps-beenhere:before{content:"\e85b"}.mdi-maps-directions:before{content:"\e85c"}.mdi-maps-directions-bike:before{content:"\e85d"}.mdi-maps-directions-bus:before{content:"\e85e"}.mdi-maps-directions-car:before{content:"\e85f"}.mdi-maps-directions-ferry:before{content:"\e860"}.mdi-maps-directions-subway:before{content:"\e861"}.mdi-maps-directions-train:before{content:"\e862"}.mdi-maps-directions-transit:before{content:"\e863"}.mdi-maps-directions-walk:before{content:"\e864"}.mdi-maps-flight:before{content:"\e865"}.mdi-maps-hotel:before{content:"\e866"}.mdi-maps-layers:before{content:"\e867"}.mdi-maps-layers-clear:before{content:"\e868"}.mdi-maps-local-airport:before{content:"\e869"}.mdi-maps-local-atm:before{content:"\e86a"}.mdi-maps-local-attraction:before{content:"\e86b"}.mdi-maps-local-bar:before{content:"\e86c"}.mdi-maps-local-cafe:before{content:"\e86d"}.mdi-maps-local-car-wash:before{content:"\e86e"}.mdi-maps-local-convenience-store:before{content:"\e86f"}.mdi-maps-local-drink:before{content:"\e870"}.mdi-maps-local-florist:before{content:"\e871"}.mdi-maps-local-gas-station:before{content:"\e872"}.mdi-maps-local-grocery-store:before{content:"\e873"}.mdi-maps-local-hospital:before{content:"\e874"}.mdi-maps-local-hotel:before{content:"\e875"}.mdi-maps-local-laundry-service:before{content:"\e876"}.mdi-maps-local-library:before{content:"\e877"}.mdi-maps-local-mall:before{content:"\e878"}.mdi-maps-local-movies:before{content:"\e879"}.mdi-maps-local-offer:before{content:"\e87a"}.mdi-maps-local-parking:before{content:"\e87b"}.mdi-maps-local-pharmacy:before{content:"\e87c"}.mdi-maps-local-phone:before{content:"\e87d"}.mdi-maps-local-pizza:before{content:"\e87e"}.mdi-maps-local-play:before{content:"\e87f"}.mdi-maps-local-post-office:before{content:"\e880"}.mdi-maps-local-print-shop:before{content:"\e881"}.mdi-maps-local-restaurant:before{content:"\e882"}.mdi-maps-local-see:before{content:"\e883"}.mdi-maps-local-shipping:before{content:"\e884"}.mdi-maps-local-taxi:before{content:"\e885"}.mdi-maps-location-history:before{content:"\e886"}.mdi-maps-map:before{content:"\e887"}.mdi-maps-my-location:before{content:"\e888"}.mdi-maps-navigation:before{content:"\e889"}.mdi-maps-pin-drop:before{content:"\e88a"}.mdi-maps-place:before{content:"\e88b"}.mdi-maps-rate-review:before{content:"\e88c"}.mdi-maps-restaurant-menu:before{content:"\e88d"}.mdi-maps-satellite:before{content:"\e88e"}.mdi-maps-store-mall-directory:before{content:"\e88f"}.mdi-maps-terrain:before{content:"\e890"}.mdi-maps-traffic:before{content:"\e891"}.mdi-navigation-apps:before{content:"\e892"}.mdi-navigation-arrow-back:before{content:"\e893"}.mdi-navigation-arrow-drop-down:before{content:"\e894"}.mdi-navigation-arrow-drop-down-circle:before{content:"\e895"}.mdi-navigation-arrow-drop-up:before{content:"\e896"}.mdi-navigation-arrow-forward:before{content:"\e897"}.mdi-navigation-cancel:before{content:"\e898"}.mdi-navigation-check:before{content:"\e899"}.mdi-navigation-chevron-left:before{content:"\e89a"}.mdi-navigation-chevron-right:before{content:"\e89b"}.mdi-navigation-close:before{content:"\e89c"}.mdi-navigation-expand-less:before{content:"\e89d"}.mdi-navigation-expand-more:before{content:"\e89e"}.mdi-navigation-fullscreen:before{content:"\e89f"}.mdi-navigation-fullscreen-exit:before{content:"\e8a0"}.mdi-navigation-menu:before{content:"\e8a1"}.mdi-navigation-more-horiz:before{content:"\e8a2"}.mdi-navigation-more-vert:before{content:"\e8a3"}.mdi-navigation-refresh:before{content:"\e8a4"}.mdi-navigation-unfold-less:before{content:"\e8a5"}.mdi-navigation-unfold-more:before{content:"\e8a6"}.mdi-notification-adb:before{content:"\e8a7"}.mdi-notification-bluetooth-audio:before{content:"\e8a8"}.mdi-notification-disc-full:before{content:"\e8a9"}.mdi-notification-dnd-forwardslash:before{content:"\e8aa"}.mdi-notification-do-not-disturb:before{content:"\e8ab"}.mdi-notification-drive-eta:before{content:"\e8ac"}.mdi-notification-event-available:before{content:"\e8ad"}.mdi-notification-event-busy:before{content:"\e8ae"}.mdi-notification-event-note:before{content:"\e8af"}.mdi-notification-folder-special:before{content:"\e8b0"}.mdi-notification-mms:before{content:"\e8b1"}.mdi-notification-more:before{content:"\e8b2"}.mdi-notification-network-locked:before{content:"\e8b3"}.mdi-notification-phone-bluetooth-speaker:before{content:"\e8b4"}.mdi-notification-phone-forwarded:before{content:"\e8b5"}.mdi-notification-phone-in-talk:before{content:"\e8b6"}.mdi-notification-phone-locked:before{content:"\e8b7"}.mdi-notification-phone-missed:before{content:"\e8b8"}.mdi-notification-phone-paused:before{content:"\e8b9"}.mdi-notification-play-download:before{content:"\e8ba"}.mdi-notification-play-install:before{content:"\e8bb"}.mdi-notification-sd-card:before{content:"\e8bc"}.mdi-notification-sim-card-alert:before{content:"\e8bd"}.mdi-notification-sms:before{content:"\e8be"}.mdi-notification-sms-failed:before{content:"\e8bf"}.mdi-notification-sync:before{content:"\e8c0"}.mdi-notification-sync-disabled:before{content:"\e8c1"}.mdi-notification-sync-problem:before{content:"\e8c2"}.mdi-notification-system-update:before{content:"\e8c3"}.mdi-notification-tap-and-play:before{content:"\e8c4"}.mdi-notification-time-to-leave:before{content:"\e8c5"}.mdi-notification-vibration:before{content:"\e8c6"}.mdi-notification-voice-chat:before{content:"\e8c7"}.mdi-notification-vpn-lock:before{content:"\e8c8"}.mdi-social-cake:before{content:"\e8c9"}.mdi-social-domain:before{content:"\e8ca"}.mdi-social-group:before{content:"\e8cb"}.mdi-social-group-add:before{content:"\e8cc"}.mdi-social-location-city:before{content:"\e8cd"}.mdi-social-mood:before{content:"\e8ce"}.mdi-social-notifications:before{content:"\e8cf"}.mdi-social-notifications-none:before{content:"\e8d0"}.mdi-social-notifications-off:before{content:"\e8d1"}.mdi-social-notifications-on:before{content:"\e8d2"}.mdi-social-notifications-paused:before{content:"\e8d3"}.mdi-social-pages:before{content:"\e8d4"}.mdi-social-party-mode:before{content:"\e8d5"}.mdi-social-people:before{content:"\e8d6"}.mdi-social-people-outline:before{content:"\e8d7"}.mdi-social-person:before{content:"\e8d8"}.mdi-social-person-add:before{content:"\e8d9"}.mdi-social-person-outline:before{content:"\e8da"}.mdi-social-plus-one:before{content:"\e8db"}.mdi-social-poll:before{content:"\e8dc"}.mdi-social-public:before{content:"\e8dd"}.mdi-social-school:before{content:"\e8de"}.mdi-social-share:before{content:"\e8df"}.mdi-social-whatshot:before{content:"\e8e0"}.mdi-toggle-check-box:before{content:"\e8e1"}.mdi-toggle-check-box-outline-blank:before{content:"\e8e2"}.mdi-toggle-radio-button-off:before{content:"\e8e3"}.mdi-toggle-radio-button-on:before{content:"\e8e4"}.container{padding:0 1.5rem;margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width : 601px){.container{width:85%}}@media only screen and (min-width : 993px){.container{width:70%}}.container .row{margin-left:-0.75rem;margin-right:-0.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0.75rem}.row .col.s1{width:8.33333%;margin-left:0}.row .col.s2{width:16.66667%;margin-left:0}.row .col.s3{width:25%;margin-left:0}.row .col.s4{width:33.33333%;margin-left:0}.row .col.s5{width:41.66667%;margin-left:0}.row .col.s6{width:50%;margin-left:0}.row .col.s7{width:58.33333%;margin-left:0}.row .col.s8{width:66.66667%;margin-left:0}.row .col.s9{width:75%;margin-left:0}.row .col.s10{width:83.33333%;margin-left:0}.row .col.s11{width:91.66667%;margin-left:0}.row .col.s12{width:100%;margin-left:0}.row .col.offset-s1{margin-left:8.33333%}.row .col.offset-s2{margin-left:16.66667%}.row .col.offset-s3{margin-left:25%}.row .col.offset-s4{margin-left:33.33333%}.row .col.offset-s5{margin-left:41.66667%}.row .col.offset-s6{margin-left:50%}.row .col.offset-s7{margin-left:58.33333%}.row .col.offset-s8{margin-left:66.66667%}.row .col.offset-s9{margin-left:75%}.row .col.offset-s10{margin-left:83.33333%}.row .col.offset-s11{margin-left:91.66667%}.row .col.offset-s12{margin-left:100%}@media only screen and (min-width : 601px){.row .col.m1{width:8.33333%;margin-left:0}.row .col.m2{width:16.66667%;margin-left:0}.row .col.m3{width:25%;margin-left:0}.row .col.m4{width:33.33333%;margin-left:0}.row .col.m5{width:41.66667%;margin-left:0}.row .col.m6{width:50%;margin-left:0}.row .col.m7{width:58.33333%;margin-left:0}.row .col.m8{width:66.66667%;margin-left:0}.row .col.m9{width:75%;margin-left:0}.row .col.m10{width:83.33333%;margin-left:0}.row .col.m11{width:91.66667%;margin-left:0}.row .col.m12{width:100%;margin-left:0}.row .col.offset-m1{margin-left:8.33333%}.row .col.offset-m2{margin-left:16.66667%}.row .col.offset-m3{margin-left:25%}.row .col.offset-m4{margin-left:33.33333%}.row .col.offset-m5{margin-left:41.66667%}.row .col.offset-m6{margin-left:50%}.row .col.offset-m7{margin-left:58.33333%}.row .col.offset-m8{margin-left:66.66667%}.row .col.offset-m9{margin-left:75%}.row .col.offset-m10{margin-left:83.33333%}.row .col.offset-m11{margin-left:91.66667%}.row .col.offset-m12{margin-left:100%}}@media only screen and (min-width : 993px){.row .col.l1{width:8.33333%;margin-left:0}.row .col.l2{width:16.66667%;margin-left:0}.row .col.l3{width:25%;margin-left:0}.row .col.l4{width:33.33333%;margin-left:0}.row .col.l5{width:41.66667%;margin-left:0}.row .col.l6{width:50%;margin-left:0}.row .col.l7{width:58.33333%;margin-left:0}.row .col.l8{width:66.66667%;margin-left:0}.row .col.l9{width:75%;margin-left:0}.row .col.l10{width:83.33333%;margin-left:0}.row .col.l11{width:91.66667%;margin-left:0}.row .col.l12{width:100%;margin-left:0}.row .col.offset-l1{margin-left:8.33333%}.row .col.offset-l2{margin-left:16.66667%}.row .col.offset-l3{margin-left:25%}.row .col.offset-l4{margin-left:33.33333%}.row .col.offset-l5{margin-left:41.66667%}.row .col.offset-l6{margin-left:50%}.row .col.offset-l7{margin-left:58.33333%}.row .col.offset-l8{margin-left:66.66667%}.row .col.offset-l9{margin-left:75%}.row .col.offset-l10{margin-left:83.33333%}.row .col.offset-l11{margin-left:91.66667%}.row .col.offset-l12{margin-left:100%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav a{color:#fff}nav .nav-wrapper{position:relative;height:100%}nav .nav-wrapper i{display:block;font-size:2rem}@media only screen and (min-width : 993px){nav a.button-collapse{display:none}}nav .button-collapse{float:left;position:relative;z-index:1;height:56px}nav .button-collapse i{font-size:2.7rem;height:56px;line-height:56px}nav .brand-logo{position:absolute;color:#fff;display:inline-block;font-size:2.1rem;padding:0}nav .brand-logo.center{left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}@media only screen and (max-width : 992px){nav .brand-logo{left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%);}}nav .brand-logo.right{right:0.5rem;padding:0}nav ul{margin:0}nav ul li{-webkit-transition:background-color .3s;-moz-transition:background-color .3s;-o-transition:background-color .3s;-ms-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}nav ul li:hover,nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{font-size:1rem;color:#fff;display:block;padding:0 15px}nav ul.left{float:left}nav .input-field{margin:0}nav .input-field input{height:100%;font-size:1.2rem;border:none;padding-left:2rem}nav .input-field input:focus,nav .input-field input[type=text]:valid,nav .input-field input[type=password]:valid,nav .input-field input[type=email]:valid,nav .input-field input[type=url]:valid,nav .input-field input[type=date]:valid{border:none;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);-webkit-transition:color .3s;-moz-transition:color .3s;-o-transition:color .3s;-ms-transition:color .3s;transition:color .3s}nav .input-field label.active i{color:#fff}nav .input-field label.active{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.navbar-fixed{position:relative;height:56px;z-index:998}.navbar-fixed nav{position:fixed}@media only screen and (min-width : 601px){nav,nav .nav-wrapper i,nav a.button-collapse,nav a.button-collapse i{height:64px;line-height:64px}.navbar-fixed{height:64px}}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Thin.woff2") format("woff2"),url("../font/roboto/Roboto-Thin.woff") format("woff"),url("../font/roboto/Roboto-Thin.ttf") format("truetype");font-weight:200;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Light.woff2") format("woff2"),url("../font/roboto/Roboto-Light.woff") format("woff"),url("../font/roboto/Roboto-Light.ttf") format("truetype");font-weight:300;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Regular.woff2") format("woff2"),url("../font/roboto/Roboto-Regular.woff") format("woff"),url("../font/roboto/Roboto-Regular.ttf") format("truetype");font-weight:400;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Medium.woff2") format("woff2"),url("../font/roboto/Roboto-Medium.woff") format("woff"),url("../font/roboto/Roboto-Medium.ttf") format("truetype");font-weight:500;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Bold.woff2") format("woff2"),url("../font/roboto/Roboto-Bold.woff") format("woff"),url("../font/roboto/Roboto-Bold.ttf") format("truetype");font-weight:700;}a{text-decoration:none}html{line-height:1.5;font-family:"Roboto", sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px;}}@media only screen and (min-width: 992px){html{font-size:14.5px;}}@media only screen and (min-width: 1200px){html{font-size:15px;}}h1,h2,h3,h4,h5,h6{font-weight:400}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:4.62rem;margin:2.1rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:3.916rem;margin:1.78rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:3.212rem;margin:1.46rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:2.508rem;margin:1.14rem 0 0.912rem 0}h5{font-size:1.64rem;line-height:1.804rem;margin:0.82rem 0 0.656rem 0}h6{font-size:1rem;line-height:1.1rem;margin:0.5rem 0 0.4rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light,footer.page-footer .footer-copyright{font-weight:300}.thin{font-weight:200}.flow-text{font-weight:300}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem;}}@media only screen and (min-width: 0px){.flow-text{line-height:.8rem;}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem;}}@media only screen and (min-width: 30px){.flow-text{line-height:.904rem;}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem;}}@media only screen and (min-width: 60px){.flow-text{line-height:1.008rem;}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem;}}@media only screen and (min-width: 90px){.flow-text{line-height:1.112rem;}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem;}}@media only screen and (min-width: 120px){.flow-text{line-height:1.216rem;}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem;}}@media only screen and (min-width: 150px){.flow-text{line-height:1.32rem;}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem;}}@media only screen and (min-width: 180px){.flow-text{line-height:1.424rem;}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem;}}@media only screen and (min-width: 210px){.flow-text{line-height:1.528rem;}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem;}}@media only screen and (min-width: 240px){.flow-text{line-height:1.632rem;}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem;}}@media only screen and (min-width: 270px){.flow-text{line-height:1.736rem;}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem;}}@media only screen and (min-width: 300px){.flow-text{line-height:1.84rem;}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem;}}@media only screen and (min-width: 330px){.flow-text{line-height:1.944rem;}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem;}}@media only screen and (min-width: 360px){.flow-text{line-height:2.048rem;}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem;}}@media only screen and (min-width: 390px){.flow-text{line-height:2.152rem;}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem;}}@media only screen and (min-width: 420px){.flow-text{line-height:2.256rem;}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem;}}@media only screen and (min-width: 450px){.flow-text{line-height:2.36rem;}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem;}}@media only screen and (min-width: 480px){.flow-text{line-height:2.464rem;}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem;}}@media only screen and (min-width: 510px){.flow-text{line-height:2.568rem;}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem;}}@media only screen and (min-width: 540px){.flow-text{line-height:2.672rem;}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem;}}@media only screen and (min-width: 570px){.flow-text{line-height:2.776rem;}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem;}}@media only screen and (min-width: 600px){.flow-text{line-height:2.88rem;}}.card-panel{padding:20px;margin:0.5rem 0 1rem 0;border-radius:2px;background-color:#fff}.card{position:relative;overflow:hidden;margin:0.5rem 0 1rem 0;background-color:#fff;border-radius:2px}.card .card-title{color:#fff;font-size:24px;font-weight:300}.card .card-title.activator{cursor:pointer}.card.small,.card.medium,.card.large{position:relative}.card.small .card-image,.card.medium .card-image,.card.large .card-image{overflow:hidden}.card.small .card-content,.card.medium .card-content,.card.large .card-content{overflow:hidden}.card.small .card-action,.card.medium .card-action,.card.large .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.small .card-image{height:150px}.card.small .card-content{height:150px}.card.medium{height:400px}.card.medium .card-image{height:250px}.card.medium .card-content{height:150px}.card.large{height:500px}.card.large .card-image{height:330px}.card.large .card-content{height:170px}.card .card-image{position:relative}.card .card-image img{border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{position:absolute;bottom:0;left:0;padding:20px}.card .card-content{padding:20px;border-radius:0 0 2px 2px}.card .card-content p{margin:0;color:inherit}.card .card-content .card-title{line-height:48px}.card .card-action{border-top:1px solid rgba(160,160,160,0.2);padding:20px}.card .card-action a{color:#ffab40;margin-right:20px;-webkit-transition:color .3s ease;-moz-transition:color .3s ease;-o-transition:color .3s ease;-ms-transition:color .3s ease;transition:color .3s ease;text-transform:uppercase}.card .card-action a:hover{color:#ffd8a6}.card .card-reveal{padding:20px;position:absolute;background-color:#FFF;width:100%;overflow-y:auto;top:100%;height:100%;z-index:1;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}#toast-container{display:block;position:fixed;z-index:1001}@media only screen and (max-width : 600px){#toast-container{min-width:100%;bottom:0%;}}@media only screen and (min-width : 601px) and (max-width : 992px){#toast-container{min-width:30%;left:5%;bottom:7%;}}@media only screen and (min-width : 993px){#toast-container{min-width:8%;top:10%;right:7%;}}.toast{border-radius:2px;top:0;width:auto;clear:both;margin-top:10px;position:relative;max-width:100%;height:48px;line-height:48px;background-color:#323232;padding:0 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.toast .btn,.toast .btn-large,.toast .btn-flat{margin:0;margin-left:3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width : 600px){.toast{width:100%;border-radius:0;}}@media only screen and (min-width : 601px) and (max-width : 992px){.toast{float:left;}}@media only screen and (min-width : 993px){.toast{float:right;}}.tabs{position:relative;height:48px;background-color:#fff;margin:0 auto;width:100%;white-space:nowrap}.tabs .tab{display:block;float:left;text-align:center;line-height:48px;height:48px;padding:0 20px;margin:0;text-transform:uppercase;letter-spacing:.8px;width:15%}.tabs .tab a{color:#ee6e73;display:block;width:100%;height:100%;-webkit-transition:color .28s ease;-moz-transition:color .28s ease;-o-transition:color .28s ease;-ms-transition:color .28s ease;transition:color .28s ease}.tabs .tab a:hover{color:#f9c9cb}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#f6b2b5;will-change:left, right}.tabs .tab{padding:0}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:1000;background-color:transparent;border-radius:2px;color:#fff;min-height:36px;line-height:1rem;opacity:0;display:none;position:absolute;text-align:center;overflow:hidden;left:0;top:0;will-change:top, left}.backdrop{position:absolute;opacity:0;display:none;height:7px;width:14px;border-radius:0 0 14px 14px;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 10%;-moz-transform-origin:50% 10%;-ms-transform-origin:50% 10%;-o-transform-origin:50% 10%;transform-origin:50% 10%;will-change:transform, opacity}.btn,.btn-large,.btn-flat{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;outline:0;padding:0 2rem;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn.disabled,.disabled.btn-large,.btn-floating.disabled,.btn-large.disabled,.btn:disabled,.btn-large:disabled,.btn-large:disabled,.btn-floating:disabled{background-color:#DFDFDF;box-shadow:none;color:#9F9F9F;cursor:default}.btn.disabled *,.disabled.btn-large *,.btn-floating.disabled *,.btn-large.disabled *,.btn:disabled *,.btn-large:disabled *,.btn-large:disabled *,.btn-floating:disabled *{pointer-events:none}.btn.disabled:hover,.disabled.btn-large:hover,.btn-floating.disabled:hover,.btn-large.disabled:hover,.btn:disabled:hover,.btn-large:disabled:hover,.btn-large:disabled:hover,.btn-floating:disabled:hover{background-color:#DFDFDF;color:#9F9F9F}.btn i,.btn-large i,.btn-floating i,.btn-large i,.btn-flat i{font-size:1.3rem;line-height:inherit}.btn,.btn-large{text-decoration:none;color:#FFF;background-color:#26a69a;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.btn:hover,.btn-large:hover{background-color:#2bbbad}.btn-floating{display:inline-block;color:#FFF;position:relative;overflow:hidden;z-index:1;width:37px;height:37px;line-height:37px;padding:0;background-color:#26a69a;border-radius:50%;transition:.3s;cursor:pointer;vertical-align:middle}.btn-floating i{width:inherit;display:inline-block;text-align:center;color:#FFF;font-size:1.6rem;line-height:37px}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:55.5px;height:55.5px}.btn-floating.btn-large i{line-height:55.5px}button.btn-floating{border:none}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:998}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px}.fixed-action-btn ul li{margin-bottom:15px}.fixed-action-btn ul a.btn-floating{opacity:0}.btn-flat{box-shadow:none;background-color:transparent;color:#343434;cursor:pointer}.btn-flat.disabled{color:#b3b3b3;cursor:default}.btn-large{height:54px;line-height:56px}.btn-large i{font-size:1.6rem}.dropdown-content{background-color:#FFFFFF;margin:0;display:none;min-width:100px;max-height:650px;overflow-y:auto;opacity:0;position:absolute;white-space:nowrap;z-index:1;will-change:width, height}.dropdown-content li{clear:both;color:rgba(0,0,0,0.87);cursor:pointer;line-height:1.5rem;width:100%;text-align:left;text-transform:none}.dropdown-content li:hover,.dropdown-content li.active{background-color:#eee}.dropdown-content li>a,.dropdown-content li>span{font-size:1.2rem;color:#26a69a;display:block;padding:1rem 1rem}/*!
- * Waves v0.6.0
- * http://fian.my.id/Waves
- *
- * Copyright 2014 Alfiana E. Sibuea and other contributors
- * Released under the MIT license
- * https://github.com/fians/Waves/blob/master/LICENSE
- */.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;will-change:opacity, transform;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;-moz-transition:all 0.7s ease-out;-o-transition:all 0.7s ease-out;-ms-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:-webkit-transform, opacity;-moz-transition-property:-moz-transform, opacity;-o-transition-property:-o-transform, opacity;transition-property:transform, opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;-ms-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}a.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;z-index:1000;border-radius:2px;-webkit-transform:translate(0);-moz-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0);will-change:top, opacity}@media only screen and (max-width : 992px){.modal{width:80%;}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-flat{float:right;margin:6px 0}#lean-overlay{position:fixed;z-index:999;top:0;left:0;bottom:0;right:0;height:115%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:fixed;max-height:100%;padding-bottom:64px;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:fixed;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:0.5rem 0 1rem 0}.collapsible-header{display:block;cursor:pointer;height:3rem;line-height:3rem;padding:0 1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header i{width:2rem;font-size:1.6rem;line-height:3rem;display:block;float:left;text-align:center;margin-right:1rem}.collapsible-body{overflow:hidden;display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.collapsible-body p{margin:0;padding:2rem}.side-nav .collapsible{border:none;box-shadow:none}.side-nav .collapsible li{padding:0}.side-nav .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;margin:0 1rem}.side-nav .collapsible-header i{line-height:inherit}.side-nav .collapsible-body{border:0;background-color:#FFF}.side-nav .collapsible-body li a{margin:0 1rem 0 2rem}.collapsible.popout{border:none;box-shadow:none}.collapsible.popout>li{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);transform:scaleX(.92) translate3d(0, 0, 0);transition:margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94),transform .35s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.collapsible.popout>li:hover{will-change:margin, transform}.collapsible.popout>li.active{box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);margin:16px 0;transform:scaleX(1) translate3d(0, 0, 0)}.materialboxed{cursor:zoom-in;position:relative;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s;transition:opacity .4s}.materialboxed:hover{will-change:left, top, width, height}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#292929;z-index:999;will-change:opacity}.materialbox-caption{position:fixed;display:none;color:#fff;line-height:50px;bottom:0;width:100%;text-align:center;padding:0% 15%;height:50px;z-index:1000;-webkit-font-smoothing:antialiased}select:focus{outline:1px solid #c9f3ef}button:focus{outline:none;background-color:#2ab7a9}label{font-size:0.8rem;color:#9e9e9e}::-webkit-input-placeholder{color:#d1d1d1}:-moz-placeholder{color:#d1d1d1}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}input[type=text],input[type=password],input[type=email],input[type=url],input[type=time],input[type=date],input[type=datetime-local],input[type=tel],input[type=number],input[type=search],textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:3rem;width:100%;font-size:1rem;margin:0 0 15px 0;padding:0;box-shadow:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;transition:all .3s}input[type=text]:disabled,input[type=text][readonly="readonly"],input[type=password]:disabled,input[type=password][readonly="readonly"],input[type=email]:disabled,input[type=email][readonly="readonly"],input[type=url]:disabled,input[type=url][readonly="readonly"],input[type=time]:disabled,input[type=time][readonly="readonly"],input[type=date]:disabled,input[type=date][readonly="readonly"],input[type=datetime-local]:disabled,input[type=datetime-local][readonly="readonly"],input[type=tel]:disabled,input[type=tel][readonly="readonly"],input[type=number]:disabled,input[type=number][readonly="readonly"],input[type=search]:disabled,input[type=search][readonly="readonly"],textarea.materialize-textarea:disabled,textarea.materialize-textarea[readonly="readonly"]{color:rgba(0,0,0,0.26);border-bottom:1px dotted rgba(0,0,0,0.26)}input[type=text]:disabled+label,input[type=text][readonly="readonly"]+label,input[type=password]:disabled+label,input[type=password][readonly="readonly"]+label,input[type=email]:disabled+label,input[type=email][readonly="readonly"]+label,input[type=url]:disabled+label,input[type=url][readonly="readonly"]+label,input[type=time]:disabled+label,input[type=time][readonly="readonly"]+label,input[type=date]:disabled+label,input[type=date][readonly="readonly"]+label,input[type=datetime-local]:disabled+label,input[type=datetime-local][readonly="readonly"]+label,input[type=tel]:disabled+label,input[type=tel][readonly="readonly"]+label,input[type=number]:disabled+label,input[type=number][readonly="readonly"]+label,input[type=search]:disabled+label,input[type=search][readonly="readonly"]+label,textarea.materialize-textarea:disabled+label,textarea.materialize-textarea[readonly="readonly"]+label{color:rgba(0,0,0,0.26)}input[type=text]:focus:not([readonly]),input[type=password]:focus:not([readonly]),input[type=email]:focus:not([readonly]),input[type=url]:focus:not([readonly]),input[type=time]:focus:not([readonly]),input[type=date]:focus:not([readonly]),input[type=datetime-local]:focus:not([readonly]),input[type=tel]:focus:not([readonly]),input[type=number]:focus:not([readonly]),input[type=search]:focus:not([readonly]),textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #26a69a;box-shadow:0 1px 0 0 #26a69a}input[type=text]:focus:not([readonly])+label,input[type=password]:focus:not([readonly])+label,input[type=email]:focus:not([readonly])+label,input[type=url]:focus:not([readonly])+label,input[type=time]:focus:not([readonly])+label,input[type=date]:focus:not([readonly])+label,input[type=datetime-local]:focus:not([readonly])+label,input[type=tel]:focus:not([readonly])+label,input[type=number]:focus:not([readonly])+label,input[type=search]:focus:not([readonly])+label,textarea.materialize-textarea:focus:not([readonly])+label{color:#26a69a}input[type=text].valid,input[type=text]:focus.valid,input[type=password].valid,input[type=password]:focus.valid,input[type=email].valid,input[type=email]:focus.valid,input[type=url].valid,input[type=url]:focus.valid,input[type=time].valid,input[type=time]:focus.valid,input[type=date].valid,input[type=date]:focus.valid,input[type=datetime-local].valid,input[type=datetime-local]:focus.valid,input[type=tel].valid,input[type=tel]:focus.valid,input[type=number].valid,input[type=number]:focus.valid,input[type=search].valid,input[type=search]:focus.valid,textarea.materialize-textarea.valid,textarea.materialize-textarea:focus.valid{border-bottom:1px solid #4CAF50;box-shadow:0 1px 0 0 #4CAF50}input[type=text].invalid,input[type=text]:focus.invalid,input[type=password].invalid,input[type=password]:focus.invalid,input[type=email].invalid,input[type=email]:focus.invalid,input[type=url].invalid,input[type=url]:focus.invalid,input[type=time].invalid,input[type=time]:focus.invalid,input[type=date].invalid,input[type=date]:focus.invalid,input[type=datetime-local].invalid,input[type=datetime-local]:focus.invalid,input[type=tel].invalid,input[type=tel]:focus.invalid,input[type=number].invalid,input[type=number]:focus.invalid,input[type=search].invalid,input[type=search]:focus.invalid,textarea.materialize-textarea.invalid,textarea.materialize-textarea:focus.invalid{border-bottom:1px solid #F44336;box-shadow:0 1px 0 0 #F44336}.input-field{position:relative;margin-top:1rem}.input-field label{color:#9e9e9e;position:absolute;top:0.8rem;left:0.75rem;font-size:1rem;cursor:text;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out}.input-field label.active{font-size:0.8rem;-webkit-transform:translateY(-140%);-moz-transform:translateY(-140%);-ms-transform:translateY(-140%);-o-transform:translateY(-140%);transform:translateY(-140%)}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;-webkit-transition:color .2s;-moz-transition:color .2s;-o-transition:color .2s;-ms-transition:color .2s;transition:color .2s}.input-field .prefix.active{color:#26a69a}.input-field .prefix ~ input,.input-field .prefix ~ textarea{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.input-field .prefix ~ textarea{padding-top:.8rem}.input-field .prefix ~ label{margin-left:3rem}@media only screen and (max-width : 992px){.input-field .prefix ~ input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width : 600px){.input-field .prefix ~ input{width:80%;width:calc(100% - 3rem)}}.input-field input[type=search]{display:block;line-height:inherit;padding-left:4rem;width:calc(100% - 4rem)}.input-field input[type=search]:focus{background-color:#FFF;border:0;box-shadow:none;color:#444}.input-field input[type=search]:focus+label i,.input-field input[type=search]:focus ~ .mdi-navigation-close{color:#444}.input-field input[type=search]+label{left:1rem}.input-field input[type=search] ~ .mdi-navigation-close{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;transition:.3s color}textarea{width:100%;height:3rem;background-color:transparent}textarea.materialize-textarea{overflow-y:hidden;padding:1.6rem 0;resize:none;min-height:3rem}.hiddendiv{display:none;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem}[type="radio"]:not(:checked),[type="radio"]:checked{position:absolute;left:-9999px;visibility:hidden}[type="radio"]:not(:checked)+label,[type="radio"]:checked+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}[type="radio"]+label:before,[type="radio"]+label:after{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease}[type="radio"]:not(:checked)+label:before{border-radius:50%;border:2px solid #5a5a5a}[type="radio"]:not(:checked)+label:after{border-radius:50%;border:2px solid #5a5a5a;z-index:-1;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0)}[type="radio"]:checked+label:before{border-radius:50%;border:2px solid transparent}[type="radio"]:checked+label:after{border-radius:50%;border:2px solid #26a69a;background-color:#26a69a;z-index:0;-webkit-transform:scale(1.02);-moz-transform:scale(1.02);-ms-transform:scale(1.02);-o-transform:scale(1.02);transform:scale(1.02)}[type="radio"].with-gap:checked+label:before{border-radius:50%;border:2px solid #26a69a}[type="radio"].with-gap:checked+label:after{border-radius:50%;border:2px solid #26a69a;background-color:#26a69a;z-index:0;-webkit-transform:scale(.5);-moz-transform:scale(.5);-ms-transform:scale(.5);-o-transform:scale(.5);transform:scale(.5)}[type="radio"]:disabled:not(:checked)+label:before,[type="radio"]:disabled:checked+label:before{background-color:transparent;border-color:rgba(0,0,0,0.26)}[type="radio"]:disabled+label{color:rgba(0,0,0,0.26)}[type="radio"]:disabled:not(:checked)+label:hover:before{border-color:rgba(0,0,0,0.26)}form p{margin-bottom:10px;text-align:left}form p:last-child{margin-bottom:0}[type="checkbox"]:not(:checked),[type="checkbox"]:checked{position:absolute;left:-9999px}[type="checkbox"]{}[type="checkbox"]+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}[type="checkbox"]+label:before{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:2px;-webkit-transition:0.2s;-moz-transition:0.2s;-o-transition:0.2s;-ms-transition:0.2s;transition:0.2s}[type="checkbox"]:not(:checked):disabled+label:before{border:none;background-color:rgba(0,0,0,0.26)}[type="checkbox"]:checked+label:before{top:-4px;left:-3px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #26a69a;border-bottom:2px solid #26a69a;-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked:disabled+label:before{border-right:2px solid rgba(0,0,0,0.26);border-bottom:2px solid rgba(0,0,0,0.26)}[type="checkbox"]:indeterminate+label:before{left:-10px;top:-11px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #26a69a;border-bottom:none;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:indeterminate:disabled+label:before{border-right:2px solid rgba(0,0,0,0.26);background-color:transparent}[type="checkbox"].filled-in+label:after{border-radius:2px}[type="checkbox"].filled-in+label:before,[type="checkbox"].filled-in+label:after{content:'';left:0;position:absolute;transition:border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s;z-index:1}[type="checkbox"].filled-in:not(:checked)+label:before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:20% 40%;transform-origin:100% 100%}[type="checkbox"].filled-in:not(:checked)+label:after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0px;z-index:0}[type="checkbox"].filled-in:checked+label:before{top:0;left:1px;width:8px;height:13px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:checked+label:after{top:0px;width:20px;height:20px;border:2px solid #26a69a;background-color:#26a69a;z-index:0}[type="checkbox"].filled-in:disabled:not(:checked)+label:before{background-color:transparent;border:2px solid transparent}[type="checkbox"].filled-in:disabled:not(:checked)+label:after{border-color:transparent;background-color:#BDBDBD}[type="checkbox"].filled-in:disabled:checked+label:before{background-color:transparent}[type="checkbox"].filled-in:disabled:checked+label:after{background-color:#BDBDBD;border-color:#BDBDBD}.switch,.switch *{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.switch label{cursor:pointer}.switch label input[type=checkbox]{opacity:0;width:0;height:0}.switch label input[type=checkbox]:checked+.lever{background-color:#84c7c1}.switch label input[type=checkbox]:checked+.lever:after{background-color:#26a69a}.switch label .lever{content:"";display:inline-block;position:relative;width:40px;height:15px;background-color:#818181;border-radius:15px;margin-right:10px;transition:background 0.3s ease;vertical-align:middle;margin:0 16px}.switch label .lever:after{content:"";position:absolute;display:inline-block;width:21px;height:21px;background-color:#F1F1F1;border-radius:21px;box-shadow:0 1px 3px 1px rgba(0,0,0,0.4);left:-5px;top:-3px;transition:left 0.3s ease,background 0.3s ease,box-shadow 0.1s ease}input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(38,166,154,0.1)}input[type=checkbox]:not(:disabled) ~ .lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,0,0,0.08)}.switch label input[type=checkbox]:checked+.lever:after{left:24px}.switch input[type=checkbox][disabled]+.lever{cursor:default}.switch label input[type=checkbox][disabled]+.lever:after,.switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#BDBDBD}.select-label{position:absolute}.select-wrapper{position:relative}.select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;outline:none;height:3rem;line-height:3rem;width:100%;font-size:1rem;margin:0 0 15px 0;padding:0;display:block}.select-wrapper .mdi-navigation-arrow-drop-down{color:initial;position:absolute;right:0;top:0;font-size:23px}.select-wrapper .mdi-navigation-arrow-drop-down.disabled{color:rgba(0,0,0,0.26)}.select-wrapper+label{position:absolute;top:-14px;font-size:0.8rem}select{display:none}select.browser-default{display:block}select:disabled{color:rgba(0,0,0,0.3)}.select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,0.3);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;border-bottom:1px solid rgba(0,0,0,0.3)}.select-wrapper i{color:rgba(0,0,0,0.3)}.select-dropdown li.disabled{color:rgba(0,0,0,0.3);background-color:transparent}.file-field{position:relative}.file-field input.file-path{margin-left:100px;width:calc(100% - 100px)}.file-field .btn,.file-field .btn-large{position:absolute;top:0;left:0;height:3rem;line-height:3rem}.file-field span{cursor:pointer}.file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.range-field{position:relative}input[type=range],input[type=range]+.thumb{cursor:pointer}input[type=range]{position:relative;background-color:transparent;border:none;outline:none;width:100%;margin:15px 0px;padding:0}input[type=range]+.thumb{position:absolute;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;top:10px;margin-left:-6px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-ms-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#26a69a;font-size:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}input[type=range]:focus{outline:none}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:14px;width:14px;border-radius:50%;background-color:#26a69a;transform-origin:50% 50%;margin:-5px 0 0 0;-webkit-transition:0.3s;-moz-transition:0.3s;-o-transition:0.3s;-ms-transition:0.3s;transition:0.3s}input[type=range]:focus::-webkit-slider-runnable-track{background:#ccc}input[type=range]{border:1px solid white}input[type=range]::-moz-range-track{height:3px;background:#ddd;border:none}input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;margin-top:-5px}input[type=range]:-moz-focusring{outline:1px solid white;outline-offset:-1px}input[type=range]:focus::-moz-range-track{background:#ccc}input[type=range]::-ms-track{height:3px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#777}input[type=range]::-ms-fill-upper{background:#ddd}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a}input[type=range]:focus::-ms-fill-lower{background:#888}input[type=range]:focus::-ms-fill-upper{background:#ccc}select{background-color:rgba(255,255,255,0.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.table-of-contents.fixed{position:fixed}.table-of-contents li{padding:2px 0}.table-of-contents a{display:inline-block;font-weight:300;color:#757575;padding-left:20px;height:1.5rem;line-height:1.5rem;letter-spacing:.4;display:inline-block}.table-of-contents a:hover{color:#a8a8a8;padding-left:19px;border-left:1px solid #ea4a4f}.table-of-contents a.active{font-weight:500;padding-left:18px;border-left:2px solid #ea4a4f}.side-nav{position:fixed;width:240px;left:-105%;top:0;margin:0;height:100%;height:calc(100% + 60px);height:-moz-calc(100%);padding-bottom:60px;background-color:#FFF;z-index:999;overflow-y:auto;will-change:left}.side-nav.right-aligned{will-change:right;right:-105%;left:auto}.side-nav .collapsible{margin:0}.side-nav li{float:none;padding:0 15px}.side-nav li:hover,.side-nav li.active{background-color:#ddd}.side-nav a{color:#444;display:block;font-size:1rem;height:64px;line-height:64px;padding:0 15px}.drag-target{height:100%;width:10px;position:fixed;top:0;z-index:998}.side-nav.fixed a{display:block;padding:0 15px;color:#444}.side-nav.fixed{left:0;position:fixed}.side-nav.fixed.right-aligned{right:0;left:auto}@media only screen and (max-width : 992px){.side-nav.fixed{left:-105%}.side-nav.fixed.right-aligned{right:-105%;left:auto}}.side-nav .collapsible-body li.active,.side-nav.fixed .collapsible-body li.active{background-color:#ee6e73}.side-nav .collapsible-body li.active a,.side-nav.fixed .collapsible-body li.active a{color:#fff}#sidenav-overlay{position:fixed;top:0;left:0;right:0;height:120vh;background-color:rgba(0,0,0,0.5);z-index:997;will-change:opacity}.preloader-wrapper{display:inline-block;position:relative;width:48px;height:48px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.slider{position:relative;height:440px;width:100%}.slider.fullscreen{height:100%;width:100%;position:absolute;top:0;left:0;right:0;bottom:0}.slider.fullscreen ul.slides{height:100%}.slider.fullscreen ul.indicators{z-index:2;bottom:30px}.slider .slides{background-color:#9e9e9e;margin:0;height:400px}.slider .slides li{opacity:0;position:absolute;top:0;left:0;z-index:1;width:100%;height:inherit;overflow:hidden}.slider .slides li img{height:100%;width:100%;background-size:cover;background-position:center}.slider .slides li .caption{color:#fff;position:absolute;top:15%;left:15%;width:70%;opacity:0}.slider .slides li .caption p{color:#e0e0e0}.slider .slides li.active{z-index:2}.slider .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.slider .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:16px;width:16px;margin:0 12px;background-color:#e0e0e0;-webkit-transition:background-color .3s;-moz-transition:background-color .3s;-o-transition:background-color .3s;-ms-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.slider .indicators .indicator-item.active{background-color:#4CAF50}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}/*!
- * Default mobile-first, responsive styling for pickadate.js
- * Demo: http://amsul.github.io/pickadate.js
- */.picker__holder,.picker__frame{bottom:0;left:0;right:0;top:100%}.picker__holder{position:fixed;-webkit-transition:background 0.15s ease-out,top 0s 0.15s;-moz-transition:background 0.15s ease-out,top 0s 0.15s;transition:background 0.15s ease-out,top 0s 0.15s;-webkit-backface-visibility:hidden}.picker__frame{position:absolute;margin:0 auto;min-width:256px;max-width:300px;max-height:350px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;-webkit-transition:all 0.15s ease-out;-moz-transition:all 0.15s ease-out;transition:all 0.15s ease-out}@media (min-height: 28.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}}@media (min-height: 40.125em){.picker__frame{margin-bottom:7.5%}}.picker__wrap{display:table;width:100%;height:100%}@media (min-height: 28.875em){.picker__wrap{display:block}}.picker__box{background:#ffffff;display:table-cell;vertical-align:middle}@media (min-height: 28.875em){.picker__box{display:block;border:1px solid #777777;border-top-color:#898989;border-bottom-width:0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 12px 36px 16px rgba(0,0,0,0.24);-moz-box-shadow:0 12px 36px 16px rgba(0,0,0,0.24);box-shadow:0 12px 36px 16px rgba(0,0,0,0.24)}}.picker--opened .picker__holder{top:0;background:transparent;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)";zoom:1;background:rgba(0,0,0,0.32);-webkit-transition:background 0.15s ease-out;-moz-transition:background 0.15s ease-out;transition:background 0.15s ease-out}.picker--opened .picker__frame{top:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1}@media (min-height: 35.875em){.picker--opened .picker__frame{top:10%;bottom:20% auto}}.picker__input.picker__input--active{border-color:#E3F2FD}.picker__frame{margin:0 auto;max-width:325px}@media (min-height: 38.875em){.picker--opened .picker__frame{top:10%;bottom:auto}}.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{display:inline-block;margin-left:.25em;margin-right:.25em}.picker__select--month,.picker__select--year{height:2em;padding:0;margin-left:.25em;margin-right:.25em}.picker__select--month.browser-default{display:inline;background-color:#FFFFFF;width:40%}.picker__select--year.browser-default{display:inline;background-color:#FFFFFF;width:25%}.picker__select--month:focus,.picker__select--year:focus{border-color:rgba(0,0,0,0.05)}.picker__nav--prev,.picker__nav--next{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-0.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:none;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:1rem;width:100%;margin-top:.75em;margin-bottom:.5em}.picker__table th,.picker__table td{text-align:center}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999999;font-weight:500}@media (min-height: 33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day--today{position:relative;color:#595959;letter-spacing:-.3;padding:.75rem 0;font-weight:400;border:1px solid transparent}.picker__day--disabled:before{border-top-color:#aaaaaa}.picker__day--infocus:hover{cursor:pointer;color:#000;font-weight:500}.picker__day--outfocus{display:none;padding:.75rem 0;color:#fff}.picker__day--outfocus:hover{cursor:pointer;color:#dddddd;font-weight:500}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{cursor:pointer}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(.75);-moz-transform:scale(.75);-ms-transform:scale(.75);-o-transform:scale(.75);transform:scale(.75);background:#0089ec;color:#ffffff}.picker__day--disabled,.picker__day--disabled:hover,.picker--focused .picker__day--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbbbbb}.picker__footer{text-align:center;display:flex;align-items:center;justify-content:space-between}.picker__button--today,.picker__button--clear,.picker__button--close{border:1px solid #ffffff;background:#ffffff;font-size:.8em;padding:.66em 0;font-weight:bold;width:33%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover,.picker__button--close:hover{cursor:pointer;color:#000000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus,.picker__button--close:focus{background:#b1dcfb;border-color:rgba(0,0,0,0.05);outline:none}.picker__button--today:before,.picker__button--clear:before,.picker__button--close:before{position:relative;display:inline-block;height:0}.picker__button--today:before,.picker__button--clear:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-0.05em;width:0;border-top:0.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-0.25em;width:.66em;border-top:3px solid #ee2200}.picker__button--close:before{content:"\D7";top:-0.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaaaaa}.picker__box{border-radius:2px;overflow:hidden}.picker__date-display{text-align:center;background-color:#26a69a;color:#fff;padding-bottom:15px;font-weight:300}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000000;background:#a1ded8}.picker__weekday-display{background-color:#1f897f;padding:10px;font-weight:200;letter-spacing:.5;font-size:1rem;margin-bottom:15px}.picker__month-display{text-transform:uppercase;font-size:2rem}.picker__day-display{font-size:4.5rem;font-weight:400}.picker__year-display{font-size:1.8rem;color:rgba(255,255,255,0.4)}.picker__box{padding:0}.picker__calendar-container{padding:0 1rem}.picker__calendar-container thead{border:none}.picker__table{margin-top:0;margin-bottom:.5em}.picker__day--infocus{color:#595959;letter-spacing:-.3;padding:.75rem 0;font-weight:400;border:1px solid transparent}.picker__day.picker__day--today{color:#26a69a}.picker__day.picker__day--today.picker__day--selected{color:#fff}.picker__weekday{font-size:.9rem}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);-o-transform:scale(.9);transform:scale(.9);background-color:#26a69a;color:#ffffff}.picker__day--selected.picker__day--outfocus,.picker__day--selected:hover.picker__day--outfocus,.picker--focused .picker__day--selected.picker__day--outfocus{background-color:#a1ded8}.picker__footer{text-align:right;padding:5px 10px}.picker__close,.picker__today{font-size:1.1rem;padding:0 1rem;color:#26a69a}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:0.75em solid #676767;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:0.75em solid #676767}button.picker__today:focus,button.picker__clear:focus,button.picker__close:focus{background-color:#a1ded8}.picker__list{list-style:none;padding:0.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #dddddd;border-top:1px solid #dddddd;margin-bottom:-1px;position:relative;background:#ffffff;padding:.75em 1.25em}@media (min-height: 46.75em){.picker__list-item{padding:.5em 1em}}.picker__list-item:hover{cursor:pointer;color:#000000;background:#b1dcfb;border-color:#0089ec;z-index:10}.picker__list-item--highlighted{border-color:#0089ec;z-index:10}.picker__list-item--highlighted:hover,.picker--focused .picker__list-item--highlighted{cursor:pointer;color:#000000;background:#b1dcfb}.picker__list-item--selected,.picker__list-item--selected:hover,.picker--focused .picker__list-item--selected{background:#0089ec;color:#ffffff;z-index:10}.picker__list-item--disabled,.picker__list-item--disabled:hover,.picker--focused .picker__list-item--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default;border-color:#dddddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:none;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:hover,.picker--time .picker__button--clear:focus{color:#000000;background:#b1dcfb;background:#ee2200;border-color:#ee2200;cursor:pointer;color:#ffffff;outline:none}.picker--time .picker__button--clear:before{top:-0.25em;color:#666;font-size:1.25em;font-weight:bold}.picker--time .picker__button--clear:hover:before,.picker--time .picker__button--clear:focus:before{color:#ffffff}.picker--time .picker__frame{min-width:256px;max-width:320px}.picker--time .picker__box{font-size:1em;background:#f2f2f2;padding:0}@media (min-height: 40.125em){.picker--time .picker__box{margin-bottom:5em}} \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/LICENSE.txt b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/LICENSE.txt
deleted file mode 100755
index 542f6537..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/LICENSE.txt
+++ /dev/null
@@ -1,428 +0,0 @@
-https://github.com/google/material-design-icons/blob/master/LICENSE
-https://github.com/FezVrasta/bootstrap-material-design/blob/master/fonts/LICENSE.txt
-
-Attribution-ShareAlike 4.0 International
-
-=======================================================================
-
-Creative Commons Corporation ("Creative Commons") is not a law firm and
-does not provide legal services or legal advice. Distribution of
-Creative Commons public licenses does not create a lawyer-client or
-other relationship. Creative Commons makes its licenses and related
-information available on an "as-is" basis. Creative Commons gives no
-warranties regarding its licenses, any material licensed under their
-terms and conditions, or any related information. Creative Commons
-disclaims all liability for damages resulting from their use to the
-fullest extent possible.
-
-Using Creative Commons Public Licenses
-
-Creative Commons public licenses provide a standard set of terms and
-conditions that creators and other rights holders may use to share
-original works of authorship and other material subject to copyright
-and certain other rights specified in the public license below. The
-following considerations are for informational purposes only, are not
-exhaustive, and do not form part of our licenses.
-
- Considerations for licensors: Our public licenses are
- intended for use by those authorized to give the public
- permission to use material in ways otherwise restricted by
- copyright and certain other rights. Our licenses are
- irrevocable. Licensors should read and understand the terms
- and conditions of the license they choose before applying it.
- Licensors should also secure all rights necessary before
- applying our licenses so that the public can reuse the
- material as expected. Licensors should clearly mark any
- material not subject to the license. This includes other CC-
- licensed material, or material used under an exception or
- limitation to copyright. More considerations for licensors:
- wiki.creativecommons.org/Considerations_for_licensors
-
- Considerations for the public: By using one of our public
- licenses, a licensor grants the public permission to use the
- licensed material under specified terms and conditions. If
- the licensor's permission is not necessary for any reason--for
- example, because of any applicable exception or limitation to
- copyright--then that use is not regulated by the license. Our
- licenses grant only permissions under copyright and certain
- other rights that a licensor has authority to grant. Use of
- the licensed material may still be restricted for other
- reasons, including because others have copyright or other
- rights in the material. A licensor may make special requests,
- such as asking that all changes be marked or described.
- Although not required by our licenses, you are encouraged to
- respect those requests where reasonable. More_considerations
- for the public:
- wiki.creativecommons.org/Considerations_for_licensees
-
-=======================================================================
-
-Creative Commons Attribution-ShareAlike 4.0 International Public
-License
-
-By exercising the Licensed Rights (defined below), You accept and agree
-to be bound by the terms and conditions of this Creative Commons
-Attribution-ShareAlike 4.0 International Public License ("Public
-License"). To the extent this Public License may be interpreted as a
-contract, You are granted the Licensed Rights in consideration of Your
-acceptance of these terms and conditions, and the Licensor grants You
-such rights in consideration of benefits the Licensor receives from
-making the Licensed Material available under these terms and
-conditions.
-
-
-Section 1 -- Definitions.
-
- a. Adapted Material means material subject to Copyright and Similar
- Rights that is derived from or based upon the Licensed Material
- and in which the Licensed Material is translated, altered,
- arranged, transformed, or otherwise modified in a manner requiring
- permission under the Copyright and Similar Rights held by the
- Licensor. For purposes of this Public License, where the Licensed
- Material is a musical work, performance, or sound recording,
- Adapted Material is always produced where the Licensed Material is
- synched in timed relation with a moving image.
-
- b. Adapter's License means the license You apply to Your Copyright
- and Similar Rights in Your contributions to Adapted Material in
- accordance with the terms and conditions of this Public License.
-
- c. BY-SA Compatible License means a license listed at
- creativecommons.org/compatiblelicenses, approved by Creative
- Commons as essentially the equivalent of this Public License.
-
- d. Copyright and Similar Rights means copyright and/or similar rights
- closely related to copyright including, without limitation,
- performance, broadcast, sound recording, and Sui Generis Database
- Rights, without regard to how the rights are labeled or
- categorized. For purposes of this Public License, the rights
- specified in Section 2(b)(1)-(2) are not Copyright and Similar
- Rights.
-
- e. Effective Technological Measures means those measures that, in the
- absence of proper authority, may not be circumvented under laws
- fulfilling obligations under Article 11 of the WIPO Copyright
- Treaty adopted on December 20, 1996, and/or similar international
- agreements.
-
- f. Exceptions and Limitations means fair use, fair dealing, and/or
- any other exception or limitation to Copyright and Similar Rights
- that applies to Your use of the Licensed Material.
-
- g. License Elements means the license attributes listed in the name
- of a Creative Commons Public License. The License Elements of this
- Public License are Attribution and ShareAlike.
-
- h. Licensed Material means the artistic or literary work, database,
- or other material to which the Licensor applied this Public
- License.
-
- i. Licensed Rights means the rights granted to You subject to the
- terms and conditions of this Public License, which are limited to
- all Copyright and Similar Rights that apply to Your use of the
- Licensed Material and that the Licensor has authority to license.
-
- j. Licensor means the individual(s) or entity(ies) granting rights
- under this Public License.
-
- k. Share means to provide material to the public by any means or
- process that requires permission under the Licensed Rights, such
- as reproduction, public display, public performance, distribution,
- dissemination, communication, or importation, and to make material
- available to the public including in ways that members of the
- public may access the material from a place and at a time
- individually chosen by them.
-
- l. Sui Generis Database Rights means rights other than copyright
- resulting from Directive 96/9/EC of the European Parliament and of
- the Council of 11 March 1996 on the legal protection of databases,
- as amended and/or succeeded, as well as other essentially
- equivalent rights anywhere in the world.
-
- m. You means the individual or entity exercising the Licensed Rights
- under this Public License. Your has a corresponding meaning.
-
-
-Section 2 -- Scope.
-
- a. License grant.
-
- 1. Subject to the terms and conditions of this Public License,
- the Licensor hereby grants You a worldwide, royalty-free,
- non-sublicensable, non-exclusive, irrevocable license to
- exercise the Licensed Rights in the Licensed Material to:
-
- a. reproduce and Share the Licensed Material, in whole or
- in part; and
-
- b. produce, reproduce, and Share Adapted Material.
-
- 2. Exceptions and Limitations. For the avoidance of doubt, where
- Exceptions and Limitations apply to Your use, this Public
- License does not apply, and You do not need to comply with
- its terms and conditions.
-
- 3. Term. The term of this Public License is specified in Section
- 6(a).
-
- 4. Media and formats; technical modifications allowed. The
- Licensor authorizes You to exercise the Licensed Rights in
- all media and formats whether now known or hereafter created,
- and to make technical modifications necessary to do so. The
- Licensor waives and/or agrees not to assert any right or
- authority to forbid You from making technical modifications
- necessary to exercise the Licensed Rights, including
- technical modifications necessary to circumvent Effective
- Technological Measures. For purposes of this Public License,
- simply making modifications authorized by this Section 2(a)
- (4) never produces Adapted Material.
-
- 5. Downstream recipients.
-
- a. Offer from the Licensor -- Licensed Material. Every
- recipient of the Licensed Material automatically
- receives an offer from the Licensor to exercise the
- Licensed Rights under the terms and conditions of this
- Public License.
-
- b. Additional offer from the Licensor -- Adapted Material.
- Every recipient of Adapted Material from You
- automatically receives an offer from the Licensor to
- exercise the Licensed Rights in the Adapted Material
- under the conditions of the Adapter's License You apply.
-
- c. No downstream restrictions. You may not offer or impose
- any additional or different terms or conditions on, or
- apply any Effective Technological Measures to, the
- Licensed Material if doing so restricts exercise of the
- Licensed Rights by any recipient of the Licensed
- Material.
-
- 6. No endorsement. Nothing in this Public License constitutes or
- may be construed as permission to assert or imply that You
- are, or that Your use of the Licensed Material is, connected
- with, or sponsored, endorsed, or granted official status by,
- the Licensor or others designated to receive attribution as
- provided in Section 3(a)(1)(A)(i).
-
- b. Other rights.
-
- 1. Moral rights, such as the right of integrity, are not
- licensed under this Public License, nor are publicity,
- privacy, and/or other similar personality rights; however, to
- the extent possible, the Licensor waives and/or agrees not to
- assert any such rights held by the Licensor to the limited
- extent necessary to allow You to exercise the Licensed
- Rights, but not otherwise.
-
- 2. Patent and trademark rights are not licensed under this
- Public License.
-
- 3. To the extent possible, the Licensor waives any right to
- collect royalties from You for the exercise of the Licensed
- Rights, whether directly or through a collecting society
- under any voluntary or waivable statutory or compulsory
- licensing scheme. In all other cases the Licensor expressly
- reserves any right to collect such royalties.
-
-
-Section 3 -- License Conditions.
-
-Your exercise of the Licensed Rights is expressly made subject to the
-following conditions.
-
- a. Attribution.
-
- 1. If You Share the Licensed Material (including in modified
- form), You must:
-
- a. retain the following if it is supplied by the Licensor
- with the Licensed Material:
-
- i. identification of the creator(s) of the Licensed
- Material and any others designated to receive
- attribution, in any reasonable manner requested by
- the Licensor (including by pseudonym if
- designated);
-
- ii. a copyright notice;
-
- iii. a notice that refers to this Public License;
-
- iv. a notice that refers to the disclaimer of
- warranties;
-
- v. a URI or hyperlink to the Licensed Material to the
- extent reasonably practicable;
-
- b. indicate if You modified the Licensed Material and
- retain an indication of any previous modifications; and
-
- c. indicate the Licensed Material is licensed under this
- Public License, and include the text of, or the URI or
- hyperlink to, this Public License.
-
- 2. You may satisfy the conditions in Section 3(a)(1) in any
- reasonable manner based on the medium, means, and context in
- which You Share the Licensed Material. For example, it may be
- reasonable to satisfy the conditions by providing a URI or
- hyperlink to a resource that includes the required
- information.
-
- 3. If requested by the Licensor, You must remove any of the
- information required by Section 3(a)(1)(A) to the extent
- reasonably practicable.
-
- b. ShareAlike.
-
- In addition to the conditions in Section 3(a), if You Share
- Adapted Material You produce, the following conditions also apply.
-
- 1. The Adapter's License You apply must be a Creative Commons
- license with the same License Elements, this version or
- later, or a BY-SA Compatible License.
-
- 2. You must include the text of, or the URI or hyperlink to, the
- Adapter's License You apply. You may satisfy this condition
- in any reasonable manner based on the medium, means, and
- context in which You Share Adapted Material.
-
- 3. You may not offer or impose any additional or different terms
- or conditions on, or apply any Effective Technological
- Measures to, Adapted Material that restrict exercise of the
- rights granted under the Adapter's License You apply.
-
-
-Section 4 -- Sui Generis Database Rights.
-
-Where the Licensed Rights include Sui Generis Database Rights that
-apply to Your use of the Licensed Material:
-
- a. for the avoidance of doubt, Section 2(a)(1) grants You the right
- to extract, reuse, reproduce, and Share all or a substantial
- portion of the contents of the database;
-
- b. if You include all or a substantial portion of the database
- contents in a database in which You have Sui Generis Database
- Rights, then the database in which You have Sui Generis Database
- Rights (but not its individual contents) is Adapted Material,
-
- including for purposes of Section 3(b); and
- c. You must comply with the conditions in Section 3(a) if You Share
- all or a substantial portion of the contents of the database.
-
-For the avoidance of doubt, this Section 4 supplements and does not
-replace Your obligations under this Public License where the Licensed
-Rights include other Copyright and Similar Rights.
-
-
-Section 5 -- Disclaimer of Warranties and Limitation of Liability.
-
- a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
- EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
- AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
- ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
- IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
- WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
- ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
- KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
- ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
-
- b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
- TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
- NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
- INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
- COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
- USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
- DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
- IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
-
- c. The disclaimer of warranties and limitation of liability provided
- above shall be interpreted in a manner that, to the extent
- possible, most closely approximates an absolute disclaimer and
- waiver of all liability.
-
-
-Section 6 -- Term and Termination.
-
- a. This Public License applies for the term of the Copyright and
- Similar Rights licensed here. However, if You fail to comply with
- this Public License, then Your rights under this Public License
- terminate automatically.
-
- b. Where Your right to use the Licensed Material has terminated under
- Section 6(a), it reinstates:
-
- 1. automatically as of the date the violation is cured, provided
- it is cured within 30 days of Your discovery of the
- violation; or
-
- 2. upon express reinstatement by the Licensor.
-
- For the avoidance of doubt, this Section 6(b) does not affect any
- right the Licensor may have to seek remedies for Your violations
- of this Public License.
-
- c. For the avoidance of doubt, the Licensor may also offer the
- Licensed Material under separate terms or conditions or stop
- distributing the Licensed Material at any time; however, doing so
- will not terminate this Public License.
-
- d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
- License.
-
-
-Section 7 -- Other Terms and Conditions.
-
- a. The Licensor shall not be bound by any additional or different
- terms or conditions communicated by You unless expressly agreed.
-
- b. Any arrangements, understandings, or agreements regarding the
- Licensed Material not stated herein are separate from and
- independent of the terms and conditions of this Public License.
-
-
-Section 8 -- Interpretation.
-
- a. For the avoidance of doubt, this Public License does not, and
- shall not be interpreted to, reduce, limit, restrict, or impose
- conditions on any use of the Licensed Material that could lawfully
- be made without permission under this Public License.
-
- b. To the extent possible, if any provision of this Public License is
- deemed unenforceable, it shall be automatically reformed to the
- minimum extent necessary to make it enforceable. If the provision
- cannot be reformed, it shall be severed from this Public License
- without affecting the enforceability of the remaining terms and
- conditions.
-
- c. No term or condition of this Public License will be waived and no
- failure to comply consented to unless expressly agreed to by the
- Licensor.
-
- d. Nothing in this Public License constitutes or may be interpreted
- as a limitation upon, or waiver of, any privileges and immunities
- that apply to the Licensor or You, including from the legal
- processes of any jurisdiction or authority.
-
-
-=======================================================================
-
-Creative Commons is not a party to its public licenses.
-Notwithstanding, Creative Commons may elect to apply one of its public
-licenses to material it publishes and in those instances will be
-considered the "Licensor." Except for the limited purpose of indicating
-that material is shared under a Creative Commons public license or as
-otherwise permitted by the Creative Commons policies published at
-creativecommons.org/policies, Creative Commons does not authorize the
-use of the trademark "Creative Commons" or any other trademark or logo
-of Creative Commons without its prior written consent including,
-without limitation, in connection with any unauthorized modifications
-to any of its public licenses or any other arrangements,
-understandings, or agreements concerning use of licensed material. For
-the avoidance of doubt, this paragraph does not form part of the public
-licenses.
-
-Creative Commons may be contacted at creativecommons.org.
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.eot b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.eot
deleted file mode 100755
index a097ba68..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.eot
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.svg b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.svg
deleted file mode 100755
index 0b2c2c24..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.svg
+++ /dev/null
@@ -1,751 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by IcoMoon</metadata>
-<defs>
-<font id="Material-Design-Icons" horiz-adv-x="1024">
-<font-face units-per-em="1024" ascent="960" descent="-64" />
-<missing-glyph horiz-adv-x="1024" />
-<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
-<glyph unicode="&#xe600;" d="M320.64 43.307c-139.307 66.133-239.36 201.6-254.507 362.027h-64c21.76-262.827 241.493-469.333 509.867-469.333 9.6 0 18.773 0.853 28.16 1.493l-162.56 162.773-56.96-56.96zM358.613 321.707c-8.107 0-15.573 1.067-22.4 3.627-6.613 2.347-12.373 5.76-17.067 10.027s-8.32 9.6-10.88 15.573c-2.56 6.187-3.84 12.8-3.84 20.053h-55.467c0-15.36 2.987-28.8 8.96-40.533s13.867-21.547 23.893-29.227c10.027-7.893 21.547-13.653 34.773-17.707 13.227-4.267 26.88-6.187 41.387-6.187 15.787 0 30.507 2.133 44.16 6.4s25.387 10.667 35.413 18.987 17.707 18.56 23.467 30.72c5.547 12.16 8.533 26.027 8.533 41.6 0 8.32-1.067 16.213-2.987 23.893-2.133 7.68-5.333 14.933-9.6 21.76-4.48 6.827-10.24 12.8-17.28 18.347-7.040 5.333-15.787 9.813-25.813 13.44 8.533 3.84 16 8.533 22.4 14.080s11.733 11.52 16 17.707c4.267 6.4 7.467 12.8 9.6 19.627s3.2 13.653 3.2 20.267c0 15.573-2.56 29.227-7.68 40.96s-12.373 21.547-21.76 29.44c-9.387 7.893-20.48 13.867-33.707 17.92-13.653 4.267-28.16 6.187-43.947 6.187-15.36 0-29.653-2.347-42.667-6.827s-24.107-10.88-33.493-18.987c-9.387-8.107-16.64-17.707-21.973-28.8s-7.893-23.253-7.893-36.267h55.467c0 7.253 1.28 13.653 3.84 19.2 2.56 5.76 6.187 10.667 10.667 14.507 4.48 4.053 10.027 7.253 16.213 9.387s13.013 3.413 20.267 3.413c17.067 0 29.653-4.48 37.973-13.227s12.373-21.12 12.373-36.907c0-7.68-1.067-14.507-3.413-20.693s-5.76-11.52-10.453-16c-4.693-4.48-10.667-7.893-17.493-10.453-7.040-2.56-15.36-3.84-24.747-3.84h-32.853v-43.733h32.853c9.387 0 17.92-1.067 25.387-3.2s13.867-5.333 19.2-10.027c5.333-4.48 9.387-10.24 12.373-17.067 2.773-6.827 4.267-14.933 4.267-24.32 0-17.28-4.907-30.507-14.933-39.68-9.6-8.96-23.040-13.44-40.32-13.44zM723.84 574.507c-13.44 14.080-29.653 24.96-48.427 32.64-18.987 7.68-39.68 11.52-62.507 11.52h-100.907v-341.333h97.92c23.68 0 45.013 3.84 64.427 11.52s35.84 18.56 49.493 32.64c13.653 14.080 24.32 31.147 31.573 50.987 7.467 19.84 11.093 42.24 11.093 66.987v16.853c0 24.747-3.84 46.933-11.307 66.987s-17.92 37.12-31.36 51.2zM706.987 439.253c0-17.707-1.92-33.92-6.187-48-4.053-14.293-10.027-26.24-18.133-36.053s-18.133-17.28-30.293-22.613c-12.16-5.12-26.24-7.893-42.453-7.893h-38.613v246.187h41.6c30.72 0 53.973-9.813 70.187-29.227 16-19.627 24.107-47.787 24.107-84.907v-17.493zM512 960c-9.6 0-18.773-0.853-28.16-1.493l162.56-162.773 56.747 56.747c139.52-65.92 239.573-201.387 254.72-361.813h64c-21.76 262.827-241.493 469.333-509.867 469.333z" />
-<glyph unicode="&#xe601;" d="M512 874.667c47.147 0 85.333-38.187 85.333-85.333s-38.187-85.333-85.333-85.333-85.333 38.187-85.333 85.333 38.187 85.333 85.333 85.333zM896 576h-256v-554.667h-85.333v256h-85.333v-256h-85.333v554.667h-256v85.333h768v-85.333z" />
-<glyph unicode="&#xe602;" d="M170.667 533.333v-298.667h128v298.667h-128zM426.667 533.333v-298.667h128v298.667h-128zM85.333 21.333h810.667v128h-810.667v-128zM682.667 533.333v-298.667h128v298.667h-128zM490.667 917.333l-405.333-213.333v-85.333h810.667v85.333l-405.333 213.333z" />
-<glyph unicode="&#xe603;" d="M896 192v-42.667c0-47.147-38.187-85.333-85.333-85.333h-597.333c-47.147 0-85.333 38.187-85.333 85.333v597.333c0 47.147 38.187 85.333 85.333 85.333h597.333c47.147 0 85.333-38.187 85.333-85.333v-42.667h-384c-47.147 0-85.333-38.187-85.333-85.333v-341.333c0-47.147 38.187-85.333 85.333-85.333h384zM512 277.333h426.667v341.333h-426.667v-341.333zM682.667 384c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
-<glyph unicode="&#xe604;" d="M128 746.667v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333zM640 576c0-70.827-57.387-128-128-128s-128 57.173-128 128c0 70.613 57.387 128 128 128s128-57.387 128-128zM256 234.667c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667h-512v42.667z" />
-<glyph unicode="&#xe605;" d="M704 448c58.88 0 106.24 47.787 106.24 106.667s-47.36 106.667-106.24 106.667c-58.88 0-106.667-47.787-106.667-106.667s47.787-106.667 106.667-106.667zM384 490.667c70.613 0 127.573 57.387 127.573 128s-56.96 128-127.573 128c-70.613 0-128-57.387-128-128s57.387-128 128-128zM704 362.667c-78.293 0-234.667-39.253-234.667-117.333v-96h469.333v96c0 78.080-156.373 117.333-234.667 117.333zM384 405.333c-99.627 0-298.667-49.92-298.667-149.333v-106.667h298.667v96c0 36.267 14.293 99.627 101.12 148.053-37.12 7.893-73.173 11.947-101.12 11.947z" />
-<glyph unicode="&#xe606;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 746.667c70.613 0 128-57.387 128-128 0-70.827-57.387-128-128-128s-128 57.173-128 128c0 70.613 57.387 128 128 128zM512 140.8c-106.88 0-200.747 54.613-256 137.387 1.067 84.693 170.88 131.413 256 131.413s254.72-46.72 256-131.413c-55.253-82.773-149.12-137.387-256-137.387z" />
-<glyph unicode="&#xe607;" d="M469.333 576h85.333v128h128v85.333h-128v128h-85.333v-128h-128v-85.333h128v-128zM298.667 192c-47.147 0-84.907-38.187-84.907-85.333s37.76-85.333 84.907-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM725.333 192c-47.147 0-84.907-38.187-84.907-85.333s37.76-85.333 84.907-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM306.133 330.667c0 1.92 0.427 3.627 1.28 5.12l38.4 69.547h317.867c32 0 59.947 17.707 74.667 43.947l164.693 299.093-74.667 40.96h-0.213l-47.147-85.333-117.547-213.333h-299.307l-5.547 11.52-136.32 287.147-40.32 85.333h-139.307v-85.333h85.333l153.6-323.627-57.813-104.533c-6.613-12.373-10.453-26.24-10.453-41.173 0-47.147 38.187-85.333 85.333-85.333h512v85.333h-493.867c-5.973 0-10.667 4.693-10.667 10.667z" />
-<glyph unicode="&#xe608;" d="M938.667 715.947l-196.053 164.48-54.827-65.28 196.053-164.48 54.827 65.28zM336.213 815.36l-54.827 65.28-196.053-164.48 54.827-65.28 196.053 164.48zM533.333 618.667h-64v-256l202.453-121.813 32.213 52.693-170.667 101.12v224zM511.787 789.333c-212.267 0-383.787-171.947-383.787-384s171.52-384 383.787-384 384.213 171.947 384.213 384-171.947 384-384.213 384zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.547-298.667-298.667-298.667z" />
-<glyph unicode="&#xe609;" d="M336.213 815.36l-54.827 65.28-196.053-164.48 54.827-65.28 196.053 164.48zM938.667 715.947l-196.053 164.48-54.827-65.28 196.053-164.48 54.827 65.28zM511.787 789.333c-212.267 0-383.787-171.947-383.787-384s171.52-384 383.787-384 384.213 171.947 384.213 384-171.947 384-384.213 384zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.547-298.667-298.667-298.667zM554.667 576h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128v128z" />
-<glyph unicode="&#xe60a;" d="M512 704c164.907 0 298.667-133.76 298.667-298.667 0-36.053-6.613-70.4-18.347-102.4l64.853-64.853c24.747 50.56 38.827 107.307 38.827 167.253 0 212.053-171.947 384-384.213 384-59.947 0-116.48-14.080-167.253-38.613l65.067-65.067c32 11.733 66.347 18.347 102.4 18.347zM938.667 715.947l-196.053 164.48-54.827-65.28 196.053-164.48 54.827 65.28zM124.587 862.080l-54.4-54.187 56.747-56.747-47.36-39.68 60.587-60.587 47.36 39.68 34.133-34.133c-58.24-67.413-93.653-155.093-93.653-251.093 0-212.053 171.52-384 383.787-384 96.213 0 183.893 35.627 251.093 93.867l93.867-93.867 54.187 54.4-786.347 786.347zM702.72 175.36c-51.84-42.88-118.187-68.693-190.72-68.693-164.907 0-298.667 133.76-298.667 298.667 0 72.533 25.813 138.88 68.693 190.72l420.693-420.693zM341.973 820.267l-60.587 60.587-36.267-30.507 60.587-60.587 36.267 30.507z" />
-<glyph unicode="&#xe60b;" d="M938.667 715.947l-196.053 164.48-54.827-65.28 196.053-164.48 54.827 65.28zM336.213 815.36l-54.827 65.28-196.053-164.48 54.827-65.28 196.053 164.48zM511.787 789.333c-212.267 0-383.787-171.947-383.787-384s171.52-384 383.787-384 384.213 171.947 384.213 384-171.947 384-384.213 384zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.547-298.667-298.667-298.667zM449.493 340.267l-90.453 90.453-45.227-45.227 135.68-135.68 256.213 256.213-45.227 45.227-210.987-210.987z" />
-<glyph unicode="&#xe60c;" d="M256 192c0-23.467 19.2-42.667 42.667-42.667h42.667v-149.333c0-35.413 28.587-64 64-64s64 28.587 64 64v149.333h85.333v-149.333c0-35.413 28.587-64 64-64s64 28.587 64 64v149.333h42.667c23.467 0 42.667 19.2 42.667 42.667v426.667h-512v-426.667zM149.333 618.667c-35.413 0-64-28.587-64-64v-298.667c0-35.413 28.587-64 64-64s64 28.587 64 64v298.667c0 35.413-28.587 64-64 64zM874.667 618.667c-35.413 0-64-28.587-64-64v-298.667c0-35.413 28.587-64 64-64s64 28.587 64 64v298.667c0 35.413-28.587 64-64 64zM662.613 867.84l55.68 55.68c8.32 8.32 8.32 21.76 0 30.080s-21.76 8.32-30.080 0l-63.147-62.933c-34.133 16.853-72.32 26.667-113.067 26.667-40.96 0-79.36-9.813-113.707-26.88l-63.36 63.36c-8.32 8.32-21.76 8.32-30.080 0s-8.32-21.76 0-30.080l55.893-55.893c-63.36-46.72-104.747-121.813-104.747-206.507h512c0 84.907-41.6 160-105.387 206.507zM426.667 746.667h-42.667v42.667h42.667v-42.667zM640 746.667h-42.667v42.667h42.667v-42.667z" />
-<glyph unicode="&#xe60d;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM554.667 490.667h-85.333v256h85.333v-256zM554.667 320h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe60e;" d="M810.667 448h-85.333v-128h-128v-85.333h213.333v213.333zM298.667 576h128v85.333h-213.333v-213.333h85.333v128zM896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 148.693h-768v598.613h768v-598.613z" />
-<glyph unicode="&#xe60f;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM384 234.667h-85.333v298.667h85.333v-298.667zM554.667 234.667h-85.333v426.667h85.333v-426.667zM725.333 234.667h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe610;" d="M810.667 832h-178.56c-17.493 49.493-64.427 85.333-120.107 85.333s-102.613-35.84-120.107-85.333h-178.56c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM512 832c23.467 0 42.667-18.987 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 18.987-42.667 42.667 19.2 42.667 42.667 42.667zM597.333 234.667h-298.667v85.333h298.667v-85.333zM725.333 405.333h-426.667v85.333h426.667v-85.333zM725.333 576h-426.667v85.333h426.667v-85.333z" />
-<glyph unicode="&#xe611;" d="M810.667 832h-178.56c-17.493 49.493-64.427 85.333-120.107 85.333s-102.613-35.84-120.107-85.333h-178.56c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM512 832c23.467 0 42.667-18.987 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 18.987-42.667 42.667 19.2 42.667 42.667 42.667zM512 661.333c70.613 0 128-57.387 128-128 0-70.827-57.387-128-128-128s-128 57.173-128 128c0 70.613 57.387 128 128 128zM768 149.333h-512v59.733c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-59.733z" />
-<glyph unicode="&#xe612;" d="M810.667 832h-178.56c-17.493 49.493-64.427 85.333-120.107 85.333s-102.613-35.84-120.107-85.333h-178.56c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM554.667 192h-85.333v85.333h85.333v-85.333zM554.667 362.667h-85.333v256h85.333v-256zM512 746.667c-23.467 0-42.667 18.987-42.667 42.667s19.2 42.667 42.667 42.667 42.667-18.987 42.667-42.667-19.2-42.667-42.667-42.667z" />
-<glyph unicode="&#xe613;" d="M810.667 832h-178.56c-17.493 49.493-64.427 85.333-120.107 85.333s-102.613-35.84-120.107-85.333h-178.56c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM512 832c23.467 0 42.667-18.987 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 18.987-42.667 42.667 19.2 42.667 42.667 42.667zM682.667 320h-170.667v-128l-213.333 213.333 213.333 213.333v-128h170.667v-170.667z" />
-<glyph unicode="&#xe614;" d="M810.667 832h-178.56c-17.493 49.493-64.427 85.333-120.107 85.333s-102.613-35.84-120.107-85.333h-178.56c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM512 832c23.467 0 42.667-18.987 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 18.987-42.667 42.667 19.2 42.667 42.667 42.667zM512 192l-213.333 213.333h128v170.667h170.667v-170.667h128l-213.333-213.333z" />
-<glyph unicode="&#xe615;" d="M810.667 832h-178.56c-17.493 49.493-64.427 85.333-120.107 85.333s-102.613-35.84-120.107-85.333h-178.56c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM512 832c23.467 0 42.667-18.987 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 18.987-42.667 42.667 19.2 42.667 42.667 42.667zM426.667 234.667l-170.667 170.667 60.373 60.373 110.293-110.293 280.96 280.96 60.373-60.373-341.333-341.333z" />
-<glyph unicode="&#xe616;" d="M512 704v-128l170.667 170.667-170.667 170.667v-128c-188.587 0-341.333-152.747-341.333-341.333 0-66.987 19.627-129.067 52.907-181.76l62.293 62.293c-18.987 35.627-29.867 76.16-29.867 119.467 0 141.44 114.56 256 256 256zM800.427 629.76l-62.293-62.293c18.987-35.627 29.867-76.16 29.867-119.467 0-141.44-114.56-256-256-256v128l-170.667-170.667 170.667-170.667v128c188.587 0 341.333 152.747 341.333 341.333 0 66.987-19.627 129.067-52.907 181.76z" />
-<glyph unicode="&#xe617;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-230.187-69.973-283.733-172.16-128.213-13.867-228.267-122.453-228.267-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.68 203.947-198.187 211.84zM597.333 405.333v-170.667h-170.667v170.667h-128l213.333 213.333 213.333-213.333h-128z" />
-<glyph unicode="&#xe618;" d="M768 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM256 789.333h213.333v-341.333l-106.667 64-106.667-64v341.333z" />
-<glyph unicode="&#xe619;" d="M725.333 832h-426.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe61a;" d="M725.333 832h-426.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 47.147-38.187 85.333-85.333 85.333zM725.333 192l-213.333 92.8-213.333-92.8v554.667h426.667v-554.667z" />
-<glyph unicode="&#xe61b;" d="M853.333 618.667h-119.893c-19.2 33.28-45.653 62.080-77.44 83.627l69.333 69.333-60.373 60.373-92.8-92.8c-19.2 4.693-39.467 7.467-60.16 7.467s-40.96-2.773-60.16-7.467l-92.8 92.8-60.373-60.373 69.333-69.333c-31.787-21.547-58.24-50.347-77.44-83.627h-119.893v-85.333h89.173c-2.347-13.867-3.84-28.16-3.84-42.667v-42.667h-85.333v-85.333h85.333v-42.667c0-14.507 1.493-28.8 3.84-42.667h-89.173v-85.333h119.893c44.16-76.373 126.72-128 221.44-128s177.28 51.627 221.44 128h119.893v85.333h-89.173c2.347 13.867 3.84 28.16 3.84 42.667v42.667h85.333v85.333h-85.333v42.667c0 14.507-1.493 28.8-3.84 42.667h89.173v85.333zM597.333 277.333h-170.667v85.333h170.667v-85.333zM597.333 448h-170.667v85.333h170.667v-85.333z" />
-<glyph unicode="&#xe61c;" d="M810.667 618.667l-170.667-170.667h128c0-141.44-114.56-256-256-256-43.307 0-83.84 10.88-119.68 29.653l-62.293-62.293c52.907-33.067 114.987-52.693 181.973-52.693 188.587 0 341.333 152.747 341.333 341.333h128l-170.667 170.667zM256 448c0 141.44 114.56 256 256 256 43.307 0 83.84-10.88 119.68-29.653l62.293 62.293c-52.907 33.067-114.987 52.693-181.973 52.693-188.587 0-341.333-152.747-341.333-341.333h-128l170.667-170.667 170.667 170.667h-128z" />
-<glyph unicode="&#xe61d;" d="M768 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM256 789.333h213.333v-341.333l-106.667 64-106.667-64v341.333z" />
-<glyph unicode="&#xe61e;" d="M170.667 448h682.667v-256h-682.667zM853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 192h-682.667v256h682.667v-256zM853.333 618.667h-682.667v85.333h682.667v-85.333z" />
-<glyph unicode="&#xe61f;" d="M128 405.333h341.333v426.667h-341.333v-426.667zM128 64h341.333v256h-341.333v-256zM554.667 64h341.333v426.667h-341.333v-426.667zM554.667 832v-256h341.333v256h-341.333z" />
-<glyph unicode="&#xe620;" d="M256 149.333c0-47.147 38.187-85.333 85.333-85.333h341.333c47.147 0 85.333 38.187 85.333 85.333v512h-512v-512zM810.667 789.333h-149.333l-42.667 42.667h-213.333l-42.667-42.667h-149.333v-85.333h597.333v85.333z" />
-<glyph unicode="&#xe621;" d="M597.333 874.667h-341.333c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667c0-47.147 37.76-85.333 84.907-85.333h512.427c47.147 0 85.333 38.187 85.333 85.333v512l-256 256zM682.667 192h-341.333v85.333h341.333v-85.333zM682.667 362.667h-341.333v85.333h341.333v-85.333zM554.667 576v234.667l234.667-234.667h-234.667z" />
-<glyph unicode="&#xe622;" d="M853.333 405.333h-682.667c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h682.667c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM298.667 149.333c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM853.333 832h-682.667c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h682.667c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM298.667 576c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe623;" d="M384 270.080l-177.92 177.92-60.373-60.373 238.293-238.293 512 512-60.373 60.373z" />
-<glyph unicode="&#xe624;" d="M768 661.333l-60.373 60.373-270.507-270.72 60.373-60.373 270.507 270.72zM949.12 721.707l-451.84-451.627-177.92 177.92-60.373-60.373 238.293-238.293 512 512-60.16 60.373zM17.707 387.627l238.293-238.293 60.373 60.373-238.293 238.293-60.373-60.373z" />
-<glyph unicode="&#xe625;" d="M725.333 448h-213.333v-213.333h213.333v213.333zM682.667 917.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333h-42.667v85.333h-85.333zM810.667 149.333h-597.333v469.333h597.333v-469.333z" />
-<glyph unicode="&#xe626;" d="M430.293 295.040l60.373-60.373 213.333 213.333-213.333 213.333-60.373-60.373 110.293-110.293h-412.587v-85.333h412.587l-110.293-110.293zM810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-170.667h85.333v170.667h597.333v-597.333h-597.333v170.667h-85.333v-170.667c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe627;" d="M512 494.933c-25.813 0-46.933-21.12-46.933-46.933s21.12-46.933 46.933-46.933c26.027 0 46.933 21.12 46.933 46.933s-20.907 46.933-46.933 46.933zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667 0-235.52 190.933-426.667 426.667-426.667s426.667 191.147 426.667 426.667c0 235.733-190.933 426.667-426.667 426.667zM605.44 354.56l-349.44-162.56 162.56 349.44 349.44 162.56-162.56-349.44z" />
-<glyph unicode="&#xe628;" d="M874.667 490.667h-64v170.667c0 47.147-38.187 85.333-85.333 85.333h-170.667v64c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-64h-170.667c-47.147 0-84.907-38.187-84.907-85.333l-0.213-162.133h63.787c63.573 0 115.2-51.627 115.2-115.2s-51.627-115.2-115.2-115.2h-63.787l-0.213-162.133c0-47.147 38.187-85.333 85.333-85.333h162.133v64c0 63.573 51.627 115.2 115.2 115.2s115.2-51.627 115.2-115.2v-64h162.133c47.147 0 85.333 38.187 85.333 85.333v170.667h64c58.88 0 106.667 47.787 106.667 106.667s-47.787 106.667-106.667 106.667z" />
-<glyph unicode="&#xe629;" d="M626.987 230.187c-31.787-24.533-72.533-38.187-114.987-38.187s-83.2 13.653-114.987 38.187c-9.173 7.253-22.613 5.547-29.867-3.84s-5.547-22.613 3.84-29.867c39.040-30.293 89.173-47.147 141.013-47.147s101.973 16.853 141.013 47.147c9.387 7.253 11.093 20.693 3.84 29.867-7.253 9.387-20.693 11.093-29.867 3.84zM405.333 426.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM512 960c-282.667 0-512-229.333-512-512s229.333-512 512-512 512 229.333 512 512-229.333 512-512 512zM851.627 327.68c-46.507-159.573-182.187-275.413-343.040-275.413-161.067 0-296.96 116.267-343.253 276.267-50.773 4.267-90.667 50.347-90.667 107.093 0 54.187 36.48 98.773 83.84 106.453v0.213c89.173 62.507 162.347 148.907 174.72 215.467l0.213-0.213v0.64c57.813-112 268.8-221.44 504.533-215.893 4.267 0.64 8.32 1.493 12.587 1.493 54.4 0 98.56-48.427 98.56-108.16 0.213-59.307-43.52-107.52-97.493-107.947zM704 426.667c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667z" />
-<glyph unicode="&#xe62a;" d="M512 49.067l-61.867 56.107c-219.733 199.467-364.8 331.093-364.8 492.16 0 131.627 103.040 234.667 234.667 234.667 74.24 0 145.493-34.56 192-88.96 46.507 54.4 117.76 88.96 192 88.96 131.627 0 234.667-103.040 234.667-234.667 0-161.067-145.067-292.693-364.8-492.16l-61.867-56.107z" />
-<glyph unicode="&#xe62b;" d="M704 832c-74.24 0-145.493-34.56-192-88.96-46.507 54.4-117.76 88.96-192 88.96-131.627 0-234.667-103.040-234.667-234.667 0-161.067 145.067-292.693 364.8-492.16l61.867-56.107 61.867 56.107c219.733 199.467 364.8 331.093 364.8 492.16 0 131.627-103.040 234.667-234.667 234.667zM516.48 168.32l-4.48-4.053-4.48 4.053c-202.88 184.107-336.853 305.707-336.853 429.013 0 85.12 64.213 149.333 149.333 149.333 65.707 0 129.707-42.453 152.107-100.693h79.573c22.613 58.24 86.613 100.693 152.32 100.693 85.12 0 149.333-64.213 149.333-149.333 0-123.307-133.973-244.907-336.853-429.013z" />
-<glyph unicode="&#xe62c;" d="M853.333 124.373v494.293l-256 256h-341.333c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667c0-47.147 37.76-85.333 84.907-85.333h512.427c18.987 0 36.48 6.4 50.56 17.067l-189.227 189.227c-33.493-22.4-73.813-35.627-117.333-35.627-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333c0-43.52-13.227-83.84-35.413-117.547l163.413-163.413zM384 405.333c0-70.613 57.387-128 128-128s128 57.387 128 128-57.387 128-128 128-128-57.387-128-128z" />
-<glyph unicode="&#xe62d;" d="M469.333 704c58.88 0 112.213-23.893 150.827-62.507l-108.16-108.16h256v256l-87.467-87.467c-53.973 53.973-128.64 87.467-211.2 87.467-150.4 0-274.56-111.36-295.253-256h86.187c19.84 97.28 105.813 170.667 209.067 170.667zM709.973 314.24c28.373 38.613 47.573 84.267 54.613 133.76h-86.187c-19.84-97.28-105.813-170.667-209.067-170.667-58.88 0-112.213 23.893-150.827 62.507l108.16 108.16h-256v-256l87.467 87.467c53.973-53.973 128.64-87.467 211.2-87.467 66.133 0 127.147 21.76 176.64 58.24l207.36-207.147 63.573 63.573-206.933 207.573z" />
-<glyph unicode="&#xe62e;" d="M384 661.333h-85.333v-85.333h85.333v85.333zM384 490.667h-85.333v-85.333h85.333v85.333zM384 832c-47.147 0-85.333-38.187-85.333-85.333h85.333v85.333zM554.667 320h-85.333v-85.333h85.333v85.333zM810.667 832v-85.333h85.333c0 47.147-38.187 85.333-85.333 85.333zM554.667 832h-85.333v-85.333h85.333v85.333zM384 234.667v85.333h-85.333c0-47.147 38.187-85.333 85.333-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM810.667 234.667c47.147 0 85.333 38.187 85.333 85.333h-85.333v-85.333zM213.333 661.333h-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512v85.333h-512v512zM640 746.667h85.333v85.333h-85.333v-85.333zM640 234.667h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe62f;" d="M128 405.333h85.333v85.333h-85.333v-85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM213.333 64v85.333h-85.333c0-47.147 38.187-85.333 85.333-85.333zM128 576h85.333v85.333h-85.333v-85.333zM640 64h85.333v85.333h-85.333v-85.333zM810.667 832h-426.667c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 320h-426.667v426.667h426.667v-426.667zM469.333 64h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe630;" d="M810.667 576h-170.667v256h-256v-256h-170.667l298.667-298.667 298.667 298.667zM213.333 192v-85.333h597.333v85.333h-597.333z" />
-<glyph unicode="&#xe631;" d="M512 223.147l263.68-159.147-69.76 299.947 232.747 201.6-306.773 26.453-119.893 282.667-119.893-282.667-306.773-26.453 232.747-201.6-69.76-299.947z" />
-<glyph unicode="&#xe632;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667 0-235.52 190.933-426.667 426.667-426.667s426.667 191.147 426.667 426.667c0 235.733-190.933 426.667-426.667 426.667zM341.333 213.333c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667zM405.333 618.667c0 58.88 47.787 106.667 106.667 106.667s106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667-106.667 47.787-106.667 106.667zM682.667 213.333c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
-<glyph unicode="&#xe633;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM554.667 149.333h-85.333v85.333h85.333v-85.333zM642.773 479.787l-38.187-39.253c-30.72-30.72-49.92-56.533-49.92-120.533h-85.333v21.333c0 47.147 19.2 89.813 49.92 120.747l53.12 53.76c15.36 15.36 24.96 36.693 24.96 60.16 0 47.147-38.187 85.333-85.333 85.333s-85.333-38.187-85.333-85.333h-85.333c0 94.293 76.373 170.667 170.667 170.667s170.667-76.373 170.667-170.667c0-37.547-15.147-71.467-39.893-96.213z" />
-<glyph unicode="&#xe634;" d="M622.293 618.667l-110.293-110.293-110.293 110.293-60.373-60.373 110.293-110.293-110.293-110.293 60.373-60.373 110.293 110.293 110.293-110.293 60.373 60.373-110.293 110.293 110.293 110.293-60.373 60.373zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
-<glyph unicode="&#xe635;" d="M554.453 832c-212.267 0-383.787-171.947-383.787-384h-128l166.187-166.187 2.987-6.187 172.16 172.373h-128c0 164.907 133.76 298.667 298.667 298.667s298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667c-82.56 0-157.013 33.707-210.987 87.68l-60.373-60.373c69.333-69.547 165.12-112.64 271.147-112.64 212.267 0 384.213 171.947 384.213 384s-171.947 384-384.213 384zM512 618.667v-213.333l182.613-108.373 30.72 51.84-149.333 88.533v181.333h-64z" />
-<glyph unicode="&#xe636;" d="M426.667 106.667v256h170.667v-256h213.333v341.333h128l-426.667 384-426.667-384h128v-341.333z" />
-<glyph unicode="&#xe637;" d="M768 618.667h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333v-85.333h-42.667c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM512 234.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM644.267 618.667h-264.533v85.333c0 72.96 59.307 132.267 132.267 132.267s132.267-59.307 132.267-132.267v-85.333z" />
-<glyph unicode="&#xe638;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM554.667 234.667h-85.333v256h85.333v-256zM554.667 576h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe639;" d="M469.333 234.667h85.333v256h-85.333v-256zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333zM469.333 576h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe63a;" d="M896 831.573h-768c-47.147 0-85.333-38.187-85.333-85.333v-170.24h85.333v171.093h768v-598.613h-768v171.52h-85.333v-171.093c0-47.147 38.187-84.48 85.333-84.48h768c47.147 0 85.333 37.547 85.333 84.48v597.333c0 47.147-38.187 85.333-85.333 85.333zM469.333 277.333l170.667 170.667-170.667 170.667v-128h-426.667v-85.333h426.667v-128z" />
-<glyph unicode="&#xe63b;" d="M753.28 621.653l-241.28 241.493-241.28-241.493c-133.333-133.333-133.333-349.44 0-482.773 66.56-66.56 154.027-100.053 241.28-100.053s174.72 33.28 241.28 100.053c133.333 133.333 133.333 349.44 0 482.773zM512 124.373c-68.48 0-132.693 26.667-180.907 75.093-48.427 48.213-75.093 112.427-75.093 180.907s26.667 132.693 75.093 181.12l180.907 180.907v-618.027z" />
-<glyph unicode="&#xe63c;" d="M752.427 710.613c-15.573 21.76-40.96 36.053-69.76 36.053l-469.333-0.427c-47.147 0-85.333-37.76-85.333-84.907v-426.667c0-47.147 38.187-84.907 85.333-84.907l469.333-0.427c28.8 0 54.187 14.293 69.76 36.053l186.24 262.613-186.24 262.613z" />
-<glyph unicode="&#xe63d;" d="M752.427 710.613c-15.573 21.76-40.96 36.053-69.76 36.053l-469.333-0.427c-47.147 0-85.333-37.76-85.333-84.907v-426.667c0-47.147 38.187-84.907 85.333-84.907l469.333-0.427c28.8 0 54.187 14.293 69.76 36.053l186.24 262.613-186.24 262.613zM682.667 234.667h-469.333v426.667h469.333l151.253-213.333-151.253-213.333z" />
-<glyph unicode="&#xe63e;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM807.253 618.667h-125.867c-13.867 53.333-33.28 104.533-58.88 151.893 78.507-26.88 143.787-81.28 184.747-151.893zM512 787.84c35.627-51.2 63.36-108.16 81.493-169.173h-162.987c18.133 61.013 45.867 117.973 81.493 169.173zM181.76 362.667c-7.040 27.307-11.093 55.893-11.093 85.333s4.053 58.027 11.093 85.333h144c-3.413-27.947-5.76-56.32-5.76-85.333s2.347-57.387 5.973-85.333h-144.213zM216.533 277.333h125.867c13.867-53.333 33.28-104.533 58.88-152.107-78.507 26.88-143.787 81.493-184.747 152.107zM342.4 618.667h-125.867c40.96 70.613 106.24 125.227 184.747 152.107-25.6-47.573-45.013-98.773-58.88-152.107zM512 108.16c-35.413 51.2-63.147 108.16-81.493 169.173h162.987c-18.347-61.013-46.080-117.973-81.493-169.173zM611.84 362.667h-199.68c-4.053 27.947-6.827 56.32-6.827 85.333s2.773 57.387 6.827 85.333h199.68c4.053-27.947 6.827-56.32 6.827-85.333s-2.773-57.387-6.827-85.333zM622.72 125.44c25.6 47.573 45.013 98.56 58.88 151.893h125.867c-41.173-70.613-106.453-125.013-184.747-151.893zM698.027 362.667c3.413 27.947 5.973 56.32 5.973 85.333s-2.347 57.387-5.973 85.333h144c7.040-27.307 11.307-55.893 11.307-85.333s-4.053-58.027-11.307-85.333h-144z" />
-<glyph unicode="&#xe63f;" d="M810.667 149.333h-597.333v597.333h298.667v85.333h-298.667c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v298.667h-85.333v-298.667zM597.333 832v-85.333h152.96l-419.413-419.413 60.373-60.373 419.413 419.413v-152.96h85.333v298.667h-298.667z" />
-<glyph unicode="&#xe640;" d="M128 405.333h85.333v85.333h-85.333v-85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM128 576h85.333v85.333h-85.333v-85.333zM298.667 405.333h597.333v85.333h-597.333v-85.333zM298.667 234.667h597.333v85.333h-597.333v-85.333zM298.667 661.333v-85.333h597.333v85.333h-597.333z" />
-<glyph unicode="&#xe641;" d="M768 618.667h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333v-85.333h-42.667c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM512 234.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM644.267 618.667h-264.533v85.333c0 72.96 59.307 132.267 132.267 132.267s132.267-59.307 132.267-132.267v-85.333z" />
-<glyph unicode="&#xe642;" d="M512 234.667c47.147 0 85.333 38.187 85.333 85.333s-38.187 85.333-85.333 85.333-85.333-38.187-85.333-85.333 38.187-85.333 85.333-85.333zM768 618.667h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333h81.067c0 72.96 59.307 132.267 132.267 132.267s132.267-59.307 132.267-132.267v-85.333h-388.267c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM768 106.667h-512v426.667h512v-426.667z" />
-<glyph unicode="&#xe643;" d="M768 618.667h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333v-85.333h-42.667c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM512 836.267c72.96 0 132.267-59.307 132.267-132.267v-85.333h-260.267v85.333h-4.267c0 72.96 59.307 132.267 132.267 132.267zM768 106.667h-512v426.667h512v-426.667zM512 234.667c47.147 0 85.333 38.187 85.333 85.333s-38.187 85.333-85.333 85.333-85.333-38.187-85.333-85.333 38.187-85.333 85.333-85.333z" />
-<glyph unicode="&#xe644;" d="M913.493 465.92l-383.787 383.787c-15.36 15.36-36.693 24.96-60.373 24.96h-298.667c-47.147 0-85.333-38.187-85.333-85.333v-298.667c0-23.68 9.6-45.013 25.173-60.373l384-384c15.36-15.36 36.693-24.96 60.16-24.96 23.68 0 45.013 9.6 60.373 24.96l298.667 298.667c15.36 15.573 24.96 36.907 24.96 60.373 0 23.68-9.6 45.013-25.173 60.587zM234.667 661.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM736.853 308.48l-182.187-182.187-182.187 182.187c-19.2 19.413-31.147 46.080-31.147 75.52 0 58.88 47.787 106.667 106.667 106.667 29.44 0 56.32-11.947 75.52-31.36l31.147-31.147 31.147 31.147c19.413 19.413 46.080 31.36 75.52 31.36 58.88 0 106.667-47.787 106.667-106.667 0-29.44-11.947-56.107-31.147-75.52z" />
-<glyph unicode="&#xe645;" d="M853.333 704h-426.667v-256h-85.333v341.333h256v170.667h-341.333v-256h-85.333c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333z" />
-<glyph unicode="&#xe646;" d="M597.333 874.667h-341.333c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667c0-47.147 37.76-85.333 84.907-85.333h512.427c47.147 0 85.333 38.187 85.333 85.333v512l-256 256zM682.667 277.333h-128v-128h-85.333v128h-128v85.333h128v128h85.333v-128h128v-85.333zM554.667 576v234.667l234.667-234.667h-234.667z" />
-<glyph unicode="&#xe647;" d="M810.667 789.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h170.667v85.333h-170.667v426.667h597.333v-426.667h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM512 533.333l-170.667-170.667h128v-256h85.333v256h128l-170.667 170.667z" />
-<glyph unicode="&#xe648;" d="M810.667 149.333h-597.333v597.333h298.667v85.333h-298.667c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v298.667h-85.333v-298.667zM597.333 832v-85.333h152.96l-419.413-419.413 60.373-60.373 419.413 419.413v-152.96h85.333v298.667h-298.667z" />
-<glyph unicode="&#xe649;" d="M426.667 576h170.667v128h128l-213.333 213.333-213.333-213.333h128v-128zM384 533.333h-128v128l-213.333-213.333 213.333-213.333v128h128v170.667zM981.333 448l-213.333 213.333v-128h-128v-170.667h128v-128l213.333 213.333zM597.333 320h-170.667v-128h-128l213.333-213.333 213.333 213.333h-128v128z" />
-<glyph unicode="&#xe64a;" d="M469.333 618.667c-70.613 0-128-57.387-128-128s57.387-128 128-128 128 57.387 128 128-57.387 128-128 128zM810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM750.293 149.333l-163.413 163.413c-33.707-22.187-74.027-35.413-117.547-35.413-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333c0-43.52-13.227-83.84-35.413-117.547l163.413-163.413-60.373-60.373z" />
-<glyph unicode="&#xe64b;" d="M853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 192h-682.667v256h682.667v-256zM853.333 618.667h-682.667v85.333h682.667v-85.333z" />
-<glyph unicode="&#xe64c;" d="M853.333 746.667h-135.253l-78.080 85.333h-256l-78.080-85.333h-135.253c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h298.667v89.173c-120.96 20.48-213.333 125.653-213.333 252.16h85.333c0-94.080 76.587-170.667 170.667-170.667s170.667 76.587 170.667 170.667h85.333c0-126.507-92.373-231.68-213.333-252.16v-89.173h298.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM597.333 405.333c0-47.147-38.187-85.333-85.333-85.333s-85.333 38.187-85.333 85.333v170.667c0 47.147 38.187 85.333 85.333 85.333s85.333-38.187 85.333-85.333v-170.667z" />
-<glyph unicode="&#xe64d;" d="M810.667 832h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM512 704c70.613 0 128-57.387 128-128 0-70.827-57.387-128-128-128s-128 57.173-128 128c0 70.613 57.387 128 128 128zM768 192h-512v42.667c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667z" />
-<glyph unicode="&#xe64e;" d="M810.24 469.333c14.507 0 29.013-1.28 43.093-3.2v493.867l-853.333-853.333h493.44c-1.92 14.080-3.2 28.16-3.2 42.667 0 176.64 143.36 320 320 320zM968.747 128.427c0.853 6.827 1.493 13.653 1.493 20.907 0 7.040-0.64 14.080-1.493 20.907l45.013 35.2c4.053 3.2 5.12 8.96 2.56 13.653l-42.667 73.813c-2.56 4.693-8.32 6.4-13.013 4.693l-53.12-21.333c-11.093 8.533-23.040 15.573-36.053 20.907l-7.893 56.533c-0.853 5.12-5.333 8.96-10.667 8.96h-85.333c-5.333 0-9.813-3.84-10.453-8.96l-7.893-56.533c-13.013-5.333-24.96-12.587-36.053-20.907l-53.12 21.333c-4.907 1.92-10.453 0-13.013-4.693l-42.667-73.813c-2.773-4.693-1.493-10.453 2.56-13.653l45.013-35.2c-0.853-6.827-1.493-13.867-1.493-20.907s0.64-14.080 1.493-20.907l-45.013-35.2c-4.053-3.2-5.12-8.96-2.56-13.653l42.667-73.813c2.773-4.693 8.32-6.4 13.013-4.693l53.12 21.333c11.093-8.533 23.040-15.573 36.053-20.907l7.893-56.533c0.853-5.12 5.333-8.96 10.453-8.96h85.333c5.333 0 9.6 3.84 10.453 8.96l7.893 56.533c13.013 5.333 24.96 12.587 36.053 20.907l53.12-21.333c4.907-1.92 10.453 0 13.013 4.693l42.667 73.813c2.773 4.693 1.493 10.453-2.56 13.653l-44.8 35.2zM810.24 85.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
-<glyph unicode="&#xe64f;" d="M554.667 661.333h-85.333v-85.333h85.333v85.333zM554.667 490.667h-85.333v-256h85.333v256zM725.333 916.907l-426.667 0.427c-47.147 0-85.333-38.187-85.333-85.333v-768c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v768c0 47.147-38.187 84.907-85.333 84.907zM725.333 149.333h-426.667v597.333h426.667v-597.333z" />
-<glyph unicode="&#xe650;" d="M512 708.267c49.493 0 89.6-40.107 89.6-89.6s-40.107-89.6-89.6-89.6-89.6 40.107-89.6 89.6 40.107 89.6 89.6 89.6zM512 324.267c126.933 0 260.267-62.080 260.267-89.6v-46.933h-520.533v46.933c0 27.52 133.333 89.6 260.267 89.6zM512 789.333c-94.293 0-170.667-76.373-170.667-170.667 0-94.080 76.373-170.667 170.667-170.667s170.667 76.587 170.667 170.667c0 94.293-76.373 170.667-170.667 170.667zM512 405.333c-113.707 0-341.333-56.96-341.333-170.667v-128h682.667v128c0 113.707-227.627 170.667-341.333 170.667z" />
-<glyph unicode="&#xe651;" d="M85.333 704h-85.333v-213.333h0.427l-0.427-384c0-47.147 38.187-85.333 85.333-85.333h768v85.333h-768v597.333zM938.667 789.333h-341.333l-85.333 85.333h-256c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM298.667 320l192 256 149.333-192.213 106.667 128.213 149.333-192h-597.333z" />
-<glyph unicode="&#xe652;" d="M853.333 298.667c-53.12 0-104.533 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.96 61.44-219.52 160.213-281.173 280.96l93.867 94.293c11.733 11.733 15.147 28.587 10.453 43.307-15.787 47.787-24.32 99.2-24.32 152.32 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.467 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667zM512 832v-426.667l128 128h256v298.667h-384z" />
-<glyph unicode="&#xe653;" d="M512 832c-215.253 0-377.813-78.933-512-180.693l512-629.973 512 629.333c-134.187 101.547-296.747 181.333-512 181.333zM554.667 277.333h-85.333v256h85.333v-256zM469.333 618.667v85.333h85.333v-85.333h-85.333z" />
-<glyph unicode="&#xe654;" d="M810.667 661.333h-341.333v-256h341.333v256zM896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-84.48 85.333-84.48h768c47.147 0 85.333 37.547 85.333 84.48v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 148.693h-768v598.613h768v-598.613z" />
-<glyph unicode="&#xe655;" d="M810.667 789.333h-170.667l-336.853-538.88-111.147 197.547 192 341.333h-170.667l-192-341.333 192-341.333h170.667l336.853 538.88 111.147-197.547-192-341.333h170.667l192 341.333z" />
-<glyph unicode="&#xe656;" d="M810.667 618.667h-597.333c-70.613 0-128-57.387-128-128v-256h170.667v-170.667h512v170.667h170.667v256c0 70.613-57.387 128-128 128zM682.667 149.333h-341.333v213.333h341.333v-213.333zM810.667 448c-23.68 0-42.667 18.987-42.667 42.667s18.987 42.667 42.667 42.667c23.68 0 42.667-18.987 42.667-42.667s-18.987-42.667-42.667-42.667zM768 832h-512v-170.667h512v170.667z" />
-<glyph unicode="&#xe657;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM533.333 661.333h-64v-256l223.787-134.4 32.213 52.48-192 113.92z" />
-<glyph unicode="&#xe658;" d="M896 704h-85.333v-384h-554.667v-85.333c0-23.467 19.2-42.667 42.667-42.667h469.333l170.667-170.667v640c0 23.467-19.2 42.667-42.667 42.667zM725.333 448v384c0 23.467-19.2 42.667-42.667 42.667h-554.667c-23.467 0-42.667-19.2-42.667-42.667v-597.333l170.667 170.667h426.667c23.467 0 42.667 19.2 42.667 42.667z" />
-<glyph unicode="&#xe659;" d="M768 234.667h-512v85.333h512v-85.333zM768 405.333h-512v85.333h512v-85.333zM768 576h-512v85.333h512v-85.333zM128 21.333l64 64 64-64 64 64 64-64 64 64 64-64 64 64 64-64 64 64 64-64 64 64 64-64v853.333l-64-64-64 64-64-64-64 64-64-64-64 64-64-64-64 64-64-64-64 64-64-64-64 64v-853.333z" />
-<glyph unicode="&#xe65a;" d="M853.333 704h-93.227c4.693 13.44 7.893 27.52 7.893 42.667 0 70.613-57.387 128-128 128-44.587 0-83.84-22.827-106.667-57.387l-21.333-29.013-21.333 29.013c-22.827 34.56-62.080 57.387-106.667 57.387-70.613 0-128-57.387-128-128 0-15.147 2.987-29.227 7.893-42.667h-93.227c-47.147 0-84.907-38.187-84.907-85.333l-0.427-469.333c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v469.333c0 47.147-38.187 85.333-85.333 85.333zM640 789.333c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM384 789.333c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM853.333 149.333h-682.667v85.333h682.667v-85.333zM853.333 362.667h-682.667v256h216.747l-88.747-120.96 69.333-49.707 144 196.053 42.667-58.027 101.333-138.027 69.333 49.707-88.747 120.96h216.747v-256z" />
-<glyph unicode="&#xe65b;" d="M42.667 64h938.667l-469.333 810.667-469.333-810.667zM554.667 192h-85.333v85.333h85.333v-85.333zM554.667 362.667h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe65c;" d="M554.453 832c-212.267 0-383.787-171.947-383.787-384h-128l166.187-166.187 2.987-6.187 172.16 172.373h-128c0 164.907 133.76 298.667 298.667 298.667s298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667c-82.56 0-157.013 33.707-210.987 87.68l-60.373-60.373c69.333-69.547 165.12-112.64 271.147-112.64 212.267 0 384.213 171.947 384.213 384s-171.947 384-384.213 384zM512 618.667v-213.333l182.613-108.373 30.72 51.84-149.333 88.533v181.333h-64z" />
-<glyph unicode="&#xe65d;" d="M512 874.667c-164.907 0-298.667-133.76-298.667-298.667 0-224 298.667-554.667 298.667-554.667s298.667 330.667 298.667 554.667c0 164.907-133.76 298.667-298.667 298.667zM512 469.333c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
-<glyph unicode="&#xe65e;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM533.333 661.333h-64v-256l223.787-134.4 32.213 52.48-192 113.92z" />
-<glyph unicode="&#xe65f;" d="M661.333 362.667h-33.92l-11.733 11.733c41.813 48.427 66.987 111.36 66.987 180.267 0 153.173-124.16 277.333-277.333 277.333s-277.333-124.16-277.333-277.333 124.16-277.333 277.333-277.333c68.907 0 131.84 25.173 180.267 66.773l11.733-11.733v-33.707l213.333-212.907 63.573 63.573-212.907 213.333zM405.333 362.667c-106.027 0-192 85.973-192 192s85.973 192 192 192 192-85.973 192-192-85.973-192-192-192z" />
-<glyph unicode="&#xe660;" d="M829.013 406.4c1.707 13.653 2.987 27.52 2.987 41.6s-1.28 27.947-2.987 41.6l90.24 70.613c8.107 6.4 10.453 17.92 5.12 27.307l-85.333 147.84c-5.333 9.173-16.427 13.013-26.027 9.173l-106.24-42.88c-21.973 16.853-46.080 31.147-72.107 42.027l-16 113.067c-1.92 10.027-10.667 17.92-21.333 17.92h-170.667c-10.667 0-19.413-7.893-21.12-17.92l-16-113.067c-26.027-10.88-50.133-24.96-72.107-42.027l-106.24 42.88c-9.6 3.627-20.693 0-26.027-9.173l-85.333-147.84c-5.333-9.173-2.987-20.693 5.12-27.307l90.027-70.613c-1.707-13.653-2.987-27.52-2.987-41.6s1.28-27.947 2.987-41.6l-90.027-70.613c-8.107-6.4-10.453-17.92-5.12-27.307l85.333-147.84c5.333-9.173 16.427-13.013 26.027-9.173l106.24 42.88c21.973-16.853 46.080-31.147 72.107-42.027l16-113.067c1.707-10.027 10.453-17.92 21.12-17.92h170.667c10.667 0 19.413 7.893 21.12 17.92l16 113.067c26.027 10.88 50.133 24.96 72.107 42.027l106.24-42.88c9.6-3.627 20.693 0 26.027 9.173l85.333 147.84c5.333 9.173 2.987 20.693-5.12 27.307l-90.027 70.613zM512 298.667c-82.56 0-149.333 66.773-149.333 149.333s66.773 149.333 149.333 149.333 149.333-66.773 149.333-149.333-66.773-149.333-149.333-149.333z" />
-<glyph unicode="&#xe661;" d="M512 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM736 448c0-9.813-0.853-19.627-2.133-29.227l63.147-49.493c5.547-4.48 7.253-12.587 3.413-18.987l-59.733-103.467c-3.627-6.4-11.52-8.96-18.347-6.4l-74.453 30.080c-15.36-11.947-32.213-21.76-50.56-29.44l-11.093-79.147c-0.853-7.040-7.040-12.587-14.507-12.587h-119.467c-7.467 0-13.653 5.547-14.72 12.587l-11.093 79.147c-18.133 7.467-34.987 17.493-50.56 29.44l-74.24-29.867c-6.827-2.56-14.507 0-18.347 6.4l-59.733 103.467c-3.84 6.4-2.133 14.507 3.413 18.987l63.147 49.28c-1.28 9.6-2.133 19.2-2.133 29.227 0 9.813 0.853 19.627 2.133 29.227l-63.147 49.28c-5.547 4.48-7.253 12.587-3.413 18.987l59.733 103.467c3.84 6.4 11.52 8.96 18.347 6.4l74.24-29.867c15.36 11.733 32.213 21.76 50.56 29.44l11.093 79.147c1.067 7.040 7.253 12.587 14.72 12.587h119.467c7.467 0 13.653-5.547 14.72-12.587l11.093-79.147c18.133-7.467 34.987-17.493 50.56-29.44l74.24 29.867c6.827 2.56 14.507 0 18.347-6.4l59.733-103.467c3.84-6.4 2.133-14.507-3.413-18.987l-63.147-49.493c1.28-9.387 2.133-19.2 2.133-29.013z" />
-<glyph unicode="&#xe662;" d="M597.333 448c0 47.147-38.187 85.333-85.333 85.333s-85.333-38.187-85.333-85.333 38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333zM512 832c-212.053 0-384-171.947-384-384h-128l170.667-170.667 170.667 170.667h-128c0 164.907 133.76 298.667 298.667 298.667s298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667c-64.64 0-124.16 20.693-173.227 55.68l-60.373-61.227c64.853-49.92 145.707-79.787 233.6-79.787 212.053 0 384 171.947 384 384s-171.947 384-384 384z" />
-<glyph unicode="&#xe663;" d="M469.333-64h85.333v85.333h-85.333v-85.333zM298.667-64h85.333v85.333h-85.333v-85.333zM640-64h85.333v85.333h-85.333v-85.333zM755.413 716.587l-243.413 243.413h-42.667v-323.627l-195.627 195.627-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 195.627 195.627v-323.627h42.667l243.413 243.413-183.040 183.253 183.040 183.253zM554.667 796.587l80.213-80.213-80.213-80v160.213zM634.88 350.080l-80.213-80v160.213l80.213-80.213z" />
-<glyph unicode="&#xe664;" d="M298.667-64h85.333v85.333h-85.333v-85.333zM469.333-64h85.333v85.333h-85.333v-85.333zM640-64h85.333v85.333h-85.333v-85.333zM682.667 959.573l-341.333 0.427c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h341.333c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 84.907-85.333 84.907zM682.667 277.333h-341.333v512h341.333v-512z" />
-<glyph unicode="&#xe665;" d="M896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 148.693h-768v598.613h768v-598.613zM341.333 277.333h106.667l64-64 64 64h106.667v106.667l64 64-64 64v106.667h-106.667l-64 64-64-64h-106.667v-106.667l-64-64 64-64v-106.667zM512 576c70.613 0 128-57.387 128-128s-57.387-128-128-128v256z" />
-<glyph unicode="&#xe666;" d="M331.52 671.573l-65.707 54.4-230.827-277.973 230.827-278.187 65.707 54.4-185.6 223.787 185.6 223.573zM298.667 405.333h85.333v85.333h-85.333v-85.333zM725.333 490.667h-85.333v-85.333h85.333v85.333zM469.333 405.333h85.333v85.333h-85.333v-85.333zM758.187 726.187l-65.707-54.4 185.6-223.787-185.6-223.573 65.707-54.4 230.827 277.973-230.827 278.187z" />
-<glyph unicode="&#xe667;" d="M512 746.667c-164.907 0-298.667-133.76-298.667-298.667h85.333c0 117.76 95.573 213.333 213.333 213.333s213.333-95.573 213.333-213.333h85.333c0 164.907-133.76 298.667-298.667 298.667zM554.667 350.293c37.547 16.427 64 53.973 64 97.707 0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667c0-43.733 26.453-81.28 64-97.707v-140.587l-145.707-145.707 60.373-60.373 128 128 128-128 60.373 60.373-145.707 145.707v140.587zM512 917.333c-259.2 0-469.333-210.133-469.333-469.333h85.333c0 212.053 171.947 384 384 384s384-171.947 384-384h85.333c0 259.2-210.133 469.333-469.333 469.333z" />
-<glyph unicode="&#xe668;" d="M213.333 874.667c0 23.467-18.987 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM384 277.333c0-55.68 35.84-102.613 85.333-120.107v-178.56h85.333v178.56c49.493 17.707 85.333 64.427 85.333 120.107v85.333h-256v-85.333zM42.667 277.333c0-55.68 35.84-102.613 85.333-120.107v-178.56h85.333v178.56c49.493 17.707 85.333 64.427 85.333 120.107v85.333h-256v-85.333zM896 704v170.667c0 23.467-18.987 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333zM554.667 874.667c0 23.467-18.987 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM725.333 277.333c0-55.68 35.84-102.613 85.333-120.107v-178.56h85.333v178.56c49.493 17.707 85.333 64.427 85.333 120.107v85.333h-256v-85.333z" />
-<glyph unicode="&#xe669;" d="M213.333 874.667c0 23.467-18.987 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM384 277.333c0-55.68 35.84-102.613 85.333-120.107v-178.56h85.333v178.56c49.493 17.707 85.333 64.427 85.333 120.107v85.333h-256v-85.333zM42.667 277.333c0-55.68 35.84-102.613 85.333-120.107v-178.56h85.333v178.56c49.493 17.707 85.333 64.427 85.333 120.107v85.333h-256v-85.333zM896 704v170.667c0 23.467-18.987 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333zM554.667 874.667c0 23.467-18.987 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM725.333 277.333c0-55.68 35.84-102.613 85.333-120.107v-178.56h85.333v178.56c49.493 17.707 85.333 64.427 85.333 120.107v85.333h-256v-85.333z" />
-<glyph unicode="&#xe66a;" d="M768 661.333v128c0 47.147-38.187 85.333-85.333 85.333h-341.333c-47.147 0-85.333-38.187-85.333-85.333v-128h-42.667v-256l128-256v-128h341.333v128l128 256v256h-42.667zM341.333 789.333h341.333v-128h-85.333v85.333h-42.667v-85.333h-85.333v85.333h-42.667v-85.333h-85.333v128z" />
-<glyph unicode="&#xe66b;" d="M341.333 469.333c0 35.413-28.587 64-64 64s-64-28.587-64-64 28.587-64 64-64 64 28.587 64 64zM640 682.667c0 35.413-28.587 64-64 64h-128c-35.413 0-64-28.587-64-64s28.587-64 64-64h128c35.413 0 64 28.587 64 64zM362.667 320c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM512 917.333c-258.773 0-469.333-210.56-469.333-469.333s210.56-469.333 469.333-469.333 469.333 210.56 469.333 469.333-210.56 469.333-469.333 469.333zM512 64c-211.84 0-384 172.373-384 384s172.16 384 384 384 384-172.373 384-384-172.16-384-384-384zM746.667 533.333c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM661.333 320c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64z" />
-<glyph unicode="&#xe66c;" d="M512.213 725.333l-85.547-106.667h170.667l-85.12 106.667zM768 533.333v-170.667l106.667 85.12-106.667 85.547zM256 533.333l-106.667-85.547 106.667-85.12v170.667zM597.333 277.333h-170.667l85.547-106.667 85.12 106.667zM896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 148.693h-768v598.613h768v-598.613z" />
-<glyph unicode="&#xe66d;" d="M554.667 576h-85.333v-85.333h85.333v85.333zM725.333 576h-85.333v-85.333h85.333v85.333zM853.333 298.667c-53.12 0-104.32 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.96 61.44-219.52 160.213-281.173 280.96l93.867 94.080c11.733 11.733 15.147 28.587 10.453 43.307-15.787 48-24.32 99.413-24.32 152.533 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.68 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667zM810.667 576v-85.333h85.333v85.333h-85.333z" />
-<glyph unicode="&#xe66e;" d="M298.667-64h85.333v85.333h-85.333v-85.333zM469.333-64h85.333v85.333h-85.333v-85.333zM554.667 874.667h-85.333v-426.667h85.333v426.667zM706.773 770.773l-61.653-61.653c73.6-45.013 122.88-125.867 122.88-218.453 0-141.44-114.56-256-256-256s-256 114.56-256 256c0 92.587 49.28 173.44 122.88 218.453l-61.653 61.653c-88.533-61.653-146.56-164.053-146.56-280.107 0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333c0 116.053-58.027 218.453-146.56 280.107zM640-64h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe66f;" d="M640 576h-256c-23.68 0-42.667-19.2-42.667-42.667v-512c0-23.467 18.987-42.667 42.667-42.667h256c23.68 0 42.667 19.2 42.667 42.667v512c0 23.467-18.987 42.667-42.667 42.667zM512 320c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM300.8 701.867l60.373-60.373c38.613 38.613 91.947 62.507 150.827 62.507s112.213-23.893 150.827-62.507l60.373 60.373c-53.973 53.973-128.64 87.467-211.2 87.467s-157.227-33.493-211.2-87.467zM512 960c-129.493 0-246.827-52.48-331.947-137.387l60.373-60.373c69.547 69.547 165.547 112.427 271.573 112.427s202.027-42.88 271.573-112.427l60.373 60.373c-85.12 84.907-202.453 137.387-331.947 137.387z" />
-<glyph unicode="&#xe670;" d="M298.667-64h85.333v85.333h-85.333v-85.333zM512 405.333c70.613 0 127.573 57.387 127.573 128l0.427 256c0 70.827-57.173 128-128 128-70.613 0-128-57.173-128-128v-256c0-70.613 57.387-128 128-128zM469.333-64h85.333v85.333h-85.333v-85.333zM640-64h85.333v85.333h-85.333v-85.333zM810.667 533.333h-72.533c0-128-108.16-217.6-226.133-217.6-117.76 0-226.133 89.6-226.133 217.6h-72.533c0-145.707 116.053-266.027 256-286.72v-139.947h85.333v139.947c139.947 20.693 256 141.013 256 286.72z" />
-<glyph unicode="&#xe671;" d="M682.667 704v85.333c0 47.147-38.187 85.333-85.333 85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-85.333h-256v-554.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v554.667h-256zM426.667 789.333h170.667v-85.333h-170.667v85.333zM384 192v384l320-170.667-320-213.333z" />
-<glyph unicode="&#xe672;" d="M734.293 576l-186.88 279.68c-8.107 12.373-21.76 18.133-35.413 18.133s-27.307-5.973-35.413-18.133l-186.88-279.68h-204.373c-23.467 0-42.667-19.2-42.667-42.667 0-4.053 0.64-7.893 1.493-11.52l108.16-395.52c10.027-35.84 43.093-62.293 82.347-62.293h554.667c39.253 0 72.32 26.453 82.133 62.507l108.16 395.52c1.067 3.413 1.707 7.253 1.707 11.307 0 23.467-19.2 42.667-42.667 42.667h-204.373zM384 576l128 187.733 128-187.733h-256zM512 234.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe673;" d="M298.667 192c-47.147 0-84.907-38.187-84.907-85.333s37.76-85.333 84.907-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM42.667 874.667v-85.333h85.333l153.387-323.627-57.6-104.533c-6.613-12.373-10.453-26.24-10.453-41.173 0-47.147 38.187-85.333 85.333-85.333h512v85.333h-493.867c-5.973 0-10.667 4.693-10.667 10.667 0 1.92 0.427 3.627 1.28 5.12l38.187 69.547h317.867c32 0 59.947 17.707 74.667 43.947l152.533 276.907c3.413 5.973 5.333 13.013 5.333 20.48 0 23.68-19.2 42.667-42.667 42.667h-630.827l-40.533 85.333h-139.307zM725.333 192c-47.147 0-84.907-38.187-84.907-85.333s37.76-85.333 84.907-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe674;" d="M768 746.667v85.333c0 47.147-38.187 85.333-85.333 85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-85.333h-213.333v-469.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v469.333h-213.333zM512 832h170.667v-85.333h-170.667v85.333zM512 320v298.667l234.667-128-234.667-170.667zM128 576h-85.333v-469.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333h-682.667v469.333z" />
-<glyph unicode="&#xe675;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM341.333 362.667h-85.333v85.333h85.333v-85.333zM341.333 490.667h-85.333v85.333h85.333v-85.333zM341.333 618.667h-85.333v85.333h85.333v-85.333zM640 362.667h-213.333v85.333h213.333v-85.333zM768 490.667h-341.333v85.333h341.333v-85.333zM768 618.667h-341.333v85.333h341.333v-85.333z" />
-<glyph unicode="&#xe676;" d="M530.987 277.333h89.173l-217.813 554.667h-79.147l-218.027-554.667h89.173l48 128h240.853l47.787-128zM274.347 490.667l88.32 235.733 88.32-235.733h-176.64zM920.96 465.707l-344.96-344.96-156.587 156.587-60.373-60.373 216.96-216.96 405.333 405.333-60.373 60.373z" />
-<glyph unicode="&#xe677;" d="M512 349.867l158.293-115.2-60.587 186.027 158.293 112.64h-194.133l-61.867 192-61.867-192h-194.133l158.293-112.64-60.373-186.027z" />
-<glyph unicode="&#xe678;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM692.48 192l-180.48 108.8-180.48-108.8 47.787 205.227-159.147 138.027 209.92 17.92 81.92 193.493 81.92-193.493 209.92-17.92-159.147-138.027 47.787-205.227z" />
-<glyph unicode="&#xe679;" d="M853.333 789.333h-682.667v-85.333h682.667v85.333zM896 362.667v85.333l-42.667 213.333h-682.667l-42.667-213.333v-85.333h42.667v-256h426.667v256h170.667v-256h85.333v256h42.667zM512 192h-256v170.667h256v-170.667z" />
-<glyph unicode="&#xe67a;" d="M597.333 234.667h-426.667v-85.333h426.667v85.333zM853.333 576h-682.667v-85.333h682.667v85.333zM170.667 320h682.667v85.333h-682.667v-85.333zM170.667 746.667v-85.333h682.667v85.333h-682.667z" />
-<glyph unicode="&#xe67b;" d="M298.24 490.667l-170.24-170.667 170.24-170.667v128h299.093v85.333h-299.093v128zM896 576l-170.24 170.667v-128h-299.093v-85.333h299.093v-128l170.24 170.667z" />
-<glyph unicode="&#xe67c;" d="M682.667 234.24v299.093h-85.333v-299.093h-128l170.667-170.24 170.667 170.24h-128zM384 832l-170.667-170.24h128v-299.093h85.333v299.093h128l-170.667 170.24z" />
-<glyph unicode="&#xe67d;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM277.333 576l149.333 149.333 149.333-149.333h-106.667v-170.667h-85.333v170.667h-106.667zM746.667 320l-149.333-149.333-149.333 149.333h106.667v170.667h85.333v-170.667h106.667z" />
-<glyph unicode="&#xe67e;" d="M512 266.667l170.667 170.667h-128v384h-85.333v-384h-128l170.667-170.667zM896 821.333h-256v-84.693h256v-598.613h-768v598.613h256v84.693h-256c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe67f;" d="M896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 149.333h-768v597.333h426.667v-170.667h341.333v-426.667z" />
-<glyph unicode="&#xe680;" d="M42.667 576h85.333v85.333h-85.333v-85.333zM42.667 405.333h85.333v85.333h-85.333v-85.333zM42.667 746.667h85.333v85.333c-47.147 0-85.333-38.187-85.333-85.333zM384 64h85.333v85.333h-85.333v-85.333zM42.667 234.667h85.333v85.333h-85.333v-85.333zM128 64v85.333h-85.333c0-47.147 38.187-85.333 85.333-85.333zM896 832h-341.333v-256h426.667v170.667c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h85.333v85.333h-85.333v-85.333zM384 746.667h85.333v85.333h-85.333v-85.333zM213.333 64h85.333v85.333h-85.333v-85.333zM213.333 746.667h85.333v85.333h-85.333v-85.333zM896 64c47.147 0 85.333 38.187 85.333 85.333h-85.333v-85.333zM896 405.333h85.333v85.333h-85.333v-85.333zM554.667 64h85.333v85.333h-85.333v-85.333zM725.333 64h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe681;" d="M768 832v-85.333h-85.333v85.333h-341.333v-85.333h-85.333v85.333h-85.333v-768h85.333v85.333h85.333v-85.333h341.333v85.333h85.333v-85.333h85.333v768h-85.333zM341.333 234.667h-85.333v85.333h85.333v-85.333zM341.333 405.333h-85.333v85.333h85.333v-85.333zM341.333 576h-85.333v85.333h85.333v-85.333zM768 234.667h-85.333v85.333h85.333v-85.333zM768 405.333h-85.333v85.333h85.333v-85.333zM768 576h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe682;" d="M640 832h-384c-35.413 0-65.707-21.547-78.507-52.053l-128.64-300.8c-3.84-9.813-6.187-20.267-6.187-31.147v-81.707l0.427-0.427-0.427-3.2c0-47.147 38.187-85.333 85.333-85.333h269.44l-40.747-194.987c-0.853-4.267-1.493-8.747-1.493-13.44 0-17.707 7.253-33.707 18.773-45.227l45.44-45.013 280.96 280.96c15.36 15.573 24.96 36.907 24.96 60.373v426.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 832v-512h170.667v512h-170.667z" />
-<glyph unicode="&#xe683;" d="M512 704c0 23.467-19.2 42.667-42.667 42.667h-221.227l28.373 135.467c0.64 3.2 1.067 6.613 1.067 10.027 0 13.227-5.333 25.173-14.080 33.92l-33.92 33.92-210.773-210.773c-11.52-11.52-18.773-27.52-18.773-45.227v-277.333c0-35.413 28.587-64 64-64h288c26.453 0 49.28 16 58.88 39.040l96.64 225.707c2.773 7.253 4.48 14.933 4.48 23.253v53.333zM960 533.333h-288c-26.453 0-49.28-16-58.88-39.040l-96.64-225.707c-2.773-7.253-4.48-14.933-4.48-23.253v-53.333c0-23.467 19.2-42.667 42.667-42.667h221.227l-28.373-135.467c-0.64-3.2-1.067-6.613-1.067-10.027 0-13.227 5.333-25.173 14.080-33.92l33.92-33.92 210.773 210.773c11.52 11.52 18.773 27.52 18.773 45.227v277.333c0 35.413-28.587 64-64 64z" />
-<glyph unicode="&#xe684;" d="M42.667 64h170.667v512h-170.667v-512zM981.333 533.333c0 47.147-38.187 85.333-85.333 85.333h-269.44l40.747 194.987c0.853 4.267 1.493 8.747 1.493 13.44 0 17.707-7.253 33.707-18.773 45.227l-45.44 45.013-280.96-280.96c-15.36-15.573-24.96-36.907-24.96-60.373v-426.667c0-47.147 38.187-85.333 85.333-85.333h384c35.413 0 65.707 21.547 78.507 52.053l128.64 300.8c3.84 9.813 6.187 20.267 6.187 31.147v81.707l-0.427 0.427 0.427 3.2z" />
-<glyph unicode="&#xe685;" d="M128 576h597.333v85.333h-597.333v-85.333zM128 405.333h597.333v85.333h-597.333v-85.333zM128 234.667h597.333v85.333h-597.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM810.667 661.333v-85.333h85.333v85.333h-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe686;" d="M810.667 832h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v469.333h597.333v-469.333zM298.667 533.333h213.333v-213.333h-213.333z" />
-<glyph unicode="&#xe687;" d="M813.653 749.653l-60.373-60.373c61.867-61.653 100.053-146.987 100.053-241.28 0-188.587-152.747-341.333-341.333-341.333s-341.333 152.747-341.333 341.333c0 174.080 130.347 317.44 298.667 338.347v-86.187c-120.96-20.267-213.333-125.44-213.333-252.16 0-141.44 114.56-256 256-256s256 114.56 256 256c0 70.613-28.587 134.613-74.88 181.12l-60.373-60.373c30.72-30.933 49.92-73.6 49.92-120.747 0-94.293-76.373-170.667-170.667-170.667s-170.667 76.373-170.667 170.667c0 79.36 54.613 145.707 128 164.693v-91.093c-25.387-14.72-42.667-42.027-42.667-73.6 0-47.147 38.187-85.333 85.333-85.333s85.333 38.187 85.333 85.333c0 31.573-17.28 58.667-42.667 73.6v353.067h-42.667c-235.733 0-426.667-190.933-426.667-426.667 0-235.52 190.933-426.667 426.667-426.667 235.52 0 426.667 191.147 426.667 426.667 0 117.76-47.787 224.427-125.013 301.653z" />
-<glyph unicode="&#xe688;" d="M549.12 316.8l-108.373 107.093 1.28 1.28c74.24 82.773 127.147 177.92 158.293 278.613h125.013v85.547h-298.667v85.333h-85.333v-85.333h-298.667v-84.907h476.587c-28.8-82.347-73.813-160.427-135.253-228.693-39.68 44.16-72.533 92.16-98.56 142.933h-85.333c31.147-69.547 73.813-135.253 127.147-194.56l-216.96-214.4 60.373-60.373 213.333 213.333 132.693-132.693 32.427 86.827zM789.333 533.333h-85.333l-192-512h85.333l48 128h202.667l48-128h85.333l-192 512zM677.333 234.667l69.333 184.96 69.333-184.96h-138.667z" />
-<glyph unicode="&#xe689;" d="M682.667 192l97.92 97.92-208.213 208-170.667-170.667-316.373 316.373 60.373 60.373 256-256 170.667 170.667 268.373-268.587 97.92 97.92v-256z" />
-<glyph unicode="&#xe68a;" d="M938.667 448l-170.667 170.667v-128h-640v-85.333h640v-128z" />
-<glyph unicode="&#xe68b;" d="M682.667 704l97.92-97.92-208.213-208-170.667 170.667-316.373-316.373 60.373-60.373 256 256 170.667-170.667 268.373 268.587 97.92-97.92v256z" />
-<glyph unicode="&#xe68c;" d="M725.333 832h-426.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe68d;" d="M725.333 832h-426.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 47.147-38.187 85.333-85.333 85.333zM725.333 192l-213.333 92.8-213.333-92.8v554.667h426.667v-554.667z" />
-<glyph unicode="&#xe68e;" d="M512 917.333l-384-170.667v-256c0-237.013 163.627-458.027 384-512 220.373 53.973 384 274.987 384 512v256l-384 170.667zM426.667 234.667l-170.667 170.667 60.373 60.373 110.293-110.293 280.96 280.96 60.373-60.373-341.333-341.333z" />
-<glyph unicode="&#xe68f;" d="M853.333 405.333h-725.333c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h725.333c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM853.333 832h-725.333c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h725.333c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667z" />
-<glyph unicode="&#xe690;" d="M170.667 192h128v554.667h-128v-554.667zM768 746.667v-554.667h128v554.667h-128zM341.333 192h384v554.667h-384v-554.667z" />
-<glyph unicode="&#xe691;" d="M298.667 149.333h426.667v640h-426.667v-640zM85.333 234.667h170.667v469.333h-170.667v-469.333zM768 704v-469.333h170.667v469.333h-170.667z" />
-<glyph unicode="&#xe692;" d="M426.667 192h213.333v554.667h-213.333v-554.667zM170.667 192h213.333v554.667h-213.333v-554.667zM682.667 746.667v-554.667h213.333v554.667h-213.333z" />
-<glyph unicode="&#xe693;" d="M85.333 64h810.667v128h-810.667v-128zM853.333 618.667h-725.333c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h725.333c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM85.333 832v-128h810.667v128h-810.667z" />
-<glyph unicode="&#xe694;" d="M170.667 320h725.333v85.333h-725.333v-85.333zM170.667 149.333h725.333v85.333h-725.333v-85.333zM170.667 490.667h725.333v85.333h-725.333v-85.333zM170.667 746.667v-85.333h725.333v85.333h-725.333z" />
-<glyph unicode="&#xe695;" d="M170.667 362.667h170.667v170.667h-170.667v-170.667zM170.667 149.333h170.667v170.667h-170.667v-170.667zM170.667 576h170.667v170.667h-170.667v-170.667zM384 362.667h512v170.667h-512v-170.667zM384 149.333h512v170.667h-512v-170.667zM384 746.667v-170.667h512v170.667h-512z" />
-<glyph unicode="&#xe696;" d="M170.667 490.667h213.333v256h-213.333v-256zM170.667 192h213.333v256h-213.333v-256zM426.667 192h213.333v256h-213.333v-256zM682.667 192h213.333v256h-213.333v-256zM426.667 490.667h213.333v256h-213.333v-256zM682.667 746.667v-256h213.333v256h-213.333z" />
-<glyph unicode="&#xe697;" d="M426.667 192h213.333v256h-213.333v-256zM170.667 192h213.333v554.667h-213.333v-554.667zM682.667 192h213.333v256h-213.333v-256zM426.667 746.667v-256h469.333v256h-469.333z" />
-<glyph unicode="&#xe698;" d="M170.667 192h725.333v256h-725.333v-256zM170.667 746.667v-256h725.333v256h-725.333z" />
-<glyph unicode="&#xe699;" d="M256 746.667h-128c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h128c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667zM853.333 746.667h-128c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h128c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667zM554.667 746.667h-128c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h128c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667z" />
-<glyph unicode="&#xe69a;" d="M512 768c-213.333 0-395.52-132.693-469.333-320 73.813-187.307 256-320 469.333-320 213.547 0 395.52 132.693 469.333 320-73.813 187.307-255.787 320-469.333 320zM512 234.667c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333zM512 576c-70.613 0-128-57.387-128-128s57.387-128 128-128 128 57.387 128 128-57.387 128-128 128z" />
-<glyph unicode="&#xe69b;" d="M512 661.333c117.76 0 213.333-95.573 213.333-213.333 0-27.52-5.547-53.76-15.147-77.867l124.8-124.8c64.427 53.76 115.2 123.307 146.56 202.667-74.027 187.307-256 320-469.547 320-59.733 0-116.907-10.667-170.027-29.867l92.16-91.947c24.107 9.387 50.347 15.147 77.867 15.147zM85.333 777.6l116.693-116.693c-70.4-55.040-126.080-128.213-159.36-212.907 73.813-187.307 256-320 469.333-320 66.133 0 129.28 12.8 187.093 36.053l18.133-18.133 124.373-124.587 54.4 54.187-756.267 756.48-54.4-54.4zM321.28 541.867l65.92-65.92c-1.92-9.173-3.2-18.347-3.2-27.947 0-70.613 57.387-128 128-128 9.6 0 18.773 1.28 27.733 3.2l65.92-65.92c-28.373-14.080-59.947-22.613-93.653-22.613-117.76 0-213.333 95.573-213.333 213.333 0 33.707 8.533 65.28 22.613 93.867zM504.96 575.36l134.4-134.4 0.64 7.040c0 70.613-57.387 128-128 128l-7.040-0.64z" />
-<glyph unicode="&#xe69c;" d="M853.333 704h-93.227c4.693 13.44 7.893 27.733 7.893 42.667 0 70.613-57.387 128-128 128-44.587 0-83.84-22.827-106.667-57.387l-21.333-29.013-21.333 29.013c-22.827 34.56-62.080 57.387-106.667 57.387-70.613 0-128-57.387-128-128 0-14.933 2.987-29.227 7.893-42.667h-93.227c-47.147 0-84.907-38.187-84.907-85.333l-0.427-469.333c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v469.333c0 47.147-38.187 85.333-85.333 85.333zM640 789.333c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM384 789.333c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM853.333 149.333h-682.667v85.333h682.667v-85.333zM853.333 362.667h-682.667v256h216.747l-88.747-120.96 69.333-49.707 144 196.053 42.667-58.027 101.333-138.027 69.333 49.707-88.747 120.96h216.747v-256z" />
-<glyph unicode="&#xe69d;" d="M853.333 874.667h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-469.333c0-47.147 38.187-85.333 85.333-85.333h170.667v-213.333l170.667 85.333 170.667-85.333v213.333h170.667c47.147 0 85.333 38.187 85.333 85.333v469.333c0 47.147-38.187 85.333-85.333 85.333zM853.333 320h-682.667v85.333h682.667v-85.333zM853.333 533.333h-682.667v256h682.667v-256z" />
-<glyph unicode="&#xe69e;" d="M853.333 704h-128v85.333c0 47.147-38.187 85.333-85.333 85.333h-256c-47.147 0-85.333-38.187-85.333-85.333v-85.333h-128c-47.147 0-85.333-38.187-85.333-85.333v-469.333c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v469.333c0 47.147-38.187 85.333-85.333 85.333zM384 789.333h256v-85.333h-256v85.333zM853.333 149.333h-682.667v85.333h682.667v-85.333zM853.333 362.667h-682.667v256h128v-85.333h85.333v85.333h256v-85.333h85.333v85.333h128v-256z" />
-<glyph unicode="&#xe69f;" d="M1024 960v-1024h-1024v1024h1024zM1045.333 981.333h-1066.667v-1066.667h1066.667v1066.667zM853.333 704h-170.667v85.333c0 47.147-38.187 85.333-85.333 85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-85.333h-170.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-469.333c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v469.333c0 47.147-38.187 85.333-85.333 85.333zM597.333 704h-170.667v85.333h170.667v-85.333z" />
-<glyph unicode="&#xe6a0;" d="M512 874.667c-235.52 0-426.667-190.933-426.667-426.667s191.147-426.667 426.667-426.667 426.667 190.933 426.667 426.667-191.147 426.667-426.667 426.667zM554.667 234.667h-85.333v85.333h85.333v-85.333zM554.667 405.333h-85.333v256h85.333v-256z" />
-<glyph unicode="&#xe6a1;" d="M42.667 64h938.667l-469.333 810.667-469.333-810.667zM554.667 192h-85.333v85.333h85.333v-85.333zM554.667 362.667h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe6a2;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 256c-106.027 0-192 85.973-192 192s85.973 192 192 192 192-85.973 192-192-85.973-192-192-192zM512 490.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667z" />
-<glyph unicode="&#xe6a3;" d="M469.333 234.667c0-23.467 19.2-42.667 42.667-42.667s42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667zM469.333 832v-170.667h85.333v81.92c144.64-20.693 256-144.853 256-295.253 0-164.907-133.76-298.667-298.667-298.667s-298.667 133.76-298.667 298.667c0 71.68 25.173 137.173 67.2 188.8l231.467-231.467 60.373 60.373-290.133 290.133-0.427-0.853c-93.227-69.973-153.813-181.333-153.813-306.987 0-212.053 171.52-384 383.787-384s384.213 171.947 384.213 384-171.947 384-384.213 384h-42.453zM768 448c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667zM256 448c0-23.467 19.2-42.667 42.667-42.667s42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667z" />
-<glyph unicode="&#xe6a4;" d="M810.667 789.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM469.333 490.667h-64v21.333h-85.333v-128h85.333v21.333h64v-42.667c0-23.467-18.987-42.667-42.667-42.667h-128c-23.68 0-42.667 19.2-42.667 42.667v170.667c0 23.467 18.987 42.667 42.667 42.667h128c23.68 0 42.667-19.2 42.667-42.667v-42.667zM768 490.667h-64v21.333h-85.333v-128h85.333v21.333h64v-42.667c0-23.467-18.987-42.667-42.667-42.667h-128c-23.68 0-42.667 19.2-42.667 42.667v170.667c0 23.467 18.987 42.667 42.667 42.667h128c23.68 0 42.667-19.2 42.667-42.667v-42.667z" />
-<glyph unicode="&#xe6a5;" d="M426.667 106.667h170.667v682.667h-170.667v-682.667zM170.667 106.667h170.667v341.333h-170.667v-341.333zM682.667 576v-469.333h170.667v469.333h-170.667z" />
-<glyph unicode="&#xe6a6;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM640 576h-170.667v-85.333h170.667v-85.333h-170.667v-85.333h170.667v-85.333h-256v426.667h256v-85.333z" />
-<glyph unicode="&#xe6a7;" d="M170.667 192l362.667 256-362.667 256v-512zM554.667 704v-512l362.667 256-362.667 256z" />
-<glyph unicode="&#xe6a8;" d="M469.333 192v512l-362.667-256 362.667-256zM490.667 448l362.667-256v512l-362.667-256z" />
-<glyph unicode="&#xe6a9;" d="M640 640v234.667h-256v-234.667l128-128 128 128zM320 576h-234.667v-256h234.667l128 128-128 128zM384 256v-234.667h256v234.667l-128 128-128-128zM704 576l-128-128 128-128h234.667v256h-234.667z" />
-<glyph unicode="&#xe6aa;" d="M725.333 106.667c-12.16 0-24.107 2.56-32.64 6.4-30.080 16-51.84 37.76-72.96 101.76-21.973 66.347-62.72 97.707-102.187 128.213-33.707 26.027-68.693 52.907-98.773 107.733-22.4 40.96-34.773 85.547-34.773 125.227 0 119.68 93.653 213.333 213.333 213.333s213.333-93.653 213.333-213.333h85.333c0 167.467-131.2 298.667-298.667 298.667s-298.667-131.2-298.667-298.667c0-53.973 16.213-113.067 45.44-166.4 38.827-70.613 84.693-105.813 121.6-134.4 34.56-26.667 59.52-45.867 73.173-87.253 25.6-77.44 58.667-121.173 116.267-151.467 22.187-10.027 45.653-15.147 70.187-15.147 94.080 0 170.667 76.587 170.667 170.667h-85.333c0-47.147-38.187-85.333-85.333-85.333zM325.76 847.573l-60.373 60.373c-84.907-84.907-137.387-202.24-137.387-331.947s52.48-247.040 137.387-331.947l60.373 60.373c-69.547 69.547-112.427 165.547-112.427 271.573s42.88 202.027 112.427 271.573zM490.667 576c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667-47.787 106.667-106.667 106.667-106.667-47.787-106.667-106.667z" />
-<glyph unicode="&#xe6ab;" d="M810.667 789.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM469.333 320h-64v85.333h-85.333v-85.333h-64v256h64v-106.667h85.333v106.667h64v-256zM768 362.667c0-23.467-18.987-42.667-42.667-42.667h-32v-64h-64v64h-32c-23.68 0-42.667 19.2-42.667 42.667v170.667c0 23.467 18.987 42.667 42.667 42.667h128c23.68 0 42.667-19.2 42.667-42.667v-170.667zM618.667 384h85.333v128h-85.333v-128z" />
-<glyph unicode="&#xe6ac;" d="M512 789.333v128l-170.667-170.667 170.667-170.667v128c141.44 0 256-114.56 256-256 0-43.307-10.88-83.84-29.653-119.68l62.293-62.293c33.067 52.907 52.693 114.987 52.693 181.973 0 188.587-152.747 341.333-341.333 341.333zM512 192c-141.44 0-256 114.56-256 256 0 43.307 10.88 83.84 29.653 119.68l-62.293 62.293c-33.067-52.907-52.693-114.987-52.693-181.973 0-188.587 152.747-341.333 341.333-341.333v-128l170.667 170.667-170.667 170.667v-128z" />
-<glyph unicode="&#xe6ad;" d="M512 362.667c70.613 0 127.573 57.387 127.573 128l0.427 256c0 70.827-57.173 128-128 128-70.613 0-128-57.173-128-128v-256c0-70.613 57.387-128 128-128zM738.133 490.667c0-128-108.16-217.6-226.133-217.6-117.76 0-226.133 89.6-226.133 217.6h-72.533c0-145.707 116.053-266.027 256-286.72v-139.947h85.333v139.947c139.947 20.693 256 141.013 256 286.72h-72.533z" />
-<glyph unicode="&#xe6ae;" d="M512 362.667c70.613 0 127.573 57.387 127.573 128l0.427 256c0 70.827-57.173 128-128 128-70.613 0-128-57.173-128-128v-256c0-70.613 57.387-128 128-128zM460.8 750.933c0 28.16 23.040 51.2 51.2 51.2s51.2-23.040 51.2-51.2l-0.427-264.533c0-28.16-22.827-51.2-50.773-51.2-28.16 0-51.2 23.040-51.2 51.2v264.533zM738.133 490.667c0-128-108.16-217.6-226.133-217.6-117.76 0-226.133 89.6-226.133 217.6h-72.533c0-145.707 116.053-266.027 256-286.72v-139.947h85.333v139.947c139.947 20.693 256 141.013 256 286.72h-72.533z" />
-<glyph unicode="&#xe6af;" d="M810.667 490.667h-72.533c0-31.787-6.613-61.227-18.56-87.467l52.48-52.48c24.32 41.6 38.613 89.173 38.613 139.947zM639.36 483.627c0 2.347 0.64 4.693 0.64 7.040v256c0 70.827-57.387 128-128 128s-128-57.173-128-128v-7.893l255.36-255.147zM182.4 832l-54.4-54.4 256.427-256.427v-30.72c0-70.613 56.96-128 127.573-128 9.6 0 18.773 1.28 27.733 3.2l70.827-70.827c-30.507-14.080-64-21.973-98.56-21.973-117.76 0-226.133 89.6-226.133 217.6h-72.533c0-145.707 116.053-266.027 256-286.72v-139.733h85.333v139.947c38.613 5.76 75.307 19.2 108.373 38.613l178.56-178.56 54.4 54.187-713.6 713.813z" />
-<glyph unicode="&#xe6b0;" d="M768 789.333l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v597.333h-170.667z" />
-<glyph unicode="&#xe6b1;" d="M170.667 704h-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM810.667 490.667h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
-<glyph unicode="&#xe6b2;" d="M170.667 704h-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM810.667 490.667h-426.667v85.333h426.667v-85.333zM640 320h-256v85.333h256v-85.333zM810.667 661.333h-426.667v85.333h426.667v-85.333z" />
-<glyph unicode="&#xe6b3;" d="M853.333 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM768 661.333h-128v-234.667c0-58.88-47.787-106.667-106.667-106.667s-106.667 47.787-106.667 106.667 47.787 106.667 106.667 106.667c24.107 0 46.080-8.32 64-21.76v235.093h170.667v-85.333zM170.667 704h-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333z" />
-<glyph unicode="&#xe6b4;" d="M981.333 448l-104.107 118.613 14.507 157.227-154.027 34.773-80.64 135.68-145.067-62.293-145.067 62.293-80.64-135.68-154.027-34.773 14.507-157.227-104.107-118.613 104.107-118.613-14.507-157.227 154.027-34.773 80.64-135.68 145.067 62.293 145.067-62.293 80.64 135.68 154.027 34.773-14.507 157.227 104.107 118.613zM554.667 234.667h-85.333v85.333h85.333v-85.333zM554.667 405.333h-85.333v256h85.333v-256z" />
-<glyph unicode="&#xe6b5;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333 0 78.933 27.093 151.253 71.893 209.067l478.507-478.507c-57.813-44.8-130.133-71.893-209.067-71.893zM781.44 238.933l-478.507 478.507c57.813 44.8 130.133 71.893 209.067 71.893 188.587 0 341.333-152.747 341.333-341.333 0-78.933-27.093-151.253-71.893-209.067z" />
-<glyph unicode="&#xe6b6;" d="M256 149.333h170.667v597.333h-170.667v-597.333zM597.333 746.667v-597.333h170.667v597.333h-170.667z" />
-<glyph unicode="&#xe6b7;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM469.333 277.333h-85.333v341.333h85.333v-341.333zM640 277.333h-85.333v341.333h85.333v-341.333z" />
-<glyph unicode="&#xe6b8;" d="M384 277.333h85.333v341.333h-85.333v-341.333zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333zM554.667 277.333h85.333v341.333h-85.333v-341.333z" />
-<glyph unicode="&#xe6b9;" d="M341.333 746.667v-597.333l469.333 298.667z" />
-<glyph unicode="&#xe6ba;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM426.667 256v384l256-192-256-192z" />
-<glyph unicode="&#xe6bb;" d="M426.667 256l256 192-256 192v-384zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
-<glyph unicode="&#xe6bc;" d="M597.333 533.333h-512v-85.333h512v85.333zM597.333 704h-512v-85.333h512v85.333zM768 362.667v170.667h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667zM85.333 277.333h341.333v85.333h-341.333v-85.333z" />
-<glyph unicode="&#xe6bd;" d="M682.667 704v85.333c0 47.147-38.187 85.333-85.333 85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-85.333h-256v-554.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v554.667h-256zM426.667 789.333h170.667v-85.333h-170.667v85.333zM384 192v384l320-170.667-320-213.333z" />
-<glyph unicode="&#xe6be;" d="M170.667 704h-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM810.667 490.667h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
-<glyph unicode="&#xe6bf;" d="M640 704h-512v-85.333h512v85.333zM640 533.333h-512v-85.333h512v85.333zM128 277.333h341.333v85.333h-341.333v-85.333zM725.333 704v-349.227c-13.44 4.907-27.52 7.893-42.667 7.893-70.613 0-128-57.387-128-128s57.387-128 128-128 128 57.387 128 128v384h128v85.333h-213.333z" />
-<glyph unicode="&#xe6c0;" d="M138.027 697.6c-30.933-12.16-52.693-43.307-52.693-78.933v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333h-498.987l352.64 142.293-29.44 71.040-539.52-219.733zM298.667 106.667c-70.613 0-128 57.387-128 128s57.387 128 128 128 128-57.387 128-128-57.387-128-128-128zM853.333 448h-85.333v85.333h-85.333v-85.333h-512v170.667h682.667v-170.667z" />
-<glyph unicode="&#xe6c1;" d="M896 746.667v-597.333h85.333v597.333h-85.333zM725.333 149.333h85.333v597.333h-85.333v-597.333zM597.333 746.667h-512c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667zM341.333 629.333c52.907 0 96-43.093 96-96 0-53.12-43.093-96-96-96s-96 42.88-96 96c0 52.907 43.093 96 96 96zM533.333 234.667h-384v32c0 64 128 96 192 96s192-32 192-96v-32z" />
-<glyph unicode="&#xe6c2;" d="M298.667 661.333h426.667v-128l170.667 170.667-170.667 170.667v-128h-512v-256h85.333v170.667zM725.333 234.667h-426.667v128l-170.667-170.667 170.667-170.667v128h512v256h-85.333v-170.667z" />
-<glyph unicode="&#xe6c3;" d="M298.667 661.333h426.667v-128l170.667 170.667-170.667 170.667v-128h-512v-256h85.333v170.667zM725.333 234.667h-426.667v128l-170.667-170.667 170.667-170.667v128h512v256h-85.333v-170.667zM554.667 320v256h-42.667l-85.333-42.667v-42.667h64v-170.667h64z" />
-<glyph unicode="&#xe6c4;" d="M512 746.667v170.667l-213.333-213.333 213.333-213.333v170.667c141.44 0 256-114.56 256-256s-114.56-256-256-256-256 114.56-256 256h-85.333c0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333-152.747 341.333-341.333 341.333z" />
-<glyph unicode="&#xe6c5;" d="M451.627 568.747l-220.587 220.587-60.373-60.373 220.587-220.587 60.373 60.373zM618.667 789.333l87.253-87.253-535.253-535.040 60.373-60.373 535.253 535.253 87.040-87.253v234.667h-234.667zM632.747 387.627l-60.373-60.373 133.547-133.547-87.253-87.040h234.667v234.667l-87.253-87.253-133.333 133.547z" />
-<glyph unicode="&#xe6c6;" d="M256 192l362.667 256-362.667 256v-512zM682.667 704v-512h85.333v512h-85.333z" />
-<glyph unicode="&#xe6c7;" d="M256 704h85.333v-512h-85.333zM405.333 448l362.667-256v512z" />
-<glyph unicode="&#xe6c8;" d="M336.213 815.36l-54.827 65.28-196.053-164.48 54.827-65.28 196.053 164.48zM938.667 715.947l-196.053 164.48-54.827-65.28 196.053-164.48 54.827 65.28zM511.787 789.333c-212.267 0-383.787-171.947-383.787-384s171.52-384 383.787-384 384.213 171.947 384.213 384-171.947 384-384.213 384zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.547-298.667-298.667-298.667zM384 490.667h154.667l-154.667-179.2v-76.8h256v85.333h-154.667l154.667 179.2v76.8h-256v-85.333z" />
-<glyph unicode="&#xe6c9;" d="M256 704h512v-512h-512z" />
-<glyph unicode="&#xe6ca;" d="M853.333 789.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM170.667 448h170.667v-85.333h-170.667v85.333zM597.333 192h-426.667v85.333h426.667v-85.333zM853.333 192h-170.667v85.333h170.667v-85.333zM853.333 362.667h-426.667v85.333h426.667v-85.333z" />
-<glyph unicode="&#xe6cb;" d="M853.333 789.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM330.88 266.88l-60.373-60.373c-66.347 66.773-99.84 154.027-99.84 241.493s33.493 174.72 100.053 241.28l60.373-60.373c-49.92-49.707-75.093-115.413-75.093-180.907s24.96-131.2 74.88-181.12zM512 277.333c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667 170.667-76.373 170.667-170.667-76.373-170.667-170.667-170.667zM753.28 206.72l-60.373 60.373c50.133 49.707 75.093 115.413 75.093 180.907s-25.173 131.2-74.88 181.12l60.373 60.373c66.347-66.773 99.84-154.027 99.84-241.493s-33.493-174.72-100.053-241.28zM512 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe6cc;" d="M725.333 512v149.333c0 23.467-19.2 42.667-42.667 42.667h-512c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v149.333l170.667-170.667v469.333l-170.667-170.667z" />
-<glyph unicode="&#xe6cd;" d="M896 682.667l-170.667-170.667v149.333c0 23.467-19.2 42.667-42.667 42.667h-263.68l477.013-477.013v455.68zM139.733 874.667l-54.4-54.4 116.267-116.267h-30.933c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h512c8.747 0 16.427 3.2 23.253 7.893l135.893-135.893 54.187 54.4-756.267 756.267z" />
-<glyph unicode="&#xe6ce;" d="M170.667 704h-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM512 341.333v384l256-192-256-192z" />
-<glyph unicode="&#xe6cf;" d="M789.333 448c0 75.307-43.52 140.373-106.667 171.733v-343.68c63.147 31.573 106.667 96.64 106.667 171.947zM213.333 576v-256h170.667l213.333-213.333v682.667l-213.333-213.333h-170.667z" />
-<glyph unicode="&#xe6d0;" d="M298.667 576v-256h170.667l213.333-213.333v682.667l-213.333-213.333h-170.667z" />
-<glyph unicode="&#xe6d1;" d="M704 448c0 75.307-43.52 140.373-106.667 171.733v-94.293l104.747-104.747c1.28 8.96 1.92 18.133 1.92 27.307zM810.667 448c0-40.107-8.747-77.867-23.040-112.64l64.64-64.64c27.733 53.12 43.733 113.28 43.733 177.28 0 182.613-127.787 335.36-298.667 374.187v-88.107c123.307-36.693 213.333-150.827 213.333-286.080zM182.4 832l-54.4-54.4 201.6-201.6h-201.6v-256h170.667l213.333-213.333v286.933l181.547-181.547c-28.587-21.973-60.8-39.68-96.213-50.347v-88.107c58.667 13.44 112.213 40.32 157.227 77.227l87.040-86.827 54.4 54.4-713.6 713.6zM512 789.333l-89.173-89.173 89.173-89.173v178.347z" />
-<glyph unicode="&#xe6d2;" d="M128 576v-256h170.667l213.333-213.333v682.667l-213.333-213.333h-170.667zM704 448c0 75.307-43.52 140.373-106.667 171.733v-343.68c63.147 31.573 106.667 96.64 106.667 171.947zM597.333 822.187v-88.107c123.307-36.693 213.333-150.827 213.333-286.080s-90.027-249.387-213.333-286.080v-88.107c170.88 38.827 298.667 191.36 298.667 374.187s-127.787 335.36-298.667 374.187z" />
-<glyph unicode="&#xe6d3;" d="M853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM640 192h-469.333v170.667h469.333v-170.667zM640 405.333h-469.333v170.667h469.333v-170.667zM853.333 192h-170.667v384h170.667v-384z" />
-<glyph unicode="&#xe6d4;" d="M512 661.333v170.667h-426.667v-768h853.333v597.333h-426.667zM256 149.333h-85.333v85.333h85.333v-85.333zM256 320h-85.333v85.333h85.333v-85.333zM256 490.667h-85.333v85.333h85.333v-85.333zM256 661.333h-85.333v85.333h85.333v-85.333zM426.667 149.333h-85.333v85.333h85.333v-85.333zM426.667 320h-85.333v85.333h85.333v-85.333zM426.667 490.667h-85.333v85.333h85.333v-85.333zM426.667 661.333h-85.333v85.333h85.333v-85.333zM853.333 149.333h-341.333v85.333h85.333v85.333h-85.333v85.333h85.333v85.333h-85.333v85.333h341.333v-426.667zM768 490.667h-85.333v-85.333h85.333v85.333zM768 320h-85.333v-85.333h85.333v85.333z" />
-<glyph unicode="&#xe6d5;" d="M282.667 499.413c61.44-120.747 160.213-219.52 281.173-280.96l93.867 94.080c11.733 11.733 28.587 15.147 43.307 10.453 47.787-15.787 99.2-24.32 152.32-24.32 23.68 0 42.667-18.987 42.667-42.667v-149.333c0-23.68-18.987-42.667-42.667-42.667-400.64 0-725.333 324.693-725.333 725.333 0 23.68 19.2 42.667 42.667 42.667h149.333c23.68 0 42.667-18.987 42.667-42.667 0-53.12 8.533-104.533 24.32-152.32 4.693-14.72 1.28-31.573-10.453-43.307l-93.867-94.293z" />
-<glyph unicode="&#xe6d6;" d="M512 576c-68.48 0-134.4-10.667-196.267-30.72v-132.48c0-16.853-9.813-31.36-23.893-38.4-41.6-20.907-79.787-47.573-113.707-78.933-7.68-7.467-18.133-12.16-29.867-12.16s-22.4 4.693-30.080 12.587l-105.6 105.6c-7.893 7.893-12.587 18.56-12.587 30.293s4.693 22.4 12.587 30.293c129.92 123.52 305.92 199.253 499.413 199.253s369.493-75.733 499.413-199.253c7.893-7.68 12.587-18.56 12.587-30.293s-4.693-22.4-12.587-30.080l-105.6-105.6c-7.68-7.68-18.347-12.587-30.080-12.587-11.52 0-22.187 4.693-29.867 12.16-33.92 31.36-72.107 58.027-113.707 78.933-14.080 7.040-23.893 21.547-23.893 38.4v132.48c-61.867 19.84-127.787 30.507-196.267 30.507z" />
-<glyph unicode="&#xe6d7;" d="M384 746.667v-85.333h280.96l-494.293-494.293 60.373-60.373 494.293 494.293v-280.96h85.333v426.667z" />
-<glyph unicode="&#xe6d8;" d="M725.333 88.96l60.373 60.373-145.707 145.707-60.373-60.373 145.707-145.707zM320 618.667h149.333v-238.293l-231.040-231.040 60.373-60.373 256 256v273.707h149.333l-192 192-192-192z" />
-<glyph unicode="&#xe6d9;" d="M835.627 661.333l-323.627-323.627-238.293 238.293h195.627v85.333h-341.333v-341.333h85.333v195.627l298.667-298.667 384 384z" />
-<glyph unicode="&#xe6da;" d="M853.333 728.96l-60.373 60.373-494.293-494.293v280.96h-85.333v-426.667h426.667v85.333h-280.96z" />
-<glyph unicode="&#xe6db;" d="M597.333 789.333l97.92-97.92-122.88-122.667 60.373-60.373 122.667 122.88 97.92-97.92v256zM426.667 789.333h-256v-256l97.92 97.92 200.747-200.96v-323.627h85.333v359.040l-225.92 225.707z" />
-<glyph unicode="&#xe6dc;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM256 576h512v-85.333h-512v85.333zM597.333 362.667h-341.333v85.333h341.333v-85.333zM768 618.667h-512v85.333h512v-85.333z" />
-<glyph unicode="&#xe6dd;" d="M213.333 405.333h597.333v85.333h-597.333v-85.333zM128 234.667h597.333v85.333h-597.333v-85.333zM298.667 661.333v-85.333h597.333v85.333h-597.333z" />
-<glyph unicode="&#xe6de;" d="M938.24 789.333c0 47.147-37.76 85.333-84.907 85.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h597.333l170.667-170.667-0.427 768zM768 362.667h-512v85.333h512v-85.333zM768 490.667h-512v85.333h512v-85.333zM768 618.667h-512v85.333h512v-85.333z" />
-<glyph unicode="&#xe6df;" d="M853.333 960h-682.667v-85.333h682.667v85.333zM170.667-64h682.667v85.333h-682.667v-85.333zM853.333 789.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM512 672c52.907 0 96-43.093 96-96 0-53.12-43.093-96-96-96s-96 42.88-96 96c0 52.907 43.093 96 96 96zM725.333 234.667h-426.667v64c0 71.040 142.293 106.667 213.333 106.667s213.333-35.627 213.333-106.667v-64z" />
-<glyph unicode="&#xe6e0;" d="M725.333 832h-42.667v-213.333h42.667v213.333zM640 746.667h-85.333v42.667h85.333v42.667h-128v-128h85.333v-42.667h-85.333v-42.667h128v128zM768 832v-213.333h42.667v85.333h85.333v128h-128zM853.333 746.667h-42.667v42.667h42.667v-42.667zM853.333 298.667c-53.12 0-104.32 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.747 61.44-219.52 160.213-281.173 280.96l93.867 94.080c11.733 11.733 15.147 28.587 10.453 43.307-15.787 48-24.32 99.413-24.32 152.533 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.68 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667z" />
-<glyph unicode="&#xe6e1;" d="M512 149.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM256 917.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM256 661.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM256 405.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 746.667c47.147 0 85.333 38.187 85.333 85.333s-38.187 85.333-85.333 85.333-85.333-38.187-85.333-85.333 38.187-85.333 85.333-85.333zM512 405.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 405.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 661.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM512 661.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM512 917.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe6e2;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333 0 78.933 27.093 151.253 71.893 209.067l478.507-478.507c-57.813-44.8-130.133-71.893-209.067-71.893zM781.44 238.933l-478.507 478.507c57.813 44.8 130.133 71.893 209.067 71.893 188.587 0 341.333-152.747 341.333-341.333 0-78.933-27.093-151.253-71.893-209.067z" />
-<glyph unicode="&#xe6e3;" d="M853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 618.667l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
-<glyph unicode="&#xe6e4;" d="M896 704h-85.333v-384h-554.667v-85.333c0-23.467 19.2-42.667 42.667-42.667h469.333l170.667-170.667v640c0 23.467-19.2 42.667-42.667 42.667zM725.333 448v384c0 23.467-19.2 42.667-42.667 42.667h-554.667c-23.467 0-42.667-19.2-42.667-42.667v-597.333l170.667 170.667h426.667c23.467 0 42.667 19.2 42.667 42.667z" />
-<glyph unicode="&#xe6e5;" d="M384 832l-170.667-170.24h128v-299.093h85.333v299.093h128l-170.667 170.24zM682.667 234.24v299.093h-85.333v-299.093h-128l170.667-170.24 170.667 170.24h-128z" />
-<glyph unicode="&#xe6e6;" d="M880.853 69.333l-698.667 698.667-54.187-54.4 118.613-118.613c-108.8-133.973-100.693-331.307 23.893-456.107 66.56-66.56 154.027-100.053 241.28-100.053 76.16 0 152.32 25.387 214.613 75.947l115.2-114.773 54.4 54.4-15.147 14.933zM512 124.373c-68.48 0-132.693 26.667-180.907 74.88-48.427 48.427-75.093 112.64-75.093 181.12 0 56.32 18.347 109.653 51.627 153.813l204.373-204.587v-205.227zM512 742.4v-195.413l309.547-309.547c58.24 126.080 35.84 280.32-68.267 384.427l-241.28 241.28-158.080-158.080 60.373-60.373 97.707 97.707z" />
-<glyph unicode="&#xe6e7;" d="M753.28 621.653l-241.28 241.493-241.28-241.493c-133.333-133.333-133.333-349.44 0-482.773 66.56-66.56 154.027-100.053 241.28-100.053s174.72 33.28 241.28 100.053c133.333 133.333 133.333 349.44 0 482.773zM512 124.373c-68.48 0-132.693 26.667-180.907 75.093-48.427 48.213-75.093 112.427-75.093 180.907s26.667 132.693 75.093 181.12l180.907 180.907v-618.027z" />
-<glyph unicode="&#xe6e8;" d="M810.667 874.667h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h170.667l128-128 128 128h170.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM554.667 192h-85.333v85.333h85.333v-85.333zM642.773 522.453l-38.187-39.253c-30.72-30.72-49.92-56.533-49.92-120.533h-85.333v21.333c0 47.147 19.2 89.813 49.92 120.747l53.12 53.76c15.36 15.36 24.96 36.693 24.96 60.16 0 47.147-38.187 85.333-85.333 85.333s-85.333-38.187-85.333-85.333h-85.333c0 94.293 76.373 170.667 170.667 170.667s170.667-76.373 170.667-170.667c0-37.547-15.147-71.467-39.893-96.213z" />
-<glyph unicode="&#xe6e9;" d="M512 682.667c58.88 0 106.667-47.787 106.667-106.667 0-31.36-13.867-59.307-35.413-78.933l154.88-154.88c41.6 79.36 72.533 161.92 72.533 233.813 0 164.907-133.76 298.667-298.667 298.667-84.48 0-160.64-35.2-214.827-91.52l135.893-135.893c19.413 21.547 47.573 35.413 78.933 35.413zM698.667 273.067l-559.147 558.933-54.187-54.4 135.68-135.68c-4.907-21.12-7.68-43.093-7.68-65.92 0-224 298.667-554.667 298.667-554.667s71.253 78.933 144 185.6l142.933-142.933 54.4 54.4-154.667 154.667z" />
-<glyph unicode="&#xe6ea;" d="M512 874.667c-164.907 0-298.667-133.76-298.667-298.667 0-224 298.667-554.667 298.667-554.667s298.667 330.667 298.667 554.667c0 164.907-133.76 298.667-298.667 298.667zM512 469.333c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
-<glyph unicode="&#xe6eb;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM768 362.667h-512v85.333h512v-85.333zM768 490.667h-512v85.333h512v-85.333zM768 618.667h-512v85.333h512v-85.333z" />
-<glyph unicode="&#xe6ec;" d="M853.333 874.667h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-768l170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe6ed;" d="M810.24 746.667c0 47.147-37.76 85.333-84.907 85.333h-298.667l-99.84-99.84 483.84-483.84-0.427 498.347zM155.733 794.453l-54.187-54.187 111.787-112v-478.933c0-47.147 38.187-85.333 85.333-85.333h427.093c14.933 0 28.8 4.267 40.96 10.88l80.213-80.213 54.187 54.4-745.387 745.387z" />
-<glyph unicode="&#xe6ee;" d="M282.667 499.413c61.44-120.747 160.213-219.52 281.173-280.96l93.867 94.080c11.733 11.733 28.587 15.147 43.307 10.453 47.787-15.787 99.2-24.32 152.32-24.32 23.68 0 42.667-18.987 42.667-42.667v-149.333c0-23.68-18.987-42.667-42.667-42.667-400.64 0-725.333 324.693-725.333 725.333 0 23.68 19.2 42.667 42.667 42.667h149.333c23.68 0 42.667-18.987 42.667-42.667 0-53.12 8.533-104.533 24.32-152.32 4.693-14.72 1.28-31.573-10.453-43.307l-93.867-94.293z" />
-<glyph unicode="&#xe6ef;" d="M749.227 352.427c11.947 29.44 18.773 61.653 18.773 95.573 0 141.44-114.56 256-256 256-33.92 0-66.133-6.827-95.787-18.773l69.333-69.333c8.747 1.493 17.493 2.773 26.453 2.773 94.293 0 170.667-76.373 170.667-170.667 0-9.173-0.853-18.133-2.347-26.667l68.907-68.907zM512 789.333c188.587 0 341.333-152.747 341.333-341.333 0-57.813-14.933-111.787-40.32-159.36l62.72-62.72c39.68 64.64 62.933 140.587 62.933 222.080 0 235.733-191.147 426.667-426.667 426.667-81.493 0-157.44-23.253-222.080-62.933l62.293-62.293c47.573 25.387 101.973 39.893 159.787 39.893zM139.52 853.333l-54.187-54.4 89.813-89.813c-56.107-72.107-89.813-162.56-89.813-261.12 0-157.653 85.76-295.040 213.12-368.853l42.667 73.813c-101.76 58.88-170.453 168.96-170.453 295.040 0 74.88 24.32 144 65.28 200.32l61.227-61.227c-26.027-40.107-41.173-87.68-41.173-139.093 0-94.72 51.413-177.067 127.787-221.44l43.093 74.24c-50.987 29.653-85.547 84.053-85.547 147.2 0 27.52 7.253 53.12 18.773 76.16l67.413-67.413-0.853-8.747c0-47.147 38.187-85.333 85.333-85.333l8.747 0.853 320.853-320.853 54.4 54.4-756.48 756.267z" />
-<glyph unicode="&#xe6f0;" d="M938.667 832h-853.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h853.333c47.147 0 84.907 38.187 84.907 85.333l0.427 597.333c0 47.147-38.187 85.333-85.333 85.333zM341.333 704c70.613 0 128-57.387 128-128 0-70.827-57.387-128-128-128s-128 57.173-128 128c0 70.613 57.387 128 128 128zM597.333 192h-512v42.667c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667zM761.6 362.667h69.973l64.427-85.333-85.12-85.12c-55.68 41.813-97.28 101.333-116.48 170.453-7.467 27.307-11.733 55.68-11.733 85.333s4.267 58.027 11.947 85.333c18.987 69.12 60.587 128.64 116.48 170.453l84.907-85.12-64.427-85.333h-69.973c-9.387-26.667-14.933-55.467-14.933-85.333s5.333-58.667 14.933-85.333z" />
-<glyph unicode="&#xe6f1;" d="M896 618.667v42.667l-128-85.333-128 85.333v-42.667l128-85.333 128 85.333zM938.667 832h-853.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h853.333c47.147 0 84.907 38.187 84.907 85.333l0.427 597.333c0 47.147-38.187 85.333-85.333 85.333zM341.333 704c70.613 0 128-57.387 128-128 0-70.827-57.387-128-128-128s-128 57.173-128 128c0 70.613 57.387 128 128 128zM597.333 192h-512v42.667c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667zM938.667 448h-341.333v256h341.333v-256z" />
-<glyph unicode="&#xe6f2;" d="M1011.413 248.747c-129.92 123.52-305.92 199.253-499.413 199.253s-369.493-75.733-499.413-199.253c-7.893-7.68-12.587-18.56-12.587-30.293s4.693-22.4 12.587-30.080l105.6-105.6c7.68-7.68 18.347-12.587 30.080-12.587 11.52 0 22.187 4.693 29.867 12.16 33.92 31.36 72.107 58.027 113.707 78.933 14.080 7.040 23.893 21.547 23.893 38.4v132.48c61.867 19.84 127.787 30.507 196.267 30.507s134.4-10.667 196.267-30.72v-132.48c0-16.853 9.813-31.36 23.893-38.4 41.6-20.907 80-47.573 113.707-78.933 7.68-7.467 18.133-12.16 29.867-12.16s22.4 4.693 30.293 12.587l105.6 105.6c7.68 7.68 12.587 18.347 12.587 30.080-0.213 11.947-4.907 22.827-12.8 30.507zM902.827 693.12l-60.373 60.373-151.893-151.893 60.373-60.373s147.2 150.187 151.893 151.893zM554.667 874.667h-85.333v-213.333h85.333v213.333zM273.067 541.227l60.373 60.373-151.893 151.893-60.373-60.373c4.693-1.707 151.893-151.893 151.893-151.893z" />
-<glyph unicode="&#xe6f3;" d="M43.093 661.333l-0.427-426.667c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333h-768c-47.147 0-84.907-38.187-84.907-85.333zM810.667 661.333v-426.667h-597.333v426.667h597.333z" />
-<glyph unicode="&#xe6f4;" d="M725.333 916.907l-426.667 0.427c-47.147 0-84.907-38.187-84.907-85.333v-768c0-47.147 37.76-85.333 84.907-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v768c0 47.147-38.187 84.907-85.333 84.907zM725.333 149.333h-426.667v597.333h426.667v-597.333z" />
-<glyph unicode="&#xe6f5;" d="M43.093 661.333l-0.427-426.667c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333h-768c-47.147 0-84.907-38.187-84.907-85.333zM810.667 661.333v-426.667h-597.333v426.667h597.333z" />
-<glyph unicode="&#xe6f6;" d="M725.333 916.907l-426.667 0.427c-47.147 0-84.907-38.187-84.907-85.333v-768c0-47.147 37.76-85.333 84.907-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v768c0 47.147-38.187 84.907-85.333 84.907zM725.333 149.333h-426.667v597.333h426.667v-597.333z" />
-<glyph unicode="&#xe6f7;" d="M768 789.333l-170.667-170.667h128v-298.667c0-47.147-38.187-85.333-85.333-85.333s-85.333 38.187-85.333 85.333v298.667c0 94.080-76.587 170.667-170.667 170.667s-170.667-76.587-170.667-170.667v-298.667h-128l170.667-170.667 170.667 170.667h-128v298.667c0 47.147 38.187 85.333 85.333 85.333s85.333-38.187 85.333-85.333v-298.667c0-94.080 76.587-170.667 170.667-170.667s170.667 76.587 170.667 170.667v298.667h128l-170.667 170.667z" />
-<glyph unicode="&#xe6f8;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM384 490.667h-85.333v85.333h85.333v-85.333zM554.667 490.667h-85.333v85.333h85.333v-85.333zM725.333 490.667h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe6f9;" d="M789.333 704c-129.707 0-234.667-104.96-234.667-234.667 0-56.747 20.053-108.8 53.547-149.333h-192.64c33.493 40.533 53.547 92.587 53.547 149.333 0 129.707-104.96 234.667-234.667 234.667s-234.453-104.96-234.453-234.667 104.96-234.667 234.667-234.667h554.667c129.707 0 234.667 104.96 234.667 234.667s-104.96 234.667-234.667 234.667zM234.667 320c-82.56 0-149.333 66.773-149.333 149.333s66.773 149.333 149.333 149.333 149.333-66.773 149.333-149.333-66.773-149.333-149.333-149.333zM789.333 320c-82.56 0-149.333 66.773-149.333 149.333s66.773 149.333 149.333 149.333 149.333-66.773 149.333-149.333-66.773-149.333-149.333-149.333z" />
-<glyph unicode="&#xe6fa;" d="M539.733 533.333c-35.2 99.413-129.707 170.667-241.067 170.667-141.44 0-256-114.56-256-256s114.56-256 256-256c111.36 0 205.867 71.253 241.067 170.667h185.6v-170.667h170.667v170.667h85.333v170.667h-441.6zM298.667 362.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe6fb;" d="M810.667 405.333h-256v-256h-85.333v256h-256v85.333h256v256h85.333v-256h256v-85.333z" />
-<glyph unicode="&#xe6fc;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM725.333 405.333h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
-<glyph unicode="&#xe6fd;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM725.333 405.333h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
-<glyph unicode="&#xe6fe;" d="M554.667 661.333h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
-<glyph unicode="&#xe6ff;" d="M876.587 737.067l-59.093 71.68c-11.947 14.080-29.653 23.253-49.493 23.253h-512c-19.84 0-37.547-9.173-49.28-23.253l-59.093-71.68c-12.373-14.933-19.627-33.707-19.627-54.4v-533.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v533.333c0 20.693-7.253 39.467-19.413 54.4zM512 213.333l-234.667 234.667h149.333v85.333h170.667v-85.333h149.333l-234.667-234.667zM218.667 746.667l34.773 42.667h512l39.893-42.667h-586.667z" />
-<glyph unicode="&#xe700;" d="M938.667 832h-640c-29.44 0-52.693-14.933-68.053-37.547l-230.613-346.24 230.613-346.24c15.36-22.613 38.613-37.973 68.053-37.973h640c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 295.040l-60.373-60.373-152.96 152.96-152.96-152.96-60.373 60.373 152.96 152.96-152.96 152.96 60.373 60.373 152.96-152.96 152.96 152.96 60.373-60.373-152.96-152.96 152.96-152.96z" />
-<glyph unicode="&#xe701;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM170.667 448c0 188.587 152.747 341.333 341.333 341.333 78.933 0 151.253-27.093 209.067-71.893l-478.507-478.507c-44.8 57.813-71.893 130.133-71.893 209.067zM512 106.667c-78.933 0-151.253 27.093-209.067 71.893l478.507 478.507c44.8-57.813 71.893-130.133 71.893-209.067 0-188.587-152.747-341.333-341.333-341.333z" />
-<glyph unicode="&#xe702;" d="M810.667 686.293l-60.373 60.373-238.293-238.293-238.293 238.293-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 238.293 238.293 238.293-238.293 60.373 60.373-238.293 238.293z" />
-<glyph unicode="&#xe703;" d="M682.667 917.333h-512c-47.147 0-85.333-38.187-85.333-85.333v-597.333h85.333v597.333h512v85.333zM810.667 746.667h-469.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h469.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 64h-469.333v597.333h469.333v-597.333z" />
-<glyph unicode="&#xe704;" d="M411.307 634.027c9.6 21.333 15.36 45.013 15.36 69.973 0 94.293-76.373 170.667-170.667 170.667s-170.667-76.373-170.667-170.667 76.373-170.667 170.667-170.667c24.96 0 48.64 5.76 69.973 15.36l100.693-100.693-100.693-100.693c-21.333 9.6-45.013 15.36-69.973 15.36-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667c0 24.96-5.76 48.64-15.36 69.973l100.693 100.693 298.667-298.667h128v42.667l-527.36 527.36zM256 618.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM256 106.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM512 426.667c-11.733 0-21.333 9.6-21.333 21.333s9.6 21.333 21.333 21.333 21.333-9.6 21.333-21.333-9.6-21.333-21.333-21.333zM810.667 832l-256-256 85.333-85.333 298.667 298.667v42.667z" />
-<glyph unicode="&#xe705;" d="M810.667 874.667h-178.56c-17.493 49.493-64.427 85.333-120.107 85.333s-102.613-35.84-120.107-85.333h-178.56c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM512 874.667c23.467 0 42.667-18.987 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 18.987-42.667 42.667 19.2 42.667 42.667 42.667zM810.667 106.667h-597.333v682.667h85.333v-128h426.667v128h85.333v-682.667z" />
-<glyph unicode="&#xe706;" d="M128 224v-160h160l472.107 472.107-160 160-472.107-472.107zM883.413 659.413c16.64 16.64 16.64 43.733 0 60.373l-99.627 99.627c-16.64 16.64-43.733 16.64-60.373 0l-78.080-78.080 160-160 78.080 78.080z" />
-<glyph unicode="&#xe707;" d="M938.24 618.667c0 30.72-16 57.387-40.107 72.533l-386.133 226.133-386.133-226.133c-24.107-15.147-40.533-41.813-40.533-72.533v-426.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333l-0.427 426.667zM512 405.333l-352.427 220.373 352.427 206.293 352.427-206.293-352.427-220.373z" />
-<glyph unicode="&#xe708;" d="M426.667 192h170.667v85.333h-170.667v-85.333zM128 704v-85.333h768v85.333h-768zM256 405.333h512v85.333h-512v-85.333z" />
-<glyph unicode="&#xe709;" d="M614.4 704l-17.067 85.333h-384v-725.333h85.333v298.667h238.933l17.067-85.333h298.667v426.667z" />
-<glyph unicode="&#xe70a;" d="M512 618.667v170.667l341.333-341.333-341.333-341.333v170.667h-341.333v341.333z" />
-<glyph unicode="&#xe70b;" d="M196.053 666.24c29.867 30.507 59.733 57.813 73.173 52.267 21.12-8.747-0.427-44.373-12.8-65.067-10.667-17.92-122.027-165.76-122.027-269.227 0-54.613 20.267-99.84 57.387-127.147 32-23.68 74.027-30.933 112.64-19.627 45.653 13.44 83.2 59.52 130.56 117.973 51.627 63.573 120.747 146.773 174.080 146.773 69.547 0 70.4-43.093 75.093-76.587-161.707-27.733-229.76-156.8-229.76-229.547s61.44-132.053 136.747-132.053c69.333 0 183.253 56.747 200.107 260.267h104.747v106.667h-105.387c-6.4 70.4-46.507 178.987-171.947 178.987-96 0-178.56-81.493-210.56-121.387-24.747-30.933-87.68-105.6-97.493-116.267-10.88-12.587-28.8-35.84-47.573-35.84-18.987 0-30.507 35.627-15.573 82.133 14.933 46.72 59.733 122.027 78.933 149.973 33.493 48.64 55.253 82.133 55.253 139.947 0 93.867-69.973 123.307-107.093 123.307-56.32 0-105.387-42.667-116.267-53.547-15.147-15.36-27.947-27.947-37.333-39.467l75.093-72.533zM592.427 168.32c-13.227 0-31.36 11.093-31.36 30.933 0 25.6 30.933 93.867 122.667 117.973-13.227-114.987-61.44-148.907-91.307-148.907z" />
-<glyph unicode="&#xe70c;" d="M810.667 832h-597.76c-47.147 0-84.48-38.187-84.48-85.333l-0.427-597.333c0-47.147 37.76-85.333 84.907-85.333h597.76c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 320h-170.667c0-70.613-57.387-128-128-128s-128 57.387-128 128h-171.093v426.667h597.76v-426.667zM682.667 533.333h-85.333v128h-170.667v-128h-85.333l170.667-170.667 170.667 170.667z" />
-<glyph unicode="&#xe70d;" d="M166.4 448c0 72.96 59.307 132.267 132.267 132.267h170.667v81.067h-170.667c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333h170.667v81.067h-170.667c-72.96 0-132.267 59.307-132.267 132.267zM341.333 405.333h341.333v85.333h-341.333v-85.333zM725.333 661.333h-170.667v-81.067h170.667c72.96 0 132.267-59.307 132.267-132.267s-59.307-132.267-132.267-132.267h-170.667v-81.067h170.667c117.76 0 213.333 95.573 213.333 213.333s-95.573 213.333-213.333 213.333z" />
-<glyph unicode="&#xe70e;" d="M853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 618.667l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
-<glyph unicode="&#xe70f;" d="M853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 618.667l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
-<glyph unicode="&#xe710;" d="M784.853 507.733c-78.507 68.907-181.333 110.933-294.187 110.933-198.4 0-366.293-129.28-424.96-308.053l100.907-33.28c44.8 136.32 172.8 234.667 324.053 234.667 83.413 0 159.147-30.72 218.24-80.427l-154.24-154.24h384v384l-153.813-153.6z" />
-<glyph unicode="&#xe711;" d="M810.667 405.333h-597.333v85.333h597.333v-85.333z" />
-<glyph unicode="&#xe712;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM725.333 405.333h-426.667v85.333h426.667v-85.333z" />
-<glyph unicode="&#xe713;" d="M298.667 490.667v-85.333h426.667v85.333h-426.667zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
-<glyph unicode="&#xe714;" d="M426.667 576v170.667l-298.667-298.667 298.667-298.667v174.933c213.333 0 362.667-68.267 469.333-217.6-42.667 213.333-170.667 426.667-469.333 469.333z" />
-<glyph unicode="&#xe715;" d="M298.667 618.667v128l-298.667-298.667 298.667-298.667v128l-170.667 170.667 170.667 170.667zM554.667 576v170.667l-298.667-298.667 298.667-298.667v174.933c213.333 0 362.667-68.267 469.333-217.6-42.667 213.333-170.667 426.667-469.333 469.333z" />
-<glyph unicode="&#xe716;" d="M671.147 832h-318.293l-224.853-224.853v-318.080l224.853-225.067h318.080l225.067 224.853v318.293l-224.853 224.853zM512 221.867c-30.507 0-55.467 24.747-55.467 55.467 0 30.507 24.96 55.467 55.467 55.467s55.467-24.747 55.467-55.467c0-30.72-24.96-55.467-55.467-55.467zM554.667 405.333h-85.333v256h85.333v-256z" />
-<glyph unicode="&#xe717;" d="M725.333 832h-512c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v512l-170.667 170.667zM512 149.333c-70.613 0-128 57.387-128 128s57.387 128 128 128 128-57.387 128-128-57.387-128-128-128zM640 576h-426.667v170.667h426.667v-170.667z" />
-<glyph unicode="&#xe718;" d="M128 746.667h85.333v85.333c-47.147 0-85.333-38.187-85.333-85.333zM128 405.333h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333zM128 576h85.333v85.333h-85.333v-85.333zM554.667 832h-85.333v-85.333h85.333v85.333zM810.667 832v-85.333h85.333c0 47.147-38.187 85.333-85.333 85.333zM213.333 64v85.333h-85.333c0-47.147 38.187-85.333 85.333-85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM384 832h-85.333v-85.333h85.333v85.333zM469.333 64h85.333v85.333h-85.333v-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM810.667 64c47.147 0 85.333 38.187 85.333 85.333h-85.333v-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM640 64h85.333v85.333h-85.333v-85.333zM640 746.667h85.333v85.333h-85.333v-85.333zM298.667 234.667h426.667v426.667h-426.667v-426.667zM384 576h256v-256h-256v256z" />
-<glyph unicode="&#xe719;" d="M85.76 64l895.573 384-895.573 384-0.427-298.667 640-85.333-640-85.333z" />
-<glyph unicode="&#xe71a;" d="M128 192h256v85.333h-256v-85.333zM128 704v-85.333h768v85.333h-768zM128 405.333h512v85.333h-512v-85.333z" />
-<glyph unicode="&#xe71b;" d="M213.333 234.667v-85.333h597.333v85.333h-597.333zM405.333 413.867h213.333l38.4-93.867h89.6l-202.667 469.333h-64l-202.667-469.333h89.6l38.4 93.867zM512 704.853l79.787-214.187h-159.573l79.787 214.187z" />
-<glyph unicode="&#xe71c;" d="M533.333 618.667c-112.853 0-215.68-42.027-294.4-110.933l-153.6 153.6v-384h384l-154.24 154.24c59.093 49.707 134.827 80.427 218.24 80.427 151.253 0 279.253-98.347 324.053-234.667l100.907 33.28c-58.667 178.773-226.56 308.053-424.96 308.053z" />
-<glyph unicode="&#xe71d;" d="M938.667 715.947l-196.053 164.48-54.827-65.28 196.053-164.48 54.827 65.28zM336.213 815.36l-54.827 65.28-196.053-164.48 54.827-65.28 196.053 164.48zM533.333 618.667h-64v-256l202.453-121.813 32.213 52.693-170.667 101.12v224zM511.787 789.333c-212.267 0-383.787-171.947-383.787-384s171.52-384 383.787-384 384.213 171.947 384.213 384-171.947 384-384.213 384zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.547-298.667-298.667-298.667z" />
-<glyph unicode="&#xe71e;" d="M938.667 714.667l-196.267 164.267-55.467-66.133 196.267-164.267 55.467 66.133zM334.933 814.933l-55.467 66.133-194.133-166.4 55.467-66.133 194.133 166.4zM533.333 618.667h-64v-256l202.667-121.6 32 53.333-170.667 100.267v224zM512 789.333c-213.333 0-384-172.8-384-384s170.667-384 384-384c211.2 0 384 172.8 384 384s-172.8 384-384 384zM512 106.667c-164.267 0-298.667 134.4-298.667 298.667s134.4 298.667 298.667 298.667 298.667-134.4 298.667-298.667c0-166.4-134.4-298.667-298.667-298.667z" />
-<glyph unicode="&#xe71f;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM533.333 661.333h-64v-256l223.787-134.4 32.213 52.48-192 113.92z" />
-<glyph unicode="&#xe720;" d="M336.213 815.36l-54.827 65.28-196.053-164.48 54.827-65.28 196.053 164.48zM938.667 715.947l-196.053 164.48-54.827-65.28 196.053-164.48 54.827 65.28zM511.787 789.333c-212.267 0-383.787-171.947-383.787-384s171.52-384 383.787-384 384.213 171.947 384.213 384-171.947 384-384.213 384zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.547-298.667-298.667-298.667zM554.667 576h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128v128z" />
-<glyph unicode="&#xe721;" d="M554.667 576v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-157.013l333.867-333.867 135.467-42.453v85.333l-341.333 213.333zM128 734.933l212.693-212.693-255.36-159.573v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v158.933l244.267-244.267 54.4 54.4-670.933 670.933-54.4-54.4z" />
-<glyph unicode="&#xe722;" d="M896 277.333v85.333l-341.333 213.333v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-234.667l-341.333-213.333v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v234.667l341.333-106.667z" />
-<glyph unicode="&#xe723;" d="M298.667 234.667v-156.373c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v156.373h-426.88zM725.333 732.373c0 31.573-25.387 56.96-56.96 56.96h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-497.707h426.667v497.707z" />
-<glyph unicode="&#xe724;" d="M725.333 732.373c0 31.573-25.387 56.96-56.96 56.96h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-412.373h426.667v412.373zM298.667 320v-241.707c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v241.707h-426.88z" />
-<glyph unicode="&#xe725;" d="M725.333 732.373c0 31.573-25.387 56.96-56.96 56.96h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-327.040h426.667v327.040zM298.667 405.333v-327.040c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v327.040h-426.88z" />
-<glyph unicode="&#xe726;" d="M725.333 732.373c0 31.573-25.387 56.96-56.96 56.96h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-241.707h426.667v241.707zM298.667 490.667v-412.373c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v412.373h-426.88z" />
-<glyph unicode="&#xe727;" d="M725.333 732.373c0 31.573-25.387 56.96-56.96 56.96h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-156.373h426.667v156.373zM298.667 576v-497.707c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v497.707h-426.88z" />
-<glyph unicode="&#xe728;" d="M725.333 732.373c0 31.573-25.387 56.96-56.96 56.96h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-113.707h426.667v113.707zM298.667 618.667v-540.373c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v540.373h-426.88z" />
-<glyph unicode="&#xe729;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-654.293c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v654.293c-0.213 31.573-25.6 56.96-57.173 56.96zM554.667 192h-85.333v85.333h85.333v-85.333zM554.667 362.667h-85.333v213.333h85.333v-213.333z" />
-<glyph unicode="&#xe72a;" d="M469.333 106.667v128h-170.667v-156.373c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v156.373h-187.733l-68.48-128zM668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-497.707h170.667v106.667h-85.333l170.667 320v-234.667h85.333l-102.4-192h187.733v497.707c0 31.573-25.387 56.96-56.96 56.96z" />
-<glyph unicode="&#xe72b;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-391.040h85.333l170.667 320v-234.667h85.333l-45.44-85.333h130.773v391.040c0 31.573-25.387 56.96-56.96 56.96zM469.333 106.667v234.667h-170.667v-263.040c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v263.040h-130.773l-125.44-234.667z" />
-<glyph unicode="&#xe72c;" d="M617.173 384l-147.84-277.333v234.667h-85.333l22.827 42.667h-108.16v-305.707c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v305.707h-108.373zM668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-348.373h108.16l147.84 277.333v-234.667h85.333l-22.827-42.667h108.16v348.373c0 31.573-25.387 56.96-56.96 56.96z" />
-<glyph unicode="&#xe72d;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-241.707h164.907l91.093 170.667v-170.667h170.667v241.707c0 31.573-25.387 56.96-56.96 56.96zM554.667 426.667h85.333l-170.667-320v234.667h-85.333l79.573 149.333h-164.907v-412.373c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v412.373h-170.667v-64z" />
-<glyph unicode="&#xe72e;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-156.373h210.56l45.44 85.333v-85.333h170.667v156.373c0 31.573-25.387 56.96-56.96 56.96zM554.667 426.667h85.333l-170.667-320v234.667h-85.333l125.227 234.667h-210.56v-497.707c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v497.707h-170.667v-149.333z" />
-<glyph unicode="&#xe72f;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-113.707h233.173l22.827 42.667v-42.667h170.667v113.707c0 31.573-25.387 56.96-56.96 56.96zM554.667 426.667h85.333l-170.667-320v234.667h-85.333l147.84 277.333h-233.173v-540.373c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v540.373h-170.667v-192z" />
-<glyph unicode="&#xe730;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-654.293c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v654.293c-0.213 31.573-25.6 56.96-57.173 56.96zM469.333 106.667v234.667h-85.333l170.667 320v-234.667h85.333l-170.667-320z" />
-<glyph unicode="&#xe731;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-654.293c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v654.293c-0.213 31.573-25.6 56.96-57.173 56.96z" />
-<glyph unicode="&#xe732;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-654.293c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v654.293c-0.213 31.573-25.6 56.96-57.173 56.96z" />
-<glyph unicode="&#xe733;" d="M668.373 789.333h-71.040v85.333h-170.667v-85.333h-71.040c-31.573 0-56.96-25.387-56.96-56.96v-654.293c0-31.36 25.387-56.96 56.96-56.96h312.96c31.36 0 56.96 25.387 56.96 56.96v654.293c-0.213 31.573-25.6 56.96-57.173 56.96zM552.533 194.133h-81.067v81.067h81.067v-81.067zM610.133 418.56s-16.213-17.92-28.587-30.293c-20.693-20.693-35.413-48.853-35.413-68.267h-68.267c0 35.413 19.627 65.067 39.68 85.12l39.68 40.32c11.52 11.52 18.773 27.52 18.773 45.227 0 35.413-28.587 64-64 64s-64-28.587-64-64h-64c0 70.613 57.387 128 128 128s128-57.387 128-128c0-28.16-11.307-53.76-29.867-72.107z" />
-<glyph unicode="&#xe734;" d="M755.413 631.253l-243.413 243.413h-42.667v-323.627l-195.627 195.627-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 195.627 195.627v-323.627h42.667l243.413 243.413-183.040 183.253 183.040 183.253zM554.667 711.253l80.213-80.213-80.213-80v160.213zM634.88 264.747l-80.213-80v160.427l80.213-80.427z" />
-<glyph unicode="&#xe735;" d="M298.667 448l-85.333 85.333-85.333-85.333 85.333-85.333 85.333 85.333zM755.413 631.253l-243.413 243.413h-42.667v-323.627l-195.627 195.627-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 195.627 195.627v-323.627h42.667l243.413 243.413-183.040 183.253 183.040 183.253zM554.667 711.253l80.213-80.213-80.213-80v160.213zM634.88 264.747l-80.213-80v160.427l80.213-80.427zM810.667 533.333l-85.333-85.333 85.333-85.333 85.333 85.333-85.333 85.333z" />
-<glyph unicode="&#xe736;" d="M554.667 707.627l80.213-80.213-68.267-68.267 60.373-60.373 128.64 128.64-243.627 243.627h-42.667v-214.613l85.333-85.333v136.533zM231.040 785.707l-60.373-60.373 280.96-280.96-238.293-238.293 60.373-60.373 195.627 195.627v-323.627h42.667l183.253 183.253 97.92-97.92 60.16 60.373-622.293 622.293zM554.667 181.12v160.213l80.213-80.213-80.213-80z" />
-<glyph unicode="&#xe737;" d="M607.573 447.573l98.987-98.987c11.947 30.933 18.773 64.427 18.773 99.413 0 34.773-6.613 68.053-18.347 98.773l-99.413-99.2zM833.28 673.493l-53.973-53.973c26.667-51.413 42.027-109.653 42.027-171.733s-15.36-120.107-42.027-171.733l51.2-51.2c41.173 66.133 65.493 143.573 65.493 226.773 0 81.493-23.253 157.227-62.72 221.867zM670.080 631.253l-243.413 243.413h-42.667v-323.627l-195.627 195.627-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 195.627 195.627v-323.627h42.667l243.413 243.413-183.040 183.253 183.040 183.253zM469.333 711.253l80.213-80.213-80.213-80v160.213zM549.547 264.747l-80.213-80v160.427l80.213-80.427z" />
-<glyph unicode="&#xe738;" d="M462.933 420.267h98.133l-49.067 155.733-49.067-155.733zM853.333 589.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893l141.44 141.44-141.44 141.44zM610.133 277.333l-29.867 85.333h-136.533l-29.867-85.333h-81.067l136.533 384h85.333l136.533-384h-81.067z" />
-<glyph unicode="&#xe739;" d="M853.333 589.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893l141.44 141.44-141.44 141.44zM512 192c-141.44 0-256 114.56-256 256s114.56 256 256 256 256-114.56 256-256-114.56-256-256-256zM512 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667z" />
-<glyph unicode="&#xe73a;" d="M853.333 306.56l141.44 141.44-141.44 141.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893zM512 192c-141.44 0-256 114.56-256 256s114.56 256 256 256 256-114.56 256-256-114.56-256-256-256z" />
-<glyph unicode="&#xe73b;" d="M853.333 306.56l141.44 141.44-141.44 141.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893zM512 192v512c141.44 0 256-114.56 256-256s-114.56-256-256-256z" />
-<glyph unicode="&#xe73c;" d="M554.667 872.533v-129.28c144.64-20.693 256-144.853 256-295.253 0-38.187-7.467-74.667-20.48-108.16l110.933-65.493c23.68 53.12 37.547 111.573 37.547 173.653 0 221.227-168.32 402.987-384 424.533zM512 149.333c-164.907 0-298.667 133.76-298.667 298.667 0 150.4 111.36 274.56 256 295.253v129.28c-215.893-21.333-384-203.307-384-424.533 0-235.733 190.72-426.667 426.453-426.667 141.227 0 266.027 68.907 343.68 174.507l-110.72 65.28c-54.613-68.053-138.453-111.787-232.747-111.787z" />
-<glyph unicode="&#xe73d;" d="M298.667 743.040h426.667v-85.333h85.333v170.667c0 47.147-38.187 84.907-85.333 84.907l-426.667 0.427c-47.147 0-85.333-38.187-85.333-85.333v-170.667h85.333v85.333zM657.707 248.747l195.627 195.627-195.627 195.627-60.373-60.373 135.253-135.253-135.253-135.467 60.373-60.16zM426.667 308.907l-135.253 135.253 135.253 135.467-60.373 60.373-195.627-195.627 195.627-195.627 60.373 60.16zM725.333 145.707h-426.667v85.333h-85.333v-170.667c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v170.667h-85.333v-85.333z" />
-<glyph unicode="&#xe73e;" d="M170.667 704h768v85.333h-768c-47.147 0-85.333-38.187-85.333-85.333v-469.333h-85.333v-128h597.333v128h-426.667v469.333zM981.333 618.667h-256c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h256c23.467 0 42.667 19.2 42.667 42.667v426.667c0 23.467-19.2 42.667-42.667 42.667zM938.667 234.667h-170.667v298.667h170.667v-298.667z" />
-<glyph unicode="&#xe73f;" d="M896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h213.333v-85.333h341.333v85.333h213.333c47.147 0 84.907 38.187 84.907 85.333l0.427 512c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-768v512h768v-512zM810.667 618.667h-469.333v-85.333h469.333v85.333zM810.667 448h-469.333v-85.333h469.333v85.333zM298.667 618.667h-85.333v-85.333h85.333v85.333zM298.667 448h-85.333v-85.333h85.333v85.333z" />
-<glyph unicode="&#xe740;" d="M512 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM893.44 490.667c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 149.333c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667z" />
-<glyph unicode="&#xe741;" d="M893.44 490.667c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 149.333c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667z" />
-<glyph unicode="&#xe742;" d="M893.44 490.667c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-48.213-5.333-93.44-19.84-134.613-41.387l64-64c34.987 14.507 73.173 22.613 113.28 22.613 164.907 0 298.667-133.76 298.667-298.667 0-40.107-8.107-78.293-22.4-113.28l64-64c21.547 41.173 35.84 86.4 41.173 134.613h87.893v85.333h-87.893zM128 777.6l86.827-86.827c-45.653-55.893-75.947-124.587-84.267-200.107h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c75.52 8.32 144.213 38.827 200.107 84.48l86.827-87.040 54.4 54.187-713.6 713.813-54.4-54.4zM693.973 211.627c-50.347-38.827-113.28-62.293-181.973-62.293-164.907 0-298.667 133.76-298.667 298.667 0 68.693 23.467 131.627 62.293 181.973l418.347-418.347z" />
-<glyph unicode="&#xe743;" d="M893.44 487.040c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-48.213-5.333-93.44-19.84-134.613-41.387l64-64c34.987 14.293 73.173 22.4 113.28 22.4 164.907 0 298.667-133.76 298.667-298.667 0-40.107-8.107-78.293-22.4-113.28l64-64c21.547 41.173 35.84 86.4 41.173 134.613h87.893v85.333h-87.893zM128 773.973l86.827-86.827c-45.653-55.893-76.16-124.587-84.48-200.107h-87.68v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c75.52 8.32 144.213 38.827 200.107 84.48l87.040-87.040 54.187 54.187-713.6 713.813-54.4-54.4zM693.973 208c-50.347-38.827-113.493-62.293-181.973-62.293-164.907 0-298.667 133.76-298.667 298.667 0 68.693 23.467 131.627 62.293 181.973l418.347-418.347z" />
-<glyph unicode="&#xe744;" d="M893.44 487.040c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 145.707c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667z" />
-<glyph unicode="&#xe745;" d="M298.667 192h85.333v512h-85.333v-512zM469.333 21.333h85.333v853.333h-85.333v-853.333zM128 362.667h85.333v170.667h-85.333v-170.667zM640 192h85.333v512h-85.333v-512zM810.667 533.333v-170.667h85.333v170.667h-85.333z" />
-<glyph unicode="&#xe746;" d="M85.333 21.333h853.333v853.333zM725.333 661.333l-640-640h640z" />
-<glyph unicode="&#xe747;" d="M512.427 43.093l496.213 618.24c-19.2 14.507-210.133 170.667-496.64 170.667s-477.44-156.16-496.64-170.667l496.64-618.667 0.427 0.427zM150.827 492.587l361.173-449.92 0.427 0.427 360.96 449.493c-18.347 14.080-156.16 126.080-361.387 126.080-205.44 0-343.040-112-361.173-126.080z" />
-<glyph unicode="&#xe748;" d="M853.333 871.040h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM853.333 103.040h-682.667v682.667h682.667v-682.667zM768 700.373h-213.333c-47.147 0-85.333-38.187-85.333-85.333v-97.067c-25.387-14.72-42.667-42.027-42.667-73.6 0-47.147 38.187-85.333 85.333-85.333s85.333 38.187 85.333 85.333c0 31.573-17.28 58.667-42.667 73.6v97.067h128v-341.333h-341.333v341.333h85.333v85.333h-170.667v-512h512v512z" />
-<glyph unicode="&#xe749;" d="M170.667 789.333h298.667v85.333h-298.667c-47.147 0-85.333-38.187-85.333-85.333v-298.667h85.333v298.667zM426.667 405.333l-170.667-213.333h512l-128 170.667-86.613-115.627-126.72 158.293zM725.333 597.333c0 35.413-28.587 64-64 64s-64-28.587-64-64 28.587-64 64-64 64 28.587 64 64zM853.333 874.667h-298.667v-85.333h298.667v-298.667h85.333v298.667c0 47.147-38.187 85.333-85.333 85.333zM853.333 106.667h-298.667v-85.333h298.667c47.147 0 85.333 38.187 85.333 85.333v298.667h-85.333v-298.667zM170.667 405.333h-85.333v-298.667c0-47.147 38.187-85.333 85.333-85.333h298.667v85.333h-298.667v298.667z" />
-<glyph unicode="&#xe74a;" d="M554.667 405.333v-341.333h341.333v341.333h-341.333zM128 64h341.333v341.333h-341.333v-341.333zM128 832v-341.333h341.333v341.333h-341.333zM710.613 888.107l-241.28-241.493 241.28-241.28 241.28 241.28-241.28 241.493z" />
-<glyph unicode="&#xe74b;" d="M896 746.667h-768c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 234.667h-597.333v426.667h597.333v-426.667zM426.667 277.333h170.667c23.68 0 42.667 19.2 42.667 42.667v128c0 23.467-18.987 42.667-42.667 42.667v42.667c0 47.147-38.187 85.333-85.333 85.333s-85.333-38.187-85.333-85.333v-42.667c-23.68 0-42.667-19.2-42.667-42.667v-128c0-23.467 18.987-42.667 42.667-42.667zM460.8 533.333c0 28.373 22.827 51.2 51.2 51.2s51.2-23.040 51.2-51.2v-42.667h-102.4v42.667z" />
-<glyph unicode="&#xe74c;" d="M426.667 277.333h170.667c23.68 0 42.667 19.2 42.667 42.667v128c0 23.467-18.987 42.667-42.667 42.667v42.667c0 47.147-38.187 85.333-85.333 85.333s-85.333-38.187-85.333-85.333v-42.667c-23.68 0-42.667-19.2-42.667-42.667v-128c0-23.467 18.987-42.667 42.667-42.667zM460.8 533.333c0 28.373 22.827 51.2 51.2 51.2s51.2-23.040 51.2-51.2v-42.667h-102.4v42.667zM725.333 917.333h-426.667c-47.147 0-85.333-38.187-85.333-85.333v-768c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v768c0 47.147-38.187 85.333-85.333 85.333zM725.333 149.333h-426.667v597.333h426.667v-597.333z" />
-<glyph unicode="&#xe74d;" d="M992.213 415.147l-109.653 109.653-60.373-60.373 94.507-94.507-241.28-241.28-482.773 482.773 241.28 241.28 89.387-89.387 60.373 60.373-104.533 104.533c-24.96 24.96-65.493 24.96-90.453 0l-271.573-271.573c-24.96-24.96-24.96-65.493 0-90.453l512.853-512.853c24.96-24.96 65.493-24.96 90.453 0l271.573 271.573c25.173 24.747 25.173 65.28 0.213 90.24zM361.173 85.973c-139.307 66.133-239.36 201.6-254.507 362.027h-64c21.76-262.827 241.493-469.333 509.867-469.333 9.6 0 18.773 0.853 28.373 1.493l-162.773 162.773-56.96-56.96zM682.667 576h213.333c23.68 0 42.667 19.2 42.667 42.667v170.667c0 23.467-18.987 42.667-42.667 42.667v21.333c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-21.333c-23.68 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 18.987-42.667 42.667-42.667zM716.8 853.333c0 40.107 32.427 72.533 72.533 72.533s72.533-32.427 72.533-72.533v-21.333h-145.067v21.333z" />
-<glyph unicode="&#xe74e;" d="M703.36 852.693c139.307-66.133 239.36-201.6 254.507-362.027h64c-21.76 262.827-241.493 469.333-509.867 469.333-9.6 0-18.773-0.853-28.373-1.493l162.773-162.773 56.96 56.96zM436.48 885.547c-24.96 24.96-65.493 24.96-90.453 0l-271.573-271.573c-24.96-24.96-24.96-65.493 0-90.453l512.853-512.853c24.96-24.96 65.493-24.96 90.453 0l271.573 271.573c24.96 24.96 24.96 65.493 0 90.453l-512.853 512.853zM632.747 55.893l-513.067 512.853 271.573 271.573 512.853-512.853-271.36-271.573zM320.64 43.307c-139.307 66.133-239.36 201.6-254.507 362.027h-64c21.76-262.827 241.493-469.333 509.867-469.333 9.6 0 18.773 0.853 28.373 1.493l-162.773 162.773-56.96-56.96z" />
-<glyph unicode="&#xe74f;" d="M768 874.667h-341.333l-255.147-256-0.853-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM512 618.667h-85.333v170.667h85.333v-170.667zM640 618.667h-85.333v170.667h85.333v-170.667zM768 618.667h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe750;" d="M384 277.333h277.333c58.88 0 106.667 47.787 106.667 106.667s-47.787 106.667-106.667 106.667h-2.133c-10.453 72.32-72.107 128-147.2 128-59.733 0-110.933-35.413-134.827-86.187h-7.040c-64.213-6.827-114.133-61.227-114.133-127.147 0-70.613 57.387-128 128-128zM896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 148.693h-768v598.613h768v-598.613z" />
-<glyph unicode="&#xe751;" d="M85.333 21.333h853.333v853.333z" />
-<glyph unicode="&#xe752;" d="M85.333 21.333h853.333v853.333zM512 448l-426.667-426.667h426.667z" />
-<glyph unicode="&#xe753;" d="M85.333 21.333h853.333v853.333zM597.333 533.333l-512-512h512z" />
-<glyph unicode="&#xe754;" d="M85.333 21.333h853.333v853.333zM725.333 661.333l-640-640h640z" />
-<glyph unicode="&#xe755;" d="M85.333 21.333h853.333v853.333z" />
-<glyph unicode="&#xe756;" d="M938.667 618.667v256l-853.333-853.333h682.667v597.333zM853.333 21.333h85.333v85.333h-85.333v-85.333zM853.333 533.333v-341.333h85.333v341.333h-85.333z" />
-<glyph unicode="&#xe757;" d="M938.667 618.667v256l-853.333-853.333h682.667v597.333zM853.333 533.333v-341.333h85.333v341.333h-85.333zM512 21.333v426.667l-426.667-426.667h426.667zM853.333 21.333h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe758;" d="M938.667 618.667v256l-853.333-853.333h682.667v597.333zM597.333 21.333v512l-512-512h512zM853.333 533.333v-341.333h85.333v341.333h-85.333zM853.333 21.333h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe759;" d="M938.667 618.667v256l-853.333-853.333h682.667v597.333zM725.333 21.333v640l-640-640h640zM853.333 533.333v-341.333h85.333v341.333h-85.333zM853.333 21.333h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe75a;" d="M853.333 192h85.333v341.333h-85.333v-341.333zM853.333 21.333h85.333v85.333h-85.333v-85.333zM85.333 21.333h682.667v597.333h170.667v256l-853.333-853.333z" />
-<glyph unicode="&#xe75b;" d="M810.24 746.667c0 47.147-37.76 85.333-84.907 85.333h-298.667l-99.84-99.84 483.84-483.84-0.427 498.347zM155.733 794.453l-54.187-54.187 111.787-112v-478.933c0-47.147 38.187-85.333 85.333-85.333h427.093c14.933 0 28.8 4.267 40.96 10.88l80.213-80.213 54.187 54.4-745.387 745.387z" />
-<glyph unicode="&#xe75c;" d="M853.333 668.587v-561.92h-561.92l561.92 561.92zM938.667 874.667l-853.333-853.333h853.333v853.333z" />
-<glyph unicode="&#xe75d;" d="M896 917.333l-366.507-366.507 366.507-366.507v733.013zM203.733 768l-54.4-54.187 271.573-271.573-378.24-378.24h756.267l85.333-85.333 54.4 54.4-734.933 734.933z" />
-<glyph unicode="&#xe75e;" d="M512.427 43.093l496.213 618.24c-19.2 14.507-210.133 170.667-496.64 170.667s-477.44-156.16-496.64-170.667l496.64-618.667 0.427 0.427z" />
-<glyph unicode="&#xe75f;" d="M512.427 43.093l496.213 618.24c-19.2 14.507-210.133 170.667-496.64 170.667s-477.44-156.16-496.64-170.667l496.64-618.667 0.427 0.427zM284.587 325.973l227.413-283.307 0.213 0.213 227.2 283.093c-11.307 8.747-98.133 79.36-227.413 79.36s-216.107-70.613-227.413-79.36z" />
-<glyph unicode="&#xe760;" d="M512.427 43.093l496.213 618.24c-19.2 14.507-210.133 170.667-496.64 170.667s-477.44-156.16-496.64-170.667l496.64-618.667 0.427 0.427zM204.373 426.027l307.627-383.36 0.213 0.427 307.413 382.933c-15.36 11.947-132.693 107.307-307.627 107.307s-292.267-95.36-307.627-107.307z" />
-<glyph unicode="&#xe761;" d="M512.427 43.093l496.213 618.24c-19.2 14.507-210.133 170.667-496.64 170.667s-477.44-156.16-496.64-170.667l496.64-618.667 0.427 0.427zM150.827 492.587l361.173-449.92 0.427 0.427 360.96 449.493c-18.347 14.080-156.16 126.080-361.387 126.080-205.44 0-343.040-112-361.173-126.080z" />
-<glyph unicode="&#xe762;" d="M512.427 43.093l496.213 618.24c-19.2 14.507-210.133 170.667-496.64 170.667s-477.44-156.16-496.64-170.667l496.64-618.667 0.427 0.427z" />
-<glyph unicode="&#xe763;" d="M1008.64 661.333c-19.2 14.507-210.133 170.667-496.64 170.667-64.213 0-123.307-8.107-177.067-20.48l440.747-440.32 232.96 290.133zM139.733 898.347l-54.4-54.4 87.68-87.68c-91.307-42.027-147.627-87.467-157.653-95.147l496.64-618.453 0.427 0.427 166.4 207.36 141.44-141.44 54.4 54.4-734.933 734.933z" />
-<glyph unicode="&#xe764;" d="M85.333 106.667h853.333v170.667h-853.333v-170.667zM170.667 234.667h85.333v-85.333h-85.333v85.333zM85.333 789.333v-170.667h853.333v170.667h-853.333zM256 661.333h-85.333v85.333h85.333v-85.333zM85.333 362.667h853.333v170.667h-853.333v-170.667zM170.667 490.667h85.333v-85.333h-85.333v85.333z" />
-<glyph unicode="&#xe765;" d="M640 661.333v-170.667h42.667v-85.333h-128v341.333h85.333l-128 170.667-128-170.667h85.333v-341.333h-128v88.32c30.080 15.573 51.2 46.080 51.2 82.347 0 51.84-42.027 93.867-93.867 93.867s-93.867-42.027-93.867-93.867c0-36.267 21.12-66.773 51.2-82.347v-88.32c0-47.147 38.187-85.333 85.333-85.333h128v-130.133c-30.293-15.573-51.2-46.72-51.2-83.2 0-51.84 42.027-93.867 93.867-93.867s93.867 42.027 93.867 93.867c0 36.48-20.907 67.627-51.2 83.2v130.133h128c47.147 0 85.333 38.187 85.333 85.333v85.333h42.667v170.667h-170.667z" />
-<glyph unicode="&#xe766;" d="M874.667 554.667c11.947 0 23.253-1.707 34.773-3.413l114.56 152.747c-142.72 107.093-320 170.667-512 170.667s-369.28-63.573-512-170.667l512-682.667 149.333 199.040v120.96c0 117.76 95.573 213.333 213.333 213.333zM981.333 277.333v64c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-64c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h213.333c23.467 0 42.667 19.2 42.667 42.667v170.667c0 23.467-19.2 42.667-42.667 42.667zM938.667 277.333h-128v64c0 35.413 28.587 64 64 64s64-28.587 64-64v-64z" />
-<glyph unicode="&#xe767;" d="M512 490.667c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 405.333c0 141.44-114.56 256-256 256s-256-114.56-256-256c0-94.72 51.413-177.067 127.787-221.44l43.093 74.24c-50.987 29.653-85.547 84.053-85.547 147.2 0 94.293 76.373 170.667 170.667 170.667s170.667-76.373 170.667-170.667c0-63.147-34.56-117.547-85.547-146.987l43.093-74.24c76.373 44.16 127.787 126.507 127.787 221.227zM512 832c-235.733 0-426.667-190.933-426.667-426.667 0-157.653 85.76-295.040 213.12-368.853l42.667 73.813c-101.76 58.88-170.453 168.96-170.453 295.040 0 188.587 152.747 341.333 341.333 341.333s341.333-152.747 341.333-341.333c0-126.080-68.693-236.16-170.453-295.253l42.667-73.813c127.36 74.027 213.12 211.413 213.12 369.067 0 235.733-191.147 426.667-426.667 426.667z" />
-<glyph unicode="&#xe768;" d="M704 704v-490.667c0-94.293-76.373-170.667-170.667-170.667s-170.667 76.373-170.667 170.667v533.333c0 58.88 47.787 106.667 106.667 106.667s106.667-47.787 106.667-106.667v-448c0-23.467-18.987-42.667-42.667-42.667s-42.667 19.2-42.667 42.667v405.333h-64v-405.333c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667v448c0 94.293-76.373 170.667-170.667 170.667s-170.667-76.373-170.667-170.667v-533.333c0-129.707 105.173-234.667 234.667-234.667s234.667 104.96 234.667 234.667v490.667h-64z" />
-<glyph unicode="&#xe769;" d="M503.467 494.933c-96.853 25.173-128 50.987-128 91.52 0 46.507 42.88 79.147 115.2 79.147 75.947 0 104.107-36.267 106.667-89.6h94.293c-2.773 73.6-47.787 140.587-136.96 162.56v93.44h-128v-92.16c-82.773-18.133-149.333-71.467-149.333-154.027 0-98.56 81.707-147.627 200.533-176.213 106.88-25.6 128-62.933 128-103.040 0-29.227-20.693-76.16-115.2-76.16-87.893 0-122.667 39.467-127.147 89.6h-94.080c5.333-93.44 75.093-145.707 157.227-163.413v-92.587h128v91.733c82.987 16 149.333 64 149.333 151.68 0 120.747-103.68 162.133-200.533 187.52z" />
-<glyph unicode="&#xe76a;" d="M128 832v-768h768v768h-768zM469.333 149.333h-256v256h256v-256zM469.333 490.667h-256v256h256v-256zM810.667 149.333h-256v256h256v-256zM810.667 490.667h-256v256h256v-256z" />
-<glyph unicode="&#xe76b;" d="M384 490.667h-85.333v-85.333h85.333v85.333zM554.667 320h-85.333v-85.333h85.333v85.333zM384 832h-85.333v-85.333h85.333v85.333zM554.667 490.667h-85.333v-85.333h85.333v85.333zM213.333 832h-85.333v-85.333h85.333v85.333zM554.667 661.333h-85.333v-85.333h85.333v85.333zM725.333 490.667h-85.333v-85.333h85.333v85.333zM554.667 832h-85.333v-85.333h85.333v85.333zM725.333 832h-85.333v-85.333h85.333v85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM213.333 661.333h-85.333v-85.333h85.333v85.333zM810.667 832v-85.333h85.333v85.333h-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM213.333 490.667h-85.333v-85.333h85.333v85.333zM128 64h768v85.333h-768v-85.333zM213.333 320h-85.333v-85.333h85.333v85.333z" />
-<glyph unicode="&#xe76c;" d="M298.667 746.667h85.333v85.333h-85.333v-85.333zM298.667 405.333h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333zM469.333 234.667h85.333v85.333h-85.333v-85.333zM469.333 64h85.333v85.333h-85.333v-85.333zM128 64h85.333v85.333h-85.333v-85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM128 405.333h85.333v85.333h-85.333v-85.333zM128 576h85.333v85.333h-85.333v-85.333zM128 746.667h85.333v85.333h-85.333v-85.333zM469.333 405.333h85.333v85.333h-85.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM810.667 64h85.333v85.333h-85.333v-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM469.333 576h85.333v85.333h-85.333v-85.333zM810.667 832v-85.333h85.333v85.333h-85.333zM469.333 746.667h85.333v85.333h-85.333v-85.333zM640 64h85.333v85.333h-85.333v-85.333zM640 405.333h85.333v85.333h-85.333v-85.333zM640 746.667h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe76d;" d="M757.333 661.333l-160 160-426.667-426.667v-160h160l426.667 426.667zM883.413 787.413c16.64 16.64 16.64 43.733 0 60.373l-99.627 99.627c-16.64 16.64-43.733 16.64-60.373 0l-83.413-83.413 160-160 83.413 83.413zM0 106.667h1024v-170.667h-1024z" />
-<glyph unicode="&#xe76e;" d="M128 64h85.333v85.333h-85.333v-85.333zM213.333 661.333h-85.333v-85.333h85.333v85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333zM213.333 832h-85.333v-85.333h85.333v85.333zM384 832h-85.333v-85.333h85.333v85.333zM725.333 832h-85.333v-85.333h85.333v85.333zM554.667 661.333h-85.333v-85.333h85.333v85.333zM554.667 832h-85.333v-85.333h85.333v85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM469.333 64h85.333v85.333h-85.333v-85.333zM128 405.333h768v85.333h-768v-85.333zM810.667 832v-85.333h85.333v85.333h-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM469.333 234.667h85.333v85.333h-85.333v-85.333zM640 64h85.333v85.333h-85.333v-85.333zM810.667 64h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe76f;" d="M128 64h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333zM213.333 661.333h-85.333v-85.333h85.333v85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM384 832h-85.333v-85.333h85.333v85.333zM213.333 832h-85.333v-85.333h85.333v85.333zM725.333 832h-85.333v-85.333h85.333v85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM810.667 832v-85.333h85.333v85.333h-85.333zM640 64h85.333v85.333h-85.333v-85.333zM554.667 832h-85.333v-341.333h-341.333v-85.333h341.333v-341.333h85.333v341.333h341.333v85.333h-341.333v341.333zM810.667 64h85.333v85.333h-85.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe770;" d="M469.333 64h85.333v85.333h-85.333v-85.333zM469.333 234.667h85.333v85.333h-85.333v-85.333zM469.333 746.667h85.333v85.333h-85.333v-85.333zM469.333 576h85.333v85.333h-85.333v-85.333zM469.333 405.333h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333zM298.667 746.667h85.333v85.333h-85.333v-85.333zM298.667 405.333h85.333v85.333h-85.333v-85.333zM128 64h85.333v768h-85.333v-768zM810.667 576h85.333v85.333h-85.333v-85.333zM640 64h85.333v85.333h-85.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM810.667 832v-85.333h85.333v85.333h-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM810.667 64h85.333v85.333h-85.333v-85.333zM640 405.333h85.333v85.333h-85.333v-85.333zM640 746.667h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe771;" d="M554.667 661.333h-85.333v-85.333h85.333v85.333zM554.667 490.667h-85.333v-85.333h85.333v85.333zM725.333 490.667h-85.333v-85.333h85.333v85.333zM128 832v-768h768v768h-768zM810.667 149.333h-597.333v597.333h597.333v-597.333zM554.667 320h-85.333v-85.333h85.333v85.333zM384 490.667h-85.333v-85.333h85.333v85.333z" />
-<glyph unicode="&#xe772;" d="M298.667 64h85.333v85.333h-85.333v-85.333zM128 746.667h85.333v85.333h-85.333v-85.333zM298.667 746.667h85.333v85.333h-85.333v-85.333zM298.667 405.333h85.333v85.333h-85.333v-85.333zM128 64h85.333v85.333h-85.333v-85.333zM469.333 64h85.333v85.333h-85.333v-85.333zM128 405.333h85.333v85.333h-85.333v-85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM128 576h85.333v85.333h-85.333v-85.333zM469.333 234.667h85.333v85.333h-85.333v-85.333zM640 405.333h85.333v85.333h-85.333v-85.333zM810.667 832v-768h85.333v768h-85.333zM640 64h85.333v85.333h-85.333v-85.333zM640 746.667h85.333v85.333h-85.333v-85.333zM469.333 405.333h85.333v85.333h-85.333v-85.333zM469.333 746.667h85.333v85.333h-85.333v-85.333zM469.333 576h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe773;" d="M640 64h85.333v85.333h-85.333v-85.333zM810.667 64h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333zM469.333 64h85.333v85.333h-85.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM128 832v-768h85.333v682.667h682.667v85.333h-768zM810.667 576h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe774;" d="M298.667 64h85.333v85.333h-85.333v-85.333zM298.667 405.333h85.333v85.333h-85.333v-85.333zM469.333 405.333h85.333v85.333h-85.333v-85.333zM469.333 64h85.333v85.333h-85.333v-85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM128 64h85.333v85.333h-85.333v-85.333zM128 405.333h85.333v85.333h-85.333v-85.333zM128 576h85.333v85.333h-85.333v-85.333zM469.333 234.667h85.333v85.333h-85.333v-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM128 832v-85.333h768v85.333h-768zM810.667 234.667h85.333v85.333h-85.333v-85.333zM640 64h85.333v85.333h-85.333v-85.333zM469.333 576h85.333v85.333h-85.333v-85.333zM810.667 64h85.333v85.333h-85.333v-85.333zM640 405.333h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe775;" d="M128 576h85.333v85.333h-85.333v-85.333zM128 746.667h85.333v85.333h-85.333v-85.333zM298.667 64h85.333v85.333h-85.333v-85.333zM298.667 405.333h85.333v85.333h-85.333v-85.333zM128 405.333h85.333v85.333h-85.333v-85.333zM128 64h85.333v85.333h-85.333v-85.333zM128 234.667h85.333v85.333h-85.333v-85.333zM298.667 746.667h85.333v85.333h-85.333v-85.333zM810.667 234.667h85.333v85.333h-85.333v-85.333zM469.333 64h85.333v768h-85.333v-768zM810.667 64h85.333v85.333h-85.333v-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM810.667 832v-85.333h85.333v85.333h-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM640 746.667h85.333v85.333h-85.333v-85.333zM640 64h85.333v85.333h-85.333v-85.333zM640 405.333h85.333v85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe776;" d="M298.667 320v-85.333h426.667v85.333h-426.667zM128 64h768v85.333h-768v-85.333zM128 405.333h768v85.333h-768v-85.333zM298.667 661.333v-85.333h426.667v85.333h-426.667zM128 832v-85.333h768v85.333h-768z" />
-<glyph unicode="&#xe777;" d="M128 64h768v85.333h-768v-85.333zM128 234.667h768v85.333h-768v-85.333zM128 405.333h768v85.333h-768v-85.333zM128 576h768v85.333h-768v-85.333zM128 832v-85.333h768v85.333h-768z" />
-<glyph unicode="&#xe778;" d="M640 320h-512v-85.333h512v85.333zM640 661.333h-512v-85.333h512v85.333zM128 405.333h768v85.333h-768v-85.333zM128 64h768v85.333h-768v-85.333zM128 832v-85.333h768v85.333h-768z" />
-<glyph unicode="&#xe779;" d="M128 64h768v85.333h-768v-85.333zM384 234.667h512v85.333h-512v-85.333zM128 405.333h768v85.333h-768v-85.333zM384 576h512v85.333h-512v-85.333zM128 832v-85.333h768v85.333h-768z" />
-<glyph unicode="&#xe77a;" d="M665.6 499.627c41.173 28.8 70.4 75.307 70.4 119.040 0 96.213-74.453 170.667-170.667 170.667h-266.667v-597.333h300.373c89.387 0 158.293 72.533 158.293 161.707 0 64.853-36.907 120.107-91.733 145.92zM426.667 682.667h128c35.413 0 64-28.587 64-64s-28.587-64-64-64h-128v128zM576 298.667h-149.333v128h149.333c35.413 0 64-28.587 64-64s-28.587-64-64-64z" />
-<glyph unicode="&#xe77b;" d="M139.52 746.667l-54.187-54.4 297.387-297.387-105.387-245.547h128l66.987 156.16 241.493-241.493 54.187 54.4-628.48 628.267zM256 746.667v-7.68l120.32-120.32h102.187l-30.72-71.467 89.6-89.6 69.12 161.067h246.827v128h-597.333z" />
-<glyph unicode="&#xe77c;" d="M706.56 578.56l-381.44 381.44-60.373-60.373 101.547-101.547-219.52-219.52c-24.96-24.96-24.96-65.493 0-90.453l234.667-234.667c12.373-12.587 28.8-18.773 45.227-18.773s32.853 6.187 45.227 18.773l234.667 234.667c24.96 24.96 24.96 65.493 0 90.453zM222.080 533.333l204.587 204.373 204.587-204.373h-409.173zM810.667 469.333s-85.333-92.373-85.333-149.333c0-47.147 38.187-85.333 85.333-85.333s85.333 38.187 85.333 85.333c0 56.96-85.333 149.333-85.333 149.333zM0 106.667h1024v-170.667h-1024z" />
-<glyph unicode="&#xe77d;" d="M768 362.667c0 170.667-256 460.8-256 460.8s-56.747-64.427-116.693-150.187l366.293-366.293c4.053 17.92 6.4 36.48 6.4 55.68zM730.453 229.547l-505.6 505.6-54.187-54.4 141.653-141.653c-32.64-62.293-56.32-124.8-56.32-176.427 0-141.44 114.56-256 256-256 64.853 0 123.733 24.32 168.747 64l112.427-112.427 54.187 54.4-116.907 116.907z" />
-<glyph unicode="&#xe77e;" d="M0 106.667h1024v-170.667h-1024zM469.333 832l-234.667-597.333h96l48 128h266.667l48-128h96l-234.667 597.333h-85.333zM410.667 448l101.333 270.293 101.333-270.293h-202.667z" />
-<glyph unicode="&#xe77f;" d="M469.333 234.667h426.667v85.333h-426.667v-85.333zM128 448l170.667-170.667v341.333l-170.667-170.667zM128 64h768v85.333h-768v-85.333zM128 832v-85.333h768v85.333h-768zM469.333 576h426.667v85.333h-426.667v-85.333zM469.333 405.333h426.667v85.333h-426.667v-85.333z" />
-<glyph unicode="&#xe780;" d="M128 64h768v85.333h-768v-85.333zM128 618.667v-341.333l170.667 170.667-170.667 170.667zM469.333 234.667h426.667v85.333h-426.667v-85.333zM128 832v-85.333h768v85.333h-768zM469.333 576h426.667v85.333h-426.667v-85.333zM469.333 405.333h426.667v85.333h-426.667v-85.333z" />
-<glyph unicode="&#xe781;" d="M426.667 789.333v-128h94.507l-146.347-341.333h-118.827v-128h341.333v128h-94.507l146.347 341.333h118.827v128z" />
-<glyph unicode="&#xe782;" d="M256 661.333h106.667l-149.333 149.333-149.333-149.333h106.667v-426.667h-106.667l149.333-149.333 149.333 149.333h-106.667v426.667zM426.667 746.667v-85.333h512v85.333h-512zM426.667 149.333h512v85.333h-512v-85.333zM426.667 405.333h512v85.333h-512v-85.333z" />
-<glyph unicode="&#xe783;" d="M170.667 512c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM170.667 768c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM170.667 248.96c-31.36 0-56.96-25.387-56.96-56.96s25.6-56.96 56.96-56.96 56.96 25.387 56.96 56.96-25.6 56.96-56.96 56.96zM298.667 149.333h597.333v85.333h-597.333v-85.333zM298.667 405.333h597.333v85.333h-597.333v-85.333zM298.667 746.667v-85.333h597.333v85.333h-597.333z" />
-<glyph unicode="&#xe784;" d="M85.333 234.667h85.333v-21.333h-42.667v-42.667h42.667v-21.333h-85.333v-42.667h128v170.667h-128v-42.667zM128 618.667h42.667v170.667h-85.333v-42.667h42.667v-128zM85.333 490.667h76.8l-76.8-89.6v-38.4h128v42.667h-76.8l76.8 89.6v38.4h-128v-42.667zM298.667 746.667v-85.333h597.333v85.333h-597.333zM298.667 149.333h597.333v85.333h-597.333v-85.333zM298.667 405.333h597.333v85.333h-597.333v-85.333z" />
-<glyph unicode="&#xe785;" d="M768 789.333v42.667c0 23.467-19.2 42.667-42.667 42.667h-512c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v42.667h42.667v-170.667h-426.667v-469.333c0-23.467 19.2-42.667 42.667-42.667h85.333c23.467 0 42.667 19.2 42.667 42.667v384h341.333v341.333h-128z" />
-<glyph unicode="&#xe786;" d="M256 234.667h128l85.333 170.667v256h-256v-256h128zM597.333 234.667h128l85.333 170.667v256h-256v-256h128z" />
-<glyph unicode="&#xe787;" d="M384 789.333v-128h213.333v-512h128v512h213.333v128h-554.667zM128 448h128v-298.667h128v298.667h128v128h-384v-128z" />
-<glyph unicode="&#xe788;" d="M426.667 149.333h170.667v128h-170.667v-128zM213.333 789.333v-128h213.333v-128h170.667v128h213.333v128h-597.333zM128 362.667h768v85.333h-768v-85.333z" />
-<glyph unicode="&#xe789;" d="M768 789.333h-512v-85.333l277.333-256-277.333-256v-85.333h512v128h-298.667l213.333 213.333-213.333 213.333h298.667z" />
-<glyph unicode="&#xe78a;" d="M384 533.333v-213.333h85.333v469.333h85.333v-469.333h85.333v469.333h85.333v85.333h-341.333c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667zM896 192l-170.667 170.667v-128h-512v-85.333h512v-128l170.667 170.667z" />
-<glyph unicode="&#xe78b;" d="M512 234.667c141.44 0 256 114.56 256 256v341.333h-106.667v-341.333c0-82.56-66.773-149.333-149.333-149.333s-149.333 66.773-149.333 149.333v341.333h-106.667v-341.333c0-141.44 114.56-256 256-256zM213.333 149.333v-85.333h597.333v85.333h-597.333z" />
-<glyph unicode="&#xe78c;" d="M426.667 533.333v-213.333h85.333v469.333h85.333v-469.333h85.333v469.333h85.333v85.333h-341.333c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667zM341.333 234.667v128l-170.667-170.667 170.667-170.667v128h512v85.333h-512z" />
-<glyph unicode="&#xe78d;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM384 234.667h-85.333v298.667h85.333v-298.667zM554.667 234.667h-85.333v426.667h85.333v-426.667zM725.333 234.667h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe78e;" d="M853.333 874.667h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h597.333l170.667-170.667v768c0 47.147-38.187 85.333-85.333 85.333zM768 362.667h-512v85.333h512v-85.333zM768 490.667h-512v85.333h512v-85.333zM768 618.667h-512v85.333h512v-85.333z" />
-<glyph unicode="&#xe78f;" d="M256 874.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-682.667c0-47.147 37.76-85.333 84.907-85.333h512.427c47.147 0 85.333 38.187 85.333 85.333v512l-256 256h-341.333zM554.667 576v234.667l234.667-234.667h-234.667z" />
-<glyph unicode="&#xe790;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM661.333 490.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 490.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 213.333c99.413 0 183.68 62.080 217.813 149.333h-435.627c34.133-87.253 118.4-149.333 217.813-149.333z" />
-<glyph unicode="&#xe791;" d="M725.333 448h-213.333v-213.333h213.333v213.333zM682.667 917.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333h-42.667v85.333h-85.333zM810.667 149.333h-597.333v469.333h597.333v-469.333z" />
-<glyph unicode="&#xe792;" d="M166.4 448c0 72.96 59.307 132.267 132.267 132.267h170.667v81.067h-170.667c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333h170.667v81.067h-170.667c-72.96 0-132.267 59.307-132.267 132.267zM341.333 405.333h341.333v85.333h-341.333v-85.333zM725.333 661.333h-170.667v-81.067h170.667c72.96 0 132.267-59.307 132.267-132.267s-59.307-132.267-132.267-132.267h-170.667v-81.067h170.667c117.76 0 213.333 95.573 213.333 213.333s-95.573 213.333-213.333 213.333z" />
-<glyph unicode="&#xe793;" d="M896 149.333v597.333c0 47.147-38.187 85.333-85.333 85.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333zM362.667 384l106.667-128.213 149.333 192.213 192-256h-597.333l149.333 192z" />
-<glyph unicode="&#xe794;" d="M725.333 88.96l60.373 60.373-145.707 145.707-60.373-60.373 145.707-145.707zM320 618.667h149.333v-238.293l-231.040-231.040 60.373-60.373 256 256v273.707h149.333l-192 192-192-192z" />
-<glyph unicode="&#xe795;" d="M938.24 789.333c0 47.147-37.76 85.333-84.907 85.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h597.333l170.667-170.667-0.427 768z" />
-<glyph unicode="&#xe796;" d="M128 224v-160h160l472.107 472.107-160 160-472.107-472.107zM883.413 659.413c16.64 16.64 16.64 43.733 0 60.373l-99.627 99.627c-16.64 16.64-43.733 16.64-60.373 0l-78.080-78.080 160-160 78.080 78.080z" />
-<glyph unicode="&#xe797;" d="M213.333 789.333v-85.333h597.333v85.333h-597.333zM213.333 362.667h170.667v-256h256v256h170.667l-298.667 298.667-298.667-298.667z" />
-<glyph unicode="&#xe798;" d="M682.667 405.333h-128v426.667h-85.333v-426.667h-128l170.667-170.667 170.667 170.667zM170.667 149.333v-85.333h682.667v85.333h-682.667z" />
-<glyph unicode="&#xe799;" d="M341.333 149.333h128v-170.667h85.333v170.667h128l-170.667 170.667-170.667-170.667zM682.667 746.667h-128v170.667h-85.333v-170.667h-128l170.667-170.667 170.667 170.667zM170.667 490.667v-85.333h682.667v85.333h-682.667z" />
-<glyph unicode="&#xe79a;" d="M341.333 490.667h128v-426.667h85.333v426.667h128l-170.667 170.667-170.667-170.667zM170.667 832v-85.333h682.667v85.333h-682.667z" />
-<glyph unicode="&#xe79b;" d="M170.667 149.333h256v85.333h-256v-85.333zM853.333 746.667h-682.667v-85.333h682.667v85.333zM725.333 490.667h-554.667v-85.333h565.333c47.147 0 85.333-38.187 85.333-85.333s-38.187-85.333-85.333-85.333h-96v85.333l-128-128 128-128v85.333h85.333c94.080 0 170.667 76.587 170.667 170.667s-76.587 170.667-170.667 170.667z" />
-<glyph unicode="&#xe79c;" d="M320 192c-129.707 0-234.667 105.173-234.667 234.667s104.96 234.667 234.667 234.667h448c94.293 0 170.667-76.373 170.667-170.667s-76.373-170.667-170.667-170.667h-362.667c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667h320v-64h-320c-23.467 0-42.667-18.987-42.667-42.667s19.2-42.667 42.667-42.667h362.667c58.88 0 106.667 47.787 106.667 106.667s-47.787 106.667-106.667 106.667h-448c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667h405.333v-64h-405.333z" />
-<glyph unicode="&#xe79d;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-230.187-69.973-283.733-172.16-128.213-13.867-228.267-122.453-228.267-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.68 203.947-198.187 211.84z" />
-<glyph unicode="&#xe79e;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM704 277.333h-362.667c-70.613 0-128 57.387-128 128s57.387 128 128 128l5.76-0.64c18.987 73.813 85.333 128.64 164.907 128.64 94.293 0 170.667-76.373 170.667-170.667h21.333c58.88 0 106.667-47.787 106.667-106.667s-47.787-106.667-106.667-106.667z" />
-<glyph unicode="&#xe79f;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-230.187-69.973-283.733-172.16-128.213-13.867-228.267-122.453-228.267-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.68 203.947-198.187 211.84zM426.667 234.667l-149.333 149.333 60.373 60.373 88.96-88.96 220.8 220.8 60.373-60.373-281.173-281.173z" />
-<glyph unicode="&#xe7a0;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-230.187-69.973-283.733-172.16-128.213-13.867-228.267-122.453-228.267-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.68 203.947-198.187 211.84zM725.333 405.333l-213.333-213.333-213.333 213.333h128v170.667h170.667v-170.667h128z" />
-<glyph unicode="&#xe7a1;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-62.933 0-121.6-18.56-171.093-49.92l62.293-62.293c32.64 16.853 69.547 26.88 108.8 26.88 129.707 0 234.667-104.96 234.667-234.667v-21.333h64c70.613 0 128-57.387 128-128 0-48.427-27.093-90.027-66.773-111.787l61.867-61.867c54.4 38.613 90.24 101.76 90.24 173.653 0 112.64-87.68 203.947-198.187 211.84zM128 734.933l117.333-116.907c-136.107-5.76-245.333-117.76-245.333-255.36 0-141.44 114.56-256 256-256h500.267l85.333-85.333 54.4 54.187-713.6 713.813-54.4-54.4zM329.6 533.333l341.333-341.333h-414.933c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667h73.6z" />
-<glyph unicode="&#xe7a2;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-230.187-69.973-283.733-172.16-128.213-13.867-228.267-122.453-228.267-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.68 203.947-198.187 211.84zM810.667 192h-554.667c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667h30.293c27.947 98.347 118.187 170.667 225.707 170.667 129.707 0 234.667-104.96 234.667-234.667v-21.333h64c70.613 0 128-57.387 128-128s-57.387-128-128-128z" />
-<glyph unicode="&#xe7a3;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-230.187-69.973-283.733-172.16-128.213-13.867-228.267-122.453-228.267-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.68 203.947-198.187 211.84zM597.333 405.333v-170.667h-170.667v170.667h-128l213.333 213.333 213.333-213.333h-128z" />
-<glyph unicode="&#xe7a4;" d="M810.667 576h-170.667v256h-256v-256h-170.667l298.667-298.667 298.667 298.667zM213.333 192v-85.333h597.333v85.333h-597.333z" />
-<glyph unicode="&#xe7a5;" d="M384 277.333h256v256h170.667l-298.667 298.667-298.667-298.667h170.667zM213.333 192h597.333v-85.333h-597.333z" />
-<glyph unicode="&#xe7a6;" d="M426.667 789.333h-256c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333h-341.333l-85.333 85.333z" />
-<glyph unicode="&#xe7a7;" d="M853.333 704h-341.333l-85.333 85.333h-256c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM853.333 192h-682.667v426.667h682.667v-426.667z" />
-<glyph unicode="&#xe7a8;" d="M853.333 704h-341.333l-85.333 85.333h-256c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM640 576c47.147 0 85.333-38.187 85.333-85.333s-38.187-85.333-85.333-85.333-85.333 38.187-85.333 85.333 38.187 85.333 85.333 85.333zM810.667 234.667h-341.333v42.667c0 56.96 113.707 85.333 170.667 85.333s170.667-28.373 170.667-85.333v-42.667z" />
-<glyph unicode="&#xe7a9;" d="M896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-128h85.333v128h768v-597.333h-298.667v-85.333h298.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM42.667 192v-128h128c0 70.613-57.387 128-128 128zM42.667 362.667v-85.333c117.76 0 213.333-95.573 213.333-213.333h85.333c0 164.907-133.76 298.667-298.667 298.667zM42.667 533.333v-85.333c212.053 0 384-171.947 384-384h85.333c0 259.2-210.133 469.333-469.333 469.333z" />
-<glyph unicode="&#xe7aa;" d="M42.667 192v-128h128c0 70.613-57.387 128-128 128zM42.667 362.667v-85.333c117.76 0 213.333-95.573 213.333-213.333h85.333c0 164.907-133.76 298.667-298.667 298.667zM810.667 661.333h-597.333v-69.76c168.96-54.613 302.293-187.947 356.907-356.907h240.427v426.667zM42.667 533.333v-85.333c212.053 0 384-171.947 384-384h85.333c0 259.2-210.133 469.333-469.333 469.333zM896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-128h85.333v128h768v-597.333h-298.667v-85.333h298.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe7ab;" d="M853.333 192c47.147 0 84.907 38.187 84.907 85.333l0.427 426.667c0 47.147-38.187 85.333-85.333 85.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h-170.667v-85.333h1024v85.333h-170.667zM170.667 704h682.667v-426.667h-682.667v426.667z" />
-<glyph unicode="&#xe7ac;" d="M896 874.667h-768c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h298.667l-85.333-128v-42.667h341.333v42.667l-85.333 128h298.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM896 362.667h-768v426.667h768v-426.667z" />
-<glyph unicode="&#xe7ad;" d="M896 874.667h-768c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h298.667v-85.333h-85.333v-85.333h341.333v85.333h-85.333v85.333h298.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM896 277.333h-768v512h768v-512z" />
-<glyph unicode="&#xe7ae;" d="M341.333-21.333h341.333v85.333h-341.333v-85.333zM682.667 916.907l-341.333 0.427c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h341.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 84.907-85.333 84.907zM682.667 320h-341.333v426.667h341.333v-426.667z" />
-<glyph unicode="&#xe7af;" d="M640 640v234.667h-256v-234.667l128-128 128 128zM320 576h-234.667v-256h234.667l128 128-128 128zM384 256v-234.667h256v234.667l-128 128-128-128zM704 576l-128-128 128-128h234.667v256h-234.667z" />
-<glyph unicode="&#xe7b0;" d="M512 917.333c-212.053 0-384-171.947-384-384v-298.667c0-70.613 57.387-128 128-128h128v341.333h-170.667v85.333c0 164.907 133.76 298.667 298.667 298.667s298.667-133.76 298.667-298.667v-85.333h-170.667v-341.333h128c70.613 0 128 57.387 128 128v298.667c0 212.053-171.947 384-384 384z" />
-<glyph unicode="&#xe7b1;" d="M512 917.333c-212.053 0-384-171.947-384-384v-298.667c0-70.613 57.387-128 128-128h128v341.333h-170.667v85.333c0 164.907 133.76 298.667 298.667 298.667s298.667-133.76 298.667-298.667v-85.333h-170.667v-341.333h170.667v-42.667h-298.667v-85.333h256c70.613 0 128 57.387 128 128v426.667c0 212.053-171.947 384-384 384z" />
-<glyph unicode="&#xe7b2;" d="M853.333 746.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-426.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM469.333 618.667h85.333v-85.333h-85.333v85.333zM469.333 490.667h85.333v-85.333h-85.333v85.333zM341.333 618.667h85.333v-85.333h-85.333v85.333zM341.333 490.667h85.333v-85.333h-85.333v85.333zM298.667 405.333h-85.333v85.333h85.333v-85.333zM298.667 533.333h-85.333v85.333h85.333v-85.333zM682.667 234.667h-341.333v85.333h341.333v-85.333zM682.667 405.333h-85.333v85.333h85.333v-85.333zM682.667 533.333h-85.333v85.333h85.333v-85.333zM810.667 405.333h-85.333v85.333h85.333v-85.333zM810.667 533.333h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe7b3;" d="M661.333 512c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 512c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 213.333c111.36 0 205.867 71.253 241.067 170.667h-482.133c35.2-99.413 129.707-170.667 241.067-170.667zM511.787 896c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM512 128c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
-<glyph unicode="&#xe7b4;" d="M316.373 609.707l195.627-195.627 195.627 195.627 60.373-60.373-256-256-256 256z" />
-<glyph unicode="&#xe7b5;" d="M657.707 263.040l-195.627 195.627 195.627 195.627-60.373 60.373-256-256 256-256z" />
-<glyph unicode="&#xe7b6;" d="M366.293 257.707l195.627 195.627-195.627 195.627 60.373 60.373 256-256-256-256z" />
-<glyph unicode="&#xe7b7;" d="M316.373 302.293l195.627 195.627 195.627-195.627 60.373 60.373-256 256-256-256z" />
-<glyph unicode="&#xe7b8;" d="M896 490.667h-604.587l152.96 152.96-60.373 60.373-256-256 256-256 60.373 60.373-152.96 152.96h604.587z" />
-<glyph unicode="&#xe7b9;" d="M512 600.96l195.627-195.627 60.373 60.373-256 256-256-256 60.373-60.373 195.627 195.627zM256 192h512v85.333h-512v-85.333z" />
-<glyph unicode="&#xe7ba;" d="M256 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM512 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe7bb;" d="M853.333 832h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-426.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM469.333 704h85.333v-85.333h-85.333v85.333zM469.333 576h85.333v-85.333h-85.333v85.333zM341.333 704h85.333v-85.333h-85.333v85.333zM341.333 576h85.333v-85.333h-85.333v85.333zM298.667 490.667h-85.333v85.333h85.333v-85.333zM298.667 618.667h-85.333v85.333h85.333v-85.333zM682.667 320h-341.333v85.333h341.333v-85.333zM682.667 490.667h-85.333v85.333h85.333v-85.333zM682.667 618.667h-85.333v85.333h85.333v-85.333zM810.667 490.667h-85.333v85.333h85.333v-85.333zM810.667 618.667h-85.333v85.333h85.333v-85.333zM512-21.333l170.667 170.667h-341.333l170.667-170.667z" />
-<glyph unicode="&#xe7bc;" d="M810.667 661.333v-170.667h-561.92l152.96 152.96-60.373 60.373-256-256 256-256 60.373 60.373-152.96 152.96h647.253v256z" />
-<glyph unicode="&#xe7bd;" d="M494.293 643.627l152.96-152.96h-604.587v-85.333h604.587l-152.96-152.96 60.373-60.373 256 256-256 256-60.373-60.373zM853.333 704v-512h85.333v512h-85.333z" />
-<glyph unicode="&#xe7be;" d="M512 320c70.613 0 127.573 57.387 127.573 128l0.427 256c0 70.827-57.173 128-128 128-70.613 0-128-57.173-128-128v-256c0-70.613 57.387-128 128-128zM738.133 448c0-128-108.16-217.6-226.133-217.6-117.76 0-226.133 89.6-226.133 217.6h-72.533c0-145.707 116.053-266.027 256-286.72v-139.947h85.333v139.947c139.947 20.693 256 141.013 256 286.72h-72.533z" />
-<glyph unicode="&#xe7bf;" d="M853.333 192c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h-170.667v-85.333h1024v85.333h-170.667zM170.667 704h682.667v-426.667h-682.667v426.667z" />
-<glyph unicode="&#xe7c0;" d="M938.667 192v640h-853.333v-640h-85.333v-85.333h1024v85.333h-85.333zM597.333 192h-170.667v42.667h170.667v-42.667zM853.333 320h-682.667v426.667h682.667v-426.667z" />
-<glyph unicode="&#xe7c1;" d="M853.333 192c47.147 0 84.907 38.187 84.907 85.333l0.427 469.333c0 47.147-38.187 85.333-85.333 85.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-469.333c0-47.147 38.187-85.333 85.333-85.333h-170.667c0-47.147 38.187-85.333 85.333-85.333h853.333c47.147 0 85.333 38.187 85.333 85.333h-170.667zM170.667 746.667h682.667v-469.333h-682.667v469.333zM512 149.333c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667z" />
-<glyph unicode="&#xe7c2;" d="M853.333 192v42.667c47.147 0 84.907 38.187 84.907 85.333l0.427 426.667c0 47.147-38.187 85.333-85.333 85.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333v-42.667h-170.667v-85.333h1024v85.333h-170.667zM170.667 746.667h682.667v-426.667h-682.667v426.667z" />
-<glyph unicode="&#xe7c3;" d="M640 576h-256v-256h256v256zM554.667 405.333h-85.333v85.333h85.333v-85.333zM896 490.667v85.333h-85.333v85.333c0 47.147-38.187 85.333-85.333 85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333c-47.147 0-85.333-38.187-85.333-85.333v-85.333h-85.333v-85.333h85.333v-85.333h-85.333v-85.333h85.333v-85.333c0-47.147 38.187-85.333 85.333-85.333h85.333v-85.333h85.333v85.333h85.333v-85.333h85.333v85.333h85.333c47.147 0 85.333 38.187 85.333 85.333v85.333h85.333v85.333h-85.333v85.333h85.333zM725.333 234.667h-426.667v426.667h426.667v-426.667z" />
-<glyph unicode="&#xe7c4;" d="M554.667 914.347v-338.347h298.667c0 174.080-130.347 317.44-298.667 338.347zM170.667 320c0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333v170.667h-682.667v-170.667zM469.333 914.347c-168.32-20.907-298.667-164.267-298.667-338.347h298.667v338.347z" />
-<glyph unicode="&#xe7c5;" d="M682.667 917.333h-341.333c-70.613 0-128-57.387-128-128v-682.667c0-70.613 57.387-128 128-128h341.333c70.613 0 128 57.387 128 128v682.667c0 70.613-57.387 128-128 128zM597.333 64h-170.667v42.667h170.667v-42.667zM736 192h-448v597.333h448v-597.333z" />
-<glyph unicode="&#xe7c6;" d="M661.333 917.333h-341.333c-58.88 0-106.667-47.787-106.667-106.667v-725.333c0-58.88 47.787-106.667 106.667-106.667h341.333c58.88 0 106.667 47.787 106.667 106.667v725.333c0 58.88-47.787 106.667-106.667 106.667zM490.667 21.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM682.667 192h-384v597.333h384v-597.333z" />
-<glyph unicode="&#xe7c7;" d="M170.667 704h768v85.333h-768c-47.147 0-85.333-38.187-85.333-85.333v-469.333h-85.333v-128h597.333v128h-426.667v469.333zM981.333 618.667h-256c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h256c23.467 0 42.667 19.2 42.667 42.667v426.667c0 23.467-19.2 42.667-42.667 42.667zM938.667 234.667h-170.667v298.667h170.667v-298.667z" />
-<glyph unicode="&#xe7c8;" d="M938.667 704v85.333h-647.68l85.333-85.333h562.347zM81.92 889.813l-54.4-54.4 77.44-77.44c-11.947-14.72-19.627-33.493-19.627-53.973v-469.333h-85.333v-128h756.48l100.48-100.48 54.187 54.4-829.227 829.227zM170.667 692.267l457.813-457.6h-457.813v457.6zM981.333 618.667h-256c-23.467 0-42.667-19.2-42.667-42.667v-178.347l85.333-85.333v221.013h170.667v-298.667h-93.013l128-128h7.68c23.467 0 42.667 19.2 42.667 42.667v426.667c0 23.467-19.2 42.667-42.667 42.667z" />
-<glyph unicode="&#xe7c9;" d="M512 917.333l-384-170.667v-256c0-237.013 163.627-458.027 384-512 220.373 53.973 384 274.987 384 512v256l-384 170.667zM512 448.427h298.667c-22.613-175.787-139.733-332.373-298.667-381.227v380.8h-298.667v243.2l298.667 132.693v-375.467z" />
-<glyph unicode="&#xe7ca;" d="M852.907 789.333c0 47.147-37.76 85.333-84.907 85.333h-341.333l-256-256v-512c0-47.147 38.187-85.333 85.333-85.333h512.427c47.147 0 84.907 38.187 84.907 85.333l-0.427 682.667zM384 149.333h-85.333v85.333h85.333v-85.333zM725.333 149.333h-85.333v85.333h85.333v-85.333zM384 320h-85.333v170.667h85.333v-170.667zM554.667 149.333h-85.333v170.667h85.333v-170.667zM554.667 405.333h-85.333v85.333h85.333v-85.333zM725.333 320h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe7cb;" d="M725.333 916.907l-426.667 0.427c-47.147 0-85.333-38.187-85.333-85.333v-768c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v768c0 47.147-38.187 84.907-85.333 84.907zM725.333 149.333h-426.667v597.333h426.667v-597.333z" />
-<glyph unicode="&#xe7cc;" d="M725.333 874.667h-426.667c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-84.907 85.333-84.907l426.667-0.427c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM512 789.333c47.147 0 85.333-38.187 85.333-85.333s-38.187-85.333-85.333-85.333-85.333 38.187-85.333 85.333 38.187 85.333 85.333 85.333zM512 106.667c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333zM512 448c-70.613 0-128-57.387-128-128s57.387-128 128-128 128 57.387 128 128-57.387 128-128 128z" />
-<glyph unicode="&#xe7cd;" d="M896 789.333h-768c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 84.907 38.187 84.907 85.333l0.427 512c0 47.147-38.187 85.333-85.333 85.333zM810.667 192h-597.333v512h597.333v-512z" />
-<glyph unicode="&#xe7ce;" d="M768 960h-512c-70.613 0-128-57.387-128-128v-768c0-70.613 57.387-128 128-128h512c70.613 0 128 57.387 128 128v768c0 70.613-57.387 128-128 128zM597.333 21.333h-170.667v42.667h170.667v-42.667zM821.333 149.333h-618.667v682.667h618.667v-682.667z" />
-<glyph unicode="&#xe7cf;" d="M789.333 960h-597.333c-58.88 0-106.667-47.787-106.667-106.667v-810.667c0-58.88 47.787-106.667 106.667-106.667h597.333c58.88 0 106.667 47.787 106.667 106.667v810.667c0 58.88-47.787 106.667-106.667 106.667zM490.667-21.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM810.667 149.333h-640v682.667h640v-682.667z" />
-<glyph unicode="&#xe7d0;" d="M896 832h-768c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h213.333v-85.333h341.333v85.333h213.333c47.147 0 84.907 38.187 84.907 85.333l0.427 512c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-768v512h768v-512z" />
-<glyph unicode="&#xe7d1;" d="M853.333 448c0 108.587-50.773 205.227-129.92 267.733l-40.747 244.267h-341.333l-40.747-244.267c-79.147-62.507-129.92-159.147-129.92-267.733s50.773-205.227 129.92-267.733l40.747-244.267h341.333l40.747 244.267c79.147 62.507 129.92 159.147 129.92 267.733zM256 448c0 141.44 114.56 256 256 256s256-114.56 256-256-114.56-256-256-256-256 114.56-256 256z" />
-<glyph unicode="&#xe7d2;" d="M170.667 704h-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM810.667 490.667h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
-<glyph unicode="&#xe7d3;" d="M512 874.667c-235.307 0-426.667-191.36-426.667-426.667s191.36-426.667 426.667-426.667 426.667 191.36 426.667 426.667-191.36 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333zM640 448c0-70.613-57.387-128-128-128s-128 57.387-128 128 57.387 128 128 128 128-57.387 128-128z" />
-<glyph unicode="&#xe7d4;" d="M614.4 704l-17.067 85.333h-384v-725.333h85.333v298.667h238.933l17.067-85.333h298.667v426.667z" />
-<glyph unicode="&#xe7d5;" d="M512 832v-395.733c-20.053 7.040-41.387 11.733-64 11.733-106.027 0-192-85.973-192-192s85.973-192 192-192c98.773 0 179.2 74.88 189.867 170.667h2.133v469.333h170.667v128h-298.667z" />
-<glyph unicode="&#xe7d6;" d="M426.667 576c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM426.667 405.333c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM298.667 554.667c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM426.667 256c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM298.667 384c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM426.667 640c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM597.333 576c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM597.333 640c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM725.333 384c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM725.333 554.667c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM597.333 256c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM597.333 405.333c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667z" />
-<glyph unicode="&#xe7d7;" d="M213.333 213.333c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM384 405.333c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM384 576c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM128 64h768v85.333h-768v-85.333zM213.333 554.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM213.333 384c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM384 234.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM725.333 256c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM128 832v-85.333h768v85.333h-768zM725.333 597.333c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM725.333 426.667c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM554.667 576c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM554.667 405.333c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM554.667 234.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667z" />
-<glyph unicode="&#xe7d8;" d="M597.333 661.333c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM588.8 470.187c2.773-0.427 5.547-0.853 8.533-0.853 35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64c0-2.987 0.427-5.76 0.853-8.747 3.84-28.16 26.24-50.56 54.613-54.4zM597.333 810.667c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM426.667 810.667c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM896 512c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM426.667 661.333c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM768 320c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM768 490.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM768 661.333c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM597.333 85.333c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM106.667 734.933l161.493-161.493c-4.053 1.28-7.893 2.56-12.16 2.56-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667c0 4.267-1.28 8.107-2.347 12.16l119.893-119.893c-30.507-5.12-53.547-31.147-53.547-62.933 0-35.413 28.587-64 64-64 31.787 0 57.813 23.040 62.933 53.333l119.893-119.893c-3.84 1.28-7.893 2.56-12.16 2.56-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667c0 4.267-1.28 8.107-2.347 12.16l161.28-161.493 54.4 54.4-692.267 692.267-54.4-54.4zM426.667 234.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM896 384c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM256 405.333c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM128 554.667c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM426.667 85.333c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM256 234.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM128 384c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333z" />
-<glyph unicode="&#xe7d9;" d="M256 405.333c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM256 234.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM256 576c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM128 554.667c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM256 746.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM896 512c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM597.333 661.333c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM597.333 810.667c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM128 384c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM426.667 85.333c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM426.667 810.667c11.733 0 21.333 9.6 21.333 21.333s-9.6 21.333-21.333 21.333-21.333-9.6-21.333-21.333 9.6-21.333 21.333-21.333zM426.667 661.333c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM426.667 426.667c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM768 405.333c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM768 234.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM768 576c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM768 746.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM896 384c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM597.333 234.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM597.333 85.333c-11.733 0-21.333-9.6-21.333-21.333s9.6-21.333 21.333-21.333 21.333 9.6 21.333 21.333-9.6 21.333-21.333 21.333zM426.667 597.333c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM426.667 234.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM597.333 426.667c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM597.333 597.333c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64z" />
-<glyph unicode="&#xe7da;" d="M938.667 448c0-235.641-191.025-426.667-426.667-426.667s-426.667 191.025-426.667 426.667c0 235.641 191.025 426.667 426.667 426.667s426.667-191.025 426.667-426.667z" />
-<glyph unicode="&#xe7db;" d="M426.667 874.667c-77.867 0-150.613-21.12-213.333-57.6 127.36-73.813 213.333-211.2 213.333-369.067s-85.973-295.253-213.333-369.067c62.72-36.48 135.467-57.6 213.333-57.6 235.733 0 426.667 190.933 426.667 426.667s-190.933 426.667-426.667 426.667z" />
-<glyph unicode="&#xe7dc;" d="M384 874.667c-44.587 0-87.68-6.827-128-19.627 173.013-54.4 298.667-216.107 298.667-407.040s-125.653-352.64-298.667-407.040c40.32-12.587 83.413-19.627 128-19.627 235.733 0 426.667 190.933 426.667 426.667s-190.933 426.667-426.667 426.667z" />
-<glyph unicode="&#xe7dd;" d="M853.333 589.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893l141.44 141.44-141.44 141.44zM512 192c-38.187 0-74.24 8.533-106.667 23.467 88.107 40.533 149.333 129.28 149.333 232.533s-61.227 192-149.333 232.533c32.427 14.933 68.48 23.467 106.667 23.467 141.44 0 256-114.56 256-256s-114.56-256-256-256z" />
-<glyph unicode="&#xe7de;" d="M853.333 306.56l141.44 141.44-141.44 141.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893zM512 192c-141.44 0-256 114.56-256 256s114.56 256 256 256 256-114.56 256-256-114.56-256-256-256z" />
-<glyph unicode="&#xe7df;" d="M853.333 306.56l141.44 141.44-141.44 141.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893zM512 192v512c141.44 0 256-114.56 256-256s-114.56-256-256-256z" />
-<glyph unicode="&#xe7e0;" d="M853.333 589.44v199.893h-199.893l-141.44 141.44-141.44-141.44h-199.893v-199.893l-141.44-141.44 141.44-141.44v-199.893h199.893l141.44-141.44 141.44 141.44h199.893v199.893l141.44 141.44-141.44 141.44zM512 192c-141.44 0-256 114.56-256 256s114.56 256 256 256 256-114.56 256-256-114.56-256-256-256zM512 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667z" />
-<glyph unicode="&#xe7e1;" d="M298.667 362.667c-70.613 0-128-57.387-128-128 0-55.893-49.28-85.333-85.333-85.333 39.253-52.053 106.453-85.333 170.667-85.333 94.293 0 170.667 76.373 170.667 170.667 0 70.613-57.387 128-128 128zM883.413 762.453l-56.96 56.96c-16.64 16.64-43.733 16.64-60.373 0l-382.080-382.080 117.333-117.333 382.080 382.080c16.853 16.853 16.853 43.733 0 60.373z" />
-<glyph unicode="&#xe7e2;" d="M401.067 512l203.307 352.213c-29.653 6.613-60.587 10.453-92.373 10.453-102.4 0-196.053-36.053-269.653-96.213l156.373-270.72 2.347 4.267zM919.040 576c-39.253 124.8-134.4 224.427-255.787 270.507l-156.16-270.507h411.947zM930.133 533.333h-319.573l12.373-21.333 203.307-352c69.547 75.947 112.427 176.853 112.427 288 0 29.227-2.987 57.813-8.533 85.333zM364.16 448l-166.4 288c-69.547-75.947-112.427-176.853-112.427-288 0-29.227 2.987-57.813 8.533-85.333h319.573l-49.28 85.333zM104.96 320c39.253-124.8 134.4-224.427 255.787-270.507l156.16 270.507h-411.947zM585.813 320l-166.4-288.213c29.867-6.613 60.8-10.453 92.587-10.453 102.4 0 196.053 36.053 269.653 96.213l-156.373 270.72-39.467-68.267z" />
-<glyph unicode="&#xe7e3;" d="M648.533 448c0-75.405-61.128-136.533-136.533-136.533s-136.533 61.128-136.533 136.533c0 75.405 61.128 136.533 136.533 136.533s136.533-61.128 136.533-136.533zM384 874.667l-78.080-85.333h-135.253c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333h-135.253l-78.080 85.333h-256zM512 234.667c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333z" />
-<glyph unicode="&#xe7e4;" d="M426.667 106.667h-213.333v-85.333h213.333v-85.333l128 128-128 128v-85.333zM597.333 106.667v-85.333h213.333v85.333h-213.333zM512 618.667c47.147 0 85.333 38.187 85.333 85.333s-38.187 85.333-85.333 85.333-85.12-38.187-85.12-85.333c0.213-47.147 37.973-85.333 85.12-85.333zM725.333 960h-426.667c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM298.667 874.667h426.667v-448c0 71.040-142.293 106.667-213.333 106.667s-213.333-35.627-213.333-106.667v448z" />
-<glyph unicode="&#xe7e5;" d="M426.667 106.667h-213.333v-85.333h213.333v-85.333l128 128-128 128v-85.333zM597.333 106.667v-85.333h213.333v85.333h-213.333zM725.333 960h-426.667c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM511.787 704c-47.147 0-85.12 38.187-85.12 85.333s37.973 85.333 85.12 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe7e6;" d="M597.333 746.667c0 47.147-38.187 85.333-85.333 85.333h-42.667v42.667c0 23.467-19.2 42.667-42.667 42.667h-170.667c-23.467 0-42.667-19.2-42.667-42.667v-42.667h-42.667c-47.147 0-85.333-38.187-85.333-85.333v-640c0-47.147 38.187-85.333 85.333-85.333h341.333c47.147 0 85.333 38.187 85.333 85.333h341.333v640h-341.333zM512 192h-85.333v85.333h85.333v-85.333zM512 576h-85.333v85.333h85.333v-85.333zM682.667 192h-85.333v85.333h85.333v-85.333zM682.667 576h-85.333v85.333h85.333v-85.333zM853.333 192h-85.333v85.333h85.333v-85.333zM853.333 576h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe7e7;" d="M512 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM213.333 320h-85.333v-170.667c0-47.147 38.187-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM213.333 746.667h170.667v85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-170.667h85.333v170.667zM810.667 832h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333v170.667h-85.333v-170.667z" />
-<glyph unicode="&#xe7e8;" d="M213.333 320h-85.333v-170.667c0-47.147 38.187-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM213.333 746.667h170.667v85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-170.667h85.333v170.667zM810.667 832h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333v170.667h-85.333v-170.667zM512 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM512 362.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe7e9;" d="M938.667 277.333v512c0 47.147-38.187 85.333-85.333 85.333h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333zM469.333 448l86.613-115.627 126.72 158.293 170.667-213.333h-512l128 170.667zM85.333 704v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333h-85.333z" />
-<glyph unicode="&#xe7ea;" d="M883.413 719.787l-99.627 99.627c-16.64 16.64-43.733 16.64-60.373 0l-133.333-133.333-81.707 81.92-60.373-60.373 60.587-60.587-380.587-380.373v-202.667h202.667l380.587 380.587 60.373-60.587 60.373 60.373-81.92 81.92 133.333 133.333c16.853 16.64 16.853 43.52 0 60.16zM295.253 149.333l-81.92 81.92 344.107 344.107 81.92-81.92-344.107-344.107z" />
-<glyph unicode="&#xe7eb;" d="M512 832c-212.053 0-384-171.947-384-384s171.947-384 384-384c35.413 0 64 28.587 64 64 0 16.64-6.187 31.573-16.64 42.88-10.027 11.307-16 26.027-16 42.453 0 35.413 28.587 64 64 64h75.307c117.76 0 213.333 95.573 213.333 213.333 0 188.587-171.947 341.333-384 341.333zM277.333 448c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM405.333 618.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM618.667 618.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 448c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
-<glyph unicode="&#xe7ec;" d="M426.667 832h-213.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h213.333v-85.333h85.333v938.667h-85.333v-85.333zM426.667 192h-213.333l213.333 256v-256zM810.667 832h-213.333v-85.333h213.333v-554.667l-213.333 256v-384h213.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe7ed;" d="M554.667 661.333h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM512 874.667c-235.307 0-426.667-191.36-426.667-426.667s191.36-426.667 426.667-426.667 426.667 191.36 426.667 426.667-191.36 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
-<glyph unicode="&#xe7ee;" d="M682.667 618.667h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128zM85.333 448c0 119.040 70.187 221.653 171.093 269.653v91.947c-149.12-52.48-256.427-194.56-256.427-361.6s107.307-309.12 256.427-361.6v91.947c-100.907 48-171.093 150.613-171.093 269.653zM640 832c-211.84 0-384-172.16-384-384s172.16-384 384-384 384 172.16 384 384-172.16 384-384 384zM640 149.333c-164.693 0-298.667 133.973-298.667 298.667s133.973 298.667 298.667 298.667 298.667-133.973 298.667-298.667-133.973-298.667-298.667-298.667z" />
-<glyph unicode="&#xe7ef;" d="M725.333 320h85.333v341.333c0 47.147-38.187 85.333-85.333 85.333h-341.333v-85.333h341.333v-341.333zM298.667 234.667v682.667h-85.333v-170.667h-170.667v-85.333h170.667v-426.667c0-47.147 38.187-85.333 85.333-85.333h426.667v-170.667h85.333v170.667h170.667v85.333h-682.667z" />
-<glyph unicode="&#xe7f0;" d="M810.667 789.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM810.667 192h-597.333v512h597.333v-512z" />
-<glyph unicode="&#xe7f1;" d="M810.667 746.667h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 234.667h-597.333v426.667h597.333v-426.667z" />
-<glyph unicode="&#xe7f2;" d="M810.667 661.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-256c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v256c0 47.147-38.187 85.333-85.333 85.333zM810.667 320h-597.333v256h597.333v-256z" />
-<glyph unicode="&#xe7f3;" d="M810.667 704h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-341.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v341.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 277.333h-597.333v341.333h597.333v-341.333z" />
-<glyph unicode="&#xe7f4;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v597.333h597.333v-597.333z" />
-<glyph unicode="&#xe7f5;" d="M128 746.667v-170.667h85.333v170.667h170.667v85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333zM213.333 320h-85.333v-170.667c0-47.147 38.187-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM810.667 149.333h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333v170.667h-85.333v-170.667zM810.667 832h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe7f6;" d="M810.667 746.667h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-426.667c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 234.667h-597.333v426.667h597.333v-426.667z" />
-<glyph unicode="&#xe7f7;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v597.333h597.333v-597.333zM595.84 435.84l-117.333-151.040-83.84 100.693-117.333-150.827h469.333l-150.827 201.173z" />
-<glyph unicode="&#xe7f8;" d="M725.333 832h-426.667c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM725.333 149.333h-426.667v597.333h426.667v-597.333z" />
-<glyph unicode="&#xe7f9;" d="M768 789.333h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM768 192h-512v512h512v-512z" />
-<glyph unicode="&#xe7fa;" d="M85.333 298.667v-85.333h853.333v85.333h-853.333zM85.333 512v-85.333h853.333v85.333h-853.333zM85.333 725.333v-85.333h853.333v85.333h-853.333z" />
-<glyph unicode="&#xe7fb;" d="M128 789.333l384-682.667 384 682.667h-768zM272 704h480l-240-426.667-240 426.667z" />
-<glyph unicode="&#xe7fc;" d="M128 224v-160h160l472.107 472.107-160 160-472.107-472.107zM883.413 659.413c16.64 16.64 16.64 43.733 0 60.373l-99.627 99.627c-16.64 16.64-43.733 16.64-60.373 0l-78.080-78.080 160-160 78.080 78.080z" />
-<glyph unicode="&#xe7fd;" d="M640 234.667v-85.333h85.333v85.333h85.333v85.333h-85.333v85.333h-85.333v-85.333h-85.333v-85.333h85.333zM853.333 874.667h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM213.333 746.667h256v-85.333h-256v85.333zM853.333 106.667h-682.667l682.667 682.667v-682.667z" />
-<glyph unicode="&#xe7fe;" d="M170.667 490.667v-85.333h341.333v85.333h-341.333zM810.667 192h-85.333v453.333l-128-43.733v72.533l200.533 72.533h12.8v-554.667z" />
-<glyph unicode="&#xe7ff;" d="M641.92 264.96l122.24 130.773c16 16.853 30.72 33.493 44.373 50.133 13.44 16.64 25.173 33.28 34.987 49.707 9.813 16.64 17.493 33.067 22.827 49.707 5.547 16.64 8.32 33.493 8.32 50.56 0 22.827-3.84 43.52-11.52 62.293-7.68 18.56-18.773 34.56-33.493 47.573s-32.64 23.040-53.973 30.293c-21.333 7.040-45.653 10.667-72.96 10.667-29.44 0-55.893-4.48-78.933-13.653s-42.453-21.547-58.24-37.333-27.733-34.347-35.84-55.467c-7.68-20.053-11.52-41.6-11.947-64.213h91.307c0.213 13.227 1.92 25.813 5.547 37.12 3.84 12.373 9.6 23.040 17.28 32s17.28 15.787 28.8 20.907c11.733 4.907 25.387 7.467 41.173 7.467 13.013 0 24.533-2.133 34.56-6.613s18.56-10.453 25.387-18.133c6.827-7.68 12.16-17.067 15.787-27.52 3.627-10.667 5.333-22.187 5.333-34.773 0-9.173-1.28-18.56-3.627-27.733s-6.4-19.2-12.373-29.867c-5.973-10.667-13.867-22.4-23.68-35.413-9.813-12.8-22.4-27.52-37.333-44.16l-178.133-194.347v-62.933h368.213v72.96h-254.080zM85.333 490.667v-85.333h341.333v85.333h-341.333z" />
-<glyph unicode="&#xe800;" d="M426.667 661.333h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM853.333 192h-85.333v453.333l-128-43.733v72.533l200.533 72.533h12.8v-554.667z" />
-<glyph unicode="&#xe801;" d="M684.587 264.96l122.24 130.773c16 16.853 30.72 33.493 44.373 50.133 13.44 16.64 25.173 33.28 34.987 49.707 9.813 16.64 17.493 33.067 22.827 49.707 5.547 16.64 8.32 33.493 8.32 50.56 0 22.827-3.84 43.52-11.52 62.293-7.68 18.56-18.773 34.56-33.493 47.573s-32.64 23.040-53.973 30.293c-21.333 7.040-45.653 10.667-72.96 10.667-29.44 0-55.893-4.48-78.933-13.653s-42.453-21.547-58.24-37.333-27.733-34.347-35.84-55.467c-7.68-20.053-11.52-41.6-11.947-64.213h91.307c0.213 13.227 1.92 25.813 5.547 37.12 3.84 12.373 9.6 23.040 17.28 32s17.28 15.787 28.8 20.907c11.733 4.907 25.387 7.467 41.173 7.467 13.013 0 24.533-2.133 34.56-6.613s18.56-10.453 25.387-18.133c6.827-7.68 12.16-17.067 15.787-27.52 3.627-10.667 5.333-22.187 5.333-34.773 0-9.173-1.28-18.56-3.627-27.733s-6.4-19.2-12.373-29.867c-5.973-10.667-13.867-22.4-23.68-35.413-9.813-12.8-22.4-27.52-37.333-44.16l-178.133-194.347v-62.933h368.213v72.96h-254.080zM341.333 661.333h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667z" />
-<glyph unicode="&#xe802;" d="M688.64 426.667c0-42.667-4.267-78.933-12.587-108.8s-20.267-53.973-35.627-72.747c-15.36-18.56-33.92-32.213-55.467-40.533s-45.653-12.587-72.32-12.587c-26.453 0-50.56 4.267-72.32 12.587s-40.32 21.973-55.893 40.533c-15.573 18.56-27.733 42.88-36.053 72.747-8.533 29.867-12.8 66.133-12.8 108.8v87.040c0 42.667 4.267 78.933 12.587 108.587s20.267 53.76 35.84 72.107c15.36 18.347 33.92 31.787 55.68 39.893s45.867 12.16 72.32 12.16c26.667 0 50.987-4.053 72.747-12.16s40.32-21.547 55.893-39.893c15.36-18.347 27.307-42.453 35.84-72.107 8.32-29.653 12.587-65.92 12.587-108.587v-87.040zM598.613 527.573c0 27.52-1.92 50.56-5.76 69.12s-9.387 33.707-16.853 45.227c-7.467 11.52-16.427 19.84-27.307 24.747-10.667 5.12-23.040 7.68-36.907 7.68s-26.24-2.56-36.907-7.68c-10.88-5.12-19.84-13.44-27.307-24.747-7.467-11.52-13.013-26.667-16.853-45.227s-5.76-41.813-5.76-69.12v-113.92c0-27.093 1.92-50.347 5.973-69.333s9.6-34.56 17.067-46.293c7.467-11.947 16.64-20.48 27.52-26.027 10.88-5.333 23.253-8.107 37.12-8.107 14.080 0 26.453 2.773 37.12 8.107s19.627 14.080 26.88 26.027c7.253 11.947 12.8 27.307 16.427 46.293s5.547 42.24 5.547 69.333v113.92z" />
-<glyph unicode="&#xe803;" d="M681.173 521.173l-117.333-151.040-83.84 100.693-117.333-150.827h469.333l-150.827 201.173zM128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333z" />
-<glyph unicode="&#xe804;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM597.333 320h85.333v426.667h-170.667v-85.333h85.333v-341.333zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333z" />
-<glyph unicode="&#xe805;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333zM725.333 405.333h-170.667v85.333h85.333c47.147 0 85.333 38.187 85.333 85.333v85.333c0 47.147-38.187 85.333-85.333 85.333h-170.667v-85.333h170.667v-85.333h-85.333c-47.147 0-85.333-38.187-85.333-85.333v-170.667h256v85.333z" />
-<glyph unicode="&#xe806;" d="M896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333zM128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM725.333 405.333v64c0 35.413-28.587 64-64 64 35.413 0 64 28.587 64 64v64c0 47.147-38.187 85.333-85.333 85.333h-170.667v-85.333h170.667v-85.333h-85.333v-85.333h85.333v-85.333h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333z" />
-<glyph unicode="&#xe807;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM640 320h85.333v426.667h-85.333v-170.667h-85.333v170.667h-85.333v-256h170.667v-170.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333z" />
-<glyph unicode="&#xe808;" d="M896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333zM128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM725.333 405.333v85.333c0 47.147-38.187 85.333-85.333 85.333h-85.333v85.333h170.667v85.333h-256v-256h170.667v-85.333h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333z" />
-<glyph unicode="&#xe809;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333zM554.667 320h85.333c47.147 0 85.333 38.187 85.333 85.333v85.333c0 47.147-38.187 85.333-85.333 85.333h-85.333v85.333h170.667v85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-256c0-47.147 38.187-85.333 85.333-85.333zM554.667 490.667h85.333v-85.333h-85.333v85.333z" />
-<glyph unicode="&#xe80a;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333zM554.667 320l170.667 341.333v85.333h-256v-85.333h170.667l-170.667-341.333h85.333z" />
-<glyph unicode="&#xe80b;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333zM554.667 320h85.333c47.147 0 85.333 38.187 85.333 85.333v64c0 35.413-28.587 64-64 64 35.413 0 64 28.587 64 64v64c0 47.147-38.187 85.333-85.333 85.333h-85.333c-47.147 0-85.333-38.187-85.333-85.333v-64c0-35.413 28.587-64 64-64-35.413 0-64-28.587-64-64v-64c0-47.147 38.187-85.333 85.333-85.333zM554.667 661.333h85.333v-85.333h-85.333v85.333zM554.667 490.667h85.333v-85.333h-85.333v85.333z" />
-<glyph unicode="&#xe80c;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333zM640 746.667h-85.333c-47.147 0-85.333-38.187-85.333-85.333v-85.333c0-47.147 38.187-85.333 85.333-85.333h85.333v-85.333h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333v256c0 47.147-38.187 85.333-85.333 85.333zM640 576h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe80d;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM597.333 448v170.667c0 47.147-38.187 85.333-85.333 85.333h-42.667c-47.147 0-85.333-38.187-85.333-85.333v-42.667c0-47.147 38.187-85.333 85.333-85.333h42.667v-42.667h-128v-85.333h128c47.147 0 85.333 38.187 85.333 85.333zM469.333 576v42.667h42.667v-42.667h-42.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 576h-85.333v85.333h-85.333v-85.333h-85.333v-85.333h85.333v-85.333h85.333v85.333h85.333v-256h-597.333v597.333h597.333v-256z" />
-<glyph unicode="&#xe80e;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333l-298.667 341.333v-341.333h-298.667l298.667 341.333v256h298.667v-597.333z" />
-<glyph unicode="&#xe80f;" d="M213.333 320h-85.333v-170.667c0-47.147 38.187-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM213.333 746.667h170.667v85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-170.667h85.333v170.667zM810.667 832h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-170.667v-85.333h170.667c47.147 0 85.333 38.187 85.333 85.333v170.667h-85.333v-170.667zM512 576c-70.613 0-128-57.387-128-128s57.387-128 128-128 128 57.387 128 128-57.387 128-128 128z" />
-<glyph unicode="&#xe810;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-229.973-69.973-283.52-172.16-128.427-13.653-228.48-122.453-228.48-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.187 211.84zM810.667 192h-554.667c-94.080 0-170.667 76.587-170.667 170.667s76.587 170.667 170.667 170.667 170.667-76.587 170.667-170.667h85.333c0 117.76-79.573 216.533-187.733 246.4 42.88 57.387 110.933 94.933 187.733 94.933 129.493 0 234.667-105.173 234.667-234.667v-21.333h64c70.613 0 128-57.387 128-128s-57.387-128-128-128z" />
-<glyph unicode="&#xe811;" d="M853.333 789.333h-170.667l-170.667 170.667-170.667-170.667h-170.667c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM853.333 106.667h-682.667v597.333h192.64l150.187 149.333 148.48-149.333h191.36v-597.333zM768 618.667h-512v-426.667h512z" />
-<glyph unicode="&#xe812;" d="M597.333 704l-160-213.333 121.6-162.133-68.267-51.2c-72.107 96-192 256-192 256l-256-341.333h938.667l-384 512z" />
-<glyph unicode="&#xe813;" d="M128 746.667h-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 917.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM896 234.667h-597.333v597.333h597.333v-597.333z" />
-<glyph unicode="&#xe814;" d="M469.333 786.347v86.187c-85.76-8.533-163.84-42.667-227.2-94.293l60.8-60.8c47.36 36.48 104.107 61.227 166.4 68.907zM781.867 778.24c-63.147 51.627-141.44 85.76-227.2 94.293v-86.187c62.293-7.893 119.040-32.427 166.4-69.12l60.8 61.013zM850.347 490.667h86.187c-8.533 85.76-42.667 163.84-94.293 227.2l-60.8-60.8c36.48-47.36 61.227-104.107 68.907-166.4zM242.773 657.067l-60.8 60.8c-51.84-63.36-85.973-141.44-94.507-227.2h86.187c7.893 62.293 32.427 119.040 69.12 166.4zM173.653 405.333h-86.187c8.533-85.76 42.667-163.84 94.293-227.2l60.8 60.8c-36.48 47.36-61.013 104.32-68.907 166.4zM640 448c0 70.613-57.387 128-128 128s-128-57.387-128-128 57.387-128 128-128 128 57.387 128 128zM781.227 239.147l60.8-60.8c51.84 63.147 85.973 141.227 94.507 226.987h-86.187c-7.68-62.080-32.427-119.040-69.12-166.187zM554.667 109.653v-86.187c85.76 8.533 163.84 42.667 227.2 94.293l-60.8 60.8c-47.36-36.48-104.107-61.013-166.4-68.907zM242.133 117.76c63.36-51.627 141.44-85.76 227.2-94.293v86.187c-62.293 7.893-119.040 32.427-166.4 69.12l-60.8-61.013z" />
-<glyph unicode="&#xe815;" d="M797.653 430.933c-11.947 6.827-24.32 12.373-36.693 17.067 12.373 4.693 24.747 10.24 36.693 17.067 81.92 47.36 127.573 133.333 127.787 221.653-76.587 43.947-173.867 47.36-255.787 0-11.947-6.827-22.827-14.72-33.28-23.253 2.133 13.44 3.627 26.667 3.627 40.533 0 94.72-51.627 177.28-128 221.44-76.373-44.16-128-126.72-128-221.44 0-13.867 1.28-27.093 3.413-40.32-10.453 8.32-21.333 16.213-33.28 23.253-81.92 47.36-179.2 43.947-255.787 0 0.213-88.32 45.867-174.293 127.787-221.653 11.947-6.827 24.32-12.373 36.693-17.067-12.373-4.693-24.747-10.24-36.693-17.067-81.92-47.36-127.573-133.333-127.787-221.653 76.587-43.947 173.867-47.36 255.787 0 11.947 6.827 22.827 14.72 33.28 23.253-1.92-13.653-3.413-26.88-3.413-40.747 0-94.72 51.627-177.28 128-221.44 76.373 44.373 128 126.72 128 221.44 0 13.867-1.493 27.093-3.413 40.32 10.453-8.32 21.333-16.213 33.28-23.253 81.92-47.36 179.2-43.947 255.787 0-0.213 88.533-45.867 174.507-128 221.867zM512 277.333c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667 170.667-76.373 170.667-170.667-76.373-170.667-170.667-170.667z" />
-<glyph unicode="&#xe816;" d="M298.667 490.667h-256v-85.333h256v85.333zM391.253 629.12l-90.453 90.453-60.373-60.373 90.453-90.453 60.373 60.373zM554.667 917.333h-85.333v-256h85.333v256zM783.573 659.2l-60.373 60.373-90.453-90.453 60.373-60.373 90.453 90.453zM725.333 490.667v-85.333h256v85.333h-256zM512 576c-70.613 0-128-57.387-128-128s57.387-128 128-128 128 57.387 128 128-57.387 128-128 128zM632.747 266.88l90.453-90.453 60.373 60.373-90.453 90.453-60.373-60.373zM240.427 236.8l60.373-60.373 90.453 90.453-60.373 60.373-90.453-90.453zM469.333-21.333h85.333v256h-85.333v-256z" />
-<glyph unicode="&#xe817;" d="M128 874.667v-512h128v-384l298.667 512h-170.667l170.667 384h-426.667zM810.667 874.667h-85.333l-136.533-384h81.067l29.867 85.333h136.533l29.867-85.333h81.067l-136.533 384zM718.933 633.6l49.067 155.733 49.067-155.733h-98.133z" />
-<glyph unicode="&#xe818;" d="M139.733 832l-54.4-54.4 213.333-213.333v-158.933h128v-384l152.96 262.187 176.64-176.853 54.4 54.187-670.933 671.147zM725.333 533.333h-170.667l170.667 341.333h-426.667v-93.013l360.96-360.96 65.707 112.64z" />
-<glyph unicode="&#xe819;" d="M298.667 874.667v-469.333h128v-384l298.667 512h-170.667l170.667 341.333z" />
-<glyph unicode="&#xe81a;" d="M640 64h85.333v85.333h-85.333v-85.333zM810.667 576h85.333v85.333h-85.333v-85.333zM128 746.667v-597.333c0-47.147 38.187-85.333 85.333-85.333h170.667v85.333h-170.667v597.333h170.667v85.333h-170.667c-47.147 0-85.333-38.187-85.333-85.333zM810.667 832v-85.333h85.333c0 47.147-38.187 85.333-85.333 85.333zM469.333-21.333h85.333v938.667h-85.333v-938.667zM810.667 234.667h85.333v85.333h-85.333v-85.333zM640 746.667h85.333v85.333h-85.333v-85.333zM810.667 405.333h85.333v85.333h-85.333v-85.333zM810.667 64c47.147 0 85.333 38.187 85.333 85.333h-85.333v-85.333z" />
-<glyph unicode="&#xe81b;" d="M469.333 576h85.333v-85.333h-85.333zM384 490.667h85.333v-85.333h-85.333zM554.667 490.667h85.333v-85.333h-85.333zM640 576h85.333v-85.333h-85.333zM298.667 576h85.333v-85.333h-85.333zM810.667 832h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM384 192h-85.333v85.333h85.333v-85.333zM554.667 192h-85.333v85.333h85.333v-85.333zM725.333 192h-85.333v85.333h85.333v-85.333zM810.667 490.667h-85.333v-85.333h85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h85.333v85.333h-85.333v256h597.333v-256z" />
-<glyph unicode="&#xe81c;" d="M426.667 448c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM256 618.667c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM256 277.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 618.667c47.147 0 85.333 38.187 85.333 85.333s-38.187 85.333-85.333 85.333-85.333-38.187-85.333-85.333 38.187-85.333 85.333-85.333zM597.333 277.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 448c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM597.333 618.667c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM426.667 789.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe81d;" d="M341.333 789.333v-62.080l85.333-85.333v147.413h170.667v-170.667h-147.413l85.333-85.333h62.080v-62.080l85.333-85.333v147.413h170.667v-170.667h-147.413l85.333-85.333h62.080v-62.080l85.333-85.333v659.413c0 47.147-38.187 85.333-85.333 85.333h-659.413l85.333-85.333h62.080zM682.667 789.333h170.667v-170.667h-170.667v170.667zM54.4 905.6l-54.4-54.187 85.333-85.333v-659.413c0-47.147 38.187-85.333 85.333-85.333h659.413l85.333-85.333 54.187 54.4-915.2 915.2zM426.667 424.747l62.080-62.080h-62.080v62.080zM170.667 680.747l62.080-62.080h-62.080v62.080zM341.333 106.667h-170.667v170.667h170.667v-170.667zM341.333 362.667h-170.667v170.667h147.413l23.253-23.253v-147.413zM597.333 106.667h-170.667v170.667h147.413l23.253-23.253v-147.413zM682.667 106.667v62.080l62.080-62.080h-62.080z" />
-<glyph unicode="&#xe81e;" d="M853.333 874.667h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM341.333 106.667h-170.667v170.667h170.667v-170.667zM341.333 362.667h-170.667v170.667h170.667v-170.667zM341.333 618.667h-170.667v170.667h170.667v-170.667zM597.333 106.667h-170.667v170.667h170.667v-170.667zM597.333 362.667h-170.667v170.667h170.667v-170.667zM597.333 618.667h-170.667v170.667h170.667v-170.667zM853.333 106.667h-170.667v170.667h170.667v-170.667zM853.333 362.667h-170.667v170.667h170.667v-170.667zM853.333 618.667h-170.667v170.667h170.667v-170.667z" />
-<glyph unicode="&#xe81f;" d="M768 234.667l-628.48 628.267-54.187-54.187 170.667-170.667v-147.413h-85.333v170.667h-85.333v-426.667h85.333v170.667h85.333v-170.667h85.333v318.080l42.667-42.667v-275.413h170.667c28.587 0 53.547 14.080 69.12 35.627l270.293-270.293 54.187 54.4-180.267 180.267zM554.667 320h-85.333v104.747l85.333-85.333v-19.413zM768 405.333h42.667l34.987-139.52 30.933-31.147h62.080l-50.773 178.133c29.867 13.227 50.773 43.093 50.773 77.867v85.333c0 47.147-38.187 85.333-85.333 85.333h-170.667v-232.747l85.333-85.333v62.080zM768 576h85.333v-85.333h-85.333v85.333zM640 471.253v104.747c0 47.147-38.187 85.333-85.333 85.333h-104.747l190.080-190.080z" />
-<glyph unicode="&#xe820;" d="M256 490.667h-85.333v170.667h-85.333v-426.667h85.333v170.667h85.333v-170.667h85.333v426.667h-85.333v-170.667zM554.667 661.333h-170.667v-426.667h170.667c47.147 0 85.333 38.187 85.333 85.333v256c0 47.147-38.187 85.333-85.333 85.333zM554.667 320h-85.333v256h85.333v-256zM938.667 490.667v85.333c0 47.147-38.187 85.333-85.333 85.333h-170.667v-426.667h85.333v170.667h42.667l42.667-170.667h85.333l-50.773 178.133c29.867 13.227 50.773 43.093 50.773 77.867zM853.333 490.667h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe821;" d="M725.333 704c-141.44 0-256-114.56-256-256s114.56-256 256-256 256 114.56 256 256-114.56 256-256 256zM213.333 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM213.333 362.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe822;" d="M213.333 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM725.333 704c-141.44 0-256-114.56-256-256s114.56-256 256-256 256 114.56 256 256-114.56 256-256 256zM725.333 277.333c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667 170.667-76.373 170.667-170.667-76.373-170.667-170.667-170.667z" />
-<glyph unicode="&#xe823;" d="M756.48 447.147l169.813 169.813c16.64 16.64 16.64 43.733 0 60.373l-184.96 184.96c-16.64 16.64-43.733 16.64-60.373 0l-169.813-169.813-169.813 169.6c-8.32 8.32-19.2 12.587-30.080 12.587s-21.76-4.267-30.080-12.587l-185.173-184.96c-16.64-16.64-16.64-43.733 0-60.373l169.813-169.813-169.813-169.6c-16.64-16.64-16.64-43.733 0-60.373l184.96-184.96c16.64-16.64 43.733-16.64 60.373 0l169.813 169.813 169.813-169.813c8.32-8.32 19.2-12.587 30.080-12.587s21.76 4.267 30.080 12.587l184.96 184.96c16.64 16.64 16.64 43.733 0 60.373l-169.6 169.813zM512 576c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM311.040 492.373l-154.667 154.667 154.88 154.88 154.667-154.667-154.88-154.88zM426.667 405.333c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM512 320c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM597.333 490.667c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM711.040 92.373l-154.667 154.667 154.88 154.88 154.667-154.667-154.88-154.88z" />
-<glyph unicode="&#xe824;" d="M896 149.333v597.333c0 47.147-38.187 85.333-85.333 85.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333zM362.667 384l106.667-128.213 149.333 192.213 192-256h-597.333l149.333 192z" />
-<glyph unicode="&#xe825;" d="M682.667 533.333h-85.333v-85.333h85.333v85.333zM682.667 362.667h-85.333v-85.333h85.333v85.333zM341.333 533.333h-85.333v-85.333h85.333v85.333zM512 533.333h-85.333v-85.333h85.333v85.333zM853.333 789.333h-682.667c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 192h-682.667v512h682.667v-512z" />
-<glyph unicode="&#xe826;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM234.667 640h85.333v85.333h64v-85.333h85.333v-64h-85.333v-85.333h-64v85.333h-85.333v64zM810.667 149.333h-597.333l597.333 597.333v-597.333zM725.333 234.667v64h-213.333v-64h213.333z" />
-<glyph unicode="&#xe827;" d="M597.333 704l-160-213.333 121.6-162.133-68.267-51.2c-72.107 96-192 256-192 256l-256-341.333h938.667l-384 512z" />
-<glyph unicode="&#xe828;" d="M256 832h-128v-128c70.613 0 128 57.387 128 128zM597.333 832h-85.333c0-212.053-171.947-384-384-384v-85.333c259.2 0 469.333 210.133 469.333 469.333zM426.667 832h-85.333c0-117.76-95.573-213.333-213.333-213.333v-85.333c164.907 0 298.667 133.76 298.667 298.667zM426.667 64h85.333c0 212.053 171.947 384 384 384v85.333c-259.2 0-469.333-210.133-469.333-469.333zM768 64h128v128c-70.613 0-128-57.387-128-128zM597.333 64h85.333c0 117.76 95.573 213.333 213.333 213.333v85.333c-164.907 0-298.667-133.76-298.667-298.667z" />
-<glyph unicode="&#xe829;" d="M426.667 832h-85.333c0-15.573-1.92-30.72-5.12-45.44l68.053-68.053c14.293 35.2 22.4 73.387 22.4 113.493zM128 777.6l121.173-121.173c-34.56-23.68-76.16-37.76-121.173-37.76v-85.333c68.693 0 131.627 23.467 181.973 62.293l60.8-60.8c-65.92-54.187-150.613-86.827-242.773-86.827v-85.333c115.84 0 221.653 42.027 303.36 111.573l106.88-106.88c-69.547-81.707-111.573-187.52-111.573-303.36h85.333c0 92.16 32.64 176.853 86.827 242.987l60.8-60.8c-38.827-50.56-62.293-113.493-62.293-182.187h85.333c0 45.013 14.080 86.613 37.973 121.173l121.173-121.173 54.187 54.4-713.6 713.6-54.4-54.4zM597.333 832h-85.333c0-64-16-124.373-43.733-177.493l62.507-62.507c42.027 70.4 66.56 152.107 66.56 240zM850.56 272.213c14.72 3.2 29.867 5.12 45.44 5.12v85.333c-40.107 0-78.293-8.107-113.28-22.4l67.84-68.053zM656 466.773l62.507-62.507c53.12 27.733 113.493 43.733 177.493 43.733v85.333c-87.893 0-169.6-24.533-240-66.56z" />
-<glyph unicode="&#xe82a;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667z" />
-<glyph unicode="&#xe82b;" d="M512 533.333c-164.693 0-298.667-133.973-298.667-298.667h85.333c0 117.547 95.787 213.333 213.333 213.333s213.333-95.787 213.333-213.333h85.333c0 164.693-133.973 298.667-298.667 298.667zM512 704c-258.773 0-469.333-210.56-469.333-469.333h85.333c0 211.627 172.373 384 384 384s384-172.373 384-384h85.333c0 258.773-210.56 469.333-469.333 469.333z" />
-<glyph unicode="&#xe82c;" d="M810.88 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM640.213 512c0-35.413-28.587-64-64-64 35.413 0 64-28.587 64-64v-64c0-47.147-38.187-85.333-85.333-85.333h-170.667v85.333h170.667v85.333h-85.333v85.333h85.333v85.333h-170.667v85.333h170.667c47.147 0 85.333-38.187 85.333-85.333v-64z" />
-<glyph unicode="&#xe82d;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM640 234.667h-85.333v170.667h-170.667v256h85.333v-170.667h85.333v170.667h85.333v-426.667z" />
-<glyph unicode="&#xe82e;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM640 576h-170.667v-85.333h85.333c47.147 0 85.333-38.187 85.333-85.333v-85.333c0-47.147-38.187-85.333-85.333-85.333h-170.667v85.333h170.667v85.333h-170.667v256h256v-85.333z" />
-<glyph unicode="&#xe82f;" d="M469.333 320h85.333v85.333h-85.333v-85.333zM810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM640 576h-170.667v-85.333h85.333c47.147 0 85.333-38.187 85.333-85.333v-85.333c0-47.147-38.187-85.333-85.333-85.333h-85.333c-47.147 0-85.333 38.187-85.333 85.333v256c0 47.147 38.187 85.333 85.333 85.333h170.667v-85.333z" />
-<glyph unicode="&#xe830;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM597.333 234.667h-85.333v341.333h-85.333v85.333h170.667v-426.667z" />
-<glyph unicode="&#xe831;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM640 490.667c0-47.147-38.187-85.333-85.333-85.333h-85.333v-85.333h170.667v-85.333h-256v170.667c0 47.147 38.187 85.333 85.333 85.333h85.333v85.333h-170.667v85.333h170.667c47.147 0 85.333-38.187 85.333-85.333v-85.333z" />
-<glyph unicode="&#xe832;" d="M554.667 661.333h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM512 874.667c-235.307 0-426.667-191.36-426.667-426.667s191.36-426.667 426.667-426.667h341.333c47.147 0 85.333 38.187 85.333 85.333v341.333c0 235.307-191.36 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
-<glyph unicode="&#xe833;" d="M768 789.333l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v597.333h-170.667z" />
-<glyph unicode="&#xe834;" d="M554.667 272.213c148.267 17.493 263.253 143.36 263.253 296.32 0 164.907-133.76 298.667-298.667 298.667s-298.667-133.76-298.667-298.667c0-147.84 107.52-270.293 248.747-294.187v-167.68h-256v-85.333h597.333v85.333h-256v165.547z" />
-<glyph unicode="&#xe835;" d="M945.92 568.747c0 164.907-133.76 298.667-298.667 298.667s-298.667-133.76-298.667-298.667c0-147.84 107.52-270.293 248.747-294.187v-167.893h-341.333v128h42.667v170.667c0 23.467-19.2 42.667-42.667 42.667h-128c-23.467 0-42.667-19.2-42.667-42.667v-170.667h42.667v-213.333h682.667v85.333h-128v165.547c148.267 17.493 263.253 143.573 263.253 296.533zM192 490.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64z" />
-<glyph unicode="&#xe836;" d="M657.707 643.627l-60.373 60.373-256-256 256-256 60.373 60.373-195.627 195.627z" />
-<glyph unicode="&#xe837;" d="M426.667 704l-60.373-60.373 195.627-195.627-195.627-195.627 60.373-60.373 256 256z" />
-<glyph unicode="&#xe838;" d="M512 832c-212.053 0-384-171.947-384-384s171.947-384 384-384c35.413 0 64 28.587 64 64 0 16.64-6.187 31.573-16.64 42.88-10.027 11.307-16 26.027-16 42.453 0 35.413 28.587 64 64 64h75.307c117.76 0 213.333 95.573 213.333 213.333 0 188.587-171.947 341.333-384 341.333zM277.333 448c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM405.333 618.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM618.667 618.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 448c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
-<glyph unicode="&#xe839;" d="M981.333 192v512c0 47.147-38.187 85.333-85.333 85.333h-768c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333zM362.667 426.667l106.667-128.213 149.333 192.213 192-256h-597.333l149.333 192z" />
-<glyph unicode="&#xe83a;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
-<glyph unicode="&#xe83b;" d="M853.333 680.747v-465.493c-110.72 32.853-225.28 49.493-341.333 49.493s-230.4-16.64-341.333-49.493v465.493c110.72-32.853 225.28-49.493 341.333-49.493s230.4 16.64 341.333 49.493zM914.347 789.333c-4.053 0-8.533-0.853-13.227-2.56-125.44-46.72-257.28-70.187-389.12-70.187s-263.68 23.467-389.12 70.187c-4.693 1.707-9.173 2.56-13.44 2.56-14.080 0-24.107-10.027-24.107-26.667v-629.333c0.213-16.64 10.027-26.667 24.107-26.667 4.053 0 8.533 0.853 13.227 2.56 125.44 46.72 257.28 70.187 389.12 70.187s263.68-23.467 389.12-70.187c4.693-1.707 9.173-2.56 13.227-2.56 14.080 0 24.32 10.027 24.107 26.667v629.333c0.427 16.64-9.813 26.667-23.893 26.667z" />
-<glyph unicode="&#xe83c;" d="M850.773 58.88c-46.72 125.44-70.187 257.28-70.187 389.12s23.467 263.68 70.187 389.12c1.707 4.693 2.56 9.173 2.56 13.44 0 14.080-10.027 24.107-26.667 24.107h-629.333c-16.64-0.213-26.667-10.027-26.667-24.107 0-4.053 0.853-8.533 2.56-13.227 46.72-125.44 70.187-257.28 70.187-389.12s-23.467-263.68-70.187-389.12c-1.707-4.907-2.56-9.387-2.56-13.653 0-14.080 10.027-24.107 26.667-24.107h629.333c16.64 0 26.667 10.24 26.667 24.32 0 4.053-0.853 8.533-2.56 13.227zM279.253 106.667c32.853 110.72 49.493 225.28 49.493 341.333s-16.64 230.4-49.493 341.333h465.493c-32.853-110.72-49.493-225.28-49.493-341.333s16.64-230.4 49.493-341.333h-465.493z" />
-<glyph unicode="&#xe83d;" d="M512 704c104.533 0 200.96-8.32 311.040-27.093 20.053-76.16 30.293-153.173 30.293-228.907s-10.24-152.747-30.293-228.907c-110.080-18.773-206.507-27.093-311.040-27.093s-200.96 8.32-311.040 27.093c-20.053 76.16-30.293 153.173-30.293 228.907s10.24 152.747 30.293 228.907c110.080 18.773 206.507 27.093 311.040 27.093zM512 789.333c-116.48 0-222.933-10.24-339.413-30.72l-39.467-7.040-10.667-38.187c-24.747-88.32-37.12-176.853-37.12-265.387s12.373-177.067 37.12-265.387l10.667-38.187 39.467-7.040c116.48-20.48 222.933-30.72 339.413-30.72s222.933 10.24 339.413 30.72l39.467 7.040 10.667 38.187c24.747 88.32 37.12 176.853 37.12 265.387s-12.373 177.067-37.12 265.387l-10.667 38.187-39.467 7.040c-116.48 20.48-222.933 30.72-339.413 30.72z" />
-<glyph unicode="&#xe83e;" d="M896 149.333v597.333c0 47.147-38.187 85.333-85.333 85.333h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333zM362.667 384l106.667-128.213 149.333 192.213 192-256h-597.333l149.333 192z" />
-<glyph unicode="&#xe83f;" d="M768 874.667h-512c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 85.333-85.333 85.333zM256 789.333h213.333v-341.333l-106.667 64-106.667-64v341.333zM256 149.333l128 164.48 91.52-109.867 128 164.907 164.48-219.52h-512z" />
-<glyph unicode="&#xe840;" d="M648.533 448c0-75.405-61.128-136.533-136.533-136.533s-136.533 61.128-136.533 136.533c0 75.405 61.128 136.533 136.533 136.533s136.533-61.128 136.533-136.533zM384 874.667l-78.080-85.333h-135.253c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333h-135.253l-78.080 85.333h-256zM512 234.667c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333z" />
-<glyph unicode="&#xe841;" d="M938.667 277.333v512c0 47.147-38.187 85.333-85.333 85.333h-512c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333zM469.333 448l86.613-115.627 126.72 158.293 170.667-213.333h-512l128 170.667zM85.333 704v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333v85.333h-597.333v597.333h-85.333z" />
-<glyph unicode="&#xe842;" d="M512 437.333c52.907 0 96 42.88 96 96 0 52.907-43.093 96-96 96s-96-43.093-96-96c0-53.12 43.093-96 96-96zM704 266.667c0 64-128 96-192 96s-192-32-192-96v-32h384v32zM810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v597.333h597.333v-597.333z" />
-<glyph unicode="&#xe843;" d="M512 768c-213.333 0-395.52-132.693-469.333-320 73.813-187.307 256-320 469.333-320s395.52 132.693 469.333 320c-73.813 187.307-255.787 320-469.333 320zM512 234.667c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333zM512 576c-70.613 0-128-57.387-128-128s57.387-128 128-128 128 57.387 128 128-57.387 128-128 128z" />
-<glyph unicode="&#xe844;" d="M303.36 596.267l-60.373 60.373c-38.4-49.493-62.080-106.667-69.333-165.973h86.187c6.187 37.333 20.693 73.387 43.52 105.6zM259.84 405.333h-86.187c7.253-59.307 30.933-116.48 69.333-165.973l60.373 60.373c-22.827 32.213-37.333 68.267-43.52 105.6zM302.933 178.56c49.493-38.613 107.093-61.44 166.4-68.693v86.187c-37.333 6.187-73.173 20.907-105.173 43.733l-61.227-61.227zM554.667 786.347v130.987l-194.133-194.133 194.133-189.867v166.827c120.96-20.267 213.333-125.44 213.333-252.16s-92.373-231.893-213.333-252.16v-86.187c168.32 21.12 298.667 164.267 298.667 338.347s-130.347 317.227-298.667 338.347z" />
-<glyph unicode="&#xe845;" d="M663.467 723.2l-194.133 194.133v-130.987c-168.32-20.907-298.667-164.267-298.667-338.347s130.347-317.44 298.667-338.347v86.187c-120.96 20.267-213.333 125.44-213.333 252.16s92.373 231.893 213.333 252.16v-166.827l194.133 189.867zM850.347 490.667c-7.253 59.307-30.933 116.48-69.333 165.973l-60.373-60.373c22.827-32.213 37.333-68.267 43.52-105.6h86.187zM554.667 196.053v-86.4c59.307 7.253 116.907 30.293 166.4 68.693l-61.227 61.227c-32-22.613-67.84-37.12-105.173-43.52zM720.64 299.733l60.373-60.373c38.4 49.493 62.080 106.667 69.333 165.973h-86.187c-6.187-37.333-20.693-73.387-43.52-105.6z" />
-<glyph unicode="&#xe846;" d="M426.667 618.667v-341.333l213.333 170.667-213.333 170.667zM810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v597.333h597.333v-597.333z" />
-<glyph unicode="&#xe847;" d="M896 704h-768c-47.147 0-85.333-38.187-85.333-85.333v-341.333c0-47.147 38.187-85.333 85.333-85.333h768c47.147 0 85.333 38.187 85.333 85.333v341.333c0 47.147-38.187 85.333-85.333 85.333zM896 277.333h-768v341.333h85.333v-170.667h85.333v170.667h85.333v-170.667h85.333v170.667h85.333v-170.667h85.333v170.667h85.333v-170.667h85.333v170.667h85.333v-341.333z" />
-<glyph unicode="&#xe848;" d="M107.947 121.387l57.387-23.68v385.067l-103.467-249.813c-17.92-43.307 2.773-93.44 46.080-111.573zM939.947 279.68l-211.627 510.507c-13.227 32-44.373 51.84-77.013 52.48-11.307 0.213-22.827-1.92-34.133-6.4l-314.24-130.133c-32-13.227-51.627-44.16-52.48-76.8-0.213-11.52 1.707-23.040 6.4-34.347l211.413-510.507c13.44-32.427 44.8-52.053 78.080-52.48 11.093 0 22.187 1.92 33.067 6.4l314.24 130.133c43.307 17.92 64.213 67.84 46.293 111.147zM336 586.667c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM250.667 117.333c0-46.933 38.4-85.333 85.333-85.333h62.080l-147.413 355.84v-270.507z" />
-<glyph unicode="&#xe849;" d="M853.333 789.333h-135.253l-78.080 85.333h-256l-78.080-85.333h-135.253c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM640 298.667v106.667h-256v-106.667l-149.333 149.333 149.333 149.333v-106.667h256v106.667l149.333-149.333-149.333-149.333z" />
-<glyph unicode="&#xe84a;" d="M768 554.667v149.333c0 23.467-18.987 42.667-42.667 42.667h-597.333c-23.68 0-42.667-19.2-42.667-42.667v-512c0-23.467 18.987-42.667 42.667-42.667h597.333c23.68 0 42.667 19.2 42.667 42.667v149.333l170.667-170.667v554.667l-170.667-170.667zM554.667 298.667v106.667h-256v-106.667l-149.333 149.333 149.333 149.333v-106.667h256v106.667l149.333-149.333-149.333-149.333z" />
-<glyph unicode="&#xe84b;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM661.333 490.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 490.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 213.333c99.413 0 183.68 62.080 217.813 149.333h-435.627c34.133-87.253 118.4-149.333 217.813-149.333z" />
-<glyph unicode="&#xe84c;" d="M832.427 828.8l-701.227-701.227c3.84-14.72 11.307-27.947 21.76-38.4l0.213-0.213c10.453-10.453 23.68-17.92 38.4-21.76l701.227 701.227c-7.893 29.44-30.933 52.48-60.373 60.373zM506.88 832l-378.88-378.88v-120.747l499.627 499.627h-120.747zM213.333 832c-46.933 0-85.333-38.4-85.333-85.333v-85.547l170.88 170.88h-85.547zM810.667 64c23.467 0 44.8 9.6 60.16 24.96 15.573 15.573 25.173 36.907 25.173 60.373v85.547l-170.88-170.88h85.547zM396.373 64h120.747l378.88 378.88v120.747l-499.627-499.627z" />
-<glyph unicode="&#xe84d;" d="M693.12 629.12c-50.133 49.92-115.627 74.88-181.12 74.88v-256l-181.12-181.12c100.053-100.053 261.973-100.053 362.027 0s100.053 262.187 0.213 362.24zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 191.147 426.667 426.667c0 235.733-190.933 426.667-426.667 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
-<glyph unicode="&#xe84e;" d="M640 917.333h-256v-85.333h256v85.333zM469.333 362.667h85.333v256h-85.333v-256zM811.733 644.907l60.8 60.8c-18.347 21.973-38.4 42.027-60.373 60.373l-60.8-60.8c-65.493 52.48-148.907 84.053-239.573 84.053-212.267 0-383.787-171.947-383.787-384s171.52-384 383.787-384 384.213 171.947 384.213 384c0 90.667-31.573 173.867-84.267 239.573zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667z" />
-<glyph unicode="&#xe84f;" d="M495.36 406.4c-6.827 10.24-15.573 19.627-26.24 27.947-10.88 8.32-23.893 14.933-39.467 20.267 13.013 5.76 24.32 13.013 34.133 21.333 9.813 8.533 17.92 17.493 24.32 27.093s11.307 19.627 14.72 30.080c3.2 10.453 4.907 20.693 4.907 30.933 0 23.68-4.053 44.373-11.733 62.507-7.893 17.92-18.987 33.067-33.28 45.013s-31.36 21.12-51.413 27.307c-20.053 6.187-42.027 9.173-66.133 9.173-23.467 0-45.013-3.413-64.853-10.453s-36.907-16.64-51.2-29.013c-14.293-12.373-25.387-27.093-33.493-43.947s-11.947-35.413-11.947-55.253h84.48c0 10.88 1.92 20.693 5.973 29.44s9.387 16.213 16.427 22.187c7.040 6.187 15.147 10.88 24.747 14.293s19.84 5.12 30.933 5.12c26.027 0 45.227-6.613 58.027-20.053 12.587-13.44 18.987-32 18.987-56.107 0-11.52-1.707-22.187-5.12-31.573-3.413-9.6-8.747-17.707-16-24.32-7.253-6.827-16.213-11.947-26.88-15.787s-23.253-5.76-37.973-5.76h-50.133v-66.773h50.133c14.293 0 27.307-1.707 38.827-4.907s21.333-8.32 29.44-15.147c8.107-6.827 14.293-15.573 18.773-26.027s6.613-22.827 6.613-37.333c0-26.453-7.467-46.72-22.613-60.587s-35.627-20.907-61.867-20.907c-12.587 0-23.893 1.707-34.133 5.333s-18.987 8.747-26.027 15.36c-7.253 6.613-12.8 14.507-16.64 23.893-4.053 9.173-5.973 19.413-5.973 30.72h-85.12c0-23.467 4.48-44.16 13.653-61.867 8.96-17.92 21.12-32.853 36.48-44.8s33.067-20.907 53.12-26.88c20.053-5.973 41.173-8.96 63.147-8.96 24.107 0 46.507 3.413 67.413 9.813 20.693 6.613 38.827 16.213 53.973 28.8s27.093 28.16 35.627 46.72c8.533 18.56 12.8 39.68 12.8 63.36 0 12.587-1.493 24.747-4.693 36.48-3.2 11.947-8.107 23.040-14.72 33.28zM890.667 347.093c-6.187 12.16-15.147 22.613-26.88 31.573s-26.24 16.427-43.093 22.613c-17.067 6.187-36.267 11.52-57.6 16-14.933 3.2-27.093 6.4-36.907 9.813-9.813 3.2-17.707 6.827-23.467 10.667s-9.813 8.32-12.16 13.013c-2.347 4.693-3.413 10.24-3.413 16.427s1.28 11.947 3.84 17.707c2.56 5.547 6.4 10.453 11.52 14.72s11.52 7.68 19.413 10.24c7.68 2.56 16.853 3.84 27.307 3.84 10.667 0 20.053-1.493 28.16-4.693 8.107-2.987 14.933-7.253 20.267-12.587 5.547-5.333 9.6-11.307 12.373-17.92 2.773-6.827 4.053-13.653 4.053-20.693h83.2c0 16.64-3.413 32.213-10.027 46.507-6.827 14.293-16.427 26.88-29.227 37.547s-28.373 18.987-46.72 24.96c-18.56 6.187-39.253 9.173-62.507 9.173-21.973 0-41.813-2.987-59.307-8.96-17.707-5.973-32.64-14.293-45.227-24.533-12.373-10.24-21.973-22.187-28.587-35.84s-10.027-27.947-10.027-42.88c0-15.573 3.2-29.227 9.813-41.173 6.4-11.947 15.573-22.187 27.307-30.933s25.6-16.213 42.027-22.4c16.213-6.187 34.347-11.307 54.187-15.36 16.64-3.413 30.080-7.040 40.533-10.88s18.347-8.107 24.107-12.587c5.76-4.48 9.6-9.173 11.52-14.293s2.987-10.667 2.987-16.64c0-13.44-5.76-24.32-17.067-32.64-11.52-8.32-28.16-12.587-49.92-12.587-9.387 0-18.56 1.067-27.307 3.2-8.96 2.133-16.853 5.547-23.893 10.453-7.040 4.693-12.8 11.093-17.493 18.773-4.48 7.68-7.253 17.28-7.893 28.8h-80.853c0-15.36 3.413-30.293 10.027-45.013s16.64-27.947 29.867-39.467c13.227-11.733 29.653-21.12 49.067-28.16 19.413-7.253 42.027-10.88 67.2-10.88 22.613 0 43.093 2.773 61.653 8.107 18.56 5.547 34.347 13.227 47.36 23.040 13.227 10.027 23.253 21.76 30.293 35.413s10.667 28.8 10.667 45.227c0 16.853-3.2 31.147-9.173 43.307z" />
-<glyph unicode="&#xe850;" d="M0 630.827v-71.893l128 42.667v-409.6h85.333v512h-10.88l-202.453-73.173zM1014.827 347.093c-6.187 12.16-15.147 22.613-26.88 31.573s-26.24 16.427-43.093 22.613c-17.067 6.187-36.267 11.52-57.6 16-14.933 3.2-27.093 6.4-36.907 9.813-9.813 3.2-17.707 6.827-23.467 10.667s-9.813 8.32-12.16 13.013c-2.347 4.693-3.413 10.24-3.413 16.427s1.28 11.947 3.84 17.707c2.56 5.547 6.4 10.453 11.52 14.72s11.52 7.68 19.413 10.24c7.68 2.56 16.853 3.84 27.307 3.84 10.667 0 20.053-1.493 28.16-4.693 8.107-2.987 14.933-7.253 20.267-12.587 5.547-5.333 9.6-11.307 12.373-17.92 2.773-6.827 4.053-13.653 4.053-20.693h83.2c0 16.64-3.413 32.213-10.027 46.507s-16.427 26.88-29.227 37.547c-12.8 10.667-28.373 18.987-46.72 24.96-18.56 6.187-39.253 9.173-62.293 9.173-21.973 0-41.813-2.987-59.307-8.96-17.707-5.973-32.64-14.293-45.227-24.533-12.373-10.24-21.973-22.187-28.587-35.84s-10.027-27.947-10.027-42.88c0-15.573 3.2-29.227 9.813-41.173 6.4-11.947 15.573-22.187 27.307-30.933s25.6-16.213 42.027-22.4c16.213-6.187 34.347-11.307 54.187-15.36 16.64-3.413 30.080-7.040 40.533-10.88s18.347-8.107 24.107-12.587c5.76-4.48 9.6-9.173 11.52-14.293s2.987-10.667 2.987-16.64c0-13.44-5.76-24.32-17.067-32.64-11.52-8.32-28.16-12.587-49.92-12.587-9.387 0-18.56 1.067-27.307 3.2-8.96 2.133-16.853 5.547-23.893 10.453-7.040 4.693-12.8 11.093-17.493 18.773-4.48 7.68-7.253 17.28-7.893 28.8h-80.853c0-15.36 3.413-30.293 10.027-45.013s16.64-27.947 29.867-39.467c13.227-11.733 29.653-21.12 49.067-28.16 19.413-7.253 42.027-10.88 67.2-10.88 22.613 0 43.093 2.773 61.653 8.107 18.56 5.547 34.347 13.227 47.36 23.040 13.227 10.027 23.253 21.76 30.293 35.413s10.667 28.8 10.667 45.227c-0.213 16.853-3.2 31.147-9.387 43.307zM589.653 659.413c-14.507 17.28-32 29.653-52.267 37.333-20.48 7.68-43.093 11.52-68.267 11.52-24.747 0-47.36-3.84-67.84-11.52s-37.973-20.053-52.267-37.333c-14.507-17.28-25.6-39.893-33.493-67.627-7.893-27.947-11.733-61.867-11.733-101.973v-81.707c0-40.107 4.053-74.24 11.947-102.187 8.107-27.947 19.413-50.773 33.92-68.267 14.72-17.493 32.213-30.293 52.48-38.187 20.48-7.893 43.093-11.733 67.84-11.733 24.96 0 47.787 4.053 68.053 11.733 20.267 7.893 37.547 20.48 52.053 38.187 14.293 17.493 25.6 40.32 33.493 68.267s11.733 62.080 11.733 102.187v81.707c0 40.107-4.053 74.027-11.733 101.973-8.107 27.733-19.413 50.347-33.92 67.627zM550.613 395.733c0-25.6-1.707-47.147-5.12-65.067s-8.747-32.427-15.573-43.52-15.36-19.2-25.173-24.32c-10.027-5.12-21.547-7.68-34.773-7.68-13.013 0-24.533 2.56-34.773 7.68s-18.773 13.227-25.813 24.32c-7.040 11.093-12.373 25.6-16 43.52s-5.547 39.467-5.547 65.067v106.88c0 25.813 1.707 47.36 5.333 64.853s8.96 31.573 15.787 42.453c7.040 10.88 15.573 18.56 25.6 23.253s21.547 7.040 34.56 7.040c13.013 0 24.533-2.347 34.56-7.040s18.56-12.587 25.6-23.253c7.040-10.88 12.16-24.96 15.787-42.453s5.333-39.253 5.333-64.853v-106.88z" />
-<glyph unicode="&#xe851;" d="M512 789.333c-94.293 0-170.667-76.373-170.667-170.667 0-94.080 76.373-170.667 170.667-170.667s170.667 76.587 170.667 170.667c0 94.293-76.373 170.667-170.667 170.667zM512 362.667c-113.707 0-341.333-56.96-341.333-170.667v-85.333h682.667v85.333c0 113.707-227.627 170.667-341.333 170.667z" />
-<glyph unicode="&#xe852;" d="M812.16 765.867l-60.8-60.8c-65.493 52.693-148.907 84.267-239.573 84.267-78.080 0-150.4-23.467-210.987-63.36l62.080-62.080c43.947 25.387 94.72 40.107 149.12 40.107 164.907 0 298.667-133.76 298.667-298.667 0-54.4-14.72-105.173-40.107-149.12l62.080-62.080c39.893 60.587 63.36 133.12 63.36 211.2 0 90.667-31.573 173.867-84.267 239.573l60.8 60.8-60.373 60.16zM640 917.333h-256v-85.333h256v85.333zM469.333 557.44l85.333-85.333v146.56h-85.333v-61.227zM128.853 789.333l-54.4-54.187 117.547-117.547c-40.32-60.8-64-133.76-64-212.267 0-212.053 171.52-384 383.787-384 78.507 0 151.467 23.68 212.267 64l106.667-106.667 54.187 54.4-756.053 756.267zM512 106.667c-164.907 0-298.667 133.76-298.667 298.667 0 54.827 14.933 106.027 40.747 150.187l408.107-408.107c-44.16-25.813-95.36-40.747-150.187-40.747z" />
-<glyph unicode="&#xe853;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM469.333 109.653c-168.32 20.907-298.667 164.267-298.667 338.347s130.347 317.44 298.667 338.347v-676.693zM554.667 786.347c43.947-5.547 85.333-19.2 122.453-39.68h-122.453v39.68zM554.667 661.333h223.573c10.667-13.44 20.48-27.733 29.013-42.667h-252.587v42.667zM554.667 533.333h287.573c3.627-13.867 6.4-28.16 8.32-42.667h-295.893v42.667zM554.667 109.653v39.68h122.453c-37.12-20.48-78.507-34.133-122.453-39.68zM778.24 234.667h-223.573v42.667h252.587c-8.533-14.933-18.347-29.227-29.013-42.667zM842.24 362.667h-287.573v42.667h295.68c-1.707-14.507-4.693-28.8-8.107-42.667z" />
-<glyph unicode="&#xe854;" d="M938.667 192v85.333h-597.333v512h85.333l-128 128-128-128h85.333v-85.333h-170.667v-85.333h170.667v-341.333c0-47.147 38.187-85.333 85.333-85.333h341.333v-85.333h-85.333l128-128 128 128h-85.333v85.333h170.667zM426.667 618.667h256v-256h85.333v256c0 47.147-38.187 85.333-85.333 85.333h-256v-85.333z" />
-<glyph unicode="&#xe855;" d="M128 234.667v-85.333h256v85.333h-256zM128 746.667v-85.333h426.667v85.333h-426.667zM554.667 64v85.333h341.333v85.333h-341.333v85.333h-85.333v-256h85.333zM298.667 576v-85.333h-170.667v-85.333h170.667v-85.333h85.333v256h-85.333zM896 405.333v85.333h-426.667v-85.333h426.667zM640 576h85.333v85.333h170.667v85.333h-170.667v85.333h-85.333v-256z" />
-<glyph unicode="&#xe856;" d="M292.267 420.267h98.133l-49.067 155.733-49.067-155.733zM938.667 661.333l-51.413-268.373-63.787 268.373h-68.267l-63.573-268.373-51.627 268.373h-32.427c-62.507 77.867-158.507 128-266.24 128-188.587 0-341.333-152.747-341.333-341.333s152.747-341.333 341.333-341.333c133.76 0 249.173 77.013 305.28 189.013l4.053-18.347h74.667l64 260.267 64-260.267h74.667l87.467 384h-76.8zM439.467 277.333l-29.867 85.333h-136.533l-29.867-85.333h-81.067l136.533 384h85.333l136.533-384h-81.067z" />
-<glyph unicode="&#xe857;" d="M825.813 531.84c-29.013 146.773-158.507 257.493-313.813 257.493-123.307 0-230.187-69.973-283.733-172.16-128.213-13.867-228.267-122.453-228.267-254.507 0-141.44 114.56-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.68 203.947-198.187 211.84z" />
-<glyph unicode="&#xe858;" d="M151.467 169.173l60.373-60.373 76.587 76.587-60.373 60.373-76.587-76.587zM469.333 2.133h85.333v125.867h-85.333v-125.867zM170.667 512h-128v-85.333h128v85.333zM640 690.773v205.227h-256v-205.227c-76.373-44.373-128-126.72-128-221.44 0-141.44 114.56-256 256-256s256 114.56 256 256c0 94.72-51.627 177.28-128 221.44zM853.333 512v-85.333h128v85.333h-128zM735.787 185.387l76.587-76.587 60.373 60.373-76.587 76.587-60.373-60.373z" />
-<glyph unicode="&#xe859;" d="M213.333 341.333h597.333v256h-597.333v-256zM469.333 936.533v-125.867h85.333v125.867h-85.333zM812.16 829.867l-76.587-76.587 60.373-60.373 76.587 76.587-60.373 60.373zM554.667 2.133v125.867h-85.333v-125.867h85.333zM872.533 169.173l-76.587 76.587-60.373-60.373 76.587-76.587 60.373 60.373zM151.467 769.493l76.587-76.587 60.373 60.373-76.587 76.587-60.373-60.373zM211.84 108.8l76.587 76.587-60.373 60.373-76.587-76.587 60.373-60.373z" />
-<glyph unicode="&#xe85a;" d="M288.213 753.28l-76.373 76.587-60.373-60.373 76.587-76.587 60.16 60.373zM170.667 512h-128v-85.333h128v85.333zM554.667 936.533h-85.333v-125.867h85.333v125.867zM872.533 769.493l-60.373 60.373-76.587-76.587 60.373-60.373 76.587 76.587zM735.787 185.387l76.587-76.587 60.373 60.373-76.587 76.587-60.373-60.373zM853.333 512v-85.333h128v85.333h-128zM512 725.333c-141.44 0-256-114.56-256-256s114.56-256 256-256 256 114.56 256 256-114.56 256-256 256zM469.333 2.133h85.333v125.867h-85.333v-125.867zM151.467 169.173l60.373-60.373 76.587 76.587-60.373 60.373-76.587-76.587z" />
-<glyph unicode="&#xe85b;" d="M810.667 917.333h-597.333c-47.147 0-84.907-38.187-84.907-85.333l-0.427-551.893c0-29.44 14.933-55.467 37.547-70.827l346.24-230.613 346.24 230.613c22.613 15.36 37.547 41.387 37.547 70.827l0.427 551.893c0 47.147-38.187 85.333-85.333 85.333zM426.667 277.333l-213.333 213.333 60.373 60.373 152.96-152.96 323.627 323.627 60.373-60.373-384-384z" />
-<glyph unicode="&#xe85c;" d="M926.080 478.080l-384 384c-16.64 16.64-43.733 16.64-60.16 0l-384-384c-16.64-16.64-16.64-43.733 0-60.373l384-384c16.64-16.64 43.733-16.64 60.373 0l384 384c16.64 16.853 16.64 43.733-0.213 60.373zM597.333 341.333v106.667h-170.667v-128h-85.333v170.667c0 23.68 18.987 42.667 42.667 42.667h213.333v106.667l149.333-149.333-149.333-149.333z" />
-<glyph unicode="&#xe85d;" d="M682.667 755.2c42.24 0 76.8 34.347 76.8 76.8s-34.56 76.8-76.8 76.8c-42.453 0-76.8-34.347-76.8-76.8s34.347-76.8 76.8-76.8zM810.667 448c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333 213.333 95.573 213.333 213.333-95.573 213.333-213.333 213.333zM810.667 85.333c-82.56 0-149.333 66.773-149.333 149.333s66.773 149.333 149.333 149.333 149.333-66.773 149.333-149.333-66.773-149.333-149.333-149.333zM631.467 533.333h179.2v76.8h-136.533l-82.56 139.307c-12.587 21.333-35.84 35.627-62.507 35.627-20.053 0-38.187-8.107-51.2-21.333l-157.867-157.653c-13.227-13.227-21.333-31.36-21.333-51.413 0-26.88 14.293-49.493 36.267-62.72l142.933-86.613v-213.333h76.8v276.48l-96 71.253 98.987 99.413 73.813-105.813zM213.333 448c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333 213.333 95.573 213.333 213.333-95.573 213.333-213.333 213.333zM213.333 85.333c-82.56 0-149.333 66.773-149.333 149.333s66.773 149.333 149.333 149.333 149.333-66.773 149.333-149.333-66.773-149.333-149.333-149.333z" />
-<glyph unicode="&#xe85e;" d="M170.667 277.333c0-37.76 16.64-71.253 42.667-94.72v-75.947c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v42.667h341.333v-42.667c0-23.467 18.987-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v75.947c26.027 23.467 42.667 56.96 42.667 94.72v426.667c0 149.333-152.747 170.667-341.333 170.667s-341.333-21.333-341.333-170.667v-426.667zM320 234.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM704 234.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM768 490.667h-512v213.333h512v-213.333z" />
-<glyph unicode="&#xe85f;" d="M807.253 703.573c-8.747 25.173-32.64 43.093-60.587 43.093h-469.333c-27.947 0-51.84-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 277.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 277.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 490.667l64 192h469.333l64-192h-597.333z" />
-<glyph unicode="&#xe860;" d="M853.333 64c-59.307 0-118.613 20.053-170.667 56.533-104.107-72.96-237.227-72.96-341.333 0-52.053-36.48-111.36-56.533-170.667-56.533h-85.333v-85.333h85.333c58.667 0 116.907 14.72 170.667 42.453 107.52-55.253 233.813-55.253 341.333 0 53.76-27.52 112-42.453 170.667-42.453h85.333v85.333h-85.333zM168.32 149.333h2.347c68.267 0 129.067 37.547 170.667 85.333 41.6-47.787 102.4-85.333 170.667-85.333s129.067 37.547 170.667 85.333c41.813-47.787 102.187-85.333 170.667-85.333h2.347l80.853 285.227c3.627 10.88 2.56 22.827-2.56 33.067-5.333 10.24-14.507 17.92-25.6 21.12l-55.040 18.133v197.12c0 47.147-38.187 85.333-85.333 85.333h-128v128h-256v-128h-128c-47.147 0-85.333-38.187-85.333-85.333v-197.12l-54.827-17.92c-11.093-3.413-20.267-10.88-25.6-21.12s-6.187-22.187-2.56-33.067l80.64-285.44zM256 704h512v-169.173l-256 83.84-256-83.84v169.173z" />
-<glyph unicode="&#xe861;" d="M512 874.667c-188.587 0-341.333-21.333-341.333-170.667v-405.333c0-82.56 66.987-149.333 149.333-149.333l-64-64v-21.333h512v21.333l-64 64c82.56 0 149.333 66.773 149.333 149.333v405.333c0 149.333-152.747 170.667-341.333 170.667zM320 234.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM469.333 490.667h-213.333v213.333h213.333v-213.333zM704 234.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM768 490.667h-213.333v213.333h213.333v-213.333z" />
-<glyph unicode="&#xe862;" d="M170.667 298.667c0-82.56 66.987-149.333 149.333-149.333l-64-64v-21.333h512v21.333l-64 64c82.56 0 149.333 66.773 149.333 149.333v448c0 149.333-152.747 170.667-341.333 170.667s-341.333-21.333-341.333-170.667v-448zM512 234.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM768 533.333h-512v213.333h512v-213.333z" />
-<glyph unicode="&#xe863;" d="M512 874.667c-188.587 0-341.333-21.333-341.333-170.667v-405.333c0-82.56 66.987-149.333 149.333-149.333l-64-64v-21.333h512v21.333l-64 64c82.56 0 149.333 66.773 149.333 149.333v405.333c0 149.333-152.747 170.667-341.333 170.667zM320 234.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM469.333 490.667h-213.333v213.333h213.333v-213.333zM704 234.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM768 490.667h-213.333v213.333h213.333v-213.333z" />
-<glyph unicode="&#xe864;" d="M597.333 797.867c42.24 0 76.8 34.347 76.8 76.8s-34.56 76.8-76.8 76.8c-42.453 0-76.8-34.347-76.8-76.8s34.347-76.8 76.8-76.8zM602.453 533.333h208.213v76.8h-154.667l-85.333 142.080c-12.587 21.333-35.84 35.413-62.293 35.413-7.253 0-14.293-1.067-20.907-2.987l-231.467-72.107v-221.867h76.8v156.373l89.813 27.947-166.613-653.653h76.8l122.453 346.027 99.413-132.693v-213.333h76.8v273.28l-106.24 193.707 31.36 122.453 45.867-77.44z" />
-<glyph unicode="&#xe865;" d="M896 277.333v85.333l-341.333 213.333v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-234.667l-341.333-213.333v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v234.667l341.333-106.667z" />
-<glyph unicode="&#xe866;" d="M298.667 405.333c70.613 0 128 57.387 128 128s-57.387 128-128 128-128-57.387-128-128 57.387-128 128-128zM810.667 661.333h-341.333v-298.667h-341.333v384h-85.333v-640h85.333v128h768v-128h85.333v384c0 94.293-76.373 170.667-170.667 170.667z" />
-<glyph unicode="&#xe867;" d="M511.787 168.96l-314.667 244.693-69.12-53.76 384-298.667 384 298.667-69.547 53.973-314.667-244.907zM512 277.333l384 298.667-384 298.667-384-298.667 69.547-53.973 314.453-244.693z" />
-<glyph unicode="&#xe868;" d="M845.227 320.427l50.773 39.467-60.8 60.8-50.773-39.467 60.8-60.8zM826.24 521.6l69.76 54.4-384 298.667-124.373-96.64 336-336 102.613 79.573zM139.733 917.333l-54.4-54.4 180.053-180.053-137.387-106.88 69.547-53.973 314.453-244.693 89.387 69.547 60.8-60.8-150.613-117.12-314.453 244.693-69.12-53.76 384-298.667 210.987 164.267 161.493-161.493 54.187 54.4-798.933 798.933z" />
-<glyph unicode="&#xe869;" d="M896 277.333v85.333l-341.333 213.333v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-234.667l-341.333-213.333v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v234.667l341.333-106.667z" />
-<glyph unicode="&#xe86a;" d="M469.333 234.667h85.333v42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v128c0 23.467-19.2 42.667-42.667 42.667h-128v42.667h170.667v85.333h-85.333v42.667h-85.333v-42.667h-42.667c-23.467 0-42.667-19.2-42.667-42.667v-128c0-23.467 19.2-42.667 42.667-42.667h128v-42.667h-170.667v-85.333h85.333v-42.667zM853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 192h-682.667v512h682.667v-512z" />
-<glyph unicode="&#xe86b;" d="M853.333 448c0 47.147 38.187 85.333 85.333 85.333v170.667c0 47.147-38.187 85.333-85.333 85.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.213-170.667c47.147-0.213 85.12-38.4 85.12-85.333 0-47.147-38.187-85.333-85.12-85.333l-0.213-170.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v170.667c-47.147 0-85.333 38.187-85.333 85.333zM664.747 243.2l-152.747 98.133-152.747-98.133 46.080 175.573-140.373 114.773 181.12 10.667 65.92 168.32 65.92-168.32 181.12-10.667-140.373-114.773 46.080-175.573z" />
-<glyph unicode="&#xe86c;" d="M469.333 405.333v-256h-213.333v-85.333h512v85.333h-213.333v256l341.333 341.333v85.333h-768v-85.333l341.333-341.333zM320 661.333l-85.333 85.333h554.667l-85.333-85.333h-384z" />
-<glyph unicode="&#xe86d;" d="M853.333 832h-682.667v-426.667c0-94.293 76.373-170.667 170.667-170.667h256c94.293 0 170.667 76.373 170.667 170.667v128h85.333c47.147 0 85.333 38.187 85.333 85.333v128c0 47.147-38.187 85.333-85.333 85.333zM853.333 618.667h-85.333v128h85.333v-128zM85.333 64h768v85.333h-768v-85.333z" />
-<glyph unicode="&#xe86e;" d="M725.333 746.667c35.413 0 64 28.587 64 64 0 42.667-64 115.2-64 115.2s-64-72.533-64-115.2c0-35.413 28.587-64 64-64zM512 746.667c35.413 0 64 28.587 64 64 0 42.667-64 115.2-64 115.2s-64-72.533-64-115.2c0-35.413 28.587-64 64-64zM298.667 746.667c35.413 0 64 28.587 64 64 0 42.667-64 115.2-64 115.2s-64-72.533-64-115.2c0-35.413 28.587-64 64-64zM807.253 618.24c-8.747 25.173-32.64 43.093-60.587 43.093h-469.333c-27.947 0-51.84-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 192c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 192c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 405.333l64 192h469.333l64-192h-597.333z" />
-<glyph unicode="&#xe86f;" d="M810.667 661.333v128h-597.333v-128h-128v-554.667h341.333v170.667h170.667v-170.667h341.333v554.667h-128zM469.333 533.333h-85.333v-42.667h85.333v-42.667h-128v128h85.333v42.667h-85.333v42.667h128v-128zM682.667 448h-42.667v85.333h-85.333v128h42.667v-85.333h42.667v85.333h42.667v-213.333z" />
-<glyph unicode="&#xe870;" d="M128 874.667l85.973-778.027c4.907-42.453 40.96-75.307 84.693-75.307h426.667c43.733 0 79.787 32.853 84.693 75.307l85.973 778.027h-768zM512 149.333c-70.613 0-128 57.387-128 128 0 85.333 128 230.4 128 230.4s128-145.067 128-230.4c0-70.613-57.387-128-128-128zM781.867 618.667h-539.733l-18.773 170.667h577.493l-18.987-170.667z" />
-<glyph unicode="&#xe871;" d="M512 21.333c212.053 0 384 171.947 384 384-212.053 0-384-171.947-384-384zM239.147 522.667c0-58.88 47.787-106.667 106.667-106.667 22.4 0 43.307 7.040 60.373 18.773l-0.853-8.107c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667l-0.853 8.107c17.28-11.947 37.973-18.773 60.373-18.773 58.88 0 106.667 47.787 106.667 106.667 0 42.453-24.96 78.933-61.013 96 35.84 17.067 61.013 53.547 61.013 96 0 58.88-47.787 106.667-106.667 106.667-22.4 0-43.307-7.040-60.373-18.773l0.853 8.107c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667l0.853-8.107c-17.28 11.947-37.973 18.773-60.373 18.773-58.88 0-106.667-47.787-106.667-106.667 0-42.453 24.96-78.933 61.013-96-36.053-17.067-61.013-53.547-61.013-96zM512 725.333c58.88 0 106.667-47.787 106.667-106.667s-47.787-106.667-106.667-106.667-106.667 47.787-106.667 106.667 47.787 106.667 106.667 106.667zM128 405.333c0-212.053 171.947-384 384-384 0 212.053-171.947 384-384 384z" />
-<glyph unicode="&#xe872;" d="M843.52 651.52l0.64 0.64-158.933 158.507-45.227-45.227 90.027-90.027c-40.107-15.36-68.693-53.973-68.693-99.413 0-58.88 47.787-106.667 106.667-106.667 15.147 0 29.653 3.2 42.667 8.96v-307.627c0-23.467-19.2-42.667-42.667-42.667s-42.667 19.2-42.667 42.667v192c0 47.147-38.187 85.333-85.333 85.333h-42.667v298.667c0 47.147-38.187 85.333-85.333 85.333h-256c-47.147 0-85.333-38.187-85.333-85.333v-682.667h426.667v320h64v-213.333c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667v405.333c0 29.44-11.947 56.107-31.147 75.52zM512 533.333h-256v213.333h256v-213.333zM768 533.333c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667z" />
-<glyph unicode="&#xe873;" d="M298.667 192c-47.147 0-84.907-38.187-84.907-85.333s37.76-85.333 84.907-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM42.667 874.667v-85.333h85.333l153.387-323.627-57.6-104.533c-6.613-12.373-10.453-26.24-10.453-41.173 0-47.147 38.187-85.333 85.333-85.333h512v85.333h-493.867c-5.973 0-10.667 4.693-10.667 10.667 0 1.92 0.427 3.627 1.28 5.12l38.187 69.547h317.867c32 0 59.947 17.707 74.667 43.947l152.533 276.907c3.413 5.973 5.333 13.013 5.333 20.48 0 23.68-19.2 42.667-42.667 42.667h-630.827l-40.533 85.333h-139.307zM725.333 192c-47.147 0-84.907-38.187-84.907-85.333s37.76-85.333 84.907-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe874;" d="M810.667 832h-597.333c-47.147 0-84.907-38.187-84.907-85.333l-0.427-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM768 362.667h-170.667v-170.667h-170.667v170.667h-170.667v170.667h170.667v170.667h170.667v-170.667h170.667v-170.667z" />
-<glyph unicode="&#xe875;" d="M298.667 405.333c70.613 0 128 57.387 128 128s-57.387 128-128 128-128-57.387-128-128 57.387-128 128-128zM810.667 661.333h-341.333v-298.667h-341.333v384h-85.333v-640h85.333v128h768v-128h85.333v384c0 94.293-76.373 170.667-170.667 170.667z" />
-<glyph unicode="&#xe876;" d="M391.253 241.92c66.56-66.56 174.72-66.56 241.28 0s66.56 174.72 0 241.28l-241.28-241.28zM768 874.24l-512 0.427c-47.147 0-85.333-38.187-85.333-85.333v-682.667c0-47.147 38.187-85.333 85.333-85.333h512c47.147 0 85.333 38.187 85.333 85.333v682.667c0 47.147-38.187 84.907-85.333 84.907zM426.667 789.333c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM298.667 789.333c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM512 106.667c-141.44 0-256 114.56-256 256s114.56 256 256 256 256-114.56 256-256-114.56-256-256-256z" />
-<glyph unicode="&#xe877;" d="M512 467.413c-100.907 93.653-235.52 151.253-384 151.253v-469.333c148.48 0 283.093-57.6 384-151.253 100.907 93.653 235.52 151.253 384 151.253v469.333c-148.48 0-283.093-57.6-384-151.253zM512 618.667c70.613 0 128 57.387 128 128s-57.387 128-128 128-128-57.387-128-128 57.387-128 128-128z" />
-<glyph unicode="&#xe878;" d="M810.667 704h-85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333h-85.333c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM512 832c70.613 0 128-57.387 128-128h-256c0 70.613 57.387 128 128 128zM512 405.333c-117.76 0-213.333 95.573-213.333 213.333h85.333c0-70.613 57.387-128 128-128s128 57.387 128 128h85.333c0-117.76-95.573-213.333-213.333-213.333z" />
-<glyph unicode="&#xe879;" d="M768 832v-85.333h-85.333v85.333h-341.333v-85.333h-85.333v85.333h-85.333v-768h85.333v85.333h85.333v-85.333h341.333v85.333h85.333v-85.333h85.333v768h-85.333zM341.333 234.667h-85.333v85.333h85.333v-85.333zM341.333 405.333h-85.333v85.333h85.333v-85.333zM341.333 576h-85.333v85.333h85.333v-85.333zM768 234.667h-85.333v85.333h85.333v-85.333zM768 405.333h-85.333v85.333h85.333v-85.333zM768 576h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe87a;" d="M913.493 465.92l-383.787 383.787c-15.573 15.36-36.907 24.96-60.373 24.96h-298.667c-47.147 0-85.333-38.187-85.333-85.333v-298.667c0-23.68 9.6-45.013 25.173-60.373l384-384c15.36-15.36 36.693-24.96 60.16-24.96s45.013 9.6 60.373 24.96l298.667 298.667c15.36 15.573 24.96 36.907 24.96 60.373 0 23.68-9.6 45.013-25.173 60.587zM234.667 661.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
-<glyph unicode="&#xe87b;" d="M554.667 832h-298.667v-768h170.667v256h128c141.44 0 256 114.56 256 256s-114.56 256-256 256zM563.2 490.667h-136.533v170.667h136.533c47.147 0 85.333-38.187 85.333-85.333s-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe87c;" d="M896 746.667h-112.853l48.853 134.187-100.267 36.48-62.080-170.667h-541.653v-85.333l85.333-256-85.333-256v-85.333h768v85.333l-85.333 256 85.333 256v85.333zM682.667 362.667h-128v-128h-85.333v128h-128v85.333h128v128h85.333v-128h128v-85.333z" />
-<glyph unicode="&#xe87d;" d="M282.667 499.413c61.44-120.747 160.213-219.52 281.173-280.96l93.867 94.080c11.733 11.733 28.587 15.147 43.307 10.453 47.787-15.787 99.2-24.32 152.32-24.32 23.68 0 42.667-18.987 42.667-42.667v-149.333c0-23.68-18.987-42.667-42.667-42.667-400.64 0-725.333 324.693-725.333 725.333 0 23.68 19.2 42.667 42.667 42.667h149.333c23.68 0 42.667-18.987 42.667-42.667 0-53.12 8.533-104.533 24.32-152.32 4.693-14.72 1.28-31.573-10.453-43.307l-93.867-94.293z" />
-<glyph unicode="&#xe87e;" d="M512 874.667c-152.107 0-289.067-65.92-383.573-170.667l383.573-682.667 383.787 682.453c-94.507 104.96-231.467 170.88-383.787 170.88zM298.667 661.333c0 47.147 38.187 85.333 85.333 85.333s85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333-85.333 38.187-85.333 85.333zM512 320c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe87f;" d="M853.333 448c0 47.147 38.187 85.333 85.333 85.333v170.667c0 47.147-38.187 85.333-85.333 85.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.213-170.667c47.147-0.213 85.12-38.4 85.12-85.333 0-47.147-38.187-85.333-85.12-85.333l-0.213-170.667c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v170.667c-47.147 0-85.333 38.187-85.333 85.333zM664.747 243.2l-152.747 98.133-152.747-98.133 46.080 175.573-140.373 114.773 181.12 10.667 65.92 168.32 65.92-168.32 181.12-10.667-140.373-114.773 46.080-175.573z" />
-<glyph unicode="&#xe880;" d="M853.333 789.333h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM853.333 618.667l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
-<glyph unicode="&#xe881;" d="M810.667 618.667h-597.333c-70.613 0-128-57.387-128-128v-256h170.667v-170.667h512v170.667h170.667v256c0 70.613-57.387 128-128 128zM682.667 149.333h-341.333v213.333h341.333v-213.333zM810.667 448c-23.68 0-42.667 18.987-42.667 42.667s18.987 42.667 42.667 42.667c23.68 0 42.667-18.987 42.667-42.667s-18.987-42.667-42.667-42.667zM768 832h-512v-170.667h512v170.667z" />
-<glyph unicode="&#xe882;" d="M345.6 390.613l120.747 120.747-299.307 299.307c-66.56-66.56-66.56-174.72 0-241.28l178.56-178.773zM635.093 468.053c65.067-30.507 157.013-8.96 224.853 58.88 81.707 81.707 97.28 198.4 34.773 260.907-62.72 62.507-179.627 46.933-261.12-34.773-67.84-67.84-89.173-159.787-58.88-224.853-94.933-94.72-416.64-416.427-416.64-416.427l60.373-60.373 293.547 293.547 293.547-293.547 60.373 60.373-293.547 293.547 62.72 62.72z" />
-<glyph unicode="&#xe883;" d="M648.533 448c0-75.405-61.128-136.533-136.533-136.533s-136.533 61.128-136.533 136.533c0 75.405 61.128 136.533 136.533 136.533s136.533-61.128 136.533-136.533zM384 874.667l-78.080-85.333h-135.253c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333h-135.253l-78.080 85.333h-256zM512 234.667c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333z" />
-<glyph unicode="&#xe884;" d="M853.333 618.667h-128v170.667h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-469.333h85.333c0-70.613 57.387-128 128-128s128 57.387 128 128h256c0-70.613 57.387-128 128-128s128 57.387 128 128h85.333v213.333l-128 170.667zM256 170.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM832 554.667l83.84-106.667h-190.507v106.667h106.667zM768 170.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
-<glyph unicode="&#xe885;" d="M807.253 703.573c-8.747 25.173-32.64 43.093-60.587 43.093h-106.667v85.333h-256v-85.333h-106.667c-27.947 0-51.84-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 277.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 277.333c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 490.667l64 192h469.333l64-192h-597.333z" />
-<glyph unicode="&#xe886;" d="M810.667 874.667h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h170.667l128-128 128 128h170.667c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM512 733.867c63.573 0 115.2-51.627 115.2-115.2s-51.627-115.2-115.2-115.2c-63.573 0-115.2 51.627-115.2 115.2s51.627 115.2 115.2 115.2zM768 277.333h-512v38.4c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-38.4z" />
-<glyph unicode="&#xe887;" d="M874.667 832c-2.347 0-4.48-0.213-6.613-1.067l-228.053-88.533-256 89.6-240.427-81.067c-8.96-2.987-15.573-10.667-15.573-20.48v-645.12c0-11.733 9.6-21.333 21.333-21.333 2.347 0 4.48 0.213 6.613 1.067l228.053 88.533 256-89.6 240.64 80.853c8.96 3.2 15.36 10.88 15.36 20.693v645.12c0 11.733-9.6 21.333-21.333 21.333zM640 149.333l-256 89.813v507.52l256-89.813v-507.52z" />
-<glyph unicode="&#xe888;" d="M512 618.667c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM893.44 490.667c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 149.333c-164.907 0-298.667 133.76-298.667 298.667s133.76 298.667 298.667 298.667 298.667-133.76 298.667-298.667-133.76-298.667-298.667-298.667z" />
-<glyph unicode="&#xe889;" d="M512 874.667l-320-780.587 30.080-30.080 289.92 128 289.92-128 30.080 30.080z" />
-<glyph unicode="&#xe88a;" d="M768 618.667c0 141.44-114.56 256-256 256s-256-114.56-256-256c0-192 256-469.333 256-469.333s256 277.333 256 469.333zM426.667 618.667c0 47.147 38.187 85.333 85.333 85.333s85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333-85.333 38.187-85.333 85.333zM213.333 106.667v-85.333h597.333v85.333h-597.333z" />
-<glyph unicode="&#xe88b;" d="M512 874.667c-164.907 0-298.667-133.76-298.667-298.667 0-224 298.667-554.667 298.667-554.667s298.667 330.667 298.667 554.667c0 164.907-133.76 298.667-298.667 298.667zM512 469.333c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
-<glyph unicode="&#xe88c;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM256 362.667v105.6l293.547 293.547c8.32 8.32 21.76 8.32 30.080 0l75.52-75.52c8.32-8.32 8.32-21.76 0-30.080l-293.547-293.547h-105.6zM768 362.667h-320l85.333 85.333h234.667v-85.333z" />
-<glyph unicode="&#xe88d;" d="M345.6 390.613l120.747 120.747-299.307 299.307c-66.56-66.56-66.56-174.72 0-241.28l178.56-178.773zM635.093 468.053c65.067-30.507 157.013-8.96 224.853 58.88 81.707 81.707 97.28 198.4 34.773 260.907-62.72 62.507-179.627 46.933-261.12-34.773-67.84-67.84-89.173-159.787-58.88-224.853-94.933-94.72-416.64-416.427-416.64-416.427l60.373-60.373 293.547 293.547 293.547-293.547 60.373 60.373-293.547 293.547 62.72 62.72z" />
-<glyph unicode="&#xe88e;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM213.333 747.093h128c0-70.613-57.387-128.427-128-128.427v128.427zM213.333 448v85.333c117.76 0 213.333 96 213.333 213.76h85.333c0-164.907-133.76-299.093-298.667-299.093zM213.333 192l149.333 192 106.667-128.213 149.333 192.213 192-256h-597.333z" />
-<glyph unicode="&#xe88f;" d="M853.333 789.333h-682.667v-85.333h682.667v85.333zM896 362.667v85.333l-42.667 213.333h-682.667l-42.667-213.333v-85.333h42.667v-256h426.667v256h170.667v-256h85.333v256h42.667zM512 192h-256v170.667h256v-170.667z" />
-<glyph unicode="&#xe890;" d="M597.333 704l-160-213.333 121.6-162.133-68.267-51.2c-72.107 96-192 256-192 256l-256-341.333h938.667l-384 512z" />
-<glyph unicode="&#xe891;" d="M853.333 533.333h-128v48.64c73.6 18.987 128 85.12 128 164.693h-128v42.667c0 23.467-18.987 42.667-42.667 42.667h-341.333c-23.467 0-42.667-19.2-42.667-42.667v-42.667h-128c0-79.36 54.613-145.707 128-164.693v-48.64h-128c0-79.36 54.613-145.707 128-164.693v-48.64h-128c0-79.36 54.613-145.707 128-164.693v-48.64c0-23.467 19.2-42.667 42.667-42.667h341.333c23.68 0 42.667 19.2 42.667 42.667v48.64c73.6 18.987 128 85.12 128 164.693h-128v48.64c73.6 18.987 128 85.333 128 164.693zM512 149.333c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM512 362.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333zM512 576c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe892;" d="M170.667 618.667h170.667v170.667h-170.667v-170.667zM426.667 106.667h170.667v170.667h-170.667v-170.667zM170.667 106.667h170.667v170.667h-170.667v-170.667zM170.667 362.667h170.667v170.667h-170.667v-170.667zM426.667 362.667h170.667v170.667h-170.667v-170.667zM682.667 789.333v-170.667h170.667v170.667h-170.667zM426.667 618.667h170.667v170.667h-170.667v-170.667zM682.667 362.667h170.667v170.667h-170.667v-170.667zM682.667 106.667h170.667v170.667h-170.667v-170.667z" />
-<glyph unicode="&#xe893;" d="M853.333 490.667h-519.253l238.293 238.293-60.373 60.373-341.333-341.333 341.333-341.333 60.373 60.373-238.293 238.293h519.253v85.333z" />
-<glyph unicode="&#xe894;" d="M298.667 533.333l213.333-213.333 213.333 213.333z" />
-<glyph unicode="&#xe895;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 362.667l-170.667 170.667h341.333l-170.667-170.667z" />
-<glyph unicode="&#xe896;" d="M298.667 362.667l213.333 213.333 213.333-213.333z" />
-<glyph unicode="&#xe897;" d="M512 789.333l-60.373-60.373 238.293-238.293h-519.253v-85.333h519.253l-238.293-238.293 60.373-60.373 341.333 341.333z" />
-<glyph unicode="&#xe898;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM725.333 295.040l-60.373-60.373-152.96 152.96-152.96-152.96-60.373 60.373 152.96 152.96-152.96 152.96 60.373 60.373 152.96-152.96 152.96 152.96 60.373-60.373-152.96-152.96 152.96-152.96z" />
-<glyph unicode="&#xe899;" d="M384 270.080l-177.92 177.92-60.373-60.373 238.293-238.293 512 512-60.373 60.373z" />
-<glyph unicode="&#xe89a;" d="M657.707 643.627l-60.373 60.373-256-256 256-256 60.373 60.373-195.627 195.627z" />
-<glyph unicode="&#xe89b;" d="M426.667 704l-60.373-60.373 195.627-195.627-195.627-195.627 60.373-60.373 256 256z" />
-<glyph unicode="&#xe89c;" d="M810.667 686.293l-60.373 60.373-238.293-238.293-238.293 238.293-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 238.293 238.293 238.293-238.293 60.373 60.373-238.293 238.293z" />
-<glyph unicode="&#xe89d;" d="M512 618.667l-256-256 60.373-60.373 195.627 195.627 195.627-195.627 60.373 60.373z" />
-<glyph unicode="&#xe89e;" d="M707.627 593.707l-195.627-195.627-195.627 195.627-60.373-60.373 256-256 256 256z" />
-<glyph unicode="&#xe89f;" d="M298.667 362.667h-85.333v-213.333h213.333v85.333h-128v128zM213.333 533.333h85.333v128h128v85.333h-213.333v-213.333zM725.333 234.667h-128v-85.333h213.333v213.333h-85.333v-128zM597.333 746.667v-85.333h128v-128h85.333v213.333h-213.333z" />
-<glyph unicode="&#xe8a0;" d="M213.333 277.333h128v-128h85.333v213.333h-213.333v-85.333zM341.333 618.667h-128v-85.333h213.333v213.333h-85.333v-128zM597.333 149.333h85.333v128h128v85.333h-213.333v-213.333zM682.667 618.667v128h-85.333v-213.333h213.333v85.333h-128z" />
-<glyph unicode="&#xe8a1;" d="M128 192h768v85.333h-768v-85.333zM128 405.333h768v85.333h-768v-85.333zM128 704v-85.333h768v85.333h-768z" />
-<glyph unicode="&#xe8a2;" d="M256 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM768 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM512 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe8a3;" d="M512 618.667c47.147 0 85.333 38.187 85.333 85.333s-38.187 85.333-85.333 85.333-85.333-38.187-85.333-85.333 38.187-85.333 85.333-85.333zM512 533.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333zM512 277.333c-47.147 0-85.333-38.187-85.333-85.333s38.187-85.333 85.333-85.333 85.333 38.187 85.333 85.333-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe8a4;" d="M753.067 689.067c-61.653 61.867-146.773 100.267-241.067 100.267-188.587 0-340.907-152.747-340.907-341.333s152.32-341.333 340.907-341.333c158.933 0 292.053 108.8 329.813 256h-88.747c-35.2-99.413-129.493-170.667-241.067-170.667-141.44 0-256 114.56-256 256s114.56 256 256 256c70.613 0 133.973-29.44 180.267-75.733l-137.6-137.6h298.667v298.667l-100.267-100.267z" />
-<glyph unicode="&#xe8a5;" d="M316.373 167.040l60.373-60.373 135.253 135.253 135.253-135.253 60.373 60.373-195.627 195.627-195.627-195.627zM707.627 728.96l-60.373 60.373-135.253-135.253-135.253 135.253-60.373-60.373 195.627-195.627 195.627 195.627z" />
-<glyph unicode="&#xe8a6;" d="M512 711.253l135.253-135.253 60.373 60.373-195.627 195.627-195.627-195.627 60.373-60.373 135.253 135.253zM512 184.747l-135.253 135.253-60.373-60.373 195.627-195.627 195.627 195.627-60.373 60.373-135.253-135.253z" />
-<glyph unicode="&#xe8a7;" d="M213.333 277.333c0-164.907 133.76-298.667 298.667-298.667s298.667 133.76 298.667 298.667v170.667h-597.333v-170.667zM688 773.547l89.6 89.6-35.2 35.2-98.347-98.347c-40.107 19.84-84.48 32-132.053 32s-91.947-12.16-132.053-32l-98.347 98.347-35.2-35.2 89.6-89.6c-74.027-54.187-122.667-141.227-122.667-240.213v-42.667h597.333v42.667c0 98.987-48.64 186.027-122.667 240.213zM384 576c-23.68 0-42.667 19.2-42.667 42.667s18.987 42.667 42.667 42.667c23.68 0 42.667-19.2 42.667-42.667s-18.987-42.667-42.667-42.667zM640 576c-23.68 0-42.667 19.2-42.667 42.667s18.987 42.667 42.667 42.667c23.68 0 42.667-19.2 42.667-42.667s-18.987-42.667-42.667-42.667z" />
-<glyph unicode="&#xe8a8;" d="M607.573 447.573l98.987-98.987c11.947 30.933 18.773 64.427 18.773 99.413 0 34.773-6.613 68.053-18.347 98.773l-99.413-99.2zM833.28 673.493l-53.973-53.973c26.667-51.413 42.027-109.653 42.027-171.733s-15.36-120.107-42.027-171.733l51.2-51.2c41.173 66.133 65.493 143.573 65.493 226.773 0 81.493-23.253 157.227-62.72 221.867zM670.080 631.253l-243.413 243.413h-42.667v-323.627l-195.627 195.627-60.373-60.373 238.293-238.293-238.293-238.293 60.373-60.373 195.627 195.627v-323.627h42.667l243.413 243.413-183.040 183.253 183.040 183.253zM469.333 711.253l80.213-80.213-80.213-80v160.213zM549.547 264.747l-80.213-80v160.427l80.213-80.427z" />
-<glyph unicode="&#xe8a9;" d="M853.333 277.333h85.333v85.333h-85.333v-85.333zM853.333 661.333v-213.333h85.333v213.333h-85.333zM426.667 789.333c-188.587 0-341.333-152.747-341.333-341.333s152.747-341.333 341.333-341.333 341.333 152.747 341.333 341.333-152.747 341.333-341.333 341.333zM426.667 362.667c-47.147 0-85.333 38.187-85.333 85.333s38.187 85.333 85.333 85.333 85.333-38.187 85.333-85.333-38.187-85.333-85.333-85.333z" />
-<glyph unicode="&#xe8aa;" d="M512 874.667c-234.667 0-426.667-192-426.667-426.667s192-426.667 426.667-426.667 426.667 192 426.667 426.667-192 426.667-426.667 426.667zM170.667 448c0 187.733 153.6 341.333 341.333 341.333 78.933 0 151.467-27.733 209.067-72.533l-477.867-477.867c-44.8 57.6-72.533 130.133-72.533 209.067zM512 106.667c-78.933 0-151.467 27.733-209.067 72.533l477.867 477.867c44.8-57.6 72.533-130.133 72.533-209.067 0-187.733-153.6-341.333-341.333-341.333z" />
-<glyph unicode="&#xe8ab;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333 0 78.933 27.093 151.253 71.893 209.067l478.507-478.507c-57.813-44.8-130.133-71.893-209.067-71.893zM781.44 238.933l-478.507 478.507c57.813 44.8 130.133 71.893 209.067 71.893 188.587 0 341.333-152.747 341.333-341.333 0-78.933-27.093-151.253-71.893-209.067z" />
-<glyph unicode="&#xe8ac;" d="M807.253 746.24c-8.747 25.173-32.64 43.093-60.587 43.093h-469.333c-27.947 0-51.84-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 320c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 320c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 533.333l64 192h469.333l64-192h-597.333z" />
-<glyph unicode="&#xe8ad;" d="M705.28 488.107l-45.227 45.227-208.213-208.213-90.453 90.453-45.227-45.227 135.68-135.68 253.44 253.44zM810.667 832h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v469.333h597.333v-469.333z" />
-<glyph unicode="&#xe8ae;" d="M397.227 234.667l104.107 104.107 104.107-104.107 45.227 45.227-104.107 104.107 104.107 104.107-45.227 45.227-104.107-104.107-104.107 104.107-45.227-45.227 104.107-104.107-104.107-104.107 45.227-45.227zM810.667 832h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v469.333h597.333v-469.333z" />
-<glyph unicode="&#xe8af;" d="M725.333 533.333h-426.667v-85.333h426.667v85.333zM810.667 832h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM810.667 149.333h-597.333v469.333h597.333v-469.333zM597.333 362.667h-298.667v-85.333h298.667v85.333z" />
-<glyph unicode="&#xe8b0;" d="M853.333 704h-341.333l-85.333 85.333h-256c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v426.667c0 47.147-38.187 85.333-85.333 85.333zM579.413 192l-152.747 89.387-152.747-89.387 40.32 173.653-134.827 116.693 177.707 15.36 69.547 163.627 69.333-163.627 177.707-15.36-134.827-116.693 40.533-173.653z" />
-<glyph unicode="&#xe8b1;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM213.333 362.667l149.333 192 106.667-128.213 149.333 192.213 192-256h-597.333z" />
-<glyph unicode="&#xe8b2;" d="M938.667 832h-640c-29.44 0-52.693-14.933-68.053-37.547l-230.613-346.24 230.613-346.24c15.36-22.613 41.387-37.973 70.827-37.973h637.227c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM384 384c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM597.333 384c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM810.667 384c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
-<glyph unicode="&#xe8b3;" d="M832 533.333c7.253 0 14.293-1.28 21.333-2.133v386.133l-810.667-810.667h554.667v128c0 37.76 16.427 71.893 42.667 95.36v11.307c0 105.813 86.187 192 192 192zM938.667 277.333v64c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-64c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h213.333c23.467 0 42.667 19.2 42.667 42.667v170.667c0 23.467-19.2 42.667-42.667 42.667zM896 277.333h-128v64c0 35.413 28.587 64 64 64s64-28.587 64-64v-64z" />
-<glyph unicode="&#xe8b4;" d="M627.413 554.667l97.92 97.92v-161.92h21.333l121.813 121.813-91.733 91.52 91.52 91.52-121.6 121.813h-21.333v-161.92l-97.92 97.92-30.080-30.080 119.253-119.253-119.253-119.253 30.080-30.080zM768 835.627l40.107-40.107-40.107-40.107v80.213zM768 652.587l40.107-40.107-40.107-40.107v80.213zM853.333 298.667c-53.12 0-104.32 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.96 61.44-219.52 160.213-281.173 280.96l93.867 94.080c11.733 11.733 15.147 28.587 10.453 43.307-15.787 48-24.32 99.413-24.32 152.533 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.68 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667z" />
-<glyph unicode="&#xe8b5;" d="M768 490.667l213.333 213.333-213.333 213.333v-128h-170.667v-170.667h170.667v-128zM853.333 298.667c-53.12 0-104.32 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.96 61.44-219.52 160.213-281.173 280.96l93.867 94.080c11.733 11.733 15.147 28.587 10.453 43.307-15.787 48.213-24.32 99.413-24.32 152.533 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.68 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667z" />
-<glyph unicode="&#xe8b6;" d="M853.333 298.667c-53.12 0-104.32 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.96 61.44-219.52 160.213-281.173 280.96l93.867 94.080c11.733 11.733 15.147 28.587 10.453 43.307-15.787 48-24.32 99.413-24.32 152.533 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.68 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667zM810.667 448h85.333c0 212.053-171.947 384-384 384v-85.333c164.907 0 298.667-133.76 298.667-298.667zM640 448h85.333c0 117.76-95.573 213.333-213.333 213.333v-85.333c70.613 0 128-57.387 128-128z" />
-<glyph unicode="&#xe8b7;" d="M853.333 298.667c-53.12 0-104.533 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.96 61.44-219.52 160.213-281.173 280.96l93.867 94.080c11.733 11.733 15.147 28.587 10.453 43.307-15.787 48-24.32 99.413-24.32 152.533 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.467 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667zM853.333 789.333v21.333c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-21.333c-23.68 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 18.987-42.667 42.667-42.667h213.333c23.68 0 42.667 19.2 42.667 42.667v170.667c0 23.467-18.987 42.667-42.667 42.667zM819.2 789.333h-145.067v21.333c0 40.107 32.427 72.533 72.533 72.533s72.533-32.427 72.533-72.533v-21.333z" />
-<glyph unicode="&#xe8b8;" d="M277.333 725.333l234.667-234.667 298.667 298.667-42.667 42.667-256-256-192 192h149.333v64h-256v-256h64v149.333zM1011.413 248.747c-129.92 123.52-305.92 199.253-499.413 199.253s-369.493-75.733-499.413-199.253c-7.893-7.893-12.587-18.56-12.587-30.293s4.693-22.4 12.587-30.080l105.6-105.813c7.68-7.68 18.347-12.587 30.293-12.587 11.52 0 22.187 4.693 29.867 12.16 33.707 31.36 72.107 58.027 113.707 79.147 14.080 7.040 23.893 21.547 23.893 38.4v132.48c61.653 19.84 127.573 30.507 196.053 30.507s134.4-10.667 196.267-30.72v-132.48c0-16.853 9.813-31.36 23.893-38.4 41.6-20.907 80-47.573 113.707-79.147 7.68-7.467 18.133-12.16 29.867-12.16s22.4 4.693 30.293 12.587l105.6 105.813c7.68 7.68 12.587 18.347 12.587 30.080s-4.907 22.613-12.8 30.507z" />
-<glyph unicode="&#xe8b9;" d="M725.333 832h-85.333v-298.667h85.333v298.667zM853.333 298.667c-53.12 0-104.32 8.533-152.32 24.32-14.72 4.693-31.573 1.28-43.307-10.453l-93.867-94.080c-120.96 61.44-219.52 160.213-281.173 280.96l93.867 94.080c11.733 11.733 15.147 28.587 10.453 43.307-15.787 48-24.32 99.413-24.32 152.533 0 23.68-18.987 42.667-42.667 42.667h-149.333c-23.68 0-42.667-18.987-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.68 0 42.667 18.987 42.667 42.667v149.333c0 23.68-18.987 42.667-42.667 42.667zM810.667 832v-298.667h85.333v298.667h-85.333z" />
-<glyph unicode="&#xe8ba;" d="M853.333 704h-170.667v85.333l-85.333 85.333h-170.667l-85.333-85.333v-85.333h-170.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-469.333c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v469.333c0 47.147-38.187 85.333-85.333 85.333zM426.667 789.333h170.667v-85.333h-170.667v85.333zM512 149.333l-213.333 213.333h128v170.667h170.667v-170.667h128l-213.333-213.333z" />
-<glyph unicode="&#xe8bb;" d="M853.333 704h-170.667v85.333l-85.333 85.333h-170.667l-85.333-85.333v-85.333h-170.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-469.333c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v469.333c0 47.147-38.187 85.333-85.333 85.333zM426.667 789.333h170.667v-85.333h-170.667v85.333zM448 213.333l-149.333 149.333 60.373 60.373 88.96-88.96 220.8 220.8 60.373-60.373-281.173-281.173z" />
-<glyph unicode="&#xe8bc;" d="M768 874.667h-341.333l-255.147-256-0.853-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM512 618.667h-85.333v170.667h85.333v-170.667zM640 618.667h-85.333v170.667h85.333v-170.667zM768 618.667h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe8bd;" d="M768 874.667h-341.333l-254.933-256-1.067-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM554.667 234.667h-85.333v85.333h85.333v-85.333zM554.667 405.333h-85.333v213.333h85.333v-213.333z" />
-<glyph unicode="&#xe8be;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM384 490.667h-85.333v85.333h85.333v-85.333zM554.667 490.667h-85.333v85.333h85.333v-85.333zM725.333 490.667h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe8bf;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM554.667 362.667h-85.333v85.333h85.333v-85.333zM554.667 533.333h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe8c0;" d="M512 789.333v128l-170.667-170.667 170.667-170.667v128c141.44 0 256-114.56 256-256 0-43.307-10.88-83.84-29.653-119.68l62.293-62.293c33.067 52.907 52.693 114.987 52.693 181.973 0 188.587-152.747 341.333-341.333 341.333zM512 192c-141.44 0-256 114.56-256 256 0 43.307 10.88 83.84 29.653 119.68l-62.293 62.293c-33.067-52.907-52.693-114.987-52.693-181.973 0-188.587 152.747-341.333 341.333-341.333v-128l170.667 170.667-170.667 170.667v-128z" />
-<glyph unicode="&#xe8c1;" d="M426.667 689.067v89.173c-34.133-8.747-65.92-22.827-95.147-40.96l62.507-62.507c10.453 5.333 21.333 10.453 32.64 14.293zM122.24 729.173l100.48-100.48c-32.853-52.48-52.053-114.133-52.053-180.693 0-94.293 38.613-179.2 100.48-240.853l-100.48-100.48h256v256l-95.36-95.36c-46.507 46.293-75.307 110.080-75.307 180.693 0 42.667 10.667 82.773 29.227 118.187l344.96-344.96c-10.453-5.547-21.333-10.453-32.64-14.507v-88.96c34.133 8.747 65.92 22.827 95.147 40.96l100.693-100.693 54.4 54.4-671.36 671.147-54.187-54.4zM853.333 789.333h-256v-256l95.36 95.36c46.507-46.293 75.307-110.080 75.307-180.693 0-42.667-10.667-82.773-29.227-118.187l62.507-62.507c32.853 52.48 52.053 114.133 52.053 180.693 0 94.293-38.613 179.2-100.48 240.853l100.48 100.48z" />
-<glyph unicode="&#xe8c2;" d="M128 448c0-94.293 38.827-179.2 100.48-240.853l-100.48-100.48h256v256l-95.36-95.36c-46.507 46.293-75.307 110.080-75.307 180.693 0 111.36 71.253 205.867 170.667 241.067v89.173c-147.2-37.973-256-171.307-256-330.24zM469.333 234.667h85.333v85.333h-85.333v-85.333zM896 789.333h-256v-256l95.36 95.36c46.507-46.293 75.307-110.080 75.307-180.693 0-111.36-71.253-205.867-170.667-241.067v-88.96c147.2 37.76 256 171.093 256 330.027 0 94.293-38.827 179.2-100.48 240.853l100.48 100.48zM469.333 405.333h85.333v256h-85.333v-256z" />
-<glyph unicode="&#xe8c3;" d="M725.333 916.907l-426.667 0.427c-47.147 0-85.333-38.187-85.333-85.333v-768c0-47.147 38.187-85.333 85.333-85.333h426.667c47.147 0 85.333 38.187 85.333 85.333v768c0 47.147-38.187 84.907-85.333 84.907zM725.333 149.333h-426.667v597.333h426.667v-597.333zM682.667 405.333h-128v213.333h-85.333v-213.333h-128l170.667-170.667 170.667 170.667z" />
-<glyph unicode="&#xe8c4;" d="M85.333 277.333v-85.333c117.76 0 213.333-95.573 213.333-213.333h85.333c0 164.907-133.76 298.667-298.667 298.667zM85.333 106.667v-128h128c0 70.613-57.387 128-128 128zM85.333 448v-85.333c212.053 0 384-171.947 384-384h85.333c0 259.2-210.133 469.333-469.333 469.333zM725.333 916.907l-426.667 0.427c-47.147 0-85.333-38.187-85.333-85.333v-314.453c29.44-7.040 58.027-15.787 85.333-27.307v256.427h426.667v-554.667h-129.28c22.187-53.12 35.84-110.72 40.533-170.667h88.747c47.147 0 85.333 38.187 85.333 85.333v725.333c0 47.147-38.187 84.907-85.333 84.907z" />
-<glyph unicode="&#xe8c5;" d="M807.253 746.24c-8.747 25.173-32.64 43.093-60.587 43.093h-469.333c-27.947 0-51.84-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.68 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 320c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 320c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 533.333l64 192h469.333l64-192h-597.333z" />
-<glyph unicode="&#xe8c6;" d="M0 320h85.333v256h-85.333v-256zM128 234.667h85.333v426.667h-85.333v-426.667zM938.667 576v-256h85.333v256h-85.333zM810.667 234.667h85.333v426.667h-85.333v-426.667zM704 832h-384c-35.413 0-64-28.587-64-64v-640c0-35.413 28.587-64 64-64h384c35.413 0 64 28.587 64 64v640c0 35.413-28.587 64-64 64zM682.667 149.333h-341.333v597.333h341.333v-597.333z" />
-<glyph unicode="&#xe8c7;" d="M853.333 874.667h-682.667c-47.147 0-84.907-38.187-84.907-85.333l-0.427-768 170.667 170.667h597.333c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM768 362.667l-170.667 136.533v-136.533h-341.333v341.333h341.333v-136.533l170.667 136.533v-341.333z" />
-<glyph unicode="&#xe8c8;" d="M938.667 789.333v21.333c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-21.333c-23.68 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 18.987-42.667 42.667-42.667h213.333c23.68 0 42.667 19.2 42.667 42.667v170.667c0 23.467-18.987 42.667-42.667 42.667zM904.533 789.333h-145.067v21.333c0 40.107 32.427 72.533 72.533 72.533s72.533-32.427 72.533-72.533v-21.333zM807.467 448c1.707-14.080 3.2-28.16 3.2-42.667 0-88.747-34.133-169.387-89.813-230.187-10.88 34.56-42.88 59.52-80.853 59.52h-42.667v128c0 23.467-19.2 42.667-42.667 42.667h-256v85.333h85.333c23.467 0 42.667 19.2 42.667 42.667v85.333h85.333c47.147 0 85.333 38.187 85.333 85.333v108.373c-40.32 12.8-83.413 19.627-128 19.627-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667c0 14.507-0.853 28.587-2.133 42.667h-86.4zM426.667 66.987c-168.32 20.907-298.667 164.267-298.667 338.347 0 26.24 3.2 51.84 8.96 76.373l204.373-204.373v-42.667c0-47.147 38.187-85.333 85.333-85.333v-82.347z" />
-<glyph unicode="&#xe8c9;" d="M512 661.333c47.147 0 85.333 38.187 85.333 85.333 0 16-4.48 31.147-12.16 43.947l-73.173 126.72-73.173-126.72c-7.68-12.8-12.16-27.947-12.16-43.947 0-47.147 38.187-85.333 85.333-85.333zM896 64v170.667c0 47.147-38.187 85.333-85.333 85.333h-42.667v128c0 47.147-38.187 85.333-85.333 85.333h-128v85.333h-85.333v-85.333h-128c-47.147 0-85.333-38.187-85.333-85.333v-128h-42.667c-47.147 0-85.333-38.187-85.333-85.333v-170.667h-85.333v-85.333h938.667v85.333h-85.333z" />
-<glyph unicode="&#xe8ca;" d="M512 661.333v170.667h-426.667v-768h853.333v597.333h-426.667zM256 149.333h-85.333v85.333h85.333v-85.333zM256 320h-85.333v85.333h85.333v-85.333zM256 490.667h-85.333v85.333h85.333v-85.333zM256 661.333h-85.333v85.333h85.333v-85.333zM426.667 149.333h-85.333v85.333h85.333v-85.333zM426.667 320h-85.333v85.333h85.333v-85.333zM426.667 490.667h-85.333v85.333h85.333v-85.333zM426.667 661.333h-85.333v85.333h85.333v-85.333zM853.333 149.333h-341.333v85.333h85.333v85.333h-85.333v85.333h85.333v85.333h-85.333v85.333h341.333v-426.667zM768 490.667h-85.333v-85.333h85.333v85.333zM768 320h-85.333v-85.333h85.333v85.333z" />
-<glyph unicode="&#xe8cb;" d="M682.667 490.667c70.613 0 127.573 57.387 127.573 128s-56.96 128-127.573 128c-70.613 0-128-57.387-128-128s57.387-128 128-128zM341.333 490.667c70.613 0 127.573 57.387 127.573 128s-56.96 128-127.573 128c-70.613 0-128-57.387-128-128s57.387-128 128-128zM341.333 405.333c-99.627 0-298.667-49.92-298.667-149.333v-106.667h597.333v106.667c0 99.413-199.040 149.333-298.667 149.333zM682.667 405.333c-12.373 0-26.24-0.853-41.173-2.347 49.493-35.627 83.84-83.627 83.84-146.987v-106.667h256v106.667c0 99.413-199.040 149.333-298.667 149.333z" />
-<glyph unicode="&#xe8cc;" d="M341.333 533.333h-128v128h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333zM768 490.667c70.613 0 127.573 57.387 127.573 128s-56.96 128-127.573 128c-13.653 0-26.667-2.133-39.040-6.187 24.107-34.56 38.613-76.587 38.613-121.813s-14.507-87.253-38.613-121.813c12.373-4.053 25.387-6.187 39.040-6.187zM554.667 490.667c70.613 0 127.573 57.387 127.573 128s-56.96 128-127.573 128c-70.613 0-128-57.387-128-128s57.387-128 128-128zM837.12 398.507c35.413-30.933 58.88-70.827 58.88-121.173v-85.333h128v85.333c0 65.707-101.333 106.027-186.88 121.173zM554.667 405.333c-85.333 0-256-42.667-256-128v-85.333h512v85.333c0 85.333-170.667 128-256 128z" />
-<glyph unicode="&#xe8cd;" d="M640 490.667v256l-128 128-128-128v-85.333h-256v-597.333h768v426.667h-256zM298.667 149.333h-85.333v85.333h85.333v-85.333zM298.667 320h-85.333v85.333h85.333v-85.333zM298.667 490.667h-85.333v85.333h85.333v-85.333zM554.667 149.333h-85.333v85.333h85.333v-85.333zM554.667 320h-85.333v85.333h85.333v-85.333zM554.667 490.667h-85.333v85.333h85.333v-85.333zM554.667 661.333h-85.333v85.333h85.333v-85.333zM810.667 149.333h-85.333v85.333h85.333v-85.333zM810.667 320h-85.333v85.333h85.333v-85.333z" />
-<glyph unicode="&#xe8ce;" d="M511.787 874.667c-235.733 0-426.453-190.933-426.453-426.667s190.72-426.667 426.453-426.667c235.733 0 426.88 190.933 426.88 426.667s-191.147 426.667-426.88 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM661.333 490.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 490.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 213.333c99.413 0 183.68 62.080 217.813 149.333h-435.627c34.133-87.253 118.4-149.333 217.813-149.333z" />
-<glyph unicode="&#xe8cf;" d="M490.667 21.333c47.147 0 85.333 38.187 85.333 85.333h-170.667c0-47.147 38.187-85.333 85.333-85.333zM768 277.333v234.667c0 131.2-91.093 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.24-29.013-213.333-138.453-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333z" />
-<glyph unicode="&#xe8d0;" d="M490.667 21.333c47.147 0 85.333 38.187 85.333 85.333h-170.667c0-47.147 38.187-85.333 85.333-85.333zM768 277.333v234.667c0 131.2-91.093 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.24-29.013-213.333-138.453-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333zM682.667 234.667h-384v277.333c0 106.027 85.973 192 192 192s192-85.973 192-192v-277.333z" />
-<glyph unicode="&#xe8d1;" d="M490.667 21.333c47.147 0 85.333 38.187 85.333 85.333h-170.667c0-47.147 38.187-85.333 85.333-85.333zM768 512c0 131.2-91.093 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-21.76-5.12-42.24-13.653-61.653-23.68l402.987-402.987v157.013zM756.48 149.333l85.333-85.333 54.187 54.4-713.6 713.6-54.4-54.4 124.587-124.587c-24.747-41.173-39.253-89.387-39.253-141.013v-234.667l-85.333-85.333v-42.667h628.48z" />
-<glyph unicode="&#xe8d2;" d="M280.747 807.253l-61.013 61.013c-102.187-77.867-169.6-198.187-176-334.933h85.333c6.613 113.067 64.853 212.053 151.68 273.92zM852.267 533.333h85.333c-6.4 136.747-73.813 257.067-176 334.933l-60.8-60.8c86.613-62.080 144.853-161.067 151.467-274.133zM768 512c0 131.2-91.093 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.24-29.013-213.333-138.453-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333v234.667zM490.667 21.333c5.973 0 11.733 0.64 17.28 1.707 27.733 5.76 50.56 24.96 61.44 50.347 4.267 10.24 6.613 21.333 6.613 33.28h-170.667c0-47.147 38.187-85.333 85.333-85.333z" />
-<glyph unicode="&#xe8d3;" d="M490.667 21.333c47.147 0 85.333 38.187 85.333 85.333h-170.667c0-47.147 38.187-85.333 85.333-85.333zM768 277.333v234.667c0 131.2-91.093 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.24-29.013-213.333-138.453-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333zM597.333 541.867l-119.467-145.067h119.467v-76.8h-213.333v76.8l119.467 145.067h-119.467v76.8h213.333v-76.8z" />
-<glyph unicode="&#xe8d4;" d="M128 746.667v-256h213.333l-42.667 170.667 170.667-42.667v213.333h-256c-47.147 0-85.333-38.187-85.333-85.333zM341.333 405.333h-213.333v-256c0-47.147 38.187-85.333 85.333-85.333h256v213.333l-170.667-42.667 42.667 170.667zM725.333 234.667l-170.667 42.667v-213.333h256c47.147 0 85.333 38.187 85.333 85.333v256h-213.333l42.667-170.667zM810.667 832h-256v-213.333l170.667 42.667-42.667-170.667h213.333v256c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe8d5;" d="M853.333 789.333h-135.253l-78.080 85.333h-256l-78.080-85.333h-135.253c-47.147 0-85.333-38.187-85.333-85.333v-512c0-47.147 38.187-85.333 85.333-85.333h682.667c47.147 0 85.333 38.187 85.333 85.333v512c0 47.147-38.187 85.333-85.333 85.333zM512 661.333c69.547 0 130.773-33.92 169.813-85.333h-169.813c-70.613 0-128-57.387-128-128 0-15.147 2.987-29.227 7.893-42.667h-88.96c-2.773 13.867-4.267 27.947-4.267 42.667 0 117.76 95.573 213.333 213.333 213.333zM512 234.667c-69.547 0-130.773 33.707-169.6 85.333h169.6c70.613 0 128 57.387 128 128 0 14.933-2.987 29.227-7.893 42.667h88.96c2.773-13.867 4.267-27.947 4.267-42.667 0-117.76-95.573-213.333-213.333-213.333z" />
-<glyph unicode="&#xe8d6;" d="M682.667 490.667c70.613 0 127.573 57.387 127.573 128s-56.96 128-127.573 128c-70.613 0-128-57.387-128-128s57.387-128 128-128zM341.333 490.667c70.613 0 127.573 57.387 127.573 128s-56.96 128-127.573 128c-70.613 0-128-57.387-128-128s57.387-128 128-128zM341.333 405.333c-99.627 0-298.667-49.92-298.667-149.333v-106.667h597.333v106.667c0 99.413-199.040 149.333-298.667 149.333zM682.667 405.333c-12.373 0-26.24-0.853-41.173-2.347 49.493-35.627 83.84-83.627 83.84-146.987v-106.667h256v106.667c0 99.413-199.040 149.333-298.667 149.333z" />
-<glyph unicode="&#xe8d7;" d="M704 405.333c-51.413 0-131.2-14.293-192-42.88-60.8 28.587-140.587 42.88-192 42.88-92.373 0-277.333-46.293-277.333-138.667v-117.333h938.667v117.333c0 92.373-184.96 138.667-277.333 138.667zM533.333 213.333h-426.667v53.333c0 22.827 109.227 74.667 213.333 74.667s213.333-51.84 213.333-74.667v-53.333zM917.333 213.333h-320v53.333c0 19.413-8.533 36.693-22.187 52.053 37.76 12.8 83.84 22.613 128.853 22.613 104.107 0 213.333-51.84 213.333-74.667v-53.333zM320 448c82.56 0 149.333 66.987 149.333 149.333s-66.773 149.333-149.333 149.333c-82.347 0-149.333-66.987-149.333-149.333s66.987-149.333 149.333-149.333zM320 682.667c47.147 0 85.333-38.187 85.333-85.333s-38.187-85.333-85.333-85.333-85.333 38.187-85.333 85.333 38.187 85.333 85.333 85.333zM704 448c82.56 0 149.333 66.987 149.333 149.333s-66.773 149.333-149.333 149.333c-82.347 0-149.333-66.987-149.333-149.333s66.987-149.333 149.333-149.333zM704 682.667c47.147 0 85.333-38.187 85.333-85.333s-38.187-85.333-85.333-85.333-85.333 38.187-85.333 85.333 38.187 85.333 85.333 85.333z" />
-<glyph unicode="&#xe8d8;" d="M512 448c94.293 0 170.667 76.587 170.667 170.667 0 94.293-76.373 170.667-170.667 170.667s-170.667-76.373-170.667-170.667c0-94.080 76.373-170.667 170.667-170.667zM512 362.667c-113.707 0-341.333-56.96-341.333-170.667v-85.333h682.667v85.333c0 113.707-227.627 170.667-341.333 170.667z" />
-<glyph unicode="&#xe8d9;" d="M640 448c94.293 0 170.667 76.587 170.667 170.667 0 94.293-76.373 170.667-170.667 170.667s-170.667-76.373-170.667-170.667c0-94.080 76.373-170.667 170.667-170.667zM256 533.333v128h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128zM640 362.667c-113.707 0-341.333-56.96-341.333-170.667v-85.333h682.667v85.333c0 113.707-227.627 170.667-341.333 170.667z" />
-<glyph unicode="&#xe8da;" d="M512 708.267c49.493 0 89.6-40.107 89.6-89.6s-40.107-89.6-89.6-89.6-89.6 40.107-89.6 89.6 40.107 89.6 89.6 89.6zM512 324.267c126.933 0 260.267-62.080 260.267-89.6v-46.933h-520.533v46.933c0 27.52 133.333 89.6 260.267 89.6zM512 789.333c-94.293 0-170.667-76.373-170.667-170.667 0-94.080 76.373-170.667 170.667-170.667s170.667 76.587 170.667 170.667c0 94.293-76.373 170.667-170.667 170.667zM512 405.333c-113.707 0-341.333-56.96-341.333-170.667v-128h682.667v128c0 113.707-227.627 170.667-341.333 170.667z" />
-<glyph unicode="&#xe8db;" d="M426.667 618.667h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667zM618.667 700.587v-77.653l106.667 21.333v-452.267h85.333v554.667z" />
-<glyph unicode="&#xe8dc;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM384 234.667h-85.333v298.667h85.333v-298.667zM554.667 234.667h-85.333v426.667h85.333v-426.667zM725.333 234.667h-85.333v170.667h85.333v-170.667z" />
-<glyph unicode="&#xe8dd;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM469.333 109.653c-168.32 20.907-298.667 164.267-298.667 338.347 0 26.24 3.2 51.84 8.96 76.373l204.373-204.373v-42.667c0-47.147 38.187-85.333 85.333-85.333v-82.347zM763.52 217.813c-10.88 34.56-42.88 59.52-80.853 59.52h-42.667v128c0 23.467-19.2 42.667-42.667 42.667h-256v85.333h85.333c23.467 0 42.667 19.2 42.667 42.667v85.333h85.333c47.147 0 85.333 38.187 85.333 85.333v17.707c125.013-50.56 213.333-173.013 213.333-316.373 0-88.747-34.133-169.387-89.813-230.187z" />
-<glyph unicode="&#xe8de;" d="M213.333 397.653v-170.667l298.667-162.987 298.667 162.987v170.667l-298.667-162.987-298.667 162.987zM512 832l-469.333-256 469.333-256 384 209.493v-294.827h85.333v341.333l-469.333 256z" />
-<glyph unicode="&#xe8df;" d="M768 273.707c-32.427 0-61.653-12.587-83.84-32.853l-304 177.28c2.347 9.6 3.84 19.627 3.84 29.867s-1.493 20.267-3.84 29.867l300.8 175.573c22.827-21.333 53.333-34.56 87.040-34.56 70.613 0 128 57.387 128 128s-57.387 128-128 128-128-57.387-128-128c0-10.24 1.493-20.267 3.84-29.867l-300.8-175.573c-22.827 21.333-53.333 34.56-87.040 34.56-70.613 0-128-57.387-128-128s57.387-128 128-128c33.707 0 64.213 13.227 87.040 34.56l304-177.28c-2.133-8.96-3.413-18.347-3.413-27.947 0-68.693 55.68-124.373 124.373-124.373s124.373 55.68 124.373 124.373-55.68 124.373-124.373 124.373z" />
-<glyph unicode="&#xe8e0;" d="M576 931.413s31.573-113.067 31.573-204.8c0-87.893-57.6-159.36-145.707-159.36s-154.667 71.253-154.667 159.36l1.067 15.36c-85.76-102.613-137.6-234.88-137.6-379.307 0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333c0 230.187-110.72 435.413-277.333 568.747zM499.627 149.333c-75.947 0-137.6 59.947-137.6 133.973 0 69.333 44.587 117.973 120.107 133.12s153.6 51.413 196.907 109.867c16.64-55.040 25.387-113.067 25.387-172.16 0-112.853-91.733-204.8-204.8-204.8z" />
-<glyph unicode="&#xe8e1;" d="M810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333zM426.667 234.667l-213.333 213.333 60.373 60.373 152.96-152.96 323.627 323.627 60.373-60.373-384-384z" />
-<glyph unicode="&#xe8e2;" d="M810.667 746.667v-597.333h-597.333v597.333h597.333zM810.667 832h-597.333c-47.147 0-85.333-38.187-85.333-85.333v-597.333c0-47.147 38.187-85.333 85.333-85.333h597.333c47.147 0 85.333 38.187 85.333 85.333v597.333c0 47.147-38.187 85.333-85.333 85.333z" />
-<glyph unicode="&#xe8e3;" d="M512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
-<glyph unicode="&#xe8e4;" d="M512 661.333c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333 213.333 95.573 213.333 213.333-95.573 213.333-213.333 213.333zM512 874.667c-235.733 0-426.667-190.933-426.667-426.667s190.933-426.667 426.667-426.667 426.667 190.933 426.667 426.667-190.933 426.667-426.667 426.667zM512 106.667c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
-</font></defs></svg>
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.ttf b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.ttf
deleted file mode 100755
index f0c07f7a..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.ttf
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woff b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woff
deleted file mode 100755
index e06f547c..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woff
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woff2 b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woff2
deleted file mode 100755
index ccf4eff7..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/material-design-icons/Material-Design-Icons.woff2
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.ttf b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.ttf
deleted file mode 100755
index 68822caf..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woff b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woff
deleted file mode 100755
index 1f75afdc..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woff2 b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woff2
deleted file mode 100755
index 350d1c3a..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.ttf b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.ttf
deleted file mode 100755
index aa453407..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.ttf
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woff b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woff
deleted file mode 100755
index 3480c6c8..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woff
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woff2 b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woff2
deleted file mode 100755
index 9a4d98c4..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Light.woff2
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.ttf b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.ttf
deleted file mode 100755
index a3c1a1f1..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.ttf
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woff b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woff
deleted file mode 100755
index 1186773f..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woff
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woff2 b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woff2
deleted file mode 100755
index d10a5926..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Medium.woff2
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.ttf b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.ttf
deleted file mode 100755
index 0e58508a..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woff b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woff
deleted file mode 100755
index f823258a..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woff2 b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woff2
deleted file mode 100755
index b7082ef3..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.ttf b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.ttf
deleted file mode 100755
index 8779333b..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.ttf
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woff b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woff
deleted file mode 100755
index 2a98c1e4..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woff
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woff2 b/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woff2
deleted file mode 100755
index a38025a1..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/font/roboto/Roboto-Thin.woff2
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/index.html b/StoneIsland/plugins/phonegap-plugin-push/example/www/index.html
deleted file mode 100755
index d2a72cb6..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
- <head>
- <meta charset="utf-8" />
- <meta name="format-detection" content="telephone=no" />
- <meta name="msapplication-tap-highlight" content="no" />
- <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 -->
- <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
- <!-- link rel="stylesheet" type="text/css" href="css/index.css" / -->
- <link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/>
- <title>Hello World</title>
- </head>
- <body>
- <nav>
- <div class="nav-wrapper">
- <a href="#" class="brand-logo">Push Demo</a>
- </div>
- </nav>
-
- <div class="row">
- <div class="col s12 m6">
- <div class="card darken-1">
- <div class="card-content black-text">
- <span class="card-title black-text">Registration ID</span>
- <p id="regId">Requested</p>
- </div>
- </div>
- </div>
- </div>
-
- <div id="cards"></div>
-
- <script type="text/javascript" src="cordova.js"></script>
- <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
- <script type="text/javascript" src="js/materialize.min.js"></script>
- <script type="text/javascript" src="js/index.js"></script>
- </body>
-</html>
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/js/index.js b/StoneIsland/plugins/phonegap-plugin-push/example/www/js/index.js
deleted file mode 100755
index 86059f91..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/js/index.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-var app = {
- // Application Constructor
- initialize: function() {
- this.bindEvents();
- },
- // Bind Event Listeners
- //
- // Bind any events that are required on startup. Common events are:
- // 'load', 'deviceready', 'offline', and 'online'.
- bindEvents: function() {
- document.addEventListener('deviceready', this.onDeviceReady, false);
- },
- // deviceready Event Handler
- //
- // The scope of 'this' is the event. In order to call the 'receivedEvent'
- // function, we must explicitly call 'app.receivedEvent(...);'
- onDeviceReady: function() {
- var push = PushNotification.init({
- "android": {
- "senderID": "1234567890"
- },
- "ios": {"alert": "true", "badge": "true", "sound": "true"},
- "windows": {}
- });
-
- push.on('registration', function(data) {
- console.log("registration event");
- document.getElementById("regId").innerHTML = data.registrationId;
- console.log(JSON.stringify(data));
- });
-
- push.on('notification', function(data) {
- console.log("notification event");
- console.log(JSON.stringify(data));
- var cards = document.getElementById("cards");
- var card = '<div class="row">' +
- '<div class="col s12 m6">' +
- ' <div class="card darken-1">' +
- ' <div class="card-content black-text">' +
- ' <span class="card-title black-text">' + data.title + '</span>' +
- ' <p>' + data.message + '</p>' +
- ' </div>' +
- ' </div>' +
- ' </div>' +
- '</div>';
- cards.innerHTML += card;
-
- push.finish(function () {
- console.log('finish successfully called');
- });
- });
-
- push.on('error', function(e) {
- console.log("push error");
- });
- }
-};
-
-app.initialize(); \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/js/jquery-2.1.1.min.js b/StoneIsland/plugins/phonegap-plugin-push/example/www/js/jquery-2.1.1.min.js
deleted file mode 100755
index e5ace116..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/js/jquery-2.1.1.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
-},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
-},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
diff --git a/StoneIsland/plugins/phonegap-plugin-push/example/www/js/materialize.min.js b/StoneIsland/plugins/phonegap-plugin-push/example/www/js/materialize.min.js
deleted file mode 100755
index ed30cdaa..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/example/www/js/materialize.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*!
- * Materialize v0.96.1 (http://materializecss.com)
- * Copyright 2014-2015 Materialize
- * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
- */
-jQuery.easing.jswing=jQuery.easing.swing,jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(a,b,c,d,e){return jQuery.easing[jQuery.easing.def](a,b,c,d,e)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return 0==b?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return 0==b?c:b==e?c+d:(b/=e/2)<1?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){return(b/=e/2)<1?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(1==(b/=e))return c+d;if(g||(g=.3*e),h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(1==(b/=e))return c+d;if(g||(g=.3*e),h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin(2*(b*e-f)*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(2==(b/=e/2))return c+d;if(g||(g=.3*e*1.5),h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return 1>b?-.5*h*Math.pow(2,10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)+c:h*Math.pow(2,-10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)*.5+d+c},easeInBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*(b/=e)*b*((f+1)*b-f)+c},easeOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*((b=b/e-1)*b*((f+1)*b+f)+1)+c},easeInOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),(b/=e/2)<1?d/2*b*b*(((f*=1.525)+1)*b-f)+c:d/2*((b-=2)*b*(((f*=1.525)+1)*b+f)+2)+c},easeInBounce:function(a,b,c,d,e){return d-jQuery.easing.easeOutBounce(a,e-b,0,d,e)+c},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?7.5625*d*b*b+c:2/2.75>b?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:2.5/2.75>b?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(a,b,c,d,e){return e/2>b?.5*jQuery.easing.easeInBounce(a,2*b,0,d,e)+c:.5*jQuery.easing.easeOutBounce(a,2*b-e,0,d,e)+.5*d+c}}),jQuery.extend(jQuery.easing,{easeInOutMaterial:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:d/4*((b-=2)*b*b+2)+c}}),!function(a){function b(a){var b=a.length,d=c.type(a);return"function"===d||c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||0===b||"number"==typeof b&&b>0&&b-1 in a}if(!a.jQuery){var c=function(a,b){return new c.fn.init(a,b)};c.isWindow=function(a){return null!=a&&a==a.window},c.type=function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?e[g.call(a)]||"object":typeof a},c.isArray=Array.isArray||function(a){return"array"===c.type(a)},c.isPlainObject=function(a){var b;if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!f.call(a,"constructor")&&!f.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}for(b in a);return void 0===b||f.call(a,b)},c.each=function(a,c,d){var e,f=0,g=a.length,h=b(a);if(d){if(h)for(;g>f&&(e=c.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=c.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=c.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=c.call(a[f],f,a[f]),e===!1)break;return a},c.data=function(a,b,e){if(void 0===e){var f=a[c.expando],g=f&&d[f];if(void 0===b)return g;if(g&&b in g)return g[b]}else if(void 0!==b){var f=a[c.expando]||(a[c.expando]=++c.uuid);return d[f]=d[f]||{},d[f][b]=e,e}},c.removeData=function(a,b){var e=a[c.expando],f=e&&d[e];f&&c.each(b,function(a,b){delete f[b]})},c.extend=function(){var a,b,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[i]||{},i++),"object"!=typeof h&&"function"!==c.type(h)&&(h={}),i===j&&(h=this,i--);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(c.isPlainObject(d)||(b=c.isArray(d)))?(b?(b=!1,g=a&&c.isArray(a)?a:[]):g=a&&c.isPlainObject(a)?a:{},h[e]=c.extend(k,g,d)):void 0!==d&&(h[e]=d));return h},c.queue=function(a,d,e){function f(a,c){var d=c||[];return null!=a&&(b(Object(a))?!function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;)a[e++]=b[d++];if(c!==c)for(;void 0!==b[d];)a[e++]=b[d++];return a.length=e,a}(d,"string"==typeof a?[a]:a):[].push.call(d,a)),d}if(a){d=(d||"fx")+"queue";var g=c.data(a,d);return e?(!g||c.isArray(e)?g=c.data(a,d,f(e)):g.push(e),g):g||[]}},c.dequeue=function(a,b){c.each(a.nodeType?[a]:a,function(a,d){b=b||"fx";var e=c.queue(d,b),f=e.shift();"inprogress"===f&&(f=e.shift()),f&&("fx"===b&&e.unshift("inprogress"),f.call(d,function(){c.dequeue(d,b)}))})},c.fn=c.prototype={init:function(a){if(a.nodeType)return this[0]=a,this;throw new Error("Not a DOM node.")},offset:function(){var b=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:b.top+(a.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:b.left+(a.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function a(){for(var a=this.offsetParent||document;a&&"html"===!a.nodeType.toLowerCase&&"static"===a.style.position;)a=a.offsetParent;return a||document}var b=this[0],a=a.apply(b),d=this.offset(),e=/^(?:body|html)$/i.test(a.nodeName)?{top:0,left:0}:c(a).offset();return d.top-=parseFloat(b.style.marginTop)||0,d.left-=parseFloat(b.style.marginLeft)||0,a.style&&(e.top+=parseFloat(a.style.borderTopWidth)||0,e.left+=parseFloat(a.style.borderLeftWidth)||0),{top:d.top-e.top,left:d.left-e.left}}};var d={};c.expando="velocity"+(new Date).getTime(),c.uuid=0;for(var e={},f=e.hasOwnProperty,g=e.toString,h="Boolean Number String Function Array Date RegExp Object Error".split(" "),i=0;i<h.length;i++)e["[object "+h[i]+"]"]=h[i].toLowerCase();c.fn.init.prototype=c.fn,a.Velocity={Utilities:c}}}(window),function(a){"object"==typeof module&&"object"==typeof module.exports?module.exports=a():"function"==typeof define&&define.amd?define(a):a()}(function(){return function(a,b,c,d){function e(a){for(var b=-1,c=a?a.length:0,d=[];++b<c;){var e=a[b];e&&d.push(e)}return d}function f(a){return p.isWrapped(a)?a=[].slice.call(a):p.isNode(a)&&(a=[a]),a}function g(a){var b=m.data(a,"velocity");return null===b?d:b}function h(a){return function(b){return Math.round(b*a)*(1/a)}}function i(a,c,d,e){function f(a,b){return 1-3*b+3*a}function g(a,b){return 3*b-6*a}function h(a){return 3*a}function i(a,b,c){return((f(b,c)*a+g(b,c))*a+h(b))*a}function j(a,b,c){return 3*f(b,c)*a*a+2*g(b,c)*a+h(b)}function k(b,c){for(var e=0;p>e;++e){var f=j(c,a,d);if(0===f)return c;var g=i(c,a,d)-b;c-=g/f}return c}function l(){for(var b=0;t>b;++b)x[b]=i(b*u,a,d)}function m(b,c,e){var f,g,h=0;do g=c+(e-c)/2,f=i(g,a,d)-b,f>0?e=g:c=g;while(Math.abs(f)>r&&++h<s);return g}function n(b){for(var c=0,e=1,f=t-1;e!=f&&x[e]<=b;++e)c+=u;--e;var g=(b-x[e])/(x[e+1]-x[e]),h=c+g*u,i=j(h,a,d);return i>=q?k(b,h):0==i?h:m(b,c,c+u)}function o(){y=!0,(a!=c||d!=e)&&l()}var p=4,q=.001,r=1e-7,s=10,t=11,u=1/(t-1),v="Float32Array"in b;if(4!==arguments.length)return!1;for(var w=0;4>w;++w)if("number"!=typeof arguments[w]||isNaN(arguments[w])||!isFinite(arguments[w]))return!1;a=Math.min(a,1),d=Math.min(d,1),a=Math.max(a,0),d=Math.max(d,0);var x=v?new Float32Array(t):new Array(t),y=!1,z=function(b){return y||o(),a===c&&d===e?b:0===b?0:1===b?1:i(n(b),c,e)};z.getControlPoints=function(){return[{x:a,y:c},{x:d,y:e}]};var A="generateBezier("+[a,c,d,e]+")";return z.toString=function(){return A},z}function j(a,b){var c=a;return p.isString(a)?t.Easings[a]||(c=!1):c=p.isArray(a)&&1===a.length?h.apply(null,a):p.isArray(a)&&2===a.length?u.apply(null,a.concat([b])):p.isArray(a)&&4===a.length?i.apply(null,a):!1,c===!1&&(c=t.Easings[t.defaults.easing]?t.defaults.easing:s),c}function k(a){if(a){var b=(new Date).getTime(),c=t.State.calls.length;c>1e4&&(t.State.calls=e(t.State.calls));for(var f=0;c>f;f++)if(t.State.calls[f]){var h=t.State.calls[f],i=h[0],j=h[2],n=h[3],o=!!n,q=null;n||(n=t.State.calls[f][3]=b-16);for(var r=Math.min((b-n)/j.duration,1),s=0,u=i.length;u>s;s++){var w=i[s],y=w.element;if(g(y)){var z=!1;if(j.display!==d&&null!==j.display&&"none"!==j.display){if("flex"===j.display){var A=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];m.each(A,function(a,b){v.setPropertyValue(y,"display",b)})}v.setPropertyValue(y,"display",j.display)}j.visibility!==d&&"hidden"!==j.visibility&&v.setPropertyValue(y,"visibility",j.visibility);for(var B in w)if("element"!==B){var C,D=w[B],E=p.isString(D.easing)?t.Easings[D.easing]:D.easing;if(1===r)C=D.endValue;else{var F=D.endValue-D.startValue;if(C=D.startValue+F*E(r,j,F),!o&&C===D.currentValue)continue}if(D.currentValue=C,"tween"===B)q=C;else{if(v.Hooks.registered[B]){var G=v.Hooks.getRoot(B),H=g(y).rootPropertyValueCache[G];H&&(D.rootPropertyValue=H)}var I=v.setPropertyValue(y,B,D.currentValue+(0===parseFloat(C)?"":D.unitType),D.rootPropertyValue,D.scrollData);v.Hooks.registered[B]&&(g(y).rootPropertyValueCache[G]=v.Normalizations.registered[G]?v.Normalizations.registered[G]("extract",null,I[1]):I[1]),"transform"===I[0]&&(z=!0)}}j.mobileHA&&g(y).transformCache.translate3d===d&&(g(y).transformCache.translate3d="(0px, 0px, 0px)",z=!0),z&&v.flushTransformCache(y)}}j.display!==d&&"none"!==j.display&&(t.State.calls[f][2].display=!1),j.visibility!==d&&"hidden"!==j.visibility&&(t.State.calls[f][2].visibility=!1),j.progress&&j.progress.call(h[1],h[1],r,Math.max(0,n+j.duration-b),n,q),1===r&&l(f)}}t.State.isTicking&&x(k)}function l(a,b){if(!t.State.calls[a])return!1;for(var c=t.State.calls[a][0],e=t.State.calls[a][1],f=t.State.calls[a][2],h=t.State.calls[a][4],i=!1,j=0,k=c.length;k>j;j++){var l=c[j].element;if(b||f.loop||("none"===f.display&&v.setPropertyValue(l,"display",f.display),"hidden"===f.visibility&&v.setPropertyValue(l,"visibility",f.visibility)),f.loop!==!0&&(m.queue(l)[1]===d||!/\.velocityQueueEntryFlag/i.test(m.queue(l)[1]))&&g(l)){g(l).isAnimating=!1,g(l).rootPropertyValueCache={};var n=!1;m.each(v.Lists.transforms3D,function(a,b){var c=/^scale/.test(b)?1:0,e=g(l).transformCache[b];g(l).transformCache[b]!==d&&new RegExp("^\\("+c+"[^.]").test(e)&&(n=!0,delete g(l).transformCache[b])}),f.mobileHA&&(n=!0,delete g(l).transformCache.translate3d),n&&v.flushTransformCache(l),v.Values.removeClass(l,"velocity-animating")}if(!b&&f.complete&&!f.loop&&j===k-1)try{f.complete.call(e,e)}catch(o){setTimeout(function(){throw o},1)}h&&f.loop!==!0&&h(e),g(l)&&f.loop===!0&&!b&&(m.each(g(l).tweensContainer,function(a,b){/^rotate/.test(a)&&360===parseFloat(b.endValue)&&(b.endValue=0,b.startValue=360),/^backgroundPosition/.test(a)&&100===parseFloat(b.endValue)&&"%"===b.unitType&&(b.endValue=0,b.startValue=100)}),t(l,"reverse",{loop:!0,delay:f.delay})),f.queue!==!1&&m.dequeue(l,f.queue)}t.State.calls[a]=!1;for(var p=0,q=t.State.calls.length;q>p;p++)if(t.State.calls[p]!==!1){i=!0;break}i===!1&&(t.State.isTicking=!1,delete t.State.calls,t.State.calls=[])}var m,n=function(){if(c.documentMode)return c.documentMode;for(var a=7;a>4;a--){var b=c.createElement("div");if(b.innerHTML="<!--[if IE "+a+"]><span></span><![endif]-->",b.getElementsByTagName("span").length)return b=null,a}return d}(),o=function(){var a=0;return b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||function(b){var c,d=(new Date).getTime();return c=Math.max(0,16-(d-a)),a=d+c,setTimeout(function(){b(d+c)},c)}}(),p={isString:function(a){return"string"==typeof a},isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},isFunction:function(a){return"[object Function]"===Object.prototype.toString.call(a)},isNode:function(a){return a&&a.nodeType},isNodeList:function(a){return"object"==typeof a&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(a))&&a.length!==d&&(0===a.length||"object"==typeof a[0]&&a[0].nodeType>0)},isWrapped:function(a){return a&&(a.jquery||b.Zepto&&b.Zepto.zepto.isZ(a))},isSVG:function(a){return b.SVGElement&&a instanceof b.SVGElement},isEmptyObject:function(a){for(var b in a)return!1;return!0}},q=!1;if(a.fn&&a.fn.jquery?(m=a,q=!0):m=b.Velocity.Utilities,8>=n&&!q)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=n)return void(jQuery.fn.velocity=jQuery.fn.animate);var r=400,s="swing",t={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:b.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:c.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:m,Redirects:{},Easings:{},Promise:b.Promise,defaults:{queue:"",duration:r,easing:s,begin:d,complete:d,progress:d,display:d,visibility:d,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(a){m.data(a,"velocity",{isSVG:p.isSVG(a),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};b.pageYOffset!==d?(t.State.scrollAnchor=b,t.State.scrollPropertyLeft="pageXOffset",t.State.scrollPropertyTop="pageYOffset"):(t.State.scrollAnchor=c.documentElement||c.body.parentNode||c.body,t.State.scrollPropertyLeft="scrollLeft",t.State.scrollPropertyTop="scrollTop");var u=function(){function a(a){return-a.tension*a.x-a.friction*a.v}function b(b,c,d){var e={x:b.x+d.dx*c,v:b.v+d.dv*c,tension:b.tension,friction:b.friction};return{dx:e.v,dv:a(e)}}function c(c,d){var e={dx:c.v,dv:a(c)},f=b(c,.5*d,e),g=b(c,.5*d,f),h=b(c,d,g),i=1/6*(e.dx+2*(f.dx+g.dx)+h.dx),j=1/6*(e.dv+2*(f.dv+g.dv)+h.dv);return c.x=c.x+i*d,c.v=c.v+j*d,c}return function d(a,b,e){var f,g,h,i={x:-1,v:0,tension:null,friction:null},j=[0],k=0,l=1e-4,m=.016;for(a=parseFloat(a)||500,b=parseFloat(b)||20,e=e||null,i.tension=a,i.friction=b,f=null!==e,f?(k=d(a,b),g=k/e*m):g=m;h=c(h||i,g),j.push(1+h.x),k+=16,Math.abs(h.x)>l&&Math.abs(h.v)>l;);return f?function(a){return j[a*(j.length-1)|0]}:k}}();t.Easings={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},spring:function(a){return 1-Math.cos(4.5*a*Math.PI)*Math.exp(6*-a)}},m.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(a,b){t.Easings[b[0]]=i.apply(null,b[1])});var v=t.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var a=0;a<v.Lists.colors.length;a++){var b="color"===v.Lists.colors[a]?"0 0 0 1":"255 255 255 1";v.Hooks.templates[v.Lists.colors[a]]=["Red Green Blue Alpha",b]}var c,d,e;if(n)for(c in v.Hooks.templates){d=v.Hooks.templates[c],e=d[0].split(" ");var f=d[1].match(v.RegEx.valueSplit);"Color"===e[0]&&(e.push(e.shift()),f.push(f.shift()),v.Hooks.templates[c]=[e.join(" "),f.join(" ")])}for(c in v.Hooks.templates){d=v.Hooks.templates[c],e=d[0].split(" ");for(var a in e){var g=c+e[a],h=a;v.Hooks.registered[g]=[c,h]}}},getRoot:function(a){var b=v.Hooks.registered[a];return b?b[0]:a},cleanRootPropertyValue:function(a,b){return v.RegEx.valueUnwrap.test(b)&&(b=b.match(v.RegEx.valueUnwrap)[1]),v.Values.isCSSNullValue(b)&&(b=v.Hooks.templates[a][1]),b},extractValue:function(a,b){var c=v.Hooks.registered[a];if(c){var d=c[0],e=c[1];return b=v.Hooks.cleanRootPropertyValue(d,b),b.toString().match(v.RegEx.valueSplit)[e]}return b},injectValue:function(a,b,c){var d=v.Hooks.registered[a];if(d){var e,f,g=d[0],h=d[1];return c=v.Hooks.cleanRootPropertyValue(g,c),e=c.toString().match(v.RegEx.valueSplit),e[h]=b,f=e.join(" ")}return c}},Normalizations:{registered:{clip:function(a,b,c){switch(a){case"name":return"clip";case"extract":var d;return v.RegEx.wrappedValueAlreadyExtracted.test(c)?d=c:(d=c.toString().match(v.RegEx.valueUnwrap),d=d?d[1].replace(/,(\s+)?/g," "):c),d;case"inject":return"rect("+c+")"}},blur:function(a,b,c){switch(a){case"name":return t.State.isFirefox?"filter":"-webkit-filter";case"extract":var d=parseFloat(c);if(!d&&0!==d){var e=c.toString().match(/blur\(([0-9]+[A-z]+)\)/i);d=e?e[1]:0}return d;case"inject":return parseFloat(c)?"blur("+c+")":"none"}},opacity:function(a,b,c){if(8>=n)switch(a){case"name":return"filter";case"extract":var d=c.toString().match(/alpha\(opacity=(.*)\)/i);return c=d?d[1]/100:1;case"inject":return b.style.zoom=1,parseFloat(c)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(c),10)+")"}else switch(a){case"name":return"opacity";case"extract":return c;case"inject":return c}}},register:function(){9>=n||t.State.isGingerbread||(v.Lists.transformsBase=v.Lists.transformsBase.concat(v.Lists.transforms3D));for(var a=0;a<v.Lists.transformsBase.length;a++)!function(){var b=v.Lists.transformsBase[a];v.Normalizations.registered[b]=function(a,c,e){switch(a){case"name":return"transform";case"extract":return g(c)===d||g(c).transformCache[b]===d?/^scale/i.test(b)?1:0:g(c).transformCache[b].replace(/[()]/g,"");case"inject":var f=!1;switch(b.substr(0,b.length-1)){case"translate":f=!/(%|px|em|rem|vw|vh|\d)$/i.test(e);break;case"scal":case"scale":t.State.isAndroid&&g(c).transformCache[b]===d&&1>e&&(e=1),f=!/(\d)$/i.test(e);break;case"skew":f=!/(deg|\d)$/i.test(e);break;case"rotate":f=!/(deg|\d)$/i.test(e)}return f||(g(c).transformCache[b]="("+e+")"),g(c).transformCache[b]}}}();for(var a=0;a<v.Lists.colors.length;a++)!function(){var b=v.Lists.colors[a];v.Normalizations.registered[b]=function(a,c,e){switch(a){case"name":return b;case"extract":var f;if(v.RegEx.wrappedValueAlreadyExtracted.test(e))f=e;else{var g,h={black:"rgb(0, 0, 0)",blue:"rgb(0, 0, 255)",gray:"rgb(128, 128, 128)",green:"rgb(0, 128, 0)",red:"rgb(255, 0, 0)",white:"rgb(255, 255, 255)"};/^[A-z]+$/i.test(e)?g=h[e]!==d?h[e]:h.black:v.RegEx.isHex.test(e)?g="rgb("+v.Values.hexToRgb(e).join(" ")+")":/^rgba?\(/i.test(e)||(g=h.black),f=(g||e).toString().match(v.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g," ")}return 8>=n||3!==f.split(" ").length||(f+=" 1"),f;case"inject":return 8>=n?4===e.split(" ").length&&(e=e.split(/\s+/).slice(0,3).join(" ")):3===e.split(" ").length&&(e+=" 1"),(8>=n?"rgb":"rgba")+"("+e.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(a){return a.replace(/-(\w)/g,function(a,b){return b.toUpperCase()})},SVGAttribute:function(a){var b="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(n||t.State.isAndroid&&!t.State.isChrome)&&(b+="|transform"),new RegExp("^("+b+")$","i").test(a)},prefixCheck:function(a){if(t.State.prefixMatches[a])return[t.State.prefixMatches[a],!0];for(var b=["","Webkit","Moz","ms","O"],c=0,d=b.length;d>c;c++){var e;if(e=0===c?a:b[c]+a.replace(/^\w/,function(a){return a.toUpperCase()}),p.isString(t.State.prefixElement.style[e]))return t.State.prefixMatches[a]=e,[e,!0]}return[a,!1]}},Values:{hexToRgb:function(a){var b,c=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,d=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return a=a.replace(c,function(a,b,c,d){return b+b+c+c+d+d}),b=d.exec(a),b?[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]:[0,0,0]},isCSSNullValue:function(a){return 0==a||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(a)},getUnitType:function(a){return/^(rotate|skew)/i.test(a)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(a)?"":"px"},getDisplayType:function(a){var b=a&&a.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(b)?"inline":/^(li)$/i.test(b)?"list-item":/^(tr)$/i.test(b)?"table-row":/^(table)$/i.test(b)?"table":/^(tbody)$/i.test(b)?"table-row-group":"block"},addClass:function(a,b){a.classList?a.classList.add(b):a.className+=(a.className.length?" ":"")+b},removeClass:function(a,b){a.classList?a.classList.remove(b):a.className=a.className.toString().replace(new RegExp("(^|\\s)"+b.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(a,c,e,f){function h(a,c){function e(){j&&v.setPropertyValue(a,"display","none")}var i=0;if(8>=n)i=m.css(a,c);else{var j=!1;if(/^(width|height)$/.test(c)&&0===v.getPropertyValue(a,"display")&&(j=!0,v.setPropertyValue(a,"display",v.Values.getDisplayType(a))),!f){if("height"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var k=a.offsetHeight-(parseFloat(v.getPropertyValue(a,"borderTopWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderBottomWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingTop"))||0)-(parseFloat(v.getPropertyValue(a,"paddingBottom"))||0);return e(),k}if("width"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var l=a.offsetWidth-(parseFloat(v.getPropertyValue(a,"borderLeftWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderRightWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingLeft"))||0)-(parseFloat(v.getPropertyValue(a,"paddingRight"))||0);return e(),l}}var o;o=g(a)===d?b.getComputedStyle(a,null):g(a).computedStyle?g(a).computedStyle:g(a).computedStyle=b.getComputedStyle(a,null),"borderColor"===c&&(c="borderTopColor"),i=9===n&&"filter"===c?o.getPropertyValue(c):o[c],(""===i||null===i)&&(i=a.style[c]),e()}if("auto"===i&&/^(top|right|bottom|left)$/i.test(c)){var p=h(a,"position");("fixed"===p||"absolute"===p&&/top|left/i.test(c))&&(i=m(a).position()[c]+"px")}return i}var i;if(v.Hooks.registered[c]){var j=c,k=v.Hooks.getRoot(j);e===d&&(e=v.getPropertyValue(a,v.Names.prefixCheck(k)[0])),v.Normalizations.registered[k]&&(e=v.Normalizations.registered[k]("extract",a,e)),i=v.Hooks.extractValue(j,e)}else if(v.Normalizations.registered[c]){var l,o;l=v.Normalizations.registered[c]("name",a),"transform"!==l&&(o=h(a,v.Names.prefixCheck(l)[0]),v.Values.isCSSNullValue(o)&&v.Hooks.templates[c]&&(o=v.Hooks.templates[c][1])),i=v.Normalizations.registered[c]("extract",a,o)}if(!/^[\d-]/.test(i))if(g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c))if(/^(height|width)$/i.test(c))try{i=a.getBBox()[c]}catch(p){i=0}else i=a.getAttribute(c);else i=h(a,v.Names.prefixCheck(c)[0]);return v.Values.isCSSNullValue(i)&&(i=0),t.debug>=2&&console.log("Get "+c+": "+i),i},setPropertyValue:function(a,c,d,e,f){var h=c;if("scroll"===c)f.container?f.container["scroll"+f.direction]=d:"Left"===f.direction?b.scrollTo(d,f.alternateValue):b.scrollTo(f.alternateValue,d);else if(v.Normalizations.registered[c]&&"transform"===v.Normalizations.registered[c]("name",a))v.Normalizations.registered[c]("inject",a,d),h="transform",d=g(a).transformCache[c];else{if(v.Hooks.registered[c]){var i=c,j=v.Hooks.getRoot(c);e=e||v.getPropertyValue(a,j),d=v.Hooks.injectValue(i,d,e),c=j}if(v.Normalizations.registered[c]&&(d=v.Normalizations.registered[c]("inject",a,d),c=v.Normalizations.registered[c]("name",a)),h=v.Names.prefixCheck(c)[0],8>=n)try{a.style[h]=d}catch(k){t.debug&&console.log("Browser does not support ["+d+"] for ["+h+"]")}else g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c)?a.setAttribute(c,d):a.style[h]=d;t.debug>=2&&console.log("Set "+c+" ("+h+"): "+d)}return[h,d]},flushTransformCache:function(a){function b(b){return parseFloat(v.getPropertyValue(a,b))}var c="";if((n||t.State.isAndroid&&!t.State.isChrome)&&g(a).isSVG){var d={translate:[b("translateX"),b("translateY")],skewX:[b("skewX")],skewY:[b("skewY")],scale:1!==b("scale")?[b("scale"),b("scale")]:[b("scaleX"),b("scaleY")],rotate:[b("rotateZ"),0,0]};m.each(g(a).transformCache,function(a){/^translate/i.test(a)?a="translate":/^scale/i.test(a)?a="scale":/^rotate/i.test(a)&&(a="rotate"),d[a]&&(c+=a+"("+d[a].join(" ")+") ",delete d[a])})}else{var e,f;m.each(g(a).transformCache,function(b){return e=g(a).transformCache[b],"transformPerspective"===b?(f=e,!0):(9===n&&"rotateZ"===b&&(b="rotate"),void(c+=b+e+" "))}),f&&(c="perspective"+f+" "+c)}v.setPropertyValue(a,"transform",c)}};v.Hooks.register(),v.Normalizations.register(),t.hook=function(a,b,c){var e=d;return a=f(a),m.each(a,function(a,f){if(g(f)===d&&t.init(f),c===d)e===d&&(e=t.CSS.getPropertyValue(f,b));else{var h=t.CSS.setPropertyValue(f,b,c);"transform"===h[0]&&t.CSS.flushTransformCache(f),e=h}}),e};var w=function(){function a(){return h?B.promise||null:i}function e(){function a(){function a(a,b){var c=d,e=d,g=d;return p.isArray(a)?(c=a[0],!p.isArray(a[1])&&/^[\d-]/.test(a[1])||p.isFunction(a[1])||v.RegEx.isHex.test(a[1])?g=a[1]:(p.isString(a[1])&&!v.RegEx.isHex.test(a[1])||p.isArray(a[1]))&&(e=b?a[1]:j(a[1],h.duration),a[2]!==d&&(g=a[2]))):c=a,b||(e=e||h.easing),p.isFunction(c)&&(c=c.call(f,y,x)),p.isFunction(g)&&(g=g.call(f,y,x)),[c||0,e,g]}function l(a,b){var c,d;return d=(b||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(a){return c=a,""}),c||(c=v.Values.getUnitType(a)),[d,c]}function n(){var a={myParent:f.parentNode||c.body,position:v.getPropertyValue(f,"position"),fontSize:v.getPropertyValue(f,"fontSize")},d=a.position===I.lastPosition&&a.myParent===I.lastParent,e=a.fontSize===I.lastFontSize;I.lastParent=a.myParent,I.lastPosition=a.position,I.lastFontSize=a.fontSize;var h=100,i={};if(e&&d)i.emToPx=I.lastEmToPx,i.percentToPxWidth=I.lastPercentToPxWidth,i.percentToPxHeight=I.lastPercentToPxHeight;else{var j=g(f).isSVG?c.createElementNS("http://www.w3.org/2000/svg","rect"):c.createElement("div");t.init(j),a.myParent.appendChild(j),m.each(["overflow","overflowX","overflowY"],function(a,b){t.CSS.setPropertyValue(j,b,"hidden")}),t.CSS.setPropertyValue(j,"position",a.position),t.CSS.setPropertyValue(j,"fontSize",a.fontSize),t.CSS.setPropertyValue(j,"boxSizing","content-box"),m.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(a,b){t.CSS.setPropertyValue(j,b,h+"%")}),t.CSS.setPropertyValue(j,"paddingLeft",h+"em"),i.percentToPxWidth=I.lastPercentToPxWidth=(parseFloat(v.getPropertyValue(j,"width",null,!0))||1)/h,i.percentToPxHeight=I.lastPercentToPxHeight=(parseFloat(v.getPropertyValue(j,"height",null,!0))||1)/h,i.emToPx=I.lastEmToPx=(parseFloat(v.getPropertyValue(j,"paddingLeft"))||1)/h,a.myParent.removeChild(j)}return null===I.remToPx&&(I.remToPx=parseFloat(v.getPropertyValue(c.body,"fontSize"))||16),null===I.vwToPx&&(I.vwToPx=parseFloat(b.innerWidth)/100,I.vhToPx=parseFloat(b.innerHeight)/100),i.remToPx=I.remToPx,i.vwToPx=I.vwToPx,i.vhToPx=I.vhToPx,t.debug>=1&&console.log("Unit ratios: "+JSON.stringify(i),f),i}if(h.begin&&0===y)try{h.begin.call(o,o)}catch(r){setTimeout(function(){throw r},1)}if("scroll"===C){var u,w,z,A=/^x$/i.test(h.axis)?"Left":"Top",D=parseFloat(h.offset)||0;h.container?p.isWrapped(h.container)||p.isNode(h.container)?(h.container=h.container[0]||h.container,u=h.container["scroll"+A],z=u+m(f).position()[A.toLowerCase()]+D):h.container=null:(u=t.State.scrollAnchor[t.State["scrollProperty"+A]],w=t.State.scrollAnchor[t.State["scrollProperty"+("Left"===A?"Top":"Left")]],z=m(f).offset()[A.toLowerCase()]+D),i={scroll:{rootPropertyValue:!1,startValue:u,currentValue:u,endValue:z,unitType:"",easing:h.easing,scrollData:{container:h.container,direction:A,alternateValue:w}},element:f},t.debug&&console.log("tweensContainer (scroll): ",i.scroll,f)}else if("reverse"===C){if(!g(f).tweensContainer)return void m.dequeue(f,h.queue);"none"===g(f).opts.display&&(g(f).opts.display="auto"),"hidden"===g(f).opts.visibility&&(g(f).opts.visibility="visible"),g(f).opts.loop=!1,g(f).opts.begin=null,g(f).opts.complete=null,s.easing||delete h.easing,s.duration||delete h.duration,h=m.extend({},g(f).opts,h);var E=m.extend(!0,{},g(f).tweensContainer);for(var F in E)if("element"!==F){var G=E[F].startValue;E[F].startValue=E[F].currentValue=E[F].endValue,E[F].endValue=G,p.isEmptyObject(s)||(E[F].easing=h.easing),t.debug&&console.log("reverse tweensContainer ("+F+"): "+JSON.stringify(E[F]),f)}i=E}else if("start"===C){var E;g(f).tweensContainer&&g(f).isAnimating===!0&&(E=g(f).tweensContainer),m.each(q,function(b,c){if(RegExp("^"+v.Lists.colors.join("$|^")+"$").test(b)){var e=a(c,!0),f=e[0],g=e[1],h=e[2];if(v.RegEx.isHex.test(f)){for(var i=["Red","Green","Blue"],j=v.Values.hexToRgb(f),k=h?v.Values.hexToRgb(h):d,l=0;l<i.length;l++){var m=[j[l]];g&&m.push(g),k!==d&&m.push(k[l]),q[b+i[l]]=m}delete q[b]}}});for(var H in q){var K=a(q[H]),L=K[0],M=K[1],N=K[2];H=v.Names.camelCase(H);var O=v.Hooks.getRoot(H),P=!1;if(g(f).isSVG||"tween"===O||v.Names.prefixCheck(O)[1]!==!1||v.Normalizations.registered[O]!==d){(h.display!==d&&null!==h.display&&"none"!==h.display||h.visibility!==d&&"hidden"!==h.visibility)&&/opacity|filter/.test(H)&&!N&&0!==L&&(N=0),h._cacheValues&&E&&E[H]?(N===d&&(N=E[H].endValue+E[H].unitType),P=g(f).rootPropertyValueCache[O]):v.Hooks.registered[H]?N===d?(P=v.getPropertyValue(f,O),N=v.getPropertyValue(f,H,P)):P=v.Hooks.templates[O][1]:N===d&&(N=v.getPropertyValue(f,H));var Q,R,S,T=!1;if(Q=l(H,N),N=Q[0],S=Q[1],Q=l(H,L),L=Q[0].replace(/^([+-\/*])=/,function(a,b){return T=b,""}),R=Q[1],N=parseFloat(N)||0,L=parseFloat(L)||0,"%"===R&&(/^(fontSize|lineHeight)$/.test(H)?(L/=100,R="em"):/^scale/.test(H)?(L/=100,R=""):/(Red|Green|Blue)$/i.test(H)&&(L=L/100*255,R="")),/[\/*]/.test(T))R=S;else if(S!==R&&0!==N)if(0===L)R=S;else{e=e||n();var U=/margin|padding|left|right|width|text|word|letter/i.test(H)||/X$/.test(H)||"x"===H?"x":"y";switch(S){case"%":N*="x"===U?e.percentToPxWidth:e.percentToPxHeight;break;case"px":break;default:N*=e[S+"ToPx"]}switch(R){case"%":N*=1/("x"===U?e.percentToPxWidth:e.percentToPxHeight);break;case"px":break;default:
-N*=1/e[R+"ToPx"]}}switch(T){case"+":L=N+L;break;case"-":L=N-L;break;case"*":L=N*L;break;case"/":L=N/L}i[H]={rootPropertyValue:P,startValue:N,currentValue:N,endValue:L,unitType:R,easing:M},t.debug&&console.log("tweensContainer ("+H+"): "+JSON.stringify(i[H]),f)}else t.debug&&console.log("Skipping ["+O+"] due to a lack of browser support.")}i.element=f}i.element&&(v.Values.addClass(f,"velocity-animating"),J.push(i),""===h.queue&&(g(f).tweensContainer=i,g(f).opts=h),g(f).isAnimating=!0,y===x-1?(t.State.calls.push([J,o,h,null,B.resolver]),t.State.isTicking===!1&&(t.State.isTicking=!0,k())):y++)}var e,f=this,h=m.extend({},t.defaults,s),i={};switch(g(f)===d&&t.init(f),parseFloat(h.delay)&&h.queue!==!1&&m.queue(f,h.queue,function(a){t.velocityQueueEntryFlag=!0,g(f).delayTimer={setTimeout:setTimeout(a,parseFloat(h.delay)),next:a}}),h.duration.toString().toLowerCase()){case"fast":h.duration=200;break;case"normal":h.duration=r;break;case"slow":h.duration=600;break;default:h.duration=parseFloat(h.duration)||1}t.mock!==!1&&(t.mock===!0?h.duration=h.delay=1:(h.duration*=parseFloat(t.mock)||1,h.delay*=parseFloat(t.mock)||1)),h.easing=j(h.easing,h.duration),h.begin&&!p.isFunction(h.begin)&&(h.begin=null),h.progress&&!p.isFunction(h.progress)&&(h.progress=null),h.complete&&!p.isFunction(h.complete)&&(h.complete=null),h.display!==d&&null!==h.display&&(h.display=h.display.toString().toLowerCase(),"auto"===h.display&&(h.display=t.CSS.Values.getDisplayType(f))),h.visibility!==d&&null!==h.visibility&&(h.visibility=h.visibility.toString().toLowerCase()),h.mobileHA=h.mobileHA&&t.State.isMobile&&!t.State.isGingerbread,h.queue===!1?h.delay?setTimeout(a,h.delay):a():m.queue(f,h.queue,function(b,c){return c===!0?(B.promise&&B.resolver(o),!0):(t.velocityQueueEntryFlag=!0,void a(b))}),""!==h.queue&&"fx"!==h.queue||"inprogress"===m.queue(f)[0]||m.dequeue(f)}var h,i,n,o,q,s,u=arguments[0]&&(arguments[0].p||m.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||p.isString(arguments[0].properties));if(p.isWrapped(this)?(h=!1,n=0,o=this,i=this):(h=!0,n=1,o=u?arguments[0].elements||arguments[0].e:arguments[0]),o=f(o)){u?(q=arguments[0].properties||arguments[0].p,s=arguments[0].options||arguments[0].o):(q=arguments[n],s=arguments[n+1]);var x=o.length,y=0;if(!/^(stop|finish)$/i.test(q)&&!m.isPlainObject(s)){var z=n+1;s={};for(var A=z;A<arguments.length;A++)p.isArray(arguments[A])||!/^(fast|normal|slow)$/i.test(arguments[A])&&!/^\d/.test(arguments[A])?p.isString(arguments[A])||p.isArray(arguments[A])?s.easing=arguments[A]:p.isFunction(arguments[A])&&(s.complete=arguments[A]):s.duration=arguments[A]}var B={promise:null,resolver:null,rejecter:null};h&&t.Promise&&(B.promise=new t.Promise(function(a,b){B.resolver=a,B.rejecter=b}));var C;switch(q){case"scroll":C="scroll";break;case"reverse":C="reverse";break;case"finish":case"stop":m.each(o,function(a,b){g(b)&&g(b).delayTimer&&(clearTimeout(g(b).delayTimer.setTimeout),g(b).delayTimer.next&&g(b).delayTimer.next(),delete g(b).delayTimer)});var D=[];return m.each(t.State.calls,function(a,b){b&&m.each(b[1],function(c,e){var f=s===d?"":s;return f===!0||b[2].queue===f||s===d&&b[2].queue===!1?void m.each(o,function(c,d){d===e&&((s===!0||p.isString(s))&&(m.each(m.queue(d,p.isString(s)?s:""),function(a,b){p.isFunction(b)&&b(null,!0)}),m.queue(d,p.isString(s)?s:"",[])),"stop"===q?(g(d)&&g(d).tweensContainer&&f!==!1&&m.each(g(d).tweensContainer,function(a,b){b.endValue=b.currentValue}),D.push(a)):"finish"===q&&(b[2].duration=1))}):!0})}),"stop"===q&&(m.each(D,function(a,b){l(b,!0)}),B.promise&&B.resolver(o)),a();default:if(!m.isPlainObject(q)||p.isEmptyObject(q)){if(p.isString(q)&&t.Redirects[q]){var E=m.extend({},s),F=E.duration,G=E.delay||0;return E.backwards===!0&&(o=m.extend(!0,[],o).reverse()),m.each(o,function(a,b){parseFloat(E.stagger)?E.delay=G+parseFloat(E.stagger)*a:p.isFunction(E.stagger)&&(E.delay=G+E.stagger.call(b,a,x)),E.drag&&(E.duration=parseFloat(F)||(/^(callout|transition)/.test(q)?1e3:r),E.duration=Math.max(E.duration*(E.backwards?1-a/x:(a+1)/x),.75*E.duration,200)),t.Redirects[q].call(b,b,E||{},a,x,o,B.promise?B:d)}),a()}var H="Velocity: First argument ("+q+") was not a property map, a known action, or a registered redirect. Aborting.";return B.promise?B.rejecter(new Error(H)):console.log(H),a()}C="start"}var I={lastParent:null,lastPosition:null,lastFontSize:null,lastPercentToPxWidth:null,lastPercentToPxHeight:null,lastEmToPx:null,remToPx:null,vwToPx:null,vhToPx:null},J=[];m.each(o,function(a,b){p.isNode(b)&&e.call(b)});var K,E=m.extend({},t.defaults,s);if(E.loop=parseInt(E.loop),K=2*E.loop-1,E.loop)for(var L=0;K>L;L++){var M={delay:E.delay,progress:E.progress};L===K-1&&(M.display=E.display,M.visibility=E.visibility,M.complete=E.complete),w(o,"reverse",M)}return a()}};t=m.extend(w,t),t.animate=w;var x=b.requestAnimationFrame||o;return t.State.isMobile||c.hidden===d||c.addEventListener("visibilitychange",function(){c.hidden?(x=function(a){return setTimeout(function(){a(!0)},16)},k()):x=b.requestAnimationFrame||o}),a.Velocity=t,a!==b&&(a.fn.velocity=w,a.fn.velocity.defaults=t.defaults),m.each(["Down","Up"],function(a,b){t.Redirects["slide"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j=i.begin,k=i.complete,l={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},n={};i.display===d&&(i.display="Down"===b?"inline"===t.CSS.Values.getDisplayType(a)?"inline-block":"block":"none"),i.begin=function(){j&&j.call(g,g);for(var c in l){n[c]=a.style[c];var d=t.CSS.getPropertyValue(a,c);l[c]="Down"===b?[d,0]:[0,d]}n.overflow=a.style.overflow,a.style.overflow="hidden"},i.complete=function(){for(var b in n)a.style[b]=n[b];k&&k.call(g,g),h&&h.resolver(g)},t(a,l,i)}}),m.each(["In","Out"],function(a,b){t.Redirects["fade"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j={opacity:"In"===b?1:0},k=i.complete;i.complete=e!==f-1?i.begin=null:function(){k&&k.call(g,g),h&&h.resolver(g)},i.display===d&&(i.display="In"===b?"auto":"none"),t(this,j,i)}}),t}(window.jQuery||window.Zepto||window,window,document)}),!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a}function i(a,b){return h(a,b,!0)}function j(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&h(d,c)}function k(a,b){return function(){return a.apply(b,arguments)}}function l(a,b){return typeof a==ka?a.apply(b?b[0]||d:d,b):a}function m(a,b){return a===d?b:a}function n(a,b,c){g(r(b),function(b){a.addEventListener(b,c,!1)})}function o(a,b,c){g(r(b),function(b){a.removeEventListener(b,c,!1)})}function p(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function q(a,b){return a.indexOf(b)>-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function t(a){return Array.prototype.slice.call(a,0)}function u(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];s(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ia.length;){if(c=ia[g],e=c?c+f:b,e in a)return e;g++}return d}function w(){return oa++}function x(a){var b=a.ownerDocument;return b.defaultView||b.parentWindow}function y(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){l(a.options.enable,[a])&&c.handler(b)},this.init()}function z(a){var b,c=a.options.inputClass;return new(b=c?c:ra?N:sa?Q:qa?S:M)(a,A)}function A(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&ya&&0===d-e,g=b&(Aa|Ba)&&0===d-e;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,B(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function B(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=E(b)),e>1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=na(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===ya||f.eventType===Aa)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ba&&(i>xa||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=ma(l.x)>ma(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:la(a.pointers[c].clientX),clientY:la(a.pointers[c].clientY)},c++;return{timeStamp:na(),pointers:b,center:F(b),deltaX:a.deltaX,deltaY:a.deltaY}}function F(a){var b=a.length;if(1===b)return{x:la(a[0].clientX),y:la(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:la(c/b),y:la(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Ca:ma(a)>=ma(b)?a>0?Da:Ea:b>0?Fa:Ga}function I(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],La)-J(a[1],a[0],La)}function L(a,b){return I(b[0],b[1],La)/I(a[0],a[1],La)}function M(){this.evEl=Na,this.evWin=Oa,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Ra,this.evWin=Sa,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ua,this.evWin=Va,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Aa|Ba)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xa,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(ya|za)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===ya)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Aa|Ba)&&delete d[g[e].identifier],e++;return h.length?[u(f.concat(h),"identifier",!0),h]:void 0}function S(){y.apply(this,arguments);var a=k(this.handler,this);this.touch=new Q(this.manager,a),this.mouse=new M(this.manager,a)}function T(a,b){this.manager=a,this.set(b)}function U(a){if(q(a,bb))return bb;var b=q(a,cb),c=q(a,db);return b&&c?cb+" "+db:b||c?b?cb:db:q(a,ab)?ab:_a}function V(a){this.id=w(),this.manager=null,this.options=i(a||{},this.defaults),this.options.enable=m(this.options.enable,!0),this.state=eb,this.simultaneous={},this.requireFail=[]}function W(a){return a&jb?"cancel":a&hb?"end":a&gb?"move":a&fb?"start":""}function X(a){return a==Ga?"down":a==Fa?"up":a==Da?"left":a==Ea?"right":""}function Y(a,b){var c=b.manager;return c?c.get(a):a}function Z(){V.apply(this,arguments)}function $(){Z.apply(this,arguments),this.pX=null,this.pY=null}function _(){Z.apply(this,arguments)}function aa(){V.apply(this,arguments),this._timer=null,this._input=null}function ba(){Z.apply(this,arguments)}function ca(){Z.apply(this,arguments)}function da(){V.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ea(a,b){return b=b||{},b.recognizers=m(b.recognizers,ea.defaults.preset),new fa(a,b)}function fa(a,b){b=b||{},this.options=i(b,ea.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=z(this),this.touchAction=new T(this,this.options.touchAction),ga(this,!0),g(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ga(a,b){var c=a.element;g(a.options.cssProps,function(a,d){c.style[v(c.style,d)]=b?a:""})}function ha(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var ia=["","webkit","moz","MS","ms","o"],ja=b.createElement("div"),ka="function",la=Math.round,ma=Math.abs,na=Date.now,oa=1,pa=/mobile|tablet|ip(ad|hone|od)|android/i,qa="ontouchstart"in a,ra=v(a,"PointerEvent")!==d,sa=qa&&pa.test(navigator.userAgent),ta="touch",ua="pen",va="mouse",wa="kinect",xa=25,ya=1,za=2,Aa=4,Ba=8,Ca=1,Da=2,Ea=4,Fa=8,Ga=16,Ha=Da|Ea,Ia=Fa|Ga,Ja=Ha|Ia,Ka=["x","y"],La=["clientX","clientY"];y.prototype={handler:function(){},init:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(x(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&o(this.element,this.evEl,this.domHandler),this.evTarget&&o(this.target,this.evTarget,this.domHandler),this.evWin&&o(x(this.element),this.evWin,this.domHandler)}};var Ma={mousedown:ya,mousemove:za,mouseup:Aa},Na="mousedown",Oa="mousemove mouseup";j(M,y,{handler:function(a){var b=Ma[a.type];b&ya&&0===a.button&&(this.pressed=!0),b&za&&1!==a.which&&(b=Aa),this.pressed&&this.allow&&(b&Aa&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:va,srcEvent:a}))}});var Pa={pointerdown:ya,pointermove:za,pointerup:Aa,pointercancel:Ba,pointerout:Ba},Qa={2:ta,3:ua,4:va,5:wa},Ra="pointerdown",Sa="pointermove pointerup pointercancel";a.MSPointerEvent&&(Ra="MSPointerDown",Sa="MSPointerMove MSPointerUp MSPointerCancel"),j(N,y,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Pa[d],f=Qa[a.pointerType]||a.pointerType,g=f==ta,h=s(b,a.pointerId,"pointerId");e&ya&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Aa|Ba)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Ta={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Ua="touchstart",Va="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Ta[a.type];if(b===ya&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Aa|Ba)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}});var Wa={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Xa="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wa[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==ta,e=c.pointerType==va;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Aa|Ba)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Ya=v(ja.style,"touchAction"),Za=Ya!==d,$a="compute",_a="auto",ab="manipulation",bb="none",cb="pan-x",db="pan-y";T.prototype={set:function(a){a==$a&&(a=this.compute()),Za&&(this.manager.element.style[Ya]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Za){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bb),f=q(d,db),g=q(d,cb);return e||f&&c&Ha||g&&c&Ia?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var eb=1,fb=2,gb=4,hb=8,ib=hb,jb=16,kb=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hb>d&&b(!0),b(),d>=hb&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kb)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(kb|eb)))return!1;a++}return!0},recognize:function(a){var b=h({},a);return l(this.options.enable,[this,b])?(this.state&(ib|jb|kb)&&(this.state=eb),this.state=this.process(b),void(this.state&(fb|gb|hb|jb)&&this.tryEmit(b))):(this.reset(),void(this.state=kb))},process:function(){},getTouchAction:function(){},reset:function(){}},j(Z,V,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(fb|gb),e=this.attrTest(a);return d&&(c&Ba||!e)?b|jb:d||e?c&Aa?b|hb:b&fb?b|gb:fb:kb}}),j($,Z,{defaults:{event:"pan",threshold:10,pointers:1,direction:Ja},getTouchAction:function(){var a=this.options.direction,b=[];return a&Ha&&b.push(db),a&Ia&&b.push(cb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Ha?(e=0===f?Ca:0>f?Da:Ea,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ca:0>g?Fa:Ga,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fb||!(this.state&fb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(aa,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_a]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Aa|Ba)&&!f)this.reset();else if(a.eventType&ya)this.reset(),this._timer=e(function(){this.state=ib,this.tryEmit()},b.time,this);else if(a.eventType&Aa)return ib;return kb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ib&&(a&&a.eventType&Aa?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=na(),this.manager.emit(this.options.event,this._input)))}}),j(ba,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fb)}}),j(ca,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Ha|Ia,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Ha|Ia)?b=a.velocity:c&Ha?b=a.velocityX:c&Ia&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&ma(b)>this.options.velocity&&a.eventType&Aa},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(da,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ab]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&ya&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Aa)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||I(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=ib,this.tryEmit()},b.interval,this),fb):ib}return kb},failTimeout:function(){return this._timer=e(function(){this.state=kb},this.options.interval,this),kb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ib&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),ea.VERSION="2.0.4",ea.defaults={domEvents:!1,touchAction:$a,enable:!0,inputTarget:null,inputClass:null,preset:[[ba,{enable:!1}],[_,{enable:!1},["rotate"]],[ca,{direction:Ha}],[$,{direction:Ha},["swipe"]],[da],[da,{event:"doubletap",taps:2},["tap"]],[aa]],cssProps:{userSelect:"default",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var lb=1,mb=2;fa.prototype={set:function(a){return h(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?mb:lb},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&ib)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===mb||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(fb|gb|hb)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof V)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(s(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return g(r(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return g(r(a),function(a){b?c[a].splice(s(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&ha(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&ga(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},h(ea,{INPUT_START:ya,INPUT_MOVE:za,INPUT_END:Aa,INPUT_CANCEL:Ba,STATE_POSSIBLE:eb,STATE_BEGAN:fb,STATE_CHANGED:gb,STATE_ENDED:hb,STATE_RECOGNIZED:ib,STATE_CANCELLED:jb,STATE_FAILED:kb,DIRECTION_NONE:Ca,DIRECTION_LEFT:Da,DIRECTION_RIGHT:Ea,DIRECTION_UP:Fa,DIRECTION_DOWN:Ga,DIRECTION_HORIZONTAL:Ha,DIRECTION_VERTICAL:Ia,DIRECTION_ALL:Ja,Manager:fa,Input:y,TouchAction:T,TouchInput:Q,MouseInput:M,PointerEventInput:N,TouchMouseInput:S,SingleTouchInput:O,Recognizer:V,AttrRecognizer:Z,Tap:da,Pan:$,Swipe:ca,Pinch:_,Rotate:ba,Press:aa,on:n,off:o,each:g,merge:i,extend:h,inherit:j,bindFn:k,prefixed:v}),typeof define==ka&&define.amd?define(function(){return ea}):"undefined"!=typeof module&&module.exports?module.exports=ea:a[c]=ea}(window,document,"Hammer"),function(a){"function"==typeof define&&define.amd?define(["jquery","hammerjs"],a):"object"==typeof exports?a(require("jquery"),require("hammerjs")):a(jQuery,Hammer)}(function(a,b){function c(c,d){var e=a(c);e.data("hammer")||e.data("hammer",new b(e[0],d))}a.fn.hammer=function(a){return this.each(function(){c(this,a)})},b.Manager.prototype.emit=function(b){return function(c,d){b.call(this,c,d),a(this.element).trigger({type:c,gesture:d})}}(b.Manager.prototype.emit)}),Materialize={},Materialize.guid=function(){function a(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}}(),Materialize.elementOrParentIsFixed=function(a){var b=$(a),c=b.add(b.parents()),d=!1;return c.each(function(){return"fixed"===$(this).css("position")?(d=!0,!1):void 0}),d};var Vel;Vel=$?$.Velocity:Velocity,function(a){a.fn.collapsible=function(b){var c={accordion:void 0};return b=a.extend(c,b),this.each(function(){function c(b){h=g.find("> li > .collapsible-header"),b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}),h.not(b).removeClass("active").parent().removeClass("active"),h.not(b).parent().children(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function d(b){b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function e(a){var b=f(a);return b.length>0}function f(a){return a.closest("li > .collapsible-header")}var g=a(this),h=a(this).find("> li > .collapsible-header"),i=g.data("collapsible");g.off("click.collapse",".collapsible-header"),h.off("click.collapse"),b.accordion||"accordion"==i||void 0==i?(h=g.find("> li > .collapsible-header"),h.on("click.collapse",function(b){var d=a(b.target);e(d)&&(d=f(d)),d.toggleClass("active"),c(d)}),c(h.filter(".active").first())):h.each(function(){a(this).on("click.collapse",function(b){var c=a(b.target);e(c)&&(c=f(c)),c.toggleClass("active"),d(c)}),a(this).hasClass("active")&&d(a(this))})})},a(document).ready(function(){a(".collapsible").collapsible()})}(jQuery),function(a){a.fn.scrollTo=function(b){return a(this).scrollTop(a(this).scrollTop()-a(this).offset().top+a(b).offset().top),this},a.fn.dropdown=function(b){var c={inDuration:300,outDuration:225,constrain_width:!0,hover:!1,gutter:0,belowOrigin:!1};this.each(function(){function d(){void 0!=g.data("induration")&&(h.inDuration=g.data("inDuration")),void 0!=g.data("outduration")&&(h.outDuration=g.data("outDuration")),void 0!=g.data("constrainwidth")&&(h.constrain_width=g.data("constrainwidth")),void 0!=g.data("hover")&&(h.hover=g.data("hover")),void 0!=g.data("gutter")&&(h.gutter=g.data("gutter")),void 0!=g.data("beloworigin")&&(h.belowOrigin=g.data("beloworigin"))}function e(){d(),i.addClass("active"),1==h.constrain_width&&i.css("width",g.outerWidth());var b=0;1==h.belowOrigin&&(b=g.height());var c=g.offset().left,e=0,f=h.gutter;c+i.innerWidth()>a(window).width()&&(e=g.innerWidth()-i.innerWidth(),f=-1*f),i.css({position:"absolute",top:g.position().top+b,left:g.position().left+e+f}),i.stop(!0,!0).css("opacity",0).slideDown({queue:!1,duration:h.inDuration,easing:"easeOutCubic",complete:function(){a(this).css("height","")}}).animate({opacity:1},{queue:!1,duration:h.inDuration,easing:"easeOutSine"})}function f(){i.fadeOut(h.outDuration),i.removeClass("active")}var g=a(this),h=a.extend({},c,b),i=a("#"+g.attr("data-activates"));if(d(),g.after(i),h.hover){var j=!1;g.unbind("click."+g.attr("id")),g.on("mouseenter",function(){j===!1&&(e(),j=!0)}),g.on("mouseleave",function(b){a(b.toElement).closest(".dropdown-content").is(i)||(i.stop(!0,!0),f(),j=!1)}),i.on("mouseleave",function(b){a(b.toElement).closest(".dropdown-button").is(g)||(i.stop(!0,!0),f(),j=!1)})}else g.unbind("click."+g.attr("id")),g.bind("click."+g.attr("id"),function(b){g[0]==b.currentTarget&&0===a(b.target).closest(".dropdown-content").length?(b.preventDefault(),e()):g.hasClass("active")&&(f(),a(document).unbind("click."+i.attr("id"))),i.hasClass("active")&&a(document).bind("click."+i.attr("id"),function(b){!i.is(b.target)&&!g.is(b.target)&&!g.find(b.target).length>0&&(f(),a(document).unbind("click."+i.attr("id")))})});g.on("open",e),g.on("close",f)})},a(document).ready(function(){a(".dropdown-button").dropdown()})}(jQuery),function(a){a.fn.extend({openModal:function(b){var c=this,d=a('<div id="lean-overlay"></div>');a("body").append(d);var e={opacity:.5,in_duration:350,out_duration:250,ready:void 0,complete:void 0,dismissible:!0};b=a.extend(e,b),b.dismissible&&(a("#lean-overlay").click(function(){a(c).closeModal(b)}),a(document).on("keyup.leanModal",function(d){27===d.keyCode&&a(c).closeModal(b)})),a(c).find(".modal-close").click(function(){a(c).closeModal(b)}),a("#lean-overlay").css({display:"block",opacity:0}),a(c).css({display:"block",opacity:0}),a("#lean-overlay").velocity({opacity:b.opacity},{duration:b.in_duration,queue:!1,ease:"easeOutCubic"}),a(c).hasClass("bottom-sheet")?a(c).velocity({bottom:"0",opacity:1},{duration:b.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof b.ready&&b.ready()}}):(a(c).css({top:"4%"}),a(c).velocity({top:"10%",opacity:1},{duration:b.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof b.ready&&b.ready()}}))}}),a.fn.extend({closeModal:function(b){var c={out_duration:250,complete:void 0},b=a.extend(c,b);a(".modal-close").off(),a(document).off("keyup.leanModal"),a("#lean-overlay").velocity({opacity:0},{duration:b.out_duration,queue:!1,ease:"easeOutQuart"}),a(this).hasClass("bottom-sheet")?a(this).velocity({bottom:"-100%",opacity:0},{duration:b.out_duration,queue:!1,ease:"easeOutCubic",complete:function(){a("#lean-overlay").css({display:"none"}),"function"==typeof b.complete&&b.complete(),a("#lean-overlay").remove()}}):a(this).fadeOut(b.out_duration,function(){a(this).css({top:0}),a("#lean-overlay").css({display:"none"}),"function"==typeof b.complete&&b.complete(),a("#lean-overlay").remove()})}}),a.fn.extend({leanModal:function(b){return this.each(function(){a(this).click(function(c){var d=a(this).attr("href")||"#"+a(this).data("target");a(d).openModal(b),c.preventDefault()})})}})}(jQuery),function(a){a.fn.materialbox=function(){return this.each(function(){function b(){d=!1;var b=g.parent(".material-placeholder"),e=(window.innerWidth,window.innerHeight,g.data("width")),h=g.data("height");g.velocity("stop",!0),a("#materialbox-overlay").velocity("stop",!0),a(".materialbox-caption").velocity("stop",!0),a("#materialbox-overlay").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){c=!1,a(this).remove()}}),g.velocity({width:e,height:h,left:0,top:0},{duration:f,queue:!1,easing:"easeOutQuad"}),a(".materialbox-caption").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){b.css({height:"",width:"",position:"",top:"",left:""}),g.css({height:"",top:"",left:"",width:"","max-width":"",position:"","z-index":""}),g.removeClass("active"),d=!0,a(this).remove()}})}if(!a(this).hasClass("intialized")){a(this).addClass("intialized");
-
-var c=!1,d=!0,e=275,f=200,g=a(this),h=a("<div></div>").addClass("material-placeholder");g.wrap(h),g.on("click",function(){var f=g.parent(".material-placeholder"),h=window.innerWidth,i=window.innerHeight,j=g.width(),k=g.height();if(d===!1)return b(),!1;if(c&&d===!0)return b(),!1;d=!1,g.addClass("active"),c=!0,f.css({width:f[0].getBoundingClientRect().width,height:f[0].getBoundingClientRect().height,position:"relative",top:0,left:0}),g.css({position:"absolute","z-index":1e3}).data("width",j).data("height",k);var l=a('<div id="materialbox-overlay"></div>').css({opacity:0}).click(function(){d===!0&&b()});if(a("body").append(l),l.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"}),""!==g.data("caption")){var m=a('<div class="materialbox-caption"></div>');m.text(g.data("caption")),a("body").append(m),m.css({display:"inline"}),m.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"})}var n=0,o=j/h,p=k/i,q=0,r=0;o>p?(n=k/j,q=.9*h,r=.9*h*n):(n=j/k,q=.9*i*n,r=.9*i),g.hasClass("responsive-img")?g.velocity({"max-width":q,width:j},{duration:0,queue:!1,complete:function(){g.css({left:0,top:0}).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}}):g.css("left",0).css("top",0).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}),a(window).scroll(function(){c&&b()}),a(document).keyup(function(a){27===a.keyCode&&d===!0&&c&&b()})}})},a(document).ready(function(){a(".materialboxed").materialbox()})}(jQuery),function(a){a.fn.parallax=function(){var b=a(window).width();return this.each(function(){function c(c){var e;e=601>b?d.height()>0?d.height():d.children("img").height():d.height()>0?d.height():500;var f=d.children("img").first(),g=f.height(),h=g-e,i=d.offset().top+e,j=d.offset().top,k=a(window).scrollTop(),l=window.innerHeight,m=k+l,n=(m-j)/(e+l),o=Math.round(h*n);c&&f.css("display","block"),i>k&&k+l>j&&f.css("transform","translate3D(-50%,"+o+"px, 0)")}var d=a(this);d.addClass("parallax"),d.children("img").one("load",function(){c(!0)}).each(function(){this.complete&&a(this).load()}),a(window).scroll(function(){b=a(window).width(),c(!1)}),a(window).resize(function(){b=a(window).width(),c(!1)})})}}(jQuery),function(a){var b={init:function(){return this.each(function(){{var b=a(this);a(window).width()}b.width("100%");var c=a(this).children("li").length;b.children("li").each(function(){a(this).width(100/c+"%")});var d,e,f=b.find("li.tab a"),g=b.width(),h=b.find("li").first().outerWidth(),i=0;d=a(f.filter('[href="'+location.hash+'"]')),0===d.length&&(d=a(this).find("li.tab a.active").first()),0===d.length&&(d=a(this).find("li.tab a").first()),d.addClass("active"),i=f.index(d),0>i&&(i=0),e=a(d[0].hash),b.append('<div class="indicator"></div>');var j=b.find(".indicator");b.is(":visible")&&(j.css({right:g-(i+1)*h}),j.css({left:i*h})),a(window).resize(function(){g=b.width(),h=b.find("li").first().outerWidth(),0>i&&(i=0),0!==h&&0!==g&&(j.css({right:g-(i+1)*h}),j.css({left:i*h}))}),f.not(d).each(function(){a(this.hash).hide()}),b.on("click","a",function(c){g=b.width(),h=b.find("li").first().outerWidth(),d.removeClass("active"),e.hide(),d=a(this),e=a(this.hash),f=b.find("li.tab a"),d.addClass("active");var k=i;i=f.index(a(this)),0>i&&(i=0),e.show(),i-k>=0?(j.velocity({right:g-(i+1)*h},{duration:300,queue:!1,easing:"easeOutQuad"}),j.velocity({left:i*h},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})):(j.velocity({left:i*h},{duration:300,queue:!1,easing:"easeOutQuad"}),j.velocity({right:g-(i+1)*h},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})),c.preventDefault()})})},select_tab:function(a){this.find('a[href="#'+a+'"]').trigger("click")}};a.fn.tabs=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)},a(document).ready(function(){a("ul.tabs").tabs()})}(jQuery),function(a){a.fn.tooltip=function(b){var c=null,d=!1,e=null,f=5,g={delay:350};return b=a.extend(g,b),a(".material-tooltip").remove(),this.each(function(){var g=a(this),h=a("<span></span>").text(g.attr("data-tooltip")),i=a("<div></div>");i.addClass("material-tooltip").append(h),i.appendTo(a("body"));var j=a("<div></div>").addClass("backdrop");j.appendTo(i),j.css({top:0,left:0}),a(this).off("mouseenter mouseleave"),a(this).on({mouseenter:function(){var a=g.data("delay");a=void 0==a||""==a?b.delay:a,c=0,e=setInterval(function(){if(c+=10,c>=a&&0==d){d=!0,i.css({display:"block",left:"0px",top:"0px"}),i.children("span").text(g.attr("data-tooltip"));var b=g.outerWidth(),e=g.outerHeight(),h=g.attr("data-position"),k=i.outerHeight(),l=i.outerWidth(),m="0px",n="0px",o=8;"top"===h?(i.css({top:g.offset().top-k-f,left:g.offset().left+b/2-l/2}),m="-10px",j.css({borderRadius:"14px 14px 0 0",transformOrigin:"50% 90%",marginTop:k,marginLeft:l/2-j.width()/2})):"left"===h?(i.css({top:g.offset().top+e/2-k/2,left:g.offset().left-l-f}),n="-10px",j.css({width:"14px",height:"14px",borderRadius:"14px 0 0 14px",transformOrigin:"95% 50%",marginTop:k/2,marginLeft:l})):"right"===h?(i.css({top:g.offset().top+e/2-k/2,left:g.offset().left+b+f}),n="+10px",j.css({width:"14px",height:"14px",borderRadius:"0 14px 14px 0",transformOrigin:"5% 50%",marginTop:k/2,marginLeft:"0px"})):(i.css({top:g.offset().top+g.outerHeight()+f,left:g.offset().left+b/2-l/2}),m="+10px",j.css({marginLeft:l/2-j.width()/2})),o=l/8,8>o&&(o=8),("right"===h||"left"===h)&&(o=l/10,6>o&&(o=6)),i.velocity({opacity:1,marginTop:m,marginLeft:n},{duration:350,queue:!1}),j.css({display:"block"}).velocity({opacity:1},{duration:55,delay:0,queue:!1}).velocity({scale:o},{duration:300,delay:0,queue:!1,easing:"easeInOutQuad"})}},10)},mouseleave:function(){clearInterval(e),c=0,i.velocity({opacity:0,marginTop:0,marginLeft:0},{duration:225,queue:!1,delay:275}),j.velocity({opacity:0,scale:1},{duration:225,delay:275,queue:!1,complete:function(){j.css("display","none"),i.css("display","none"),d=!1}})}})})},a(document).ready(function(){a(".tooltipped").tooltip()})}(jQuery),function(a){"use strict";function b(a){return null!==a&&a===a.window}function c(a){return b(a)?a:9===a.nodeType&&a.defaultView}function d(a){var b,d,e={top:0,left:0},f=a&&a.ownerDocument;return b=f.documentElement,"undefined"!=typeof a.getBoundingClientRect&&(e=a.getBoundingClientRect()),d=c(f),{top:e.top+d.pageYOffset-b.clientTop,left:e.left+d.pageXOffset-b.clientLeft}}function e(a){var b="";for(var c in a)a.hasOwnProperty(c)&&(b+=c+":"+a[c]+";");return b}function f(a){if(k.allowEvent(a)===!1)return null;for(var b=null,c=a.target||a.srcElement;null!==c.parentElement;){if(!(c instanceof SVGElement||-1===c.className.indexOf("waves-effect"))){b=c;break}if(c.classList.contains("waves-effect")){b=c;break}c=c.parentElement}return b}function g(b){var c=f(b);null!==c&&(j.show(b,c),"ontouchstart"in a&&(c.addEventListener("touchend",j.hide,!1),c.addEventListener("touchcancel",j.hide,!1)),c.addEventListener("mouseup",j.hide,!1),c.addEventListener("mouseleave",j.hide,!1))}var h=h||{},i=document.querySelectorAll.bind(document),j={duration:750,show:function(a,b){if(2===a.button)return!1;var c=b||this,f=document.createElement("div");f.className="waves-ripple",c.appendChild(f);var g=d(c),h=a.pageY-g.top,i=a.pageX-g.left,k="scale("+c.clientWidth/100*10+")";"touches"in a&&(h=a.touches[0].pageY-g.top,i=a.touches[0].pageX-g.left),f.setAttribute("data-hold",Date.now()),f.setAttribute("data-scale",k),f.setAttribute("data-x",i),f.setAttribute("data-y",h);var l={top:h+"px",left:i+"px"};f.className=f.className+" waves-notransition",f.setAttribute("style",e(l)),f.className=f.className.replace("waves-notransition",""),l["-webkit-transform"]=k,l["-moz-transform"]=k,l["-ms-transform"]=k,l["-o-transform"]=k,l.transform=k,l.opacity="1",l["-webkit-transition-duration"]=j.duration+"ms",l["-moz-transition-duration"]=j.duration+"ms",l["-o-transition-duration"]=j.duration+"ms",l["transition-duration"]=j.duration+"ms",l["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f.setAttribute("style",e(l))},hide:function(a){k.touchup(a);var b=this,c=(1.4*b.clientWidth,null),d=b.getElementsByClassName("waves-ripple");if(!(d.length>0))return!1;c=d[d.length-1];var f=c.getAttribute("data-x"),g=c.getAttribute("data-y"),h=c.getAttribute("data-scale"),i=Date.now()-Number(c.getAttribute("data-hold")),l=350-i;0>l&&(l=0),setTimeout(function(){var a={top:g+"px",left:f+"px",opacity:"0","-webkit-transition-duration":j.duration+"ms","-moz-transition-duration":j.duration+"ms","-o-transition-duration":j.duration+"ms","transition-duration":j.duration+"ms","-webkit-transform":h,"-moz-transform":h,"-ms-transform":h,"-o-transform":h,transform:h};c.setAttribute("style",e(a)),setTimeout(function(){try{b.removeChild(c)}catch(a){return!1}},j.duration)},l)},wrapInput:function(a){for(var b=0;b<a.length;b++){var c=a[b];if("input"===c.tagName.toLowerCase()){var d=c.parentNode;if("i"===d.tagName.toLowerCase()&&-1!==d.className.indexOf("waves-effect"))continue;var e=document.createElement("i");e.className=c.className+" waves-input-wrapper";var f=c.getAttribute("style");f||(f=""),e.setAttribute("style",f),c.className="waves-button-input",c.removeAttribute("style"),d.replaceChild(e,c),e.appendChild(c)}}}},k={touches:0,allowEvent:function(a){var b=!0;return"touchstart"===a.type?k.touches+=1:"touchend"===a.type||"touchcancel"===a.type?setTimeout(function(){k.touches>0&&(k.touches-=1)},500):"mousedown"===a.type&&k.touches>0&&(b=!1),b},touchup:function(a){k.allowEvent(a)}};h.displayEffect=function(b){b=b||{},"duration"in b&&(j.duration=b.duration),j.wrapInput(i(".waves-effect")),"ontouchstart"in a&&document.body.addEventListener("touchstart",g,!1),document.body.addEventListener("mousedown",g,!1)},h.attach=function(b){"input"===b.tagName.toLowerCase()&&(j.wrapInput([b]),b=b.parentElement),"ontouchstart"in a&&b.addEventListener("touchstart",g,!1),b.addEventListener("mousedown",g,!1)},a.Waves=h,document.addEventListener("DOMContentLoaded",function(){h.displayEffect()},!1)}(window),Materialize.toast=function(a,b,c,d){function e(a){var b=document.createElement("div");if(b.classList.add("toast"),c)for(var e=c.split(" "),f=0,g=e.length;g>f;f++)b.classList.add(e[f]);b.innerHTML=a;var h=new Hammer(b,{prevent_default:!1});return h.on("pan",function(a){var c=a.deltaX,d=80;b.classList.contains("panning")||b.classList.add("panning");var e=1-Math.abs(c/d);0>e&&(e=0),Vel(b,{left:c,opacity:e},{duration:50,queue:!1,easing:"easeOutQuad"})}),h.on("panend",function(a){var c=a.deltaX,e=80;Math.abs(c)>e?Vel(b,{marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),b.parentNode.removeChild(b)}}):(b.classList.remove("panning"),Vel(b,{left:0,opacity:1},{duration:300,easing:"easeOutExpo",queue:!1}))}),b}c=c||"";var f=document.getElementById("toast-container");if(null===f){var f=document.createElement("div");f.id="toast-container",document.body.appendChild(f)}var g=e(a);f.appendChild(g),g.style.top="35px",g.style.opacity=0,Vel(g,{top:"0px",opacity:1},{duration:300,easing:"easeOutCubic",queue:!1});var h=b,i=setInterval(function(){null===g.parentNode&&window.clearInterval(i),g.classList.contains("panning")||(h-=20),0>=h&&(Vel(g,{opacity:0,marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),this[0].parentNode.removeChild(this[0])}}),window.clearInterval(i))},20)},function(a){var b={init:function(b){var c={menuWidth:240,edge:"left",closeOnClick:!1};b=a.extend(c,b),a(this).each(function(){function c(c){f=!1,g=!1,a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),"left"===b.edge?(a(".drag-target").css({width:"",right:"",left:"0"}),e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){1==c&&(e.removeAttr("style"),e.css("width",b.menuWidth))}})):(a(".drag-target").css({width:"",right:"0",left:""}),e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){1==c&&(e.removeAttr("style"),e.css("width",b.menuWidth))}}))}var d=a(this),e=a("#"+d.attr("data-activates"));240!=b.menuWidth&&e.css("width",b.menuWidth),a("body").append(a('<div class="drag-target"></div>')),"left"==b.edge?(e.css("left",-1*(b.menuWidth+10)),a(".drag-target").css({left:0})):(e.addClass("right-aligned").css("right",-1*(b.menuWidth+10)).css("left",""),a(".drag-target").css({right:0})),e.hasClass("fixed")&&a(window).width()>992&&e.css("left",0),e.hasClass("fixed")&&a(window).resize(function(){window.innerWidth>992?0!=a("#sidenav-overlay").css("opacity")&&g?c(!0):(e.removeAttr("style"),e.css("width",b.menuWidth)):g===!1&&("left"===b.edge?e.css("left",-1*(b.menuWidth+10)):e.css("right",-1*(b.menuWidth+10)))}),1==b.closeOnClick&&e.on("click.itemclick","a:not(.collapsible-header)",function(){c()});var f=!1,g=!1;a(".drag-target").on("click",function(){c()}),a(".drag-target").hammer({prevent_default:!1}).bind("pan",function(d){if("touch"==d.gesture.pointerType){{var f=(d.gesture.direction,d.gesture.center.x);d.gesture.center.y,d.gesture.velocityX}if(0===a("#sidenav-overlay").length){var h=a('<div id="sidenav-overlay"></div>');h.css("opacity",0).click(function(){c()}),a("body").append(h)}if("left"===b.edge&&(f>b.menuWidth?f=b.menuWidth:0>f&&(f=0)),"left"===b.edge)f<b.menuWidth/2?g=!1:f>=b.menuWidth/2&&(g=!0),e.css("left",f-b.menuWidth);else{f<a(window).width()-b.menuWidth/2?g=!0:f>=a(window).width()-b.menuWidth/2&&(g=!1);var i=-1*(f-b.menuWidth/2);i>0&&(i=0),e.css("right",i)}if("left"===b.edge){var j=f/b.menuWidth;a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"})}else{var j=Math.abs((f-a(window).width())/b.menuWidth);a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"})}}}).bind("panend",function(c){if("touch"==c.gesture.pointerType){var d=c.gesture.velocityX;f=!1,"left"===b.edge?g&&.3>=d||-.5>d?(e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),a(".drag-target").css({width:"50%",right:0,left:""})):(!g||d>.3)&&(e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),a(".drag-target").css({width:"10px",right:"",left:0})):g&&d>=-.3||d>.5?(e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),a(".drag-target").css({width:"50%",right:"",left:0})):(!g||-.3>d)&&(e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),a(".drag-target").css({width:"10px",right:0,left:""}))}}),d.click(function(){if(1==g)g=!1,f=!1,c();else{"left"===b.edge?(a(".drag-target").css({width:"50%",right:0,left:""}),e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"})):(a(".drag-target").css({width:"50%",right:"",left:0}),e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),e.css("left",""));var d=a('<div id="sidenav-overlay"></div>');d.css("opacity",0).click(function(){g=!1,f=!1,c(),d.velocity({opacity:0},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}})}),a("body").append(d),d.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){g=!0,f=!1}})}return!1})})},show:function(){this.trigger("click")},hide:function(){a("#sidenav-overlay").trigger("click")}};a.fn.sideNav=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)}}(jQuery),function(a){function b(b,c,d,e){var f=a();return a.each(g,function(a,g){if(g.height()>0){var h=g.offset().top,i=g.offset().left,j=i+g.width(),k=h+g.height(),l=!(i>c||e>j||h>d||b>k);l&&f.push(g)}}),f}function c(){++j;var c=f.scrollTop(),d=f.scrollLeft(),e=d+f.width(),g=c+f.height(),i=b(c+k.top+200,e+k.right,g+k.bottom,d+k.left);a.each(i,function(a,b){var c=b.data("scrollSpy:ticks");"number"!=typeof c&&b.triggerHandler("scrollSpy:enter"),b.data("scrollSpy:ticks",j)}),a.each(h,function(a,b){var c=b.data("scrollSpy:ticks");"number"==typeof c&&c!==j&&(b.triggerHandler("scrollSpy:exit"),b.data("scrollSpy:ticks",null))}),h=i}function d(){f.trigger("scrollSpy:winSize")}function e(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:l(),g=null,f=a.apply(d,e),d=e=null};return function(){var j=l();h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}}var f=a(window),g=[],h=[],i=!1,j=0,k={top:0,right:0,bottom:0,left:0},l=Date.now||function(){return(new Date).getTime()};a.scrollSpy=function(b,d){var h=[];b=a(b),b.each(function(b,c){g.push(a(c)),a(c).data("scrollSpy:id",b),a("a[href=#"+a(c).attr("id")+"]").click(function(b){b.preventDefault();var c=a(this.hash).offset().top+1;a("html, body").animate({scrollTop:c-200},{duration:400,queue:!1,easing:"easeOutCubic"})})}),d=d||{throttle:100},k.top=d.offsetTop||0,k.right=d.offsetRight||0,k.bottom=d.offsetBottom||0,k.left=d.offsetLeft||0;var j=e(c,d.throttle||100),l=function(){a(document).ready(j)};return i||(f.on("scroll",l),f.on("resize",l),i=!0),setTimeout(l,0),b.on("scrollSpy:enter",function(){h=a.grep(h,function(a){return 0!=a.height()});var b=a(this);h[0]?(a("a[href=#"+h[0].attr("id")+"]").removeClass("active"),b.data("scrollSpy:id")<h[0].data("scrollSpy:id")?h.unshift(a(this)):h.push(a(this))):h.push(a(this)),a("a[href=#"+h[0].attr("id")+"]").addClass("active")}),b.on("scrollSpy:exit",function(){if(h=a.grep(h,function(a){return 0!=a.height()}),h[0]){a("a[href=#"+h[0].attr("id")+"]").removeClass("active");var b=a(this);h=a.grep(h,function(a){return a.attr("id")!=b.attr("id")}),h[0]&&a("a[href=#"+h[0].attr("id")+"]").addClass("active")}}),b},a.winSizeSpy=function(b){return a.winSizeSpy=function(){return f},b=b||{throttle:100},f.on("resize",e(d,b.throttle||100))},a.fn.scrollSpy=function(b){return a.scrollSpy(a(this),b)}}(jQuery),function(a){a(document).ready(function(){function b(b){d.text(b.val()+"\n");var c=d.html().replace(/\n/g,"<br>");d.html(c),b.is(":visible")?d.css("width",b.width()):d.css("width",a(window).width()/2),b.css("height",d.height())}Materialize.updateTextFields=function(){var b="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a(b).each(function(b,c){a(c).val().length>0||void 0!==a(this).attr("placeholder")?a(this).siblings("label, i").addClass("active"):a(this).siblings("label, i").removeClass("active")})};var c="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a("input[autofocus]").siblings("label, i").addClass("active"),a(document).on("change",c,function(){(0!==a(this).val().length||void 0!==a(this).attr("placeholder"))&&a(this).siblings("label, i").addClass("active"),validate_field(a(this))}),a(document).ready(function(){Materialize.updateTextFields()}),a(document).on("reset",function(b){a(b.target).is("form")&&(a(this).find(c).removeClass("valid").removeClass("invalid"),a(this).find(c).siblings("label, i").removeClass("active"),a(this).find("select.initialized").each(function(){var b=a(this).find("option[selected]").text();a(this).siblings("input.select-dropdown").val(b)}))}),a(document).on("focus",c,function(){a(this).siblings("label, i").addClass("active")}),a(document).on("blur",c,function(){0===a(this).val().length&&void 0===a(this).attr("placeholder")&&a(this).siblings("label, i").removeClass("active"),validate_field(a(this))}),validate_field=function(a){0===a.val().length?a.hasClass("validate")&&(a.removeClass("valid"),a.removeClass("invalid")):a.hasClass("validate")&&(a.is(":valid")?(a.removeClass("invalid"),a.addClass("valid")):(a.removeClass("valid"),a.addClass("invalid")))};var d=a(".hiddendiv").first();d.length||(d=a('<div class="hiddendiv common"></div>'),a("body").append(d));var e=".materialize-textarea";a(e).each(function(){var c=a(this);c.val().length&&b(c)}),a("body").on("keyup keydown",e,function(){b(a(this))}),a(".file-field").each(function(){var b=a(this).find("input.file-path");a(this).find('input[type="file"]').change(function(){b.val(a(this)[0].files[0].name),b.trigger("change")})});var f="input[type=range]",g=!1;a(f).each(function(){var b=a('<span class="thumb"><span class="value"></span></span>');a(this).after(b)});var h=".range-field";a(document).on("mousedown",h,function(b){var c=a(this).children(".thumb");c.length<=0&&(c=a('<span class="thumb"><span class="value"></span></span>'),a(this).append(c)),g=!0,a(this).addClass("active"),c.hasClass("active")||c.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"});var d=b.pageX-a(this).offset().left,e=a(this).outerWidth();0>d?d=0:d>e&&(d=e),c.addClass("active").css("left",d),c.find(".value").html(a(this).children("input[type=range]").val())}),a(document).on("mouseup",h,function(){g=!1,a(this).removeClass("active")}),a(document).on("mousemove",h,function(b){var c=a(this).children(".thumb");if(g){c.hasClass("active")||c.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"});var d=b.pageX-a(this).offset().left,e=a(this).outerWidth();0>d?d=0:d>e&&(d=e),c.addClass("active").css("left",d),c.find(".value").html(a(this).children("input[type=range]").val())}}),a(document).on("mouseout",h,function(){if(!g){var b=a(this).children(".thumb");b.hasClass("active")&&b.velocity({height:"0",width:"0",top:"10px",marginLeft:"-6px"},{duration:100}),b.removeClass("active")}})}),a.fn.material_select=function(b){a(this).each(function(){if($select=a(this),!$select.hasClass("browser-default")){var c=$select.data("select-id");if(c&&($select.parent().find("i").remove(),$select.parent().find("input").remove(),$select.unwrap(),a("ul#select-options-"+c).remove()),"destroy"===b)return void $select.data("select-id",null).removeClass("initialized");var d=Materialize.guid();$select.data("select-id",d);var e=a('<div class="select-wrapper"></div>');e.addClass($select.attr("class"));var f=a('<ul id="select-options-'+d+'" class="dropdown-content select-dropdown"></ul>'),g=$select.children("option");if(void 0!==$select.find("option:selected"))var h=$select.find("option:selected");else var h=f.first();g.each(function(){f.append(a('<li class="'+(a(this).is(":disabled")?"disabled":"")+'"><span>'+a(this).html()+"</span></li>"))}),f.find("li").each(function(c){var d=$select;a(this).click(function(){a(this).hasClass("disabled")||(d.find("option").eq(c).prop("selected",!0),d.trigger("change"),d.siblings("input.select-dropdown").val(a(this).text()),"undefined"!=typeof b&&b())})}),$select.wrap(e);var i=a('<i class="mdi-navigation-arrow-drop-down"></i>');$select.is(":disabled")&&i.addClass("disabled");var j=a('<input type="text" class="select-dropdown" readonly="true" '+($select.is(":disabled")?"disabled":"")+' data-activates="select-options-'+d+'" value="'+h.html()+'"/>');$select.before(j),j.before(i),a("body").append(f),$select.is(":disabled")||j.dropdown({hover:!1}),$select.attr("tabindex")&&a(j[0]).attr("tabindex",$select.attr("tabindex")),$select.addClass("initialized"),j.on("focus",function(){a(this).trigger("open"),h=a(this).val(),selectedOption=f.find("li").filter(function(){return a(this).text().toLowerCase()===h.toLowerCase()})[0],activateOption(f,selectedOption)}),j.on("blur",function(){a(this).trigger("close")}),activateOption=function(b,c){b.find("li.active").removeClass("active"),a(c).addClass("active"),b.scrollTo(c)},filterQuery=[],onKeyDown=function(b){return 9==b.which?void j.trigger("close"):40!=b.which||f.is(":visible")?void((13!=b.which||f.is(":visible"))&&(b.preventDefault(),letter=String.fromCharCode(b.which).toLowerCase(),letter&&(filterQuery.push(letter),string=filterQuery.join(""),newOption=f.find("li").filter(function(){return 0===a(this).text().toLowerCase().indexOf(string)})[0],newOption&&activateOption(f,newOption)),13==b.which&&(activeOption=f.find("li.active:not(.disabled)")[0],activeOption&&(a(activeOption).trigger("click"),j.trigger("close"))),40==b.which&&(newOption=f.find("li.active").next("li:not(.disabled)")[0],newOption&&activateOption(f,newOption)),27==b.which&&j.trigger("close"),38==b.which&&(newOption=f.find("li.active").prev("li:not(.disabled)")[0],newOption&&activateOption(f,newOption)),setTimeout(function(){filterQuery=[]},1e3))):void j.trigger("open")},j.on("keydown",onKeyDown)}})}}(jQuery),function(a){a.fn.slider=function(b){var c={indicators:!0,height:400,transition:500,interval:6e3};return b=a.extend(c,b),this.each(function(){function c(a,b){a.hasClass("center-align")?a.velocity({opacity:0,translateY:-100},{duration:b,queue:!1}):a.hasClass("right-align")?a.velocity({opacity:0,translateX:100},{duration:b,queue:!1}):a.hasClass("left-align")&&a.velocity({opacity:0,translateX:-100},{duration:b,queue:!1})}function d(a){a>=h.length?a=0:0>a&&(a=h.length-1),i=g.find(".active").index(),i!=a&&(e=h.eq(i),$caption=e.find(".caption"),e.removeClass("active"),e.velocity({opacity:0},{duration:b.transition,queue:!1,easing:"easeOutQuad",complete:function(){h.not(".active").velocity({opacity:0,translateX:0,translateY:0},{duration:0,queue:!1})}}),c($caption,b.transition),b.indicators&&j.eq(i).removeClass("active"),h.eq(a).velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,delay:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).addClass("active"),b.indicators&&j.eq(a).addClass("active"))}var e,f=a(this),g=f.find("ul.slides").first(),h=g.find("li"),i=g.find(".active").index();if(-1!=i&&(e=h.eq(i)),400!=b.height&&(f.height(b.height+40),g.height(b.height)),h.find(".caption").each(function(){c(a(this),0)}),h.find("img").each(function(){a(this).css("background-image","url("+a(this).attr("src")+")"),a(this).attr("src","data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==")}),b.indicators){var j=a('<ul class="indicators"></ul>');h.each(function(){var c=a('<li class="indicator-item"></li>');c.click(function(){var c=g.parent(),e=c.find(a(this)).index();d(e),clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval)}),j.append(c)}),f.append(j),j=f.find("ul.indicators").find("li.indicator-item")}e?e.show():(h.first().addClass("active").velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),i=0,e=h.eq(i),b.indicators&&j.eq(i).addClass("active")),e.find("img").each(function(){e.find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,queue:!1,easing:"easeOutQuad"})}),$interval=setInterval(function(){i=g.find(".active").index(),d(i+1)},b.transition+b.interval);var k=!1,l=!1,m=!1;f.hammer({prevent_default:!1}).bind("pan",function(a){if("touch"===a.gesture.pointerType){clearInterval($interval);var b=a.gesture.direction,c=a.gesture.deltaX,d=a.gesture.velocityX;$curr_slide=g.find(".active"),$curr_slide.velocity({translateX:c},{duration:50,queue:!1,easing:"easeOutQuad"}),4===b&&(c>f.innerWidth()/2||-.65>d)?m=!0:2===b&&(c<-1*f.innerWidth()/2||d>.65)&&(l=!0);var e;l&&(e=$curr_slide.next(),0===e.length&&(e=h.first()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"})),m&&(e=$curr_slide.prev(),0===e.length&&(e=h.last()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(a){"touch"===a.gesture.pointerType&&($curr_slide=g.find(".active"),k=!1,curr_index=g.find(".active").index(),m||l?l?(d(curr_index+1),$curr_slide.velocity({translateX:-1*f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):m&&(d(curr_index-1),$curr_slide.velocity({translateX:f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):$curr_slide.velocity({translateX:0},{duration:300,queue:!1,easing:"easeOutQuad"}),l=!1,m=!1,clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval))})})}}(jQuery),function(a){a(document).ready(function(){a(document).on("click.card",".card",function(b){a(this).find(".card-reveal").length&&(a(b.target).is(a(".card-reveal .card-title"))||a(b.target).is(a(".card-reveal .card-title i"))?a(this).find(".card-reveal").velocity({translateY:0},{duration:225,queue:!1,easing:"easeInOutQuad",complete:function(){a(this).css({display:"none"})}}):(a(b.target).is(a(".card .activator"))||a(b.target).is(a(".card .activator i")))&&a(this).find(".card-reveal").css({display:"block"}).velocity("stop",!1).velocity({translateY:"-100%"},{duration:300,queue:!1,easing:"easeInOutQuad"}))})})}(jQuery),function(a){a(document).ready(function(){a.fn.pushpin=function(b){var c={top:0,bottom:1/0,offset:0};return b=a.extend(c,b),$index=0,this.each(function(){function c(a){a.removeClass("pin-top"),a.removeClass("pinned"),a.removeClass("pin-bottom")}function d(d,e){d.each(function(){b.top<=e&&b.bottom>=e&&!a(this).hasClass("pinned")&&(c(a(this)),a(this).css("top",b.offset),a(this).addClass("pinned")),e<b.top&&!a(this).hasClass("pin-top")&&(c(a(this)),a(this).css("top",0),a(this).addClass("pin-top")),e>b.bottom&&!a(this).hasClass("pin-bottom")&&(c(a(this)),a(this).addClass("pin-bottom"),a(this).css("top",b.bottom-g))})}var e=Materialize.guid(),f=a(this),g=a(this).offset().top;d(f,a(window).scrollTop()),a(window).on("scroll."+e,function(){var c=a(window).scrollTop()+b.offset;d(f,c)})})}})}(jQuery),function(a){a(document).ready(function(){a.fn.reverse=[].reverse,a(document).on("mouseenter.fixedActionBtn",".fixed-action-btn",function(){var b=a(this);b.find("ul .btn-floating").velocity({scaleY:".4",scaleX:".4",translateY:"40px"},{duration:0});var c=0;b.find("ul .btn-floating").reverse().each(function(){a(this).velocity({opacity:"1",scaleX:"1",scaleY:"1",translateY:"0"},{duration:80,delay:c}),c+=40})}),a(document).on("mouseleave.fixedActionBtn",".fixed-action-btn",function(){var b=a(this);b.find("ul .btn-floating").velocity("stop",!0),b.find("ul .btn-floating").velocity({opacity:"0",scaleX:".4",scaleY:".4",translateY:"40px"},{duration:80})})})}(jQuery),function(a){Materialize.fadeInImage=function(b){var c=a(b);c.css({opacity:0}),a(c).velocity({opacity:1},{duration:650,queue:!1,easing:"easeOutSine"}),a(c).velocity({opacity:1},{duration:1300,queue:!1,easing:"swing",step:function(b,c){c.start=100;var d=b/100,e=150-(100-b)/1.75;100>e&&(e=100),b>=0&&a(this).css({"-webkit-filter":"grayscale("+d+")brightness("+e+"%)",filter:"grayscale("+d+")brightness("+e+"%)"})}})},Materialize.showStaggeredList=function(b){var c=0;a(b).find("li").velocity({translateX:"-100px"
-},{duration:0}),a(b).find("li").each(function(){a(this).velocity({opacity:"1",translateX:"0"},{duration:800,delay:c,easing:[60,10]}),c+=120})},a(document).ready(function(){var b=!1,c=!1;a(".dismissable").each(function(){a(this).hammer({prevent_default:!1}).bind("pan",function(d){if("touch"===d.gesture.pointerType){var e=a(this),f=d.gesture.direction,g=d.gesture.deltaX,h=d.gesture.velocityX;e.velocity({translateX:g},{duration:50,queue:!1,easing:"easeOutQuad"}),4===f&&(g>e.innerWidth()/2||-.75>h)?b=!0:2===f&&(g<-1*e.innerWidth()/2||h>.75)&&(c=!0)}}).bind("panend",function(d){if("touch"===d.gesture.pointerType){var e=a(this);if(b||c){var f;f=b?e.innerWidth():-1*e.innerWidth(),e.velocity({translateX:f},{duration:100,queue:!1,easing:"easeOutQuad",complete:function(){e.css("border","none"),e.velocity({height:0,padding:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){e.remove()}})}})}else e.velocity({translateX:0},{duration:100,queue:!1,easing:"easeOutQuad"});b=!1,c=!1}})})})}(jQuery),function(){Materialize.scrollFire=function(a){var b=!1;window.addEventListener("scroll",function(){b=!0}),setInterval(function(){if(b){b=!1;for(var c=window.pageYOffset+window.innerHeight,d=0;d<a.length;d++){var e=a[d],f=e.selector,g=e.offset,h=e.callback,i=document.querySelector(f);if(null!==i){var j=i.getBoundingClientRect().top+document.body.scrollTop;if(c>j+g&&1!=e.done){var k=new Function(h);k(),e.done=!0}}}}},100)}}(jQuery),function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):this.Picker=a(jQuery)}(function(a){function b(f,g,i,l){function m(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",y.component.nodes(t.open),v.box),v.wrap),v.frame),v.holder)}function n(){w.data(g,y).addClass(v.input).attr("tabindex",-1).val(w.data("value")?y.get("select",u.format):f.value),u.editable||w.on("focus."+t.id+" click."+t.id,function(a){a.preventDefault(),y.$root[0].focus()}).on("keydown."+t.id,q),e(f,{haspopup:!0,expanded:!1,readonly:!1,owns:f.id+"_root"})}function o(){y.$root.on({keydown:q,focusin:function(a){y.$root.removeClass(v.focused),a.stopPropagation()},"mousedown click":function(b){var c=b.target;c!=y.$root.children()[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),y.$root[0].focus()))}}).on({focus:function(){w.addClass(v.target)},blur:function(){w.removeClass(v.target)}}).on("focus.toOpen",r).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(v.navDisabled)||b.hasClass(v.disabled),e=h();e=e&&(e.type||e.href),(d||e&&!a.contains(y.$root[0],e))&&y.$root[0].focus(),!d&&c.nav?y.set("highlight",y.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?y.set("select",c.pick):c.clear?y.clear().close(!0):c.close&&y.close(!0)}),e(y.$root[0],"hidden",!0)}function p(){var b;u.hiddenName===!0?(b=f.name,f.name=""):(b=["string"==typeof u.hiddenPrefix?u.hiddenPrefix:"","string"==typeof u.hiddenSuffix?u.hiddenSuffix:"_submit"],b=b[0]+f.name+b[1]),y._hidden=a('<input type=hidden name="'+b+'"'+(w.data("value")||f.value?' value="'+y.get("select",u.formatSubmit)+'"':"")+">")[0],w.on("change."+t.id,function(){y._hidden.value=f.value?y.get("select",u.formatSubmit):""}),u.container?a(u.container).append(y._hidden):w.after(y._hidden)}function q(a){var b=a.keyCode,c=/^(8|46)$/.test(b);return 27==b?(y.close(),!1):void((32==b||c||!t.open&&y.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?y.clear().close():y.open()))}function r(a){a.stopPropagation(),"focus"==a.type&&y.$root.addClass(v.focused),y.open()}if(!f)return b;var s=!1,t={id:f.id||"P"+Math.abs(~~(Math.random()*new Date))},u=i?a.extend(!0,{},i.defaults,l):l||{},v=a.extend({},b.klasses(),u.klass),w=a(f),x=function(){return this.start()},y=x.prototype={constructor:x,$node:w,start:function(){return t&&t.start?y:(t.methods={},t.start=!0,t.open=!1,t.type=f.type,f.autofocus=f==h(),f.readOnly=!u.editable,f.id=f.id||t.id,"text"!=f.type&&(f.type="text"),y.component=new i(y,u),y.$root=a(b._.node("div",m(),v.picker,'id="'+f.id+'_root" tabindex="0"')),o(),u.formatSubmit&&p(),n(),u.container?a(u.container).append(y.$root):w.after(y.$root),y.on({start:y.component.onStart,render:y.component.onRender,stop:y.component.onStop,open:y.component.onOpen,close:y.component.onClose,set:y.component.onSet}).on({start:u.onStart,render:u.onRender,stop:u.onStop,open:u.onOpen,close:u.onClose,set:u.onSet}),s=c(y.$root.children()[0]),f.autofocus&&y.open(),y.trigger("start").trigger("render"))},render:function(a){return a?y.$root.html(m()):y.$root.find("."+v.box).html(y.component.nodes(t.open)),y.trigger("render")},stop:function(){return t.start?(y.close(),y._hidden&&y._hidden.parentNode.removeChild(y._hidden),y.$root.remove(),w.removeClass(v.input).removeData(g),setTimeout(function(){w.off("."+t.id)},0),f.type=t.type,f.readOnly=!1,y.trigger("stop"),t.methods={},t.start=!1,y):y},open:function(c){return t.open?y:(w.addClass(v.active),e(f,"expanded",!0),setTimeout(function(){y.$root.addClass(v.opened),e(y.$root[0],"hidden",!1)},0),c!==!1&&(t.open=!0,s&&k.css("overflow","hidden").css("padding-right","+="+d()),y.$root[0].focus(),j.on("click."+t.id+" focusin."+t.id,function(a){var b=a.target;b!=f&&b!=document&&3!=a.which&&y.close(b===y.$root.children()[0])}).on("keydown."+t.id,function(c){var d=c.keyCode,e=y.component.key[d],f=c.target;27==d?y.close(!0):f!=y.$root[0]||!e&&13!=d?a.contains(y.$root[0],f)&&13==d&&(c.preventDefault(),f.click()):(c.preventDefault(),e?b._.trigger(y.component.key.go,y,[b._.trigger(e)]):y.$root.find("."+v.highlighted).hasClass(v.disabled)||y.set("select",y.component.item.highlight).close())})),y.trigger("open"))},close:function(a){return a&&(y.$root.off("focus.toOpen")[0].focus(),setTimeout(function(){y.$root.on("focus.toOpen",r)},0)),w.removeClass(v.active),e(f,"expanded",!1),setTimeout(function(){y.$root.removeClass(v.opened+" "+v.focused),e(y.$root[0],"hidden",!0)},0),t.open?(t.open=!1,s&&k.css("overflow","").css("padding-right","-="+d()),j.off("."+t.id),y.trigger("close")):y},clear:function(a){return y.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in y.component.item&&(void 0===f&&(f=null),y.component.set(e,f,d)),("select"==e||"clear"==e)&&w.val("clear"==e?"":y.get(e,u.format)).trigger("change");y.render()}return d.muted?y:y.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=t[a])return t[a];if("valueSubmit"==a){if(y._hidden)return y._hidden.value;a="value"}if("value"==a)return f.value;if(a in y.component.item){if("string"==typeof c){var d=y.component.get(a);return d?b._.trigger(y.component.formats.toString,y.component,[c,d]):""}return y.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),t.methods[e]=t.methods[e]||[],t.methods[e].push(f)}return y},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a<namesCount;a+=1)b=c[a],b in t.methods&&delete t.methods[b];return y},trigger:function(a,c){var d=function(a){var d=t.methods[a];d&&d.map(function(a){b._.trigger(a,y,[c])})};return d("_"+a),d(a),y}};return new x}function c(a){var b,c="position";return a.currentStyle?b=a.currentStyle[c]:window.getComputedStyle&&(b=getComputedStyle(a)[c]),"fixed"==b}function d(){if(k.height()<=i.height())return 0;var b=a('<div style="visibility:hidden;width:100px" />').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('<div style="width:100%" />').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(b,c,d){if(a.isPlainObject(c))for(var e in c)f(b,e,c[e]);else f(b,c,d)}function f(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function g(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d,f=b[d];c+=null==f?"":e+'="'+b[d]+'"'}return c}function h(){try{return document.activeElement}catch(a){}}var i=a(window),j=a(document),k=a(document.documentElement);return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+"</"+b+">"):""},lead:function(a){return(10>a?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1===0},ariaAttr:g},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){var f=a(this);f.data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b}),function(a){"function"==typeof define&&define.amd?define(["picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return a[0]===!0?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=6,f=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var e,g=this;return c=void 0===c?a:c,c==-(1/0)||c==1/0?e=c:b.isPlainObject(c)&&f.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=f.isDate(c)?c:g.create().obj):c=f.isInteger(c)||f.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:e||c.getFullYear(),month:e||c.getMonth(),date:e||c.getDate(),day:e||c.getDay(),obj:e||c,pick:e||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return a===!0||b.isArray(a)||f.isDate(a)?d.create(a):a};return f.isInteger(a)||(a=e(a)),f.isInteger(c)||(c=e(c)),f.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:f.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return b?"string"==typeof b?b=c.parse(a,b):f.isInteger(b)&&(b=c.now(a,b,{rel:b})):b="min"==a?-(1/0):1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var e,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d<c.pick?e=!0:d>c.pick&&(g=!0)}return f.isInteger(a)}).length;if((!d||!d.nav)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||e||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!e&&0>l)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.month<k.month||c.month>k.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return f.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||f.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,e={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?f.trigger(c,d,[b,e]):a.replace(/^!/,"").length;c&&(e[a]=b.substr(0,g)),b=b.substr(g)}),[e.yyyy||e.yy,+(e.mm||e.m)-1,e.dd||e.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?f.digits(a):b.date},dd:function(a,b){return a?2:f.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?f.digits(a):b.month+1},mm:function(a,b){return a?2:f.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return f.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return f.isInteger(a)&&f.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(f.isDate(a)||b.isArray(a))&&(f.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:b.isPlainObject(a)&&b.isPlainObject(c)?d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to):!1},c.prototype.isDateOverlap=function(a,c){var d=this,e=d.settings.firstDay?1:0;return f.isInteger(a)&&(f.isDate(c)||b.isArray(c))?(a=a%7+e,a===d.create(c).day+1):f.isInteger(c)&&(f.isDate(a)||b.isArray(a))?(c=c%7+e,c===d.create(a).day+1):b.isPlainObject(a)&&b.isPlainObject(c)?d.overlapRanges(a,c):!1},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():c===!1?(d.flipEnable(1),e=[]):c===!0?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,g=0;g<e.length;g+=1)if(d.isDateExact(a,e[g])){c=!0;break}c||(f.isInteger(a)||f.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,g=e.length;return"flip"==c?d.flipEnable():c===!0?(d.flipEnable(1),e=[]):c===!1?(d.flipEnable(-1),e=[]):c.map(function(a){var c,h,i,j;for(i=0;g>i;i+=1){if(h=e[i],d.isDateExact(h,a)){c=e[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):f.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;g>i;i+=1)if(d.isDateExact(e[i],a)){e[i]=null;break}if(j)for(i=0;g>i;i+=1)if(d.isDateOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,g=b.item,h=g.now,i=g.select,j=g.highlight,k=g.view,l=g.disable,m=g.min,n=g.max,o=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),f.node("thead",f.node("tr",f.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysLetter).slice(0),c.weekdaysFull.slice(0)),p=function(a){return f.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&k.year>=n.year&&k.month>=n.month||!a&&k.year<=m.year&&k.month<=m.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+f.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},q=function(d){var e=c.showMonthsShort?c.monthsShort:c.monthsFull;return"short_months"==d&&(e=c.monthsShort),c.selectMonths&&void 0==d?f.node("select",f.group({min:0,max:11,i:1,node:"option",item:function(a){return[e[a],0,"value="+a+(k.month==a?" selected":"")+(k.year==m.year&&a<m.month||k.year==n.year&&a>n.month?" disabled":"")]}}),c.klass.selectMonth+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):"short_months"==d?null!=i?f.node("div",e[i.month]):f.node("div",e[k.month]):f.node("div",e[k.month],c.klass.month)},r=function(d){var e=k.year,g=c.selectYears===!0?5:~~(c.selectYears/2);if(g){var h=m.year,i=n.year,j=e-g,l=e+g;if(h>j&&(l+=h-j,j=h),l>i){var o=j-h,p=l-i;j-=o>p?p:o,l=i}if(c.selectYears&&void 0==d)return f.node("select",f.group({min:j,max:l,i:1,node:"option",item:function(a){return[a,0,"value="+a+(e==a?" selected":"")]}}),c.klass.selectYear+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return"raw"==d?f.node("div",e):f.node("div",e,c.klass.year)};return createDayLabel=function(){return null!=i?f.node("div",i.date):f.node("div",h.date)},createWeekdayLabel=function(){var a;a=null!=i?i.day:h.day;var b=c.weekdaysFull[a];return b},f.node("div",f.node("div",createWeekdayLabel(),"picker__weekday-display")+f.node("div",q("short_months"),c.klass.month_display)+f.node("div",createDayLabel(),c.klass.day_display)+f.node("div",r("raw"),c.klass.year_display),c.klass.date_display)+f.node("div",f.node("div",(c.selectYears?q()+r():q()+r())+p()+p(1),c.klass.header)+f.node("table",o+f.node("tbody",f.group({min:0,max:e-1,i:1,node:"tr",item:function(a){var e=c.firstDay&&0===b.create([k.year,k.month,1]).day?-7:0;return[f.group({min:d*a-k.day+e+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([k.year,k.month,a+(c.firstDay?1:0)]);var d=i&&i.pick==a.pick,e=j&&j.pick==a.pick,g=l&&b.disabled(a)||a.pick<m.pick||a.pick>n.pick,o=f.trigger(b.formats.toString,b,[c.format,a]);return[f.node("div",a.date,function(b){return b.push(k.month==a.month?c.klass.infocus:c.klass.outfocus),h.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),e&&b.push(c.klass.highlighted),g&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+f.ariaAttr({role:"gridcell",label:o,selected:d&&b.$node.val()===o?!0:null,activedescendant:e?!0:null,disabled:g?!0:null})),"",f.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+f.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0})),c.klass.calendar_container)+f.node("div",f.node("button",c.today,"btn-flat picker__today","type=button data-pick="+h.pick+(a&&!b.disabled(h)?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.clear,"btn-flat picker__clear","type=button data-clear=1"+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.close,"btn-flat picker__close","type=button data-close=true "+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysLetter:["S","M","T","W","T","F","S"],today:"Today",clear:"Clear",close:"Close",format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",date_display:a+"date-display",day_display:a+"day-display",month_display:a+"month-display",year_display:a+"year-display",calendar_container:a+"calendar-container",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)}),function(a){function b(){var b=+a(this).attr("length"),c=+a(this).val().length,d=b>=c;a(this).parent().find('span[class="character-counter"]').html(c+"/"+b),e(d,a(this))}function c(b){$counterElement=a("<span/>").addClass("character-counter").css("float","right").css("font-size","12px").css("height",1),b.parent().append($counterElement)}function d(){a(this).parent().find('span[class="character-counter"]').html("")}function e(a,b){inputHasInvalidClass=b.hasClass("invalid"),a&&inputHasInvalidClass?b.removeClass("invalid"):a||inputHasInvalidClass||(b.removeClass("valid"),b.addClass("invalid"))}a.fn.characterCounter=function(){return this.each(function(){itHasLengthAttribute=void 0!=a(this).attr("length"),itHasLengthAttribute&&(a(this).on("input",b),a(this).on("focus",b),a(this).on("blur",d),c(a(this)))})},a(document).ready(function(){a("input, textarea").characterCounter()})}(jQuery); \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/package.json b/StoneIsland/plugins/phonegap-plugin-push/package.json
deleted file mode 100755
index cccd8c87..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "phonegap-plugin-push",
- "description": "Register and receive push notifications.",
- "version": "1.4.4",
- "homepage": "http://github.com/phonegap/phonegap-plugin-push#readme",
- "repository": {
- "type": "git",
- "url": "git://github.com/phonegap/phonegap-plugin-push.git"
- },
- "bugs": {
- "url": "https://github.com/phonegap/phonegap-plugin-push/issues"
- },
- "cordova": {
- "id": "phonegap-plugin-push",
- "platforms": [
- "ios",
- "android",
- "windows8",
- "windows",
- "wp8",
- "browser"
- ]
- },
- "keywords": [
- "ecosystem:cordova",
- "ecosystem:phonegap",
- "cordova-ios",
- "cordova-android",
- "cordova-windows8",
- "cordova-windows",
- "cordova-wp8",
- "cordova-browser"
- ],
- "engines": [
- {
- "name": "cordova",
- "version": ">=3.0.0"
- }
- ],
- "author": "Adobe PhoneGap Team",
- "license": "APL",
- "scripts": {
- "test": "jasmine-node --color spec"
- },
- "devDependencies": {
- "jasmine-node": "1.14.5"
- }
-}
diff --git a/StoneIsland/plugins/phonegap-plugin-push/plugin.xml b/StoneIsland/plugins/phonegap-plugin-push/plugin.xml
deleted file mode 100755
index 58cebca3..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/plugin.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:amazon="http://schemas.android.com/apk/lib/com.amazon.device.ads"
- xmlns:rim="http://www.blackberry.com/ns/widgets"
- id="phonegap-plugin-push"
- version="1.4.4">
-
- <name>PushPlugin</name>
- <author>Bob Easterday</author>
-
- <description>
- This plugin allows your application to receive push notifications on Android, iOS, WP8 and Windows8 devices.
- Android uses Google Cloud Messaging.
- iOS uses Apple APNS Notifications.
- WP8 uses Microsoft MPNS Notifications.
- Windows8 uses Microsoft WNS Notifications.
- </description>
-
- <license>MIT</license>
-
- <js-module src="www/push.js" name="PushNotification">
- <clobbers target="PushNotification" />
- </js-module>
-
- <engines>
- <engine name="cordova" version=">=3.0.0" />
- </engines>
-
- <!-- android -->
- <platform name="android">
-
- <config-file target="res/xml/config.xml" parent="/*">
- <feature name="PushNotification" >
- <param name="android-package" value="com.adobe.phonegap.push.PushPlugin"/>
- </feature>
- </config-file>
-
- <config-file target="AndroidManifest.xml" parent="/manifest">
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.WAKE_LOCK" />
- <uses-permission android:name="android.permission.VIBRATE"/>
- <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
- <permission android:name="$PACKAGE_NAME.permission.C2D_MESSAGE" android:protectionLevel="signature" />
- <uses-permission android:name="$PACKAGE_NAME.permission.C2D_MESSAGE" />
- </config-file>
-
- <config-file target="AndroidManifest.xml" parent="/manifest/application">
- <activity android:name="com.adobe.phonegap.push.PushHandlerActivity" android:exported="true"/>
-
- <receiver
- android:name="com.google.android.gms.gcm.GcmReceiver"
- android:exported="true"
- android:permission="com.google.android.c2dm.permission.SEND" >
- <intent-filter>
- <action android:name="com.google.android.c2dm.intent.RECEIVE" />
- <category android:name="$PACKAGE_NAME" />
- </intent-filter>
- </receiver>
- <service
- android:name="com.adobe.phonegap.push.GCMIntentService"
- android:exported="false" >
- <intent-filter>
- <action android:name="com.google.android.c2dm.intent.RECEIVE" />
- </intent-filter>
- </service>
- <service
- android:name="com.adobe.phonegap.push.PushInstanceIDListenerService"
- android:exported="false">
- <intent-filter>
- <action android:name="com.google.android.gms.iid.InstanceID"/>
- </intent-filter>
- </service>
- <service
- android:name="com.adobe.phonegap.push.RegistrationIntentService"
- android:exported="false">
- </service>
- </config-file>
-
- <framework src="push.gradle" custom="true" type="gradleReference" />
- <framework src="com.android.support:support-v13:23+" />
- <framework src="com.google.android.gms:play-services-gcm:+" />
-
- <source-file src="src/android/com/adobe/phonegap/push/GCMIntentService.java" target-dir="src/com/adobe/phonegap/push/" />
- <source-file src="src/android/com/adobe/phonegap/push/PushConstants.java" target-dir="src/com/adobe/phonegap/push/" />
- <source-file src="src/android/com/adobe/phonegap/push/PushHandlerActivity.java" target-dir="src/com/adobe/phonegap/push/" />
- <source-file src="src/android/com/adobe/phonegap/push/PushInstanceIDListenerService.java" target-dir="src/com/adobe/phonegap/push/" />
- <source-file src="src/android/com/adobe/phonegap/push/PushPlugin.java" target-dir="src/com/adobe/phonegap/push/" />
- <source-file src="src/android/com/adobe/phonegap/push/RegistrationIntentService.java" target-dir="src/com/adobe/phonegap/push/" />
-
- </platform>
-
- <!-- ios -->
- <platform name="ios">
-
- <config-file target="config.xml" parent="/*">
- <feature name="PushNotification">
- <param name="ios-package" value="PushPlugin"/>
- </feature>
- </config-file>
-
- <config-file target="*-Info.plist" parent="UIBackgroundModes">
- <array>
- <string>remote-notification</string>
- </array>
- </config-file>
-
- <source-file src="src/ios/AppDelegate+notification.m" />
- <source-file src="src/ios/PushPlugin.m" />
-
- <header-file src="src/ios/AppDelegate+notification.h" />
- <header-file src="src/ios/PushPlugin.h" />
-
- </platform>
-
- <!-- windows -->
- <platform name="windows">
- <js-module src="src/windows/PushPluginProxy.js" name="PushPlugin">
- <merges target="" />
- </js-module>
- <config-file target="config.xml" parent="/*">
- <preference name="WindowsToastCapable" value="true" />
- </config-file>
- </platform>
-
-</plugin>
diff --git a/StoneIsland/plugins/phonegap-plugin-push/push.gradle b/StoneIsland/plugins/phonegap-plugin-push/push.gradle
deleted file mode 100755
index d61b60f5..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/push.gradle
+++ /dev/null
@@ -1,21 +0,0 @@
-import java.util.regex.Pattern
-
-def doExtractStringFromManifest(name) {
- def manifestFile = file(android.sourceSets.main.manifest.srcFile)
- def pattern = Pattern.compile(name + "=\"(.*?)\"")
- def matcher = pattern.matcher(manifestFile.getText())
- matcher.find()
- return matcher.group(1)
-}
-
-android {
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- }
- }
-
- defaultConfig {
- applicationId = doExtractStringFromManifest("package")
- }
-} \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/spec/helper/cordova.js b/StoneIsland/plugins/phonegap-plugin-push/spec/helper/cordova.js
deleted file mode 100755
index 02bdee5f..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/spec/helper/cordova.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/* global cordova:true */
-
-/*!
- * Module dependencies.
- */
-
-/**
- * cordova.js for node.
- *
- * Think of this as cordova-node, which would be simliar to cordova-android
- * or cordova-browser. The purpose of this module is to enable testing
- * of a plugin's JavaScript interface.
- *
- * When this module is first required, it will insert a global cordova
- * instance, which can hijack cordova-specific commands within the pluin's
- * implementation.
- *
- * Remember to require this module before the plugin that you want to test.
- *
- * Example:
- *
- * var cordova = require('./helper/cordova'),
- * myPlugin = require('../www/myPlugin');
- */
-
-module.exports = global.cordova = cordova = {
-
- /**
- * cordova.require Mock.
- *
- * Hijacks all cordova.requires. By default, it returns an empty function.
- * You can define your own implementation of each required module before
- * or after it has been required.
- *
- * See `cordova.required` to learn how to add your own module implemtnation.
- */
-
- require: function(moduleId) {
- // define a default function if it doesn't exist
- if (!cordova.required[moduleId]) {
- cordova.required[moduleId] = function() {};
- }
- // create a new module mapping between the module Id and cordova.required.
- return new ModuleMap(moduleId);
- },
-
- /**
- * Cordova module implementations.
- *
- * A key-value hash, where the key is the module such as 'cordova/exec'
- * and the value is the function or object returned.
- *
- * For example:
- *
- * var exec = require('cordova/exec');
- *
- * Will map to:
- *
- * cordova.required['cordova/exec'];
- */
-
- required: {
- // populated at runtime
- }
-};
-
-/**
- * Module Mapper.
- *
- * Returns a function that when executed will lookup the implementation
- * in cordova.required[id].
- *
- * @param {String} moduleId is the module name/path, such as 'cordova/exec'
- * @return {Function}.
- */
-
-function ModuleMap(moduleId) {
- return function() {
- // lookup and execute the module's mock implementation, passing
- // in any parameters that were provided.
- return cordova.required[moduleId].apply(this, arguments);
- };
-}
diff --git a/StoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js b/StoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js
deleted file mode 100755
index cf0647ef..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/spec/index.spec.js
+++ /dev/null
@@ -1,210 +0,0 @@
-/*!
- * Module dependencies.
- */
-
-var cordova = require('./helper/cordova'),
- PushNotification = require('../www/push'),
- execSpy,
- execWin,
- options;
-
-/*!
- * Specification.
- */
-
-describe('phonegap-plugin-push', function () {
- beforeEach(function () {
- options = {android: {}, ios: {}, windows: {}};
- execWin = jasmine.createSpy();
- execSpy = spyOn(cordova.required, 'cordova/exec').andCallFake(execWin);
- });
-
- describe('PushNotification', function () {
- it("should exist", function () {
- expect(PushNotification).toBeDefined();
- expect(typeof PushNotification == 'object').toBe(true);
- });
-
- it("should contain a init function", function () {
- expect(PushNotification.init).toBeDefined();
- expect(typeof PushNotification.init == 'function').toBe(true);
- });
-
- it("should contain a unregister function", function () {
- var push = PushNotification.init({});
- expect(push.unregister).toBeDefined();
- expect(typeof push.unregister == 'function').toBe(true);
- });
-
- it("should contain a getApplicationIconBadgeNumber function", function () {
- var push = PushNotification.init({});
- expect(push.getApplicationIconBadgeNumber).toBeDefined();
- expect(typeof push.getApplicationIconBadgeNumber == 'function').toBe(true);
- });
-
- it("should contain a setApplicationIconBadgeNumber function", function () {
- var push = PushNotification.init({});
- expect(push.setApplicationIconBadgeNumber).toBeDefined();
- expect(typeof push.setApplicationIconBadgeNumber == 'function').toBe(true);
- });
- });
-
- describe('PushNotification instance', function () {
- describe('cordova.exec', function () {
- it('should call cordova.exec on next process tick', function (done) {
- PushNotification.init(options);
- setTimeout(function () {
- expect(execSpy).toHaveBeenCalledWith(
- jasmine.any(Function),
- jasmine.any(Function),
- 'PushNotification',
- 'init',
- jasmine.any(Object)
- );
- done();
- }, 100);
- });
- });
-
- describe('on "registration" event', function () {
- it('should be emitted with an argument', function (done) {
- execSpy.andCallFake(function (win, fail, service, id, args) {
- win({'registrationId': 1});
- });
- var push = PushNotification.init(options);
- push.on('registration', function (data) {
- expect(data.registrationId).toEqual(1);
- done();
- });
- });
- });
-
- describe('on "notification" event', function () {
- beforeEach(function () {
- execSpy.andCallFake(function (win, fail, service, id, args) {
- win({
- message: 'Message',
- title: 'Title',
- count: 1,
- sound: 'beep',
- image: 'Image',
- additionalData: {}
- });
- });
- });
-
- it('should be emitted on success', function (done) {
- var push = PushNotification.init(options);
- push.on('notification', function (data) {
- done();
- });
- });
-
- it('should provide the data.message argument', function (done) {
- var push = PushNotification.init(options);
- push.on('notification', function (data) {
- expect(data.message).toEqual('Message');
- done();
- });
- });
-
- it('should provide the data.title argument', function (done) {
- var push = PushNotification.init(options);
- push.on('notification', function (data) {
- expect(data.title).toEqual('Title');
- done();
- });
- });
-
- it('should provide the data.count argument', function (done) {
- var push = PushNotification.init(options);
- push.on('notification', function (data) {
- expect(data.count).toEqual(1);
- done();
- });
- });
-
- it('should provide the data.sound argument', function (done) {
- var push = PushNotification.init(options);
- push.on('notification', function (data) {
- expect(data.sound).toEqual('beep');
- done();
- });
- });
-
- it('should provide the data.image argument', function (done) {
- var push = PushNotification.init(options);
- push.on('notification', function (data) {
- expect(data.image).toEqual('Image');
- done();
- });
- });
-
- it('should provide the data.additionalData argument', function (done) {
- var push = PushNotification.init(options);
- push.on('notification', function (data) {
- expect(data.additionalData).toEqual({});
- done();
- });
- });
- });
-
- describe('on "error" event', function () {
- it('should be emitted with an Error', function (done) {
- execSpy.andCallFake(function (win, fail, service, id, args) {
- fail('something went wrong');
- });
- var push = PushNotification.init(options);
- push.on('error', function (e) {
- expect(e).toEqual(jasmine.any(Error));
- expect(e.message).toEqual('something went wrong');
- done();
- });
- });
- });
-
- describe('off "notification" event', function () {
- it('should exist and be registered a callback handle', function (done) {
- var push = PushNotification.init(options),
- eventHandler = function () {
- };
-
- push.on('notification', eventHandler);
-
- push.off('notification', eventHandler);
-
- expect(push._handlers.notification.indexOf(eventHandler)).toEqual(-1);
- done();
- });
- });
-
- describe('off "registration" event', function () {
- it('should exist and be registered a callback handle', function (done) {
- var push = PushNotification.init(options),
- eventHandler = function () {
- };
-
- push.on('registration', eventHandler);
-
- push.off('registration', eventHandler);
-
- expect(push._handlers.registration.indexOf(eventHandler)).toEqual(-1);
- done();
- });
- });
-
- describe('off "error" event', function () {
- it('should exist and be registered a callback handle', function (done) {
- var push = PushNotification.init(options),
- eventHandler = function () {
- };
-
- push.on('error', eventHandler);
- push.off('error', eventHandler);
-
- expect(push._handlers.error.indexOf(eventHandler)).toEqual(-1);
- done();
- });
- });
- });
-});
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/GCMIntentService.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/GCMIntentService.java
deleted file mode 100755
index 24daa6a5..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/GCMIntentService.java
+++ /dev/null
@@ -1,603 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.annotation.SuppressLint;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.res.AssetManager;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Color;
-import android.net.Uri;
-import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
-import android.text.Html;
-import android.util.Log;
-
-import com.google.android.gms.gcm.GcmListenerService;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Random;
-
-@SuppressLint("NewApi")
-public class GCMIntentService extends GcmListenerService implements PushConstants {
-
- private static final String LOG_TAG = "PushPlugin_GCMIntentService";
- private static HashMap<Integer, ArrayList<String>> messageMap = new HashMap<Integer, ArrayList<String>>();
-
- public void setNotification(int notId, String message){
- ArrayList<String> messageList = messageMap.get(notId);
- if(messageList == null) {
- messageList = new ArrayList<String>();
- messageMap.put(notId, messageList);
- }
-
- if(message.isEmpty()){
- messageList.clear();
- }else{
- messageList.add(message);
- }
- }
-
- @Override
- public void onMessageReceived(String from, Bundle extras) {
- Log.d(LOG_TAG, "onMessage - from: " + from);
-
- if (extras != null) {
-
- SharedPreferences prefs = getApplicationContext().getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- boolean forceShow = prefs.getBoolean(FORCE_SHOW, false);
-
- extras = normalizeExtras(extras);
-
- // if we are in the foreground and forceShow is `false` only send data
- if (!forceShow && PushPlugin.isInForeground()) {
- Log.d(LOG_TAG, "foreground");
- extras.putBoolean(FOREGROUND, true);
- PushPlugin.sendExtras(extras);
- }
- // if we are in the foreground and forceShow is `true`, force show the notification if the data has at least a message or title
- else if (forceShow && PushPlugin.isInForeground()) {
- Log.d(LOG_TAG, "foreground force");
- extras.putBoolean(FOREGROUND, true);
-
- showNotificationIfPossible(getApplicationContext(), extras);
- }
- // if we are not in the foreground always send notification if the data has at least a message or title
- else {
- Log.d(LOG_TAG, "background");
- extras.putBoolean(FOREGROUND, false);
-
- showNotificationIfPossible(getApplicationContext(), extras);
- }
- }
- }
-
- /*
- * Change a values key in the extras bundle
- */
- private void replaceKey(String oldKey, String newKey, Bundle extras, Bundle newExtras) {
- Object value = extras.get(oldKey);
- if ( value != null ) {
- if (value instanceof String) {
- newExtras.putString(newKey, (String) value);
- } else if (value instanceof Boolean) {
- newExtras.putBoolean(newKey, (Boolean) value);
- } else if (value instanceof Number) {
- newExtras.putDouble(newKey, ((Number) value).doubleValue());
- } else {
- newExtras.putString(newKey, String.valueOf(value));
- }
- }
- }
-
- /*
- * Replace alternate keys with our canonical value
- */
- private String normalizeKey(String key) {
- if (key.equals(BODY) || key.equals(ALERT) || key.equals(GCM_NOTIFICATION_BODY)) {
- return MESSAGE;
- } else if (key.equals(MSGCNT) || key.equals(BADGE)) {
- return COUNT;
- } else if (key.equals(SOUNDNAME)) {
- return SOUND;
- } else if (key.startsWith(GCM_NOTIFICATION)) {
- return key.substring(GCM_NOTIFICATION.length()+1, key.length());
- } else if (key.startsWith(GCM_N)) {
- return key.substring(GCM_N.length()+1, key.length());
- } else if (key.startsWith(UA_PREFIX)) {
- key = key.substring(UA_PREFIX.length()+1, key.length());
- return key.toLowerCase();
- } else {
- return key;
- }
- }
-
- /*
- * Parse bundle into normalized keys.
- */
- private Bundle normalizeExtras(Bundle extras) {
- Log.d(LOG_TAG, "normalize extras");
- Iterator<String> it = extras.keySet().iterator();
- Bundle newExtras = new Bundle();
-
- while (it.hasNext()) {
- String key = it.next();
-
- Log.d(LOG_TAG, "key = " + key);
-
- // If normalizeKeythe key is "data" or "message" and the value is a json object extract
- // This is to support parse.com and other services. Issue #147 and pull #218
- if (key.equals(PARSE_COM_DATA) || key.equals(MESSAGE)) {
- Object json = extras.get(key);
- // Make sure data is json object stringified
- if ( json instanceof String && ((String) json).startsWith("{") ) {
- Log.d(LOG_TAG, "extracting nested message data from key = " + key);
- try {
- // If object contains message keys promote each value to the root of the bundle
- JSONObject data = new JSONObject((String) json);
- if ( data.has(ALERT) || data.has(MESSAGE) || data.has(BODY) || data.has(TITLE) ) {
- Iterator<String> jsonIter = data.keys();
- while (jsonIter.hasNext()) {
- String jsonKey = jsonIter.next();
-
- Log.d(LOG_TAG, "key = data/" + jsonKey);
-
- String value = data.getString(jsonKey);
- jsonKey = normalizeKey(jsonKey);
- newExtras.putString(jsonKey, value);
- }
- }
- } catch( JSONException e) {
- Log.e(LOG_TAG, "normalizeExtras: JSON exception");
- }
- }
- } else if (key.equals(("notification"))) {
- Bundle value = extras.getBundle(key);
- Iterator<String> iterator = value.keySet().iterator();
- while (iterator.hasNext()) {
- String notifkey = iterator.next();
-
- Log.d(LOG_TAG, "notifkey = " + notifkey);
- String newKey = normalizeKey(notifkey);
- Log.d(LOG_TAG, "replace key " + notifkey + " with " + newKey);
-
- newExtras.putString(newKey, value.getString(notifkey));
- }
- continue;
- }
-
- String newKey = normalizeKey(key);
- Log.d(LOG_TAG, "replace key " + key + " with " + newKey);
- replaceKey(key, newKey, extras, newExtras);
-
- } // while
-
- return newExtras;
- }
-
- private void showNotificationIfPossible (Context context, Bundle extras) {
-
- // Send a notification if there is a message or title, otherwise just send data
- String message = extras.getString(MESSAGE);
- String title = extras.getString(TITLE);
-
- Log.d(LOG_TAG, "message =[" + message + "]");
- Log.d(LOG_TAG, "title =[" + title + "]");
-
- if ((message != null && message.length() != 0) ||
- (title != null && title.length() != 0)) {
-
- Log.d(LOG_TAG, "create notification");
-
- createNotification(context, extras);
- } else {
- Log.d(LOG_TAG, "send notification event");
- PushPlugin.sendExtras(extras);
- }
- }
-
- public void createNotification(Context context, Bundle extras) {
- NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- String appName = getAppName(this);
- String packageName = context.getPackageName();
- Resources resources = context.getResources();
-
- int notId = parseInt(NOT_ID, extras);
- Intent notificationIntent = new Intent(this, PushHandlerActivity.class);
- notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- notificationIntent.putExtra(PUSH_BUNDLE, extras);
- notificationIntent.putExtra(NOT_ID, notId);
-
- int requestCode = new Random().nextInt();
- PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
- NotificationCompat.Builder mBuilder =
- new NotificationCompat.Builder(context)
- .setWhen(System.currentTimeMillis())
- .setContentTitle(extras.getString(TITLE))
- .setTicker(extras.getString(TITLE))
- .setContentIntent(contentIntent)
- .setAutoCancel(true);
-
- SharedPreferences prefs = context.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- String localIcon = prefs.getString(ICON, null);
- String localIconColor = prefs.getString(ICON_COLOR, null);
- boolean soundOption = prefs.getBoolean(SOUND, true);
- boolean vibrateOption = prefs.getBoolean(VIBRATE, true);
- Log.d(LOG_TAG, "stored icon=" + localIcon);
- Log.d(LOG_TAG, "stored iconColor=" + localIconColor);
- Log.d(LOG_TAG, "stored sound=" + soundOption);
- Log.d(LOG_TAG, "stored vibrate=" + vibrateOption);
-
- /*
- * Notification Vibration
- */
-
- setNotificationVibration(extras, vibrateOption, mBuilder);
-
- /*
- * Notification Icon Color
- *
- * Sets the small-icon background color of the notification.
- * To use, add the `iconColor` key to plugin android options
- *
- */
- setNotificationIconColor(extras.getString("color"), mBuilder, localIconColor);
-
- /*
- * Notification Icon
- *
- * Sets the small-icon of the notification.
- *
- * - checks the plugin options for `icon` key
- * - if none, uses the application icon
- *
- * The icon value must be a string that maps to a drawable resource.
- * If no resource is found, falls
- *
- */
- setNotificationSmallIcon(context, extras, packageName, resources, mBuilder, localIcon);
-
- /*
- * Notification Large-Icon
- *
- * Sets the large-icon of the notification
- *
- * - checks the gcm data for the `image` key
- * - checks to see if remote image, loads it.
- * - checks to see if assets image, Loads It.
- * - checks to see if resource image, LOADS IT!
- * - if none, we don't set the large icon
- *
- */
- setNotificationLargeIcon(extras, packageName, resources, mBuilder);
-
- /*
- * Notification Sound
- */
- if (soundOption) {
- setNotificationSound(context, extras, mBuilder);
- }
-
- /*
- * LED Notification
- */
- setNotificationLedColor(extras, mBuilder);
-
- /*
- * Priority Notification
- */
- setNotificationPriority(extras, mBuilder);
-
- /*
- * Notification message
- */
- setNotificationMessage(notId, extras, mBuilder);
-
- /*
- * Notification count
- */
- setNotificationCount(extras, mBuilder);
-
- /*
- * Notification add actions
- */
- createActions(extras, mBuilder, resources, packageName);
-
- mNotificationManager.notify(appName, notId, mBuilder.build());
- }
-
- private void createActions(Bundle extras, NotificationCompat.Builder mBuilder, Resources resources, String packageName) {
- Log.d(LOG_TAG, "create actions");
- String actions = extras.getString(ACTIONS);
- if (actions != null) {
- try {
- JSONArray actionsArray = new JSONArray(actions);
- for (int i=0; i < actionsArray.length(); i++) {
- Log.d(LOG_TAG, "adding action");
- JSONObject action = actionsArray.getJSONObject(i);
- Log.d(LOG_TAG, "adding callback = " + action.getString(CALLBACK));
- Intent intent = new Intent(this, PushHandlerActivity.class);
- intent.putExtra(CALLBACK, action.getString(CALLBACK));
- intent.putExtra(PUSH_BUNDLE, extras);
- PendingIntent pIntent = PendingIntent.getActivity(this, i, intent, PendingIntent.FLAG_UPDATE_CURRENT);
-
- mBuilder.addAction(resources.getIdentifier(action.getString(ICON), DRAWABLE, packageName),
- action.getString(TITLE), pIntent);
- }
- } catch(JSONException e) {
- // nope
- }
- }
- }
-
- private void setNotificationCount(Bundle extras, NotificationCompat.Builder mBuilder) {
- String msgcnt = extras.getString(MSGCNT);
- if (msgcnt == null) {
- msgcnt = extras.getString(BADGE);
- }
- if (msgcnt != null) {
- mBuilder.setNumber(Integer.parseInt(msgcnt));
- }
- }
-
- private void setNotificationVibration(Bundle extras, Boolean vibrateOption, NotificationCompat.Builder mBuilder) {
- String vibrationPattern = extras.getString(VIBRATION_PATTERN);
- if (vibrationPattern != null) {
- String[] items = vibrationPattern.replaceAll("\\[", "").replaceAll("\\]", "").split(",");
- long[] results = new long[items.length];
- for (int i = 0; i < items.length; i++) {
- try {
- results[i] = Long.parseLong(items[i]);
- } catch (NumberFormatException nfe) {}
- }
- mBuilder.setVibrate(results);
- } else {
- if (vibrateOption) {
- mBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
- }
- }
- }
-
- private void setNotificationMessage(int notId, Bundle extras, NotificationCompat.Builder mBuilder) {
- String message = extras.getString(MESSAGE);
-
- String style = extras.getString(STYLE, STYLE_TEXT);
- if(STYLE_INBOX.equals(style)) {
- setNotification(notId, message);
-
- mBuilder.setContentText(message);
-
- ArrayList<String> messageList = messageMap.get(notId);
- Integer sizeList = messageList.size();
- if (sizeList > 1) {
- String sizeListMessage = sizeList.toString();
- String stacking = sizeList + " more";
- if (extras.getString(SUMMARY_TEXT) != null) {
- stacking = extras.getString(SUMMARY_TEXT);
- stacking = stacking.replace("%n%", sizeListMessage);
- }
- NotificationCompat.InboxStyle notificationInbox = new NotificationCompat.InboxStyle()
- .setBigContentTitle(extras.getString(TITLE))
- .setSummaryText(stacking);
-
- for (int i = messageList.size() - 1; i >= 0; i--) {
- notificationInbox.addLine(Html.fromHtml(messageList.get(i)));
- }
-
- mBuilder.setStyle(notificationInbox);
- } else {
- NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
- if (message != null) {
- bigText.bigText(message);
- bigText.setBigContentTitle(extras.getString(TITLE));
- mBuilder.setStyle(bigText);
- }
- }
- } else if (STYLE_PICTURE.equals(style)) {
- setNotification(notId, "");
-
- NotificationCompat.BigPictureStyle bigPicture = new NotificationCompat.BigPictureStyle();
- bigPicture.bigPicture(getBitmapFromURL(extras.getString(PICTURE)));
- bigPicture.setBigContentTitle(extras.getString(TITLE));
- bigPicture.setSummaryText(extras.getString(SUMMARY_TEXT));
-
- mBuilder.setContentTitle(extras.getString(TITLE));
- mBuilder.setContentText(message);
-
- mBuilder.setStyle(bigPicture);
- } else {
- setNotification(notId, "");
-
- NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
-
- if (message != null) {
- mBuilder.setContentText(Html.fromHtml(message));
-
- bigText.bigText(message);
- bigText.setBigContentTitle(extras.getString(TITLE));
-
- String summaryText = extras.getString(SUMMARY_TEXT);
- if (summaryText != null) {
- bigText.setSummaryText(summaryText);
- }
-
- mBuilder.setStyle(bigText);
- }
- /*
- else {
- mBuilder.setContentText("<missing message content>");
- }
- */
- }
- }
-
- private void setNotificationSound(Context context, Bundle extras, NotificationCompat.Builder mBuilder) {
- String soundname = extras.getString(SOUNDNAME);
- if (soundname == null) {
- soundname = extras.getString(SOUND);
- }
- if (soundname != null && !soundname.contentEquals(SOUND_DEFAULT)) {
- Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
- + "://" + context.getPackageName() + "/raw/" + soundname);
- Log.d(LOG_TAG, sound.toString());
- mBuilder.setSound(sound);
- } else {
- mBuilder.setSound(android.provider.Settings.System.DEFAULT_NOTIFICATION_URI);
- }
- }
-
- private void setNotificationLedColor(Bundle extras, NotificationCompat.Builder mBuilder) {
- String ledColor = extras.getString(LED_COLOR);
- if (ledColor != null) {
- // Converts parse Int Array from ledColor
- String[] items = ledColor.replaceAll("\\[", "").replaceAll("\\]", "").split(",");
- int[] results = new int[items.length];
- for (int i = 0; i < items.length; i++) {
- try {
- results[i] = Integer.parseInt(items[i]);
- } catch (NumberFormatException nfe) {}
- }
- if (results.length == 4) {
- mBuilder.setLights(Color.argb(results[0], results[1], results[2], results[3]), 500, 500);
- } else {
- Log.e(LOG_TAG, "ledColor parameter must be an array of length == 4 (ARGB)");
- }
- }
- }
-
- private void setNotificationPriority(Bundle extras, NotificationCompat.Builder mBuilder) {
- String priorityStr = extras.getString(PRIORITY);
- if (priorityStr != null) {
- try {
- Integer priority = Integer.parseInt(priorityStr);
- if (priority >= NotificationCompat.PRIORITY_MIN && priority <= NotificationCompat.PRIORITY_MAX) {
- mBuilder.setPriority(priority);
- } else {
- Log.e(LOG_TAG, "Priority parameter must be between -2 and 2");
- }
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- }
- }
-
- private void setNotificationLargeIcon(Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder) {
- String gcmLargeIcon = extras.getString(IMAGE); // from gcm
- if (gcmLargeIcon != null) {
- if (gcmLargeIcon.startsWith("http://") || gcmLargeIcon.startsWith("https://")) {
- mBuilder.setLargeIcon(getBitmapFromURL(gcmLargeIcon));
- Log.d(LOG_TAG, "using remote large-icon from gcm");
- } else {
- AssetManager assetManager = getAssets();
- InputStream istr;
- try {
- istr = assetManager.open(gcmLargeIcon);
- Bitmap bitmap = BitmapFactory.decodeStream(istr);
- mBuilder.setLargeIcon(bitmap);
- Log.d(LOG_TAG, "using assets large-icon from gcm");
- } catch (IOException e) {
- int largeIconId = 0;
- largeIconId = resources.getIdentifier(gcmLargeIcon, DRAWABLE, packageName);
- if (largeIconId != 0) {
- Bitmap largeIconBitmap = BitmapFactory.decodeResource(resources, largeIconId);
- mBuilder.setLargeIcon(largeIconBitmap);
- Log.d(LOG_TAG, "using resources large-icon from gcm");
- } else {
- Log.d(LOG_TAG, "Not setting large icon");
- }
- }
- }
- }
- }
-
- private void setNotificationSmallIcon(Context context, Bundle extras, String packageName, Resources resources, NotificationCompat.Builder mBuilder, String localIcon) {
- int iconId = 0;
- String icon = extras.getString(ICON);
- if (icon != null) {
- iconId = resources.getIdentifier(icon, DRAWABLE, packageName);
- Log.d(LOG_TAG, "using icon from plugin options");
- }
- else if (localIcon != null) {
- iconId = resources.getIdentifier(localIcon, DRAWABLE, packageName);
- Log.d(LOG_TAG, "using icon from plugin options");
- }
- if (iconId == 0) {
- Log.d(LOG_TAG, "no icon resource found - using application icon");
- iconId = context.getApplicationInfo().icon;
- }
- mBuilder.setSmallIcon(iconId);
- }
-
- private void setNotificationIconColor(String color, NotificationCompat.Builder mBuilder, String localIconColor) {
- int iconColor = 0;
- if (color != null) {
- try {
- iconColor = Color.parseColor(color);
- } catch (IllegalArgumentException e) {
- Log.e(LOG_TAG, "couldn't parse color from android options");
- }
- }
- else if (localIconColor != null) {
- try {
- iconColor = Color.parseColor(localIconColor);
- } catch (IllegalArgumentException e) {
- Log.e(LOG_TAG, "couldn't parse color from android options");
- }
- }
- if (iconColor != 0) {
- mBuilder.setColor(iconColor);
- }
- }
-
- public Bitmap getBitmapFromURL(String strURL) {
- try {
- URL url = new URL(strURL);
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setDoInput(true);
- connection.connect();
- InputStream input = connection.getInputStream();
- return BitmapFactory.decodeStream(input);
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- private static String getAppName(Context context) {
- CharSequence appName = context.getPackageManager().getApplicationLabel(context.getApplicationInfo());
- return (String)appName;
- }
-
- private int parseInt(String value, Bundle extras) {
- int retval = 0;
-
- try {
- retval = Integer.parseInt(extras.getString(value));
- }
- catch(NumberFormatException e) {
- Log.e(LOG_TAG, "Number format exception - Error parsing " + value + ": " + e.getMessage());
- }
- catch(Exception e) {
- Log.e(LOG_TAG, "Number format exception - Error parsing " + value + ": " + e.getMessage());
- }
-
- return retval;
- }
-}
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushConstants.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushConstants.java
deleted file mode 100755
index aeb49c9b..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushConstants.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.adobe.phonegap.push;
-
-public interface PushConstants {
- public static final String COM_ADOBE_PHONEGAP_PUSH = "com.adobe.phonegap.push";
- public static final String REGISTRATION_ID = "registrationId";
- public static final String FOREGROUND = "foreground";
- public static final String TITLE = "title";
- public static final String NOT_ID = "notId";
- public static final String PUSH_BUNDLE = "pushBundle";
- public static final String ICON = "icon";
- public static final String ICON_COLOR = "iconColor";
- public static final String SOUND = "sound";
- public static final String SOUND_DEFAULT = "default";
- public static final String VIBRATE = "vibrate";
- public static final String ACTIONS = "actions";
- public static final String CALLBACK = "callback";
- public static final String DRAWABLE = "drawable";
- public static final String MSGCNT = "msgcnt";
- public static final String VIBRATION_PATTERN = "vibrationPattern";
- public static final String STYLE = "style";
- public static final String SUMMARY_TEXT = "summaryText";
- public static final String PICTURE = "picture";
- public static final String GCM_N = "gcm.n.";
- public static final String GCM_NOTIFICATION = "gcm.notification";
- public static final String GCM_NOTIFICATION_BODY = "gcm.notification.body";
- public static final String UA_PREFIX = "com.urbanairship.push";
- public static final String PARSE_COM_DATA = "data";
- public static final String ALERT = "alert";
- public static final String MESSAGE = "message";
- public static final String BODY = "body";
- public static final String SOUNDNAME = "soundname";
- public static final String LED_COLOR = "ledColor";
- public static final String PRIORITY = "priority";
- public static final String IMAGE = "image";
- public static final String STYLE_INBOX = "inbox";
- public static final String STYLE_PICTURE = "picture";
- public static final String STYLE_TEXT = "text";
- public static final String BADGE = "badge";
- public static final String INITIALIZE = "init";
- public static final String UNREGISTER = "unregister";
- public static final String EXIT = "exit";
- public static final String FINISH = "finish";
- public static final String ANDROID = "android";
- public static final String SENDER_ID = "senderID";
- public static final String CLEAR_NOTIFICATIONS = "clearNotifications";
- public static final String COLDSTART = "coldstart";
- public static final String ADDITIONAL_DATA = "additionalData";
- public static final String COUNT = "count";
- public static final String FROM = "from";
- public static final String COLLAPSE_KEY = "collapse_key";
- public static final String FORCE_SHOW = "forceShow";
- public static final String GCM = "GCM";
-}
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushHandlerActivity.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushHandlerActivity.java
deleted file mode 100755
index dd9fbd36..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushHandlerActivity.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.app.Activity;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.util.Log;
-
-public class PushHandlerActivity extends Activity implements PushConstants {
- private static String LOG_TAG = "PushPlugin_PushHandlerActivity";
-
- /*
- * this activity will be started if the user touches a notification that we own.
- * We send it's data off to the push plugin for processing.
- * If needed, we boot up the main activity to kickstart the application.
- * @see android.app.Activity#onCreate(android.os.Bundle)
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- GCMIntentService gcm = new GCMIntentService();
- gcm.setNotification(getIntent().getIntExtra(NOT_ID, 0), "");
- super.onCreate(savedInstanceState);
- Log.v(LOG_TAG, "onCreate");
-
- boolean isPushPluginActive = PushPlugin.isActive();
- processPushBundle(isPushPluginActive);
-
- finish();
-
- if (!isPushPluginActive) {
- forceMainActivityReload();
- }
- }
-
- /**
- * Takes the pushBundle extras from the intent,
- * and sends it through to the PushPlugin for processing.
- */
- private void processPushBundle(boolean isPushPluginActive) {
- Bundle extras = getIntent().getExtras();
-
- if (extras != null) {
- Bundle originalExtras = extras.getBundle(PUSH_BUNDLE);
-
- originalExtras.putBoolean(FOREGROUND, false);
- originalExtras.putBoolean(COLDSTART, !isPushPluginActive);
- originalExtras.putString(CALLBACK, extras.getString("callback"));
-
- PushPlugin.sendExtras(originalExtras);
- }
- }
-
- /**
- * Forces the main activity to re-launch if it's unloaded.
- */
- private void forceMainActivityReload() {
- PackageManager pm = getPackageManager();
- Intent launchIntent = pm.getLaunchIntentForPackage(getApplicationContext().getPackageName());
- startActivity(launchIntent);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- final NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.cancelAll();
- }
-} \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushInstanceIDListenerService.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushInstanceIDListenerService.java
deleted file mode 100755
index eaa39a48..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushInstanceIDListenerService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.content.Intent;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import com.google.android.gms.iid.InstanceID;
-import com.google.android.gms.iid.InstanceIDListenerService;
-
-import org.json.JSONException;
-
-import java.io.IOException;
-
-public class PushInstanceIDListenerService extends InstanceIDListenerService implements PushConstants {
- public static final String LOG_TAG = "PushPlugin_PushInstanceIDListenerService";
-
- @Override
- public void onTokenRefresh() {
- SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- String senderID = sharedPref.getString(SENDER_ID, "");
- if (!"".equals(senderID)) {
- Intent intent = new Intent(this, RegistrationIntentService.class);
- startService(intent);
- }
- }
-}
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushPlugin.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushPlugin.java
deleted file mode 100755
index 41a91819..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/PushPlugin.java
+++ /dev/null
@@ -1,294 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.util.Log;
-
-import com.google.android.gms.iid.InstanceID;
-
-import org.apache.cordova.CallbackContext;
-import org.apache.cordova.CordovaInterface;
-import org.apache.cordova.CordovaPlugin;
-import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.PluginResult;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-
-public class PushPlugin extends CordovaPlugin implements PushConstants {
-
- public static final String LOG_TAG = "PushPlugin";
-
- private static CallbackContext pushContext;
- private static CordovaWebView gWebView;
- private static Bundle gCachedExtras = null;
- private static boolean gForeground = false;
-
- /**
- * Gets the application context from cordova's main activity.
- * @return the application context
- */
- private Context getApplicationContext() {
- return this.cordova.getActivity().getApplicationContext();
- }
-
- @Override
- public boolean execute(final String action, final JSONArray data, final CallbackContext callbackContext) {
- Log.v(LOG_TAG, "execute: action=" + action);
- gWebView = this.webView;
-
- if (INITIALIZE.equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- pushContext = callbackContext;
- JSONObject jo = null;
-
- Log.v(LOG_TAG, "execute: data=" + data.toString());
- SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- String token = null;
- String senderID = null;
-
- try {
- jo = data.getJSONObject(0).getJSONObject(ANDROID);
-
- Log.v(LOG_TAG, "execute: jo=" + jo.toString());
-
- senderID = jo.getString(SENDER_ID);
-
- Log.v(LOG_TAG, "execute: senderID=" + senderID);
-
- String savedSenderID = sharedPref.getString(SENDER_ID, "");
- String savedRegID = sharedPref.getString(REGISTRATION_ID, "");
-
- // first time run get new token
- if ("".equals(savedRegID)) {
- token = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM);
- }
- // new sender ID, re-register
- else if (!savedSenderID.equals(senderID)) {
- token = InstanceID.getInstance(getApplicationContext()).getToken(senderID, GCM);
- }
- // use the saved one
- else {
- token = sharedPref.getString(REGISTRATION_ID, "");
- }
-
- if (!"".equals(token)) {
- JSONObject json = new JSONObject().put(REGISTRATION_ID, token);
-
- Log.v(LOG_TAG, "onRegistered: " + json.toString());
-
- PushPlugin.sendEvent( json );
- } else {
- callbackContext.error("Empty registration ID received from GCM");
- return;
- }
- } catch (JSONException e) {
- Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage());
- callbackContext.error(e.getMessage());
- } catch (IOException e) {
- Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage());
- callbackContext.error(e.getMessage());
- }
-
- if (jo != null) {
- SharedPreferences.Editor editor = sharedPref.edit();
- try {
- editor.putString(ICON, jo.getString(ICON));
- } catch (JSONException e) {
- Log.d(LOG_TAG, "no icon option");
- }
- try {
- editor.putString(ICON_COLOR, jo.getString(ICON_COLOR));
- } catch (JSONException e) {
- Log.d(LOG_TAG, "no iconColor option");
- }
- editor.putBoolean(SOUND, jo.optBoolean(SOUND, true));
- editor.putBoolean(VIBRATE, jo.optBoolean(VIBRATE, true));
- editor.putBoolean(CLEAR_NOTIFICATIONS, jo.optBoolean(CLEAR_NOTIFICATIONS, true));
- editor.putBoolean(FORCE_SHOW, jo.optBoolean(FORCE_SHOW, false));
- editor.putString(SENDER_ID, senderID);
- editor.putString(REGISTRATION_ID, token);
- editor.commit();
- }
-
- if (gCachedExtras != null) {
- Log.v(LOG_TAG, "sending cached extras");
- sendExtras(gCachedExtras);
- gCachedExtras = null;
- }
- }
- });
- } else if (UNREGISTER.equals(action)) {
- cordova.getThreadPool().execute(new Runnable() {
- public void run() {
- try {
- InstanceID.getInstance(getApplicationContext()).deleteInstanceID();
- Log.v(LOG_TAG, "UNREGISTER");
-
- // Remove shared prefs
- SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPref.edit();
- editor.remove(SOUND);
- editor.remove(VIBRATE);
- editor.remove(CLEAR_NOTIFICATIONS);
- editor.remove(FORCE_SHOW);
- editor.remove(SENDER_ID);
- editor.remove(REGISTRATION_ID);
- editor.commit();
-
- callbackContext.success();
- } catch (IOException e) {
- Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage());
- callbackContext.error(e.getMessage());
- }
- }
- });
- } else if (FINISH.equals(action)) {
- callbackContext.success();
- } else {
- Log.e(LOG_TAG, "Invalid action : " + action);
- callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.INVALID_ACTION));
- return false;
- }
-
- return true;
- }
-
- public static void sendEvent(JSONObject _json) {
- PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, _json);
- pluginResult.setKeepCallback(true);
- if (pushContext != null) {
- pushContext.sendPluginResult(pluginResult);
- }
- }
-
- public static void sendError(String message) {
- PluginResult pluginResult = new PluginResult(PluginResult.Status.ERROR, message);
- pluginResult.setKeepCallback(true);
- if (pushContext != null) {
- pushContext.sendPluginResult(pluginResult);
- }
- }
-
- /*
- * Sends the pushbundle extras to the client application.
- * If the client application isn't currently active, it is cached for later processing.
- */
- public static void sendExtras(Bundle extras) {
- if (extras != null) {
- if (gWebView != null) {
- sendEvent(convertBundleToJson(extras));
- } else {
- Log.v(LOG_TAG, "sendExtras: caching extras to send at a later time.");
- gCachedExtras = extras;
- }
- }
- }
-
- @Override
- public void initialize(CordovaInterface cordova, CordovaWebView webView) {
- super.initialize(cordova, webView);
- gForeground = true;
- }
-
- @Override
- public void onPause(boolean multitasking) {
- super.onPause(multitasking);
- gForeground = false;
-
- SharedPreferences prefs = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
- if (prefs.getBoolean(CLEAR_NOTIFICATIONS, true)) {
- final NotificationManager notificationManager = (NotificationManager) cordova.getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.cancelAll();
- }
- }
-
- @Override
- public void onResume(boolean multitasking) {
- super.onResume(multitasking);
- gForeground = true;
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- gForeground = false;
- gWebView = null;
- }
-
- /*
- * serializes a bundle to JSON.
- */
- private static JSONObject convertBundleToJson(Bundle extras) {
- Log.d(LOG_TAG, "convert extras to json");
- try {
- JSONObject json = new JSONObject();
- JSONObject additionalData = new JSONObject();
-
- // Add any keys that need to be in top level json to this set
- HashSet<String> jsonKeySet = new HashSet();
- Collections.addAll(jsonKeySet, TITLE,MESSAGE,COUNT,SOUND,IMAGE);
-
- Iterator<String> it = extras.keySet().iterator();
- while (it.hasNext()) {
- String key = it.next();
- Object value = extras.get(key);
-
- Log.d(LOG_TAG, "key = " + key);
-
- if (jsonKeySet.contains(key)) {
- json.put(key, value);
- }
- else if (key.equals(COLDSTART)) {
- additionalData.put(key, extras.getBoolean(COLDSTART));
- }
- else if (key.equals(FOREGROUND)) {
- additionalData.put(key, extras.getBoolean(FOREGROUND));
- }
- else if ( value instanceof String ) {
- String strValue = (String)value;
- try {
- // Try to figure out if the value is another JSON object
- if (strValue.startsWith("{")) {
- additionalData.put(key, new JSONObject(strValue));
- }
- // Try to figure out if the value is another JSON array
- else if (strValue.startsWith("[")) {
- additionalData.put(key, new JSONArray(strValue));
- }
- else {
- additionalData.put(key, value);
- }
- } catch (Exception e) {
- additionalData.put(key, value);
- }
- }
- } // while
-
- json.put(ADDITIONAL_DATA, additionalData);
- Log.v(LOG_TAG, "extrasToJSON: " + json.toString());
-
- return json;
- }
- catch( JSONException e) {
- Log.e(LOG_TAG, "extrasToJSON: JSON exception");
- }
- return null;
- }
-
- public static boolean isInForeground() {
- return gForeground;
- }
-
- public static boolean isActive() {
- return gWebView != null;
- }
-} \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/RegistrationIntentService.java b/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/RegistrationIntentService.java
deleted file mode 100755
index c4489fc1..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/android/com/adobe/phonegap/push/RegistrationIntentService.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.adobe.phonegap.push;
-
-import android.content.Context;
-
-import android.app.IntentService;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import com.google.android.gms.gcm.GoogleCloudMessaging;
-import com.google.android.gms.iid.InstanceID;
-
-import java.io.IOException;
-
-public class RegistrationIntentService extends IntentService implements PushConstants {
- public static final String LOG_TAG = "PushPlugin_RegistrationIntentService";
-
- public RegistrationIntentService() {
- super(LOG_TAG);
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
- SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE);
-
- try {
- InstanceID instanceID = InstanceID.getInstance(this);
- String senderID = sharedPreferences.getString(SENDER_ID, "");
- String token = instanceID.getToken(senderID,
- GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
- Log.i(LOG_TAG, "new GCM Registration Token: " + token);
-
- // save new token
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putString(REGISTRATION_ID, token);
- editor.commit();
-
- } catch (Exception e) {
- Log.d(LOG_TAG, "Failed to complete token refresh", e);
- }
- }
-} \ No newline at end of file
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.h b/StoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.h
deleted file mode 100755
index be79903e..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.h
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// AppDelegate+notification.h
-// pushtest
-//
-// Created by Robert Easterday on 10/26/12.
-//
-//
-
-#import "AppDelegate.h"
-
-@interface AppDelegate (notification)
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
-- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
-- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
-- (void)applicationDidBecomeActive:(UIApplication *)application;
-- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler;
-- (id) getCommandInstance:(NSString*)className;
-
-@property (nonatomic, retain) NSDictionary *launchNotification;
-
-@end
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.m b/StoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.m
deleted file mode 100755
index 8b4ed161..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/ios/AppDelegate+notification.m
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-// AppDelegate+notification.m
-// pushtest
-//
-// Created by Robert Easterday on 10/26/12.
-//
-//
-
-#import "AppDelegate+notification.h"
-#import "PushPlugin.h"
-#import <objc/runtime.h>
-
-static char launchNotificationKey;
-
-@implementation AppDelegate (notification)
-
-- (id) getCommandInstance:(NSString*)className
-{
- return [self.viewController getCommandInstance:className];
-}
-
-// its dangerous to override a method from within a category.
-// Instead we will use method swizzling. we set this up in the load call.
-+ (void)load
-{
- Method original, swizzled;
-
- original = class_getInstanceMethod(self, @selector(init));
- swizzled = class_getInstanceMethod(self, @selector(swizzled_init));
- method_exchangeImplementations(original, swizzled);
-}
-
-- (AppDelegate *)swizzled_init
-{
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(createNotificationChecker:)
- name:@"UIApplicationDidFinishLaunchingNotification" object:nil];
-
- // This actually calls the original init method over in AppDelegate. Equivilent to calling super
- // on an overrided method, this is not recursive, although it appears that way. neat huh?
- return [self swizzled_init];
-}
-
-// This code will be called immediately after application:didFinishLaunchingWithOptions:. We need
-// to process notifications in cold-start situations
-- (void)createNotificationChecker:(NSNotification *)notification
-{
- if (notification)
- {
- NSDictionary *launchOptions = [notification userInfo];
- if (launchOptions)
- self.launchNotification = [launchOptions objectForKey: @"UIApplicationLaunchOptionsRemoteNotificationKey"];
- }
-}
-
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- [pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
-}
-
-- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- [pushHandler didFailToRegisterForRemoteNotificationsWithError:error];
-}
-
-- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
- NSLog(@"didReceiveNotification with fetchCompletionHandler");
-
- // app is in the foreground so call notification callback
- if (application.applicationState == UIApplicationStateActive) {
- NSLog(@"app active");
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- pushHandler.notificationMessage = userInfo;
- pushHandler.isInline = YES;
- [pushHandler notificationReceived];
-
- completionHandler(UIBackgroundFetchResultNewData);
- }
- // app is in background or in stand by
- else {
- NSLog(@"app in-active");
-
- // do some convoluted logic to find out if this should be a silent push.
- long silent = 0;
- id aps = [userInfo objectForKey:@"aps"];
- id contentAvailable = [aps objectForKey:@"content-available"];
- if ([contentAvailable isKindOfClass:[NSString class]] && [contentAvailable isEqualToString:@"1"]) {
- silent = 1;
- } else if ([contentAvailable isKindOfClass:[NSNumber class]]) {
- silent = [contentAvailable integerValue];
- }
-
- if (silent == 1) {
- NSLog(@"this should be a silent push");
- void (^safeHandler)(UIBackgroundFetchResult) = ^(UIBackgroundFetchResult result){
- dispatch_async(dispatch_get_main_queue(), ^{
- completionHandler(result);
- });
- };
-
- NSMutableDictionary* params = [NSMutableDictionary dictionaryWithCapacity:2];
- [params setObject:safeHandler forKey:@"handler"];
-
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- pushHandler.notificationMessage = userInfo;
- pushHandler.isInline = NO;
- pushHandler.handlerObj = params;
- [pushHandler notificationReceived];
- } else {
- NSLog(@"just put it in the shade");
- //save it for later
- self.launchNotification = userInfo;
-
- completionHandler(UIBackgroundFetchResultNewData);
- }
- }
-}
-
-- (void)applicationDidBecomeActive:(UIApplication *)application {
-
- NSLog(@"active");
-
- PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"];
- if (pushHandler.clearBadge) {
- NSLog(@"PushPlugin clearing badge");
- //zero badge
- application.applicationIconBadgeNumber = 0;
- } else {
- NSLog(@"PushPlugin skip clear badge");
- }
-
- if (self.launchNotification) {
- pushHandler.isInline = NO;
- pushHandler.notificationMessage = self.launchNotification;
- self.launchNotification = nil;
- [pushHandler performSelectorOnMainThread:@selector(notificationReceived) withObject:pushHandler waitUntilDone:NO];
- }
-}
-
-//For interactive notification only
-- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
-{
- //handle the actions
- if ([identifier isEqualToString:@"declineAction"]){
- }
- else if ([identifier isEqualToString:@"answerAction"]){
- }
-}
-
-
-// The accessors use an Associative Reference since you can't define a iVar in a category
-// http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocAssociativeReferences.html
-- (NSMutableArray *)launchNotification
-{
- return objc_getAssociatedObject(self, &launchNotificationKey);
-}
-
-- (void)setLaunchNotification:(NSDictionary *)aDictionary
-{
- objc_setAssociatedObject(self, &launchNotificationKey, aDictionary, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-- (void)dealloc
-{
- self.launchNotification = nil; // clear the association and release the object
-}
-
-@end
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h b/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h
deleted file mode 100755
index 5b88398e..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- Copyright 2009-2011 Urban Airship Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binaryform must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided withthe distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE URBAN AIRSHIP INC``AS IS'' AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- EVENT SHALL URBAN AIRSHIP INC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Foundation/Foundation.h>
-#import <Cordova/CDV.h>
-#import <Cordova/CDVPlugin.h>
-
-@interface PushPlugin : CDVPlugin
-{
- NSDictionary *notificationMessage;
- BOOL isInline;
- NSString *notificationCallbackId;
- NSString *callback;
- BOOL clearBadge;
-
- NSDictionary *handlerObj;
- void (^completionHandler)(UIBackgroundFetchResult);
-
- BOOL ready;
-}
-
-@property (nonatomic, copy) NSString *callbackId;
-@property (nonatomic, copy) NSString *notificationCallbackId;
-@property (nonatomic, copy) NSString *callback;
-
-@property (nonatomic, strong) NSDictionary *notificationMessage;
-@property BOOL isInline;
-@property BOOL clearBadge;
-@property (nonatomic, strong) NSDictionary *handlerObj;
-
-- (void)init:(CDVInvokedUrlCommand*)command;
-- (void)unregister:(CDVInvokedUrlCommand*)command;
-
-- (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
-- (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
-
-- (void)setNotificationMessage:(NSDictionary *)notification;
-- (void)notificationReceived;
-
-@end
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m b/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m
deleted file mode 100755
index 40f494d1..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/ios/PushPlugin.m
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- Copyright 2009-2011 Urban Airship Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binaryform must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided withthe distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE URBAN AIRSHIP INC``AS IS'' AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- EVENT SHALL URBAN AIRSHIP INC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PushPlugin.h"
-
-@implementation PushPlugin
-
-@synthesize notificationMessage;
-@synthesize isInline;
-
-@synthesize callbackId;
-@synthesize notificationCallbackId;
-@synthesize callback;
-@synthesize clearBadge;
-@synthesize handlerObj;
-
-- (void)unregister:(CDVInvokedUrlCommand*)command;
-{
- self.callbackId = command.callbackId;
-
- [[UIApplication sharedApplication] unregisterForRemoteNotifications];
- [self successWithMessage:@"unregistered"];
-}
-
-- (void)init:(CDVInvokedUrlCommand*)command;
-{
- [self.commandDelegate runInBackground:^ {
-
- NSLog(@"Push Plugin register called");
- self.callbackId = command.callbackId;
-
- NSMutableDictionary* options = [command.arguments objectAtIndex:0];
- NSMutableDictionary* iosOptions = [options objectForKey:@"ios"];
-
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone;
-#endif
- UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeNone;
-
- id badgeArg = [iosOptions objectForKey:@"badge"];
- id soundArg = [iosOptions objectForKey:@"sound"];
- id alertArg = [iosOptions objectForKey:@"alert"];
- id clearBadgeArg = [iosOptions objectForKey:@"clearBadge"];
-
- if (([badgeArg isKindOfClass:[NSString class]] && [badgeArg isEqualToString:@"true"]) || [badgeArg boolValue])
- {
- notificationTypes |= UIRemoteNotificationTypeBadge;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationTypeBadge;
-#endif
- }
-
- if (([soundArg isKindOfClass:[NSString class]] && [soundArg isEqualToString:@"true"]) || [soundArg boolValue])
- {
- notificationTypes |= UIRemoteNotificationTypeSound;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationTypeSound;
-#endif
- }
-
- if (([alertArg isKindOfClass:[NSString class]] && [alertArg isEqualToString:@"true"]) || [alertArg boolValue])
- {
- notificationTypes |= UIRemoteNotificationTypeAlert;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationTypeAlert;
-#endif
- }
-
- notificationTypes |= UIRemoteNotificationTypeNewsstandContentAvailability;
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- UserNotificationTypes |= UIUserNotificationActivationModeBackground;
-#endif
-
- if (clearBadgeArg == nil || ([clearBadgeArg isKindOfClass:[NSString class]] && [clearBadgeArg isEqualToString:@"false"]) || ![clearBadgeArg boolValue]) {
- NSLog(@"PushPlugin.register: setting badge to false");
- clearBadge = NO;
- } else {
- NSLog(@"PushPlugin.register: setting badge to true");
- clearBadge = YES;
- [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
- }
- NSLog(@"PushPlugin.register: clear badge is set to %d", clearBadge);
-
- if (notificationTypes == UIRemoteNotificationTypeNone)
- NSLog(@"PushPlugin.register: Push notification type is set to none");
-
- isInline = NO;
-
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
- if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) {
- UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:nil];
- [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
- [[UIApplication sharedApplication] registerForRemoteNotifications];
- } else {
- [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
- (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
- }
-#else
- [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
- (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
-#endif
-
- if (notificationMessage) // if there is a pending startup notification
- [self notificationReceived]; // go ahead and process it
-
- }];
-}
-
-- (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
- if (self.callbackId == nil) {
- NSLog(@"Unexpected call to didRegisterForRemoteNotificationsWithDeviceToken, ignoring: %@", deviceToken);
- return;
- }
- NSLog(@"Push Plugin register success: %@", deviceToken);
-
- NSMutableDictionary *results = [NSMutableDictionary dictionary];
- NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
- stringByReplacingOccurrencesOfString:@">" withString:@""]
- stringByReplacingOccurrencesOfString: @" " withString: @""];
- [results setValue:token forKey:@"deviceToken"];
-
-#if !TARGET_IPHONE_SIMULATOR
- // Get Bundle Info for Remote Registration (handy if you have more than one app)
- [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] forKey:@"appName"];
- [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] forKey:@"appVersion"];
-
- // Check what Notifications the user has turned on. We registered for all three, but they may have manually disabled some or all of them.
-#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
-
- NSUInteger rntypes;
- if (!SYSTEM_VERSION_LESS_THAN(@"8.0")) {
- rntypes = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
- } else {
- rntypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
- }
-
- // Set the defaults to disabled unless we find otherwise...
- NSString *pushBadge = @"disabled";
- NSString *pushAlert = @"disabled";
- NSString *pushSound = @"disabled";
-
- // Check what Registered Types are turned on. This is a bit tricky since if two are enabled, and one is off, it will return a number 2... not telling you which
- // one is actually disabled. So we are literally checking to see if rnTypes matches what is turned on, instead of by number. The "tricky" part is that the
- // single notification types will only match if they are the ONLY one enabled. Likewise, when we are checking for a pair of notifications, it will only be
- // true if those two notifications are on. This is why the code is written this way
- if(rntypes & UIRemoteNotificationTypeBadge){
- pushBadge = @"enabled";
- }
- if(rntypes & UIRemoteNotificationTypeAlert) {
- pushAlert = @"enabled";
- }
- if(rntypes & UIRemoteNotificationTypeSound) {
- pushSound = @"enabled";
- }
-
- [results setValue:pushBadge forKey:@"pushBadge"];
- [results setValue:pushAlert forKey:@"pushAlert"];
- [results setValue:pushSound forKey:@"pushSound"];
-
- // Get the users Device Model, Display Name, Token & Version Number
- UIDevice *dev = [UIDevice currentDevice];
- [results setValue:dev.name forKey:@"deviceName"];
- [results setValue:dev.model forKey:@"deviceModel"];
- [results setValue:dev.systemVersion forKey:@"deviceSystemVersion"];
-
- // Send result to trigger 'registration' event but keep callback
- NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1];
- [message setObject:token forKey:@"registrationId"];
- CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message];
- [pluginResult setKeepCallbackAsBool:YES];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
-#endif
-}
-
-- (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
-{
- if (self.callbackId == nil) {
- NSLog(@"Unexpected call to didFailToRegisterForRemoteNotificationsWithError, ignoring: %@", error);
- return;
- }
- NSLog(@"Push Plugin register failed");
- [self failWithMessage:@"" withError:error];
-}
-
-- (void)notificationReceived {
- NSLog(@"Notification received");
-
- if (notificationMessage && self.callbackId != nil)
- {
- NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:4];
- NSMutableDictionary* additionalData = [NSMutableDictionary dictionaryWithCapacity:4];
-
-
- for (id key in notificationMessage) {
- if ([key isEqualToString:@"aps"]) {
- id aps = [notificationMessage objectForKey:@"aps"];
-
- for(id key in aps) {
- NSLog(@"Push Plugin key: %@", key);
- id value = [aps objectForKey:key];
-
- if ([key isEqualToString:@"alert"]) {
- if ([value isKindOfClass:[NSDictionary class]]) {
- for (id messageKey in value) {
- id messageValue = [value objectForKey:messageKey];
- if ([messageKey isEqualToString:@"body"]) {
- [message setObject:messageValue forKey:@"message"];
- } else if ([messageKey isEqualToString:@"title"]) {
- [message setObject:messageValue forKey:@"title"];
- } else {
- [additionalData setObject:messageValue forKey:messageKey];
- }
- }
- }
- else {
- [message setObject:value forKey:@"message"];
- }
- } else if ([key isEqualToString:@"title"]) {
- [message setObject:value forKey:@"title"];
- } else if ([key isEqualToString:@"badge"]) {
- [message setObject:value forKey:@"count"];
- } else if ([key isEqualToString:@"sound"]) {
- [message setObject:value forKey:@"sound"];
- } else if ([key isEqualToString:@"image"]) {
- [message setObject:value forKey:@"image"];
- } else {
- [additionalData setObject:value forKey:key];
- }
- }
- } else {
- [additionalData setObject:[notificationMessage objectForKey:key] forKey:key];
- }
- }
-
- if (isInline) {
- [additionalData setObject:[NSNumber numberWithBool:YES] forKey:@"foreground"];
- } else {
- [additionalData setObject:[NSNumber numberWithBool:NO] forKey:@"foreground"];
- }
-
- [message setObject:additionalData forKey:@"additionalData"];
-
- // send notification message
- CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message];
- [pluginResult setKeepCallbackAsBool:YES];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
-
- self.notificationMessage = nil;
- }
-}
-
-- (void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command
-{
- NSMutableDictionary* options = [command.arguments objectAtIndex:0];
- int badge = [[options objectForKey:@"badge"] intValue] ?: 0;
-
- [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badge];
-
- NSString* message = [NSString stringWithFormat:@"app badge count set to %d", badge];
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
- [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
-}
-
-- (void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command
-{
- NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
-
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)badge];
- [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
-}
-
--(void)successWithMessage:(NSString *)message
-{
- if (self.callbackId != nil)
- {
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
- [self.commandDelegate sendPluginResult:commandResult callbackId:self.callbackId];
- }
-}
-
--(void)failWithMessage:(NSString *)message withError:(NSError *)error
-{
- NSString *errorMessage = (error) ? [NSString stringWithFormat:@"%@ - %@", message, [error localizedDescription]] : message;
- CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:errorMessage];
-
- [self.commandDelegate sendPluginResult:commandResult callbackId:self.callbackId];
-}
-
--(void) finish:(CDVInvokedUrlCommand*)command
-{
- NSLog(@"Push Plugin finish called");
-
- [self.commandDelegate runInBackground:^ {
- UIApplication *app = [UIApplication sharedApplication];
- float finishTimer = (app.backgroundTimeRemaining > 20.0) ? 20.0 : app.backgroundTimeRemaining;
-
- [NSTimer scheduledTimerWithTimeInterval:finishTimer
- target:self
- selector:@selector(stopBackgroundTask:)
- userInfo:nil
- repeats:NO];
-
- CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
--(void)stopBackgroundTask:(NSTimer*)timer
-{
- UIApplication *app = [UIApplication sharedApplication];
-
- NSLog(@"Push Plugin stopBackgroundTask called");
-
- if (handlerObj) {
- NSLog(@"Push Plugin handlerObj");
- completionHandler = [handlerObj[@"handler"] copy];
- if (completionHandler) {
- NSLog(@"Push Plugin: stopBackgroundTask (remaining t: %f)", app.backgroundTimeRemaining);
- completionHandler(UIBackgroundFetchResultNewData);
- completionHandler = nil;
- }
- }
-}
-
-@end
diff --git a/StoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js b/StoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js
deleted file mode 100755
index ca8087b2..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/src/windows/PushPluginProxy.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var myApp = {};
-var pushNotifications = Windows.Networking.PushNotifications;
-
-var createNotificationJSON = function (e) {
- var result = { message: '' }; //Added to identify callback as notification type in the API in case where notification has no message
- var notificationPayload;
-
- switch (e.notificationType) {
- case pushNotifications.PushNotificationType.toast:
- case pushNotifications.PushNotificationType.tile:
- if (e.notificationType === pushNotifications.PushNotificationType.toast) {
- notificationPayload = e.toastNotification.content;
- }
- else {
- notificationPayload = e.tileNotification.content;
- }
- var texts = notificationPayload.getElementsByTagName("text");
- if (texts.length > 1) {
- result.title = texts[0].innerText;
- result.message = texts[1].innerText;
- }
- else if(texts.length === 1) {
- result.message = texts[0].innerText;
- }
- var images = notificationPayload.getElementsByTagName("image");
- if (images.length > 0) {
- result.image = images[0].getAttribute("src");
- }
- var soundFile = notificationPayload.getElementsByTagName("audio");
- if (soundFile.length > 0) {
- result.sound = soundFile[0].getAttribute("src");
- }
- break;
-
- case pushNotifications.PushNotificationType.badge:
- notificationPayload = e.badgeNotification.content;
- result.count = notificationPayload.getElementsByTagName("badge")[0].getAttribute("value");
- break;
-
- case pushNotifications.PushNotificationType.raw:
- result.message = e.rawNotification.content;
- break;
- }
-
- result.additionalData = {};
- result.additionalData.pushNotificationReceivedEventArgs = e;
- return result;
-}
-
-module.exports = {
- init: function (onSuccess, onFail, args) {
-
- var onNotificationReceived = function (e) {
- var result = createNotificationJSON(e);
- onSuccess(result, { keepCallback: true });
- }
-
- try {
- pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync().done(
- function (channel) {
- var result = {};
- result.registrationId = channel.uri;
- myApp.channel = channel;
- channel.addEventListener("pushnotificationreceived", onNotificationReceived);
- myApp.notificationEvent = onNotificationReceived;
- onSuccess(result, { keepCallback: true });
- }, function (error) {
- onFail(error);
- });
- } catch (ex) {
- onFail(ex);
- }
- },
- unregister: function (onSuccess, onFail, args) {
- try {
- myApp.channel.removeEventListener("pushnotificationreceived", myApp.notificationEvent);
- myApp.channel.close();
- onSuccess();
- } catch(ex) {
- onFail(ex);
- }
- }
-};
-require("cordova/exec/proxy").add("PushNotification", module.exports);
-
-
diff --git a/StoneIsland/plugins/phonegap-plugin-push/www/push.js b/StoneIsland/plugins/phonegap-plugin-push/www/push.js
deleted file mode 100755
index 043532b9..00000000
--- a/StoneIsland/plugins/phonegap-plugin-push/www/push.js
+++ /dev/null
@@ -1,230 +0,0 @@
-/* global cordova:false */
-
-/*!
- * Module dependencies.
- */
-
-var exec = cordova.require('cordova/exec');
-
-/**
- * PushNotification constructor.
- *
- * @param {Object} options to initiate Push Notifications.
- * @return {PushNotification} instance that can be monitored and cancelled.
- */
-
-var PushNotification = function(options) {
- this._handlers = {
- 'registration': [],
- 'notification': [],
- 'error': []
- };
-
- // require options parameter
- if (typeof options === 'undefined') {
- throw new Error('The options argument is required.');
- }
-
- // store the options to this object instance
- this.options = options;
-
- // triggered on registration and notification
- var that = this;
- var success = function(result) {
- if (result && typeof result.registrationId !== 'undefined') {
- that.emit('registration', result);
- } else if (result && typeof result.callback !== 'undefined') {
- var executeFunctionByName = function(functionName, context /*, args */) {
- var args = Array.prototype.slice.call(arguments, 2);
- var namespaces = functionName.split(".");
- var func = namespaces.pop();
- for (var i = 0; i < namespaces.length; i++) {
- context = context[namespaces[i]];
- }
- return context[func].apply(context, args);
- }
-
- executeFunctionByName(result.callback, window, result);
- } else if (result) {
- that.emit('notification', result);
- }
- };
-
- // triggered on error
- var fail = function(msg) {
- var e = (typeof msg === 'string') ? new Error(msg) : msg;
- that.emit('error', e);
- };
-
- // wait at least one process tick to allow event subscriptions
- setTimeout(function() {
- exec(success, fail, 'PushNotification', 'init', [options]);
- }, 10);
-};
-
-/**
- * Unregister from push notifications
- */
-
-PushNotification.prototype.unregister = function(successCallback, errorCallback, options) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.unregister failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.unregister failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "unregister", [options]);
-};
-
-/**
- * Call this to set the application icon badge
- */
-
-PushNotification.prototype.setApplicationIconBadgeNumber = function(successCallback, errorCallback, badge) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.setApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "setApplicationIconBadgeNumber", [{badge: badge}]);
-};
-
-/**
- * Get the application icon badge
- */
-
-PushNotification.prototype.getApplicationIconBadgeNumber = function(successCallback, errorCallback) {
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof errorCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: failure parameter not a function");
- return
- }
-
- if (typeof successCallback != "function") {
- console.log("PushNotification.getApplicationIconBadgeNumber failure: success callback parameter must be a function");
- return
- }
-
- exec(successCallback, errorCallback, "PushNotification", "getApplicationIconBadgeNumber", []);
-};
-
-/**
- * Listen for an event.
- *
- * The following events are supported:
- *
- * - registration
- * - notification
- * - error
- *
- * @param {String} eventName to subscribe to.
- * @param {Function} callback triggered on the event.
- */
-
-PushNotification.prototype.on = function(eventName, callback) {
- if (this._handlers.hasOwnProperty(eventName)) {
- this._handlers[eventName].push(callback);
- }
-};
-
-/**
- * Remove event listener.
- *
- * @param {String} eventName to match subscription.
- * @param {Function} handle function associated with event.
- */
-
-PushNotification.prototype.off = function (eventName, handle) {
- if (this._handlers.hasOwnProperty(eventName)) {
- var handleIndex = this._handlers[eventName].indexOf(handle);
- if (handleIndex >= 0)
- this._handlers[eventName].splice(handleIndex, 1);
- }
-};
-
-/**
- * Emit an event.
- *
- * This is intended for internal use only.
- *
- * @param {String} eventName is the event to trigger.
- * @param {*} all arguments are passed to the event listeners.
- *
- * @return {Boolean} is true when the event is triggered otherwise false.
- */
-
-PushNotification.prototype.emit = function() {
- var args = Array.prototype.slice.call(arguments);
- var eventName = args.shift();
-
- if (!this._handlers.hasOwnProperty(eventName)) {
- return false;
- }
-
- for (var i = 0, length = this._handlers[eventName].length; i < length; i++) {
- this._handlers[eventName][i].apply(undefined,args);
- }
-
- return true;
-};
-
-PushNotification.prototype.finish = function(successCallback, errorCallback) {
- if (successCallback == null) { successCallback = function() {}}
- if (errorCallback == null) { errorCallback = function() {}}
-
- if (typeof successCallback != "function") {
- console.log("finish failure: success callback parameter must be a function");
- return
- }
-
- if (typeof errorCallback != "function") {
- console.log("finish failure: failure parameter not a function");
- return
- }
-
- exec(successCallback, errorCallback, 'PushNotification', 'finish', []);
-}
-
-/*!
- * Push Notification Plugin.
- */
-
-module.exports = {
- /**
- * Register for Push Notifications.
- *
- * This method will instantiate a new copy of the PushNotification object
- * and start the registration process.
- *
- * @param {Object} options
- * @return {PushNotification} instance
- */
-
- init: function(options) {
- return new PushNotification(options);
- },
-
- /**
- * PushNotification Object.
- *
- * Expose the PushNotification object for direct use
- * and testing. Typically, you should use the
- * .init helper method.
- */
-
- PushNotification: PushNotification
-}; \ No newline at end of file